From 84b50606ed1b4f6f4236732d9d36d61e3cf6065f Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 6 Nov 2025 17:31:16 +0000 Subject: [PATCH 001/127] Rust: Add example queries pack. --- docs/codeql/reusables/rust-further-reading.rst | 1 + rust/ql/examples/qlpack.lock.yml | 4 ++++ rust/ql/examples/qlpack.yml | 7 +++++++ 3 files changed, 12 insertions(+) create mode 100644 rust/ql/examples/qlpack.lock.yml create mode 100644 rust/ql/examples/qlpack.yml diff --git a/docs/codeql/reusables/rust-further-reading.rst b/docs/codeql/reusables/rust-further-reading.rst index a82dee7f28e..c8d18cc77b0 100644 --- a/docs/codeql/reusables/rust-further-reading.rst +++ b/docs/codeql/reusables/rust-further-reading.rst @@ -1,2 +1,3 @@ - `CodeQL queries for Rust `__ +- `Example queries for Rust `__ - `CodeQL library reference for Rust `__ diff --git a/rust/ql/examples/qlpack.lock.yml b/rust/ql/examples/qlpack.lock.yml new file mode 100644 index 00000000000..06dd07fc7dc --- /dev/null +++ b/rust/ql/examples/qlpack.lock.yml @@ -0,0 +1,4 @@ +--- +dependencies: {} +compiled: false +lockVersion: 1.0.0 diff --git a/rust/ql/examples/qlpack.yml b/rust/ql/examples/qlpack.yml new file mode 100644 index 00000000000..41adabd2c70 --- /dev/null +++ b/rust/ql/examples/qlpack.yml @@ -0,0 +1,7 @@ +name: codeql/rust-examples +groups: + - rust + - examples +dependencies: + codeql/rust-all: ${workspace} +warnOnImplicitThis: true From 6ce0a0d9df53a2f9b90d962b57e8c7615b4ce887 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 6 Nov 2025 17:50:59 +0000 Subject: [PATCH 002/127] Rust: Add example from the basic-query-for-rust-code.rst. --- rust/ql/examples/snippets/empty_if.ql | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 rust/ql/examples/snippets/empty_if.ql diff --git a/rust/ql/examples/snippets/empty_if.ql b/rust/ql/examples/snippets/empty_if.ql new file mode 100644 index 00000000000..a4270a115b6 --- /dev/null +++ b/rust/ql/examples/snippets/empty_if.ql @@ -0,0 +1,15 @@ +/** + * @name Empty 'if' statement + * @description Finds 'if' statements where the "then" branch is empty and no + * "else" branch exists. + * @id rust/examples/empty-if + * @tags example + */ + +import rust + +from IfExpr ifExpr +where + ifExpr.getThen().(BlockExpr).getStmtList().getNumberOfStmtOrExpr() = 0 and + not exists(ifExpr.getElse()) +select ifExpr, "This 'if' expression is redundant." From 49aefe2110fbee92a96084b2ad59b33205c8095b Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 6 Nov 2025 18:49:55 +0000 Subject: [PATCH 003/127] Rust: Add simple SQL injection example. --- .../examples/snippets/simple_sql_injection.ql | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 rust/ql/examples/snippets/simple_sql_injection.ql diff --git a/rust/ql/examples/snippets/simple_sql_injection.ql b/rust/ql/examples/snippets/simple_sql_injection.ql new file mode 100644 index 00000000000..fd59ddd4c3e --- /dev/null +++ b/rust/ql/examples/snippets/simple_sql_injection.ql @@ -0,0 +1,30 @@ +/** + * @name Database query built from user-controlled sources + * @description Finds places where a value from a remote or local user input + * is used as an argument to the `sqlx_core::query::query` + * function. + * @id rust/examples/simple-sql-injection + * @tags example + */ + +import rust +import codeql.rust.dataflow.DataFlow +import codeql.rust.dataflow.TaintTracking +import codeql.rust.Concepts + +module SqlInjectionConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node node) { node instanceof ActiveThreatModelSource } + + predicate isSink(DataFlow::Node node) { + exists(CallExpr call | + call.getStaticTarget().getCanonicalPath() = "sqlx_core::query::query" and + call.getArg(0) = node.asExpr().getExpr() + ) + } +} + +module SqlInjectionFlow = TaintTracking::Global; + +from DataFlow::Node sourceNode, DataFlow::Node sinkNode +where SqlInjectionFlow::flow(sourceNode, sinkNode) +select sinkNode, "This query depends on a $@.", sourceNode, "user-provided value" From 7b6e06e8de164fd7b7948262c54e8da16838f25f Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 7 Nov 2025 13:30:53 +0000 Subject: [PATCH 004/127] Rust: Add simple constant password example. --- .../snippets/simple_constant_password.ql | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 rust/ql/examples/snippets/simple_constant_password.ql diff --git a/rust/ql/examples/snippets/simple_constant_password.ql b/rust/ql/examples/snippets/simple_constant_password.ql new file mode 100644 index 00000000000..87b7603ba1b --- /dev/null +++ b/rust/ql/examples/snippets/simple_constant_password.ql @@ -0,0 +1,30 @@ +/** + * @name Constant password + * @description Finds places where a string literal is used in a function call + * argument named something like "password". + * @id rust/examples/simple-constant-password + * @tags example + */ + +import rust +import codeql.rust.dataflow.DataFlow +import codeql.rust.dataflow.TaintTracking + +module ConstantPasswordConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node node) { node.asExpr().getExpr() instanceof StringLiteralExpr } + + predicate isSink(DataFlow::Node node) { + // `node` is an argument whose corresponding parameter name matches the pattern "pass%" + exists(CallExpr call, Function target, int argIndex | + call.getStaticTarget() = target and + target.getParam(argIndex).getPat().(IdentPat).getName().getText().matches("pass%") and + call.getArg(argIndex) = node.asExpr().getExpr() + ) + } +} + +module ConstantPasswordFlow = TaintTracking::Global; + +from DataFlow::Node sourceNode, DataFlow::Node sinkNode +where ConstantPasswordFlow::flow(sourceNode, sinkNode) +select sinkNode, "The value $@ is used as a constant password.", sourceNode, sourceNode.toString() From 7e3ab99d6b49856c7c2b0dee6c3939e6543f2b22 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 7 Nov 2025 13:48:03 +0000 Subject: [PATCH 005/127] Rust: Add much more detailed code comments, since these are examples. --- rust/ql/examples/snippets/empty_if.ql | 3 +++ .../snippets/simple_constant_password.ql | 21 +++++++++++++++++-- .../examples/snippets/simple_sql_injection.ql | 15 ++++++++++--- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/rust/ql/examples/snippets/empty_if.ql b/rust/ql/examples/snippets/empty_if.ql index a4270a115b6..5a4a62e41b6 100644 --- a/rust/ql/examples/snippets/empty_if.ql +++ b/rust/ql/examples/snippets/empty_if.ql @@ -8,8 +8,11 @@ import rust +// find 'if' statements... from IfExpr ifExpr where + // where the 'then' branch is empty ifExpr.getThen().(BlockExpr).getStmtList().getNumberOfStmtOrExpr() = 0 and + // and no 'else' branch exists not exists(ifExpr.getElse()) select ifExpr, "This 'if' expression is redundant." diff --git a/rust/ql/examples/snippets/simple_constant_password.ql b/rust/ql/examples/snippets/simple_constant_password.ql index 87b7603ba1b..202029994f4 100644 --- a/rust/ql/examples/snippets/simple_constant_password.ql +++ b/rust/ql/examples/snippets/simple_constant_password.ql @@ -1,7 +1,7 @@ /** * @name Constant password * @description Finds places where a string literal is used in a function call - * argument named something like "password". + * argument that looks like a password. * @id rust/examples/simple-constant-password * @tags example */ @@ -10,8 +10,23 @@ import rust import codeql.rust.dataflow.DataFlow import codeql.rust.dataflow.TaintTracking +/** + * A data flow configuration for tracking flow from a string literal to a function + * call argument that looks like a password. For example: + * ``` + * fn set_password(password: &str) { ... } + * + * ... + * + * let pwd = "123456"; // source + * set_password(pwd); // sink (argument 0) + * ``` + */ module ConstantPasswordConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node node) { node.asExpr().getExpr() instanceof StringLiteralExpr } + predicate isSource(DataFlow::Node node) { + // `node` is a string literal + node.asExpr().getExpr() instanceof StringLiteralExpr + } predicate isSink(DataFlow::Node node) { // `node` is an argument whose corresponding parameter name matches the pattern "pass%" @@ -23,8 +38,10 @@ module ConstantPasswordConfig implements DataFlow::ConfigSig { } } +// instantiate the data flow configuration as a global taint tracking module module ConstantPasswordFlow = TaintTracking::Global; +// report flows from sources to sinks from DataFlow::Node sourceNode, DataFlow::Node sinkNode where ConstantPasswordFlow::flow(sourceNode, sinkNode) select sinkNode, "The value $@ is used as a constant password.", sourceNode, sourceNode.toString() diff --git a/rust/ql/examples/snippets/simple_sql_injection.ql b/rust/ql/examples/snippets/simple_sql_injection.ql index fd59ddd4c3e..0a991118a50 100644 --- a/rust/ql/examples/snippets/simple_sql_injection.ql +++ b/rust/ql/examples/snippets/simple_sql_injection.ql @@ -1,8 +1,7 @@ /** * @name Database query built from user-controlled sources * @description Finds places where a value from a remote or local user input - * is used as an argument to the `sqlx_core::query::query` - * function. + * is used as the first argument of a call to `sqlx_core::query::query`. * @id rust/examples/simple-sql-injection * @tags example */ @@ -12,10 +11,18 @@ import codeql.rust.dataflow.DataFlow import codeql.rust.dataflow.TaintTracking import codeql.rust.Concepts +/** + * A data flow configuration for tracking flow from a user input (threat model + * source) to the first argument of a call to `sqlx_core::query::query`. + */ module SqlInjectionConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node node) { node instanceof ActiveThreatModelSource } + predicate isSource(DataFlow::Node node) { + // `node` is a user input (threat model source) + node instanceof ActiveThreatModelSource + } predicate isSink(DataFlow::Node node) { + // `node` is the first argument of a call to `sqlx_core::query::query` exists(CallExpr call | call.getStaticTarget().getCanonicalPath() = "sqlx_core::query::query" and call.getArg(0) = node.asExpr().getExpr() @@ -23,8 +30,10 @@ module SqlInjectionConfig implements DataFlow::ConfigSig { } } +// instantiate the data flow configuration as a global taint tracking module module SqlInjectionFlow = TaintTracking::Global; +// report flows from sources to sinks from DataFlow::Node sourceNode, DataFlow::Node sinkNode where SqlInjectionFlow::flow(sourceNode, sinkNode) select sinkNode, "This query depends on a $@.", sourceNode, "user-provided value" From 61481b51e7bed367aca37893e4019f4d67343552 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 7 Nov 2025 16:52:56 +0000 Subject: [PATCH 006/127] Rust: Change note. --- rust/ql/src/change-notes/2025-11-07-example-queries.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 rust/ql/src/change-notes/2025-11-07-example-queries.md diff --git a/rust/ql/src/change-notes/2025-11-07-example-queries.md b/rust/ql/src/change-notes/2025-11-07-example-queries.md new file mode 100644 index 00000000000..9e11d4e0a93 --- /dev/null +++ b/rust/ql/src/change-notes/2025-11-07-example-queries.md @@ -0,0 +1,4 @@ +--- +category: newQuery +--- +* Added three example queries (`rust/examples/empty-if`, `rust/examples/simple-sql-injection` and `rust/examples/simple-constant-password`) to help developers learn to write CodeQL queries for Rust. From 4b212239e10fc87efe0c001316354da11a1fa3fb Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Mon, 10 Nov 2025 12:35:39 +0000 Subject: [PATCH 007/127] Rust: Remove unnecessary .(BlockExpr). --- rust/ql/examples/snippets/empty_if.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/ql/examples/snippets/empty_if.ql b/rust/ql/examples/snippets/empty_if.ql index 5a4a62e41b6..90df6b95b22 100644 --- a/rust/ql/examples/snippets/empty_if.ql +++ b/rust/ql/examples/snippets/empty_if.ql @@ -12,7 +12,7 @@ import rust from IfExpr ifExpr where // where the 'then' branch is empty - ifExpr.getThen().(BlockExpr).getStmtList().getNumberOfStmtOrExpr() = 0 and + ifExpr.getThen().getStmtList().getNumberOfStmtOrExpr() = 0 and // and no 'else' branch exists not exists(ifExpr.getElse()) select ifExpr, "This 'if' expression is redundant." From 109abddc36d4ef6c12a049427d7bfced6a3b7be0 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 11 Nov 2025 09:32:14 +0000 Subject: [PATCH 008/127] Apply suggestions from code review Co-authored-by: Simon Friis Vindum --- rust/ql/examples/snippets/empty_if.ql | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rust/ql/examples/snippets/empty_if.ql b/rust/ql/examples/snippets/empty_if.ql index 90df6b95b22..f2183945979 100644 --- a/rust/ql/examples/snippets/empty_if.ql +++ b/rust/ql/examples/snippets/empty_if.ql @@ -1,6 +1,6 @@ /** - * @name Empty 'if' statement - * @description Finds 'if' statements where the "then" branch is empty and no + * @name Empty 'if' expression + * @description Finds 'if' expressions where the "then" branch is empty and no * "else" branch exists. * @id rust/examples/empty-if * @tags example @@ -8,11 +8,11 @@ import rust -// find 'if' statements... +// find 'if' expressions... from IfExpr ifExpr where // where the 'then' branch is empty ifExpr.getThen().getStmtList().getNumberOfStmtOrExpr() = 0 and // and no 'else' branch exists - not exists(ifExpr.getElse()) + not ifExpr.hasElse() select ifExpr, "This 'if' expression is redundant." From c4f0868844caf68ad4676178d3363e6290a7dffb Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 21 Oct 2025 14:16:06 +0200 Subject: [PATCH 009/127] Java: Move SSA entry defs to index -1. --- java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll | 4 ++-- java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll b/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll index 5a818d18b85..8097ec3dee2 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll @@ -169,7 +169,7 @@ private module SsaInput implements SsaImplCommon::InputSig certain = true or hasEntryDef(v, bb) and - i = 0 and + i = -1 and certain = true } @@ -232,7 +232,7 @@ private module Cached { exists(BaseSsaSourceVariable v, BasicBlock bb, int i | def.definesAt(v, bb, i) and hasEntryDef(v, bb) and - i = 0 + i = -1 ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll index 275a0afafc0..b6c26f2c4d4 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll @@ -188,7 +188,7 @@ private module SsaInput implements SsaImplCommon::InputSig certain = true or hasEntryDef(v, bb) and - i = 0 and + i = -1 and certain = true or uncertainVariableUpdate(v, _, bb, i) and @@ -502,7 +502,7 @@ private module Cached { exists(SsaSourceVariable v, BasicBlock bb, int i | def.definesAt(v, bb, i) and hasEntryDef(v, bb) and - i = 0 + i = -1 ) } From f2181ece4f987fe6e795694332a810368875f02c Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 21 Oct 2025 14:54:36 +0200 Subject: [PATCH 010/127] Java: Get rid of untracked SSA definitions. --- java/ql/lib/semmle/code/java/dataflow/SSA.qll | 10 ++---- .../code/java/dataflow/internal/SsaImpl.qll | 34 +++---------------- 2 files changed, 6 insertions(+), 38 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/SSA.qll b/java/ql/lib/semmle/code/java/dataflow/SSA.qll index 40da9a4e94d..999b02cce77 100644 --- a/java/ql/lib/semmle/code/java/dataflow/SSA.qll +++ b/java/ql/lib/semmle/code/java/dataflow/SSA.qll @@ -148,12 +148,10 @@ class SsaVariable extends Definition { /** Gets the `ControlFlowNode` at which this SSA variable is defined. */ pragma[nomagic] ControlFlowNode getCfgNode() { - exists(BasicBlock bb, int i, int j | + exists(BasicBlock bb, int i | this.definesAt(_, bb, i) and - // untracked definitions are inserted just before reads - (if this instanceof UntrackedDef then j = i + 1 else j = i) and // phi nodes are inserted at position `-1` - result = bb.getNode(0.maximum(j)) + result = bb.getNode(0.maximum(i)) ) } @@ -246,8 +244,6 @@ class SsaImplicitUpdate extends SsaUpdate { } private string getKind() { - this instanceof UntrackedDef and result = "untracked" - or this.hasExplicitQualifierUpdate() and result = "explicit qualifier" or @@ -280,8 +276,6 @@ class SsaImplicitUpdate extends SsaUpdate { * of its qualifiers is volatile. */ predicate assignsUnknownValue() { - this instanceof UntrackedDef - or this.hasExplicitQualifierUpdate() or this.hasImplicitQualifierUpdate() diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll index b6c26f2c4d4..579da78b31e 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll @@ -82,13 +82,6 @@ private module TrackedVariablesImpl { private import TrackedVariablesImpl -private predicate untrackedFieldWrite(BasicBlock bb, int i, SsaSourceVariable v) { - v = - any(SsaSourceField nf | - bb.getNode(i + 1) = nf.getAnAccess().(FieldRead).getControlFlowNode() and not trackField(nf) - ) -} - /** Gets the definition point of a nested class in the parent scope. */ private ControlFlowNode parentDef(NestedClass nc) { nc.(AnonymousClass).getClassInstanceExpr().getControlFlowNode() = result or @@ -184,9 +177,6 @@ private module SsaInput implements SsaImplCommon::InputSig certainVariableUpdate(v, _, bb, i) and certain = true or - untrackedFieldWrite(bb, i, v) and - certain = true - or hasEntryDef(v, bb) and i = -1 and certain = true @@ -204,7 +194,10 @@ private module SsaInput implements SsaImplCommon::InputSig hasDominanceInformation(bb) and ( exists(VarRead use | - v.getAnAccess() = use and bb.getNode(i) = use.getControlFlowNode() and certain = true + v instanceof TrackedVar and + v.getAnAccess() = use and + bb.getNode(i) = use.getControlFlowNode() and + certain = true ) or variableCapture(v, _, bb, i) and @@ -223,16 +216,6 @@ final class UncertainWriteDefinition = Impl::UncertainWriteDefinition; final class PhiNode = Impl::PhiNode; -class UntrackedDef extends Definition { - private VarRead read; - - UntrackedDef() { ssaUntrackedDef(this, read) } - - string toString() { result = read.toString() } - - Location getLocation() { result = read.getLocation() } -} - cached private module Cached { /** Gets the destination variable of an update of a tracked variable. */ @@ -256,15 +239,6 @@ private module Cached { ) } - cached - predicate ssaUntrackedDef(Definition def, VarRead read) { - exists(SsaSourceVariable v, BasicBlock bb, int i | - def.definesAt(v, bb, i) and - untrackedFieldWrite(bb, i, v) and - read.getControlFlowNode() = bb.getNode(i + 1) - ) - } - /* * The SSA construction for a field `f` relies on implicit update nodes at * every call site that conceivably could reach an update of the field. From 374c77213ff594042137eb3d6ba0df64a23c6245 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 21 Oct 2025 15:06:14 +0200 Subject: [PATCH 011/127] Java: Remove getAFirstUse in BaseSSA. --- .../code/java/dataflow/internal/BaseSSA.qll | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll b/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll index 8097ec3dee2..4c41e828da0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll @@ -210,14 +210,6 @@ private module Cached { Impl::ssaDefReachesEndOfBlock(bb, def, _) } - cached - predicate firstUse(Impl::Definition def, VarRead use) { - exists(BasicBlock bb, int i | - Impl::firstUse(def, bb, i, _) and - use.getControlFlowNode() = bb.getNode(i) - ) - } - cached predicate ssaUpdate(Impl::Definition def, VariableUpdate upd) { exists(BaseSsaSourceVariable v, BasicBlock bb, int i | @@ -297,16 +289,6 @@ class BaseSsaVariable extends Impl::Definition { /** Gets an access of this SSA variable. */ VarRead getAUse() { result = getAUse(this) } - /** - * Gets an access of the SSA source variable underlying this SSA variable - * that can be reached from this SSA variable without passing through any - * other uses, but potentially through phi nodes. - * - * Subsequent uses can be found by following the steps defined by - * `baseSsaAdjacentUseUse`. - */ - VarRead getAFirstUse() { firstUse(this, result) } - /** Holds if this SSA variable is live at the end of `b`. */ predicate isLiveAtEndOfBlock(BasicBlock b) { ssaDefReachesEndOfBlock(b, this) } From 79b2f21b0714e16f004170a02d260f8055b83d19 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Mon, 27 Oct 2025 11:22:18 +0100 Subject: [PATCH 012/127] SSA: Fix phi defs. --- shared/ssa/codeql/ssa/Ssa.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared/ssa/codeql/ssa/Ssa.qll b/shared/ssa/codeql/ssa/Ssa.qll index 5edf51127b8..35a6fc8148e 100644 --- a/shared/ssa/codeql/ssa/Ssa.qll +++ b/shared/ssa/codeql/ssa/Ssa.qll @@ -1761,7 +1761,7 @@ module Make< * ``` * a phi definition for `x` is inserted just before the call `puts x`. */ - class SsaPhiDefinition extends SsaDefinition { + class SsaPhiDefinition extends SsaDefinition instanceof PhiNode { /** Holds if `inp` is an input to this phi definition along the edge originating in `bb`. */ predicate hasInputFromBlock(SsaDefinition inp, BasicBlock bb) { phiHasInputFromBlockCached(this, inp, bb) From 289d3374ef8c36bf7e9af64ca78dc8681806c35f Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Mon, 27 Oct 2025 11:23:17 +0100 Subject: [PATCH 013/127] SSA: Improve toString. --- shared/ssa/codeql/ssa/Ssa.qll | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/shared/ssa/codeql/ssa/Ssa.qll b/shared/ssa/codeql/ssa/Ssa.qll index 35a6fc8148e..26f3d9f9771 100644 --- a/shared/ssa/codeql/ssa/Ssa.qll +++ b/shared/ssa/codeql/ssa/Ssa.qll @@ -1617,6 +1617,9 @@ module Make< /** A static single assignment (SSA) definition. */ class SsaDefinition extends FinalDefinition { + /** Gets a textual representation of this SSA definition. */ + string toString() { result = super.toString() } + /** * Gets the control flow node of this SSA definition. * @@ -1708,6 +1711,8 @@ module Make< class SsaParameterInit extends SsaExplicitWrite { SsaParameterInit() { parameterInit(this, _) } + override string toString() { result = "SSA param(" + this.getSourceVariable() + ")" } + /** * Gets the parameter that this definition represents. This is equivalent * to `getDefinition().isParameterInit(result)` @@ -1725,6 +1730,8 @@ module Make< */ class SsaImplicitWrite extends SsaWriteDefinition { SsaImplicitWrite() { not explicitWrite(this, _) } + + override string toString() { result = "SSA implicit def(" + this.getSourceVariable() + ")" } } /** @@ -1734,6 +1741,8 @@ module Make< */ class SsaImplicitEntryDefinition extends SsaImplicitWrite { SsaImplicitEntryDefinition() { this.definesAt(_, any(EntryBasicBlock bb), -1) } + + override string toString() { result = "SSA entry def(" + this.getSourceVariable() + ")" } } /** An SSA definition that represents an uncertain variable update. */ From 551944bacb11065d7382a7f314ad630a90ec764d Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 24 Oct 2025 14:31:20 +0200 Subject: [PATCH 014/127] Java: Add VariableWrite class. --- java/ql/lib/semmle/code/java/Expr.qll | 46 +++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index 282d90eaeee..4b03375c69e 100644 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -1808,6 +1808,52 @@ class VariableAssign extends VariableUpdate { } } +private newtype TVariableWrite = + TParamInit(Parameter p) or + TVarWriteExpr(VariableUpdate u) + +/** + * A write to a variable. This is either a local variable declaration, + * including parameter declarations, or an update to a variable. + */ +class VariableWrite extends TVariableWrite { + /** Gets the expression representing this write, if any. */ + Expr asExpr() { this = TVarWriteExpr(result) } + + /** + * Gets the expression with the value being written, if any. + * + * This can be the same expression as returned by `asExpr()`, which is the + * case for, for example, `++x` and `x += e`. For simple assignments like + * `x = e`, `asExpr()` gets the whole assignment expression while + * `getValue()` gets the right-hand side `e`. Post-crement operations like + * `x++` do not have an expression with the value being written. + */ + Expr getValue() { + this.asExpr().(VariableAssign).getSource() = result or + this.asExpr().(AssignOp) = result or + this.asExpr().(PreIncExpr) = result or + this.asExpr().(PreDecExpr) = result + } + + /** Holds if this write is an initialization of parameter `p`. */ + predicate isParameterInit(Parameter p) { this = TParamInit(p) } + + /** Gets a textual representation of this write. */ + string toString() { + exists(Parameter p | this = TParamInit(p) and result = p.toString()) + or + result = this.asExpr().toString() + } + + /** Gets the location of this write. */ + Location getLocation() { + exists(Parameter p | this = TParamInit(p) and result = p.getLocation()) + or + result = this.asExpr().getLocation() + } +} + /** A type literal. For example, `String.class`. */ class TypeLiteral extends Expr, @typeliteral { /** Gets the access to the type whose class is accessed. */ From 942dc2b89e0e26279c5b82ee9e7fa367e6ce3f77 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 23 Oct 2025 13:54:27 +0200 Subject: [PATCH 015/127] Java: Replace BaseSSA class wrappers with shared code. --- .../semmle/code/java/controlflow/Guards.qll | 32 +-- .../semmle/code/java/dataflow/TypeFlow.qll | 60 +++--- .../code/java/dataflow/internal/BaseSSA.qll | 188 ++++++++++++------ .../code/java/dispatch/DispatchFlow.qll | 44 ++-- .../lib/semmle/code/java/dispatch/ObjFlow.qll | 19 +- .../code/java/dispatch/VirtualDispatch.qll | 8 +- .../code/java/frameworks/android/Intent.qll | 6 +- .../security/ListOfConstantsSanitizer.qll | 4 +- 8 files changed, 206 insertions(+), 155 deletions(-) diff --git a/java/ql/lib/semmle/code/java/controlflow/Guards.qll b/java/ql/lib/semmle/code/java/controlflow/Guards.qll index 7bc53226b81..e68c9fbab0b 100644 --- a/java/ql/lib/semmle/code/java/controlflow/Guards.qll +++ b/java/ql/lib/semmle/code/java/controlflow/Guards.qll @@ -141,7 +141,7 @@ private predicate isNonFallThroughPredecessor(SwitchCase sc, ControlFlowNode pre private module GuardsInput implements SharedGuards::InputSig { private import java as J - private import semmle.code.java.dataflow.internal.BaseSSA + private import semmle.code.java.dataflow.internal.BaseSSA as Base private import semmle.code.java.dataflow.NullGuards as NullGuards class NormalExitNode = ControlFlow::NormalExitNode; @@ -211,10 +211,10 @@ private module GuardsInput implements SharedGuards::InputSig { private newtype TFlowNode = TField(Field f) { not f.getType() instanceof PrimitiveType } or - TSsa(BaseSsaVariable ssa) { not ssa.getSourceVariable().getType() instanceof PrimitiveType } or + TSsa(Base::SsaDefinition ssa) { not ssa.getSourceVariable().getType() instanceof PrimitiveType } or TExpr(Expr e) or TMethod(Method m) { not m.getReturnType() instanceof PrimitiveType } @@ -55,7 +55,7 @@ module FlowStepsInput implements UniversalFlow::UniversalFlowInput { Field asField() { this = TField(result) } /** Gets the SSA variable corresponding to this node, if any. */ - BaseSsaVariable asSsa() { this = TSsa(result) } + Base::SsaDefinition asSsa() { this = TSsa(result) } /** Gets the expression corresponding to this node, if any. */ Expr asExpr() { this = TExpr(result) } @@ -107,7 +107,7 @@ module FlowStepsInput implements UniversalFlow::UniversalFlowInput { not e.(FieldAccess).getField() = f ) or - n2.asSsa().(BaseSsaPhiNode).getAnUltimateLocalDefinition() = n1.asSsa() + n2.asSsa().(Base::SsaPhiDefinition).getAnUltimateDefinition() = n1.asSsa() or exists(ReturnStmt ret | n2.asMethod() = ret.getEnclosingCallable() and ret.getResult() = n1.asExpr() @@ -118,14 +118,14 @@ module FlowStepsInput implements UniversalFlow::UniversalFlowInput { exists(Argument arg, Parameter p | privateParamArg(p, arg) and n1.asExpr() = arg and - n2.asSsa().(BaseSsaImplicitInit).isParameterDefinition(p) and + n2.asSsa().(Base::SsaParameterInit).getParameter() = p and // skip trivial recursion - not arg = n2.asSsa().getAUse() + not arg = n2.asSsa().getARead() ) or n2.asExpr() = n1.asField().getAnAccess() or - n2.asExpr() = n1.asSsa().getAUse() + n2.asExpr() = n1.asSsa().getARead() or n2.asExpr().(CastingExpr).getExpr() = n1.asExpr() and not n2.asExpr().getType() instanceof PrimitiveType @@ -133,9 +133,9 @@ module FlowStepsInput implements UniversalFlow::UniversalFlowInput { n2.asExpr().(AssignExpr).getSource() = n1.asExpr() and not n2.asExpr().getType() instanceof PrimitiveType or - n2.asSsa().(BaseSsaUpdate).getDefiningExpr().(VariableAssign).getSource() = n1.asExpr() + n2.asSsa().(Base::SsaExplicitWrite).getDefiningExpr().(VariableAssign).getSource() = n1.asExpr() or - n2.asSsa().(BaseSsaImplicitInit).captures(n1.asSsa()) + n2.asSsa().(Base::SsaCapturedDefinition).captures(n1.asSsa()) or n2.asExpr().(NotNullExpr).getExpr() = n1.asExpr() } @@ -147,7 +147,7 @@ module FlowStepsInput implements UniversalFlow::UniversalFlowInput { n.asExpr() instanceof NullLiteral or exists(LocalVariableDeclExpr decl | - n.asSsa().(BaseSsaUpdate).getDefiningExpr() = decl and + n.asSsa().(Base::SsaExplicitWrite).getDefiningExpr() = decl and not decl.hasImplicitInit() and not exists(decl.getInitOrPatternSource()) ) @@ -216,7 +216,9 @@ private module Input implements TypeFlowInput { ) } - private predicate upcastEnhancedForStmtAux(BaseSsaUpdate v, RefType t, RefType t1, RefType t2) { + private predicate upcastEnhancedForStmtAux( + Base::SsaExplicitWrite v, RefType t, RefType t1, RefType t2 + ) { exists(EnhancedForStmt for | for.getVariable() = v.getDefiningExpr() and v.getSourceVariable().getType().getErasure() = t2 and @@ -230,7 +232,7 @@ private module Input implements TypeFlowInput { * the type of the elements being iterated over, and this type is more precise * than the type of `v`. */ - private predicate upcastEnhancedForStmt(BaseSsaUpdate v, RefType t) { + private predicate upcastEnhancedForStmt(Base::SsaExplicitWrite v, RefType t) { exists(RefType t1, RefType t2 | upcastEnhancedForStmtAux(v, t, t1, t2) and t1.getASourceSupertype+() = t2 @@ -238,9 +240,9 @@ private module Input implements TypeFlowInput { } private predicate downcastSuccessorAux( - CastingExpr cast, BaseSsaVariable v, RefType t, RefType t1, RefType t2 + CastingExpr cast, Base::SsaDefinition v, RefType t, RefType t1, RefType t2 ) { - cast.getExpr() = v.getAUse() and + cast.getExpr() = v.getARead() and t = cast.getType() and t1 = t.getErasure() and t2 = v.getSourceVariable().getType().getErasure() @@ -250,10 +252,10 @@ private module Input implements TypeFlowInput { * Holds if `va` is an access to a value that has previously been downcast to `t`. */ private predicate downcastSuccessor(VarAccess va, RefType t) { - exists(CastingExpr cast, BaseSsaVariable v, RefType t1, RefType t2 | + exists(CastingExpr cast, Base::SsaDefinition v, RefType t1, RefType t2 | downcastSuccessorAux(pragma[only_bind_into](cast), v, t, t1, t2) and t1.getASourceSupertype+() = t2 and - va = v.getAUse() and + va = v.getARead() and dominates(cast.getControlFlowNode(), va.getControlFlowNode()) and dominates(cast.getControlFlowNode().getANormalSuccessor(), va.getControlFlowNode()) ) @@ -263,9 +265,9 @@ private module Input implements TypeFlowInput { * Holds if `va` is an access to a value that is guarded by `instanceof t` or `case e t`. */ private predicate typeTestGuarded(VarAccess va, RefType t) { - exists(Guard typeTest, BaseSsaVariable v | - typeTest.appliesTypeTest(v.getAUse(), t, _) and - va = v.getAUse() and + exists(Guard typeTest, Base::SsaDefinition v | + typeTest.appliesTypeTest(v.getARead(), t, _) and + va = v.getARead() and guardControls_v1(typeTest, va.getBasicBlock(), true) ) } @@ -274,12 +276,12 @@ private module Input implements TypeFlowInput { * Holds if `aa` is an access to a value that is guarded by `instanceof t` or `case e t`. */ private predicate arrayTypeTestGuarded(ArrayAccess aa, RefType t) { - exists(Guard typeTest, BaseSsaVariable v1, BaseSsaVariable v2, ArrayAccess aa1 | + exists(Guard typeTest, Base::SsaDefinition v1, Base::SsaDefinition v2, ArrayAccess aa1 | typeTest.appliesTypeTest(aa1, t, _) and - aa1.getArray() = v1.getAUse() and - aa1.getIndexExpr() = v2.getAUse() and - aa.getArray() = v1.getAUse() and - aa.getIndexExpr() = v2.getAUse() and + aa1.getArray() = v1.getARead() and + aa1.getIndexExpr() = v2.getARead() and + aa.getArray() = v1.getARead() and + aa.getIndexExpr() = v2.getARead() and guardControls_v1(typeTest, aa.getBasicBlock(), true) ) } @@ -321,14 +323,14 @@ private module Input implements TypeFlowInput { * Holds if `ioe` checks `v`, its true-successor is `bb`, and `bb` has multiple * predecessors. */ - private predicate instanceofDisjunct(InstanceOfExpr ioe, BasicBlock bb, BaseSsaVariable v) { - ioe.getExpr() = v.getAUse() and + private predicate instanceofDisjunct(InstanceOfExpr ioe, BasicBlock bb, Base::SsaDefinition v) { + ioe.getExpr() = v.getARead() and strictcount(bb.getAPredecessor()) > 1 and exists(ConditionBlock cb | cb.getCondition() = ioe and cb.getTestSuccessor(true) = bb) } /** Holds if `bb` is disjunctively guarded by multiple `instanceof` tests on `v`. */ - private predicate instanceofDisjunction(BasicBlock bb, BaseSsaVariable v) { + private predicate instanceofDisjunction(BasicBlock bb, Base::SsaDefinition v) { strictcount(InstanceOfExpr ioe | instanceofDisjunct(ioe, bb, v)) = strictcount(bb.getAPredecessor()) } @@ -338,10 +340,10 @@ private module Input implements TypeFlowInput { * `instanceof t_i` where `t` is one of those `t_i`. */ predicate instanceofDisjunctionGuarded(TypeFlowNode n, RefType t) { - exists(BasicBlock bb, InstanceOfExpr ioe, BaseSsaVariable v, VarAccess va | + exists(BasicBlock bb, InstanceOfExpr ioe, Base::SsaDefinition v, VarAccess va | instanceofDisjunction(bb, v) and bb.dominates(va.getBasicBlock()) and - va = v.getAUse() and + va = v.getARead() and instanceofDisjunct(ioe, bb, v) and t = ioe.getSyntacticCheckedType() and n.asExpr() = va diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll b/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll index 4c41e828da0..e373340d7d7 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll @@ -25,7 +25,8 @@ private module BaseSsaStage { predicate backref() { (exists(TLocalVar(_, _)) implies any()) and (exists(any(BaseSsaSourceVariable v).getAnAccess()) implies any()) and - (exists(getAUse(_)) implies any()) + (exists(any(SsaDefinition def).getARead()) implies any()) and + (captures(_, _) implies any()) } } @@ -157,7 +158,7 @@ private module BaseSsaImpl { private import BaseSsaImpl -private module SsaInput implements SsaImplCommon::InputSig { +private module SsaImplInput implements SsaImplCommon::InputSig { class SourceVariable = BaseSsaSourceVariable; /** @@ -189,59 +190,46 @@ private module SsaInput implements SsaImplCommon::InputSig } } -private module Impl = SsaImplCommon::Make; +private module Impl = SsaImplCommon::Make; +private module SsaInput implements Impl::SsaInputSig { + private import java as J + + class Expr = J::Expr; + + class Parameter = J::Parameter; + + class VariableWrite = J::VariableWrite; + + predicate explicitWrite(VariableWrite w, BasicBlock bb, int i, BaseSsaSourceVariable v) { + variableUpdate(v, w.asExpr().getControlFlowNode(), bb, i) + or + exists(Parameter p, Callable c | + c = p.getCallable() and + v = TLocalVar(c, p) and + w.isParameterInit(p) and + c.getBody().getBasicBlock() = bb and + i = -1 + ) + } +} + +module Ssa = Impl::MakeSsa; + +import Ssa private import Cached cached private module Cached { - cached - VarRead getAUse(Impl::Definition def) { - BaseSsaStage::ref() and - exists(BaseSsaSourceVariable v, BasicBlock bb, int i | - Impl::ssaDefReachesRead(v, def, bb, i) and - result.getControlFlowNode() = bb.getNode(i) and - result = v.getAnAccess() - ) - } - - cached - predicate ssaDefReachesEndOfBlock(BasicBlock bb, Impl::Definition def) { - Impl::ssaDefReachesEndOfBlock(bb, def, _) - } - - cached - predicate ssaUpdate(Impl::Definition def, VariableUpdate upd) { - exists(BaseSsaSourceVariable v, BasicBlock bb, int i | - def.definesAt(v, bb, i) and - variableUpdate(v, upd.getControlFlowNode(), bb, i) and - getDestVar(upd) = v - ) - } - - cached - predicate ssaImplicitInit(Impl::WriteDefinition def) { - exists(BaseSsaSourceVariable v, BasicBlock bb, int i | - def.definesAt(v, bb, i) and - hasEntryDef(v, bb) and - i = -1 - ) - } - /** Holds if `init` is a closure variable that captures the value of `capturedvar`. */ cached - predicate captures(BaseSsaImplicitInit init, BaseSsaVariable capturedvar) { + predicate captures(SsaImplicitEntryDefinition init, SsaDefinition capturedvar) { exists(BasicBlock bb, int i | - Impl::ssaDefReachesRead(_, capturedvar, bb, i) and + Ssa::ssaDefReachesUncertainRead(_, capturedvar, bb, i) and variableCapture(capturedvar.getSourceVariable(), init.getSourceVariable(), bb, i) ) } - cached - predicate phiHasInputFromBlock(Impl::PhiNode phi, Impl::Definition inp, BasicBlock bb) { - Impl::phiHasInputFromBlock(phi, inp, bb) - } - cached module SsaPublic { /** @@ -277,26 +265,73 @@ private module Cached { import SsaPublic +/** An SSA definition in a closure that captures a variable. */ +class SsaCapturedDefinition extends SsaImplicitEntryDefinition { + SsaCapturedDefinition() { captures(this, _) } + + override string toString() { result = "SSA capture def(" + this.getSourceVariable() + ")" } + + /** Holds if this definition captures the value of `capturedvar`. */ + predicate captures(SsaDefinition capturedvar) { captures(this, capturedvar) } + + /** + * Gets a definition that ultimately defines the captured variable and is not itself a phi node. + */ + SsaDefinition getAnUltimateCapturedDefinition() { + exists(SsaDefinition capturedvar | + captures(this, capturedvar) and result = capturedvar.getAnUltimateDefinition() + ) + } +} + +deprecated private predicate ssaUpdate(Impl::Definition def, VariableUpdate upd) { + exists(BaseSsaSourceVariable v, BasicBlock bb, int i | + def.definesAt(v, bb, i) and + variableUpdate(v, upd.getControlFlowNode(), bb, i) and + getDestVar(upd) = v + ) +} + +deprecated private predicate ssaImplicitInit(Impl::WriteDefinition def) { + exists(BaseSsaSourceVariable v, BasicBlock bb, int i | + def.definesAt(v, bb, i) and + hasEntryDef(v, bb) and + i = -1 + ) +} + /** + * DEPRECATED: Use `SsaDefinition` instead. + * * An SSA variable. */ -class BaseSsaVariable extends Impl::Definition { - /** Gets the `ControlFlowNode` at which this SSA variable is defined. */ - ControlFlowNode getCfgNode() { - exists(BasicBlock bb, int i | this.definesAt(_, bb, i) and result = bb.getNode(0.maximum(i))) - } +deprecated class BaseSsaVariable extends Impl::Definition { + /** + * DEPRECATED: Use `getControlFlowNode()` instead. + * + * Gets the `ControlFlowNode` at which this SSA variable is defined. + */ + deprecated ControlFlowNode getCfgNode() { result = this.(SsaDefinition).getControlFlowNode() } - /** Gets an access of this SSA variable. */ - VarRead getAUse() { result = getAUse(this) } + /** + * DEPRECATED: Use `getARead()` instead. + * + * Gets an access of this SSA variable. + */ + deprecated VarRead getAUse() { result = this.(SsaDefinition).getARead() } /** Holds if this SSA variable is live at the end of `b`. */ - predicate isLiveAtEndOfBlock(BasicBlock b) { ssaDefReachesEndOfBlock(b, this) } + predicate isLiveAtEndOfBlock(BasicBlock b) { this.(SsaDefinition).isLiveAtEndOfBlock(b) } /** Gets an input to the phi node defining the SSA variable. */ - private BaseSsaVariable getAPhiInput() { result = this.(BaseSsaPhiNode).getAPhiInput() } + private BaseSsaVariable getAPhiInput() { result = this.(BaseSsaPhiNode).getAnInput() } - /** Gets a definition in the same callable that ultimately defines this variable and is not itself a phi node. */ - BaseSsaVariable getAnUltimateLocalDefinition() { + /** + * DEPRECATED: Use `SsaDefinition::getAnUltimateDefinition()` instead. + * + * Gets a definition in the same callable that ultimately defines this variable and is not itself a phi node. + */ + deprecated BaseSsaVariable getAnUltimateLocalDefinition() { result = this.getAPhiInput*() and not result instanceof BaseSsaPhiNode } @@ -306,18 +341,27 @@ class BaseSsaVariable extends Impl::Definition { * variable. */ private BaseSsaVariable getAPhiInputOrCapturedVar() { - result = this.(BaseSsaPhiNode).getAPhiInput() or + result = this.(BaseSsaPhiNode).getAnInput() or this.(BaseSsaImplicitInit).captures(result) } - /** Gets a definition that ultimately defines this variable and is not itself a phi node. */ - BaseSsaVariable getAnUltimateDefinition() { + /** + * DEPRECATED: Use `SsaCapturedDefinition::getAnUltimateCapturedDefinition()` + * and/or `SsaDefinition::getAnUltimateDefinition()` instead. + * + * Gets a definition that ultimately defines this variable and is not itself a phi node. + */ + deprecated BaseSsaVariable getAnUltimateDefinition() { result = this.getAPhiInputOrCapturedVar*() and not result instanceof BaseSsaPhiNode } } -/** An SSA variable that is defined by a `VariableUpdate`. */ -class BaseSsaUpdate extends BaseSsaVariable instanceof Impl::WriteDefinition { +/** + * DEPRECATED: Use `SsaExplicitWrite` instead. + * + * An SSA variable that is defined by a `VariableUpdate`. + */ +deprecated class BaseSsaUpdate extends BaseSsaVariable instanceof Impl::WriteDefinition { BaseSsaUpdate() { ssaUpdate(this, _) } /** Gets the `VariableUpdate` defining the SSA variable. */ @@ -325,34 +369,46 @@ class BaseSsaUpdate extends BaseSsaVariable instanceof Impl::WriteDefinition { } /** + * DEPRECATED: Use `SsaParameterInit` or `SsaCapturedDefinition` instead. + * * An SSA variable that is defined by its initial value in the callable. This * includes initial values of parameters, fields, and closure variables. */ -class BaseSsaImplicitInit extends BaseSsaVariable instanceof Impl::WriteDefinition { +deprecated class BaseSsaImplicitInit extends BaseSsaVariable instanceof Impl::WriteDefinition { BaseSsaImplicitInit() { ssaImplicitInit(this) } /** Holds if this is a closure variable that captures the value of `capturedvar`. */ predicate captures(BaseSsaVariable capturedvar) { captures(this, capturedvar) } /** + * DEPRECATED: Use `SsaParameterInit::getParameter()` instead. + * * Holds if the SSA variable is a parameter defined by its initial value in the callable. */ - predicate isParameterDefinition(Parameter p) { + deprecated predicate isParameterDefinition(Parameter p) { this.getSourceVariable() = TLocalVar(p.getCallable(), p) and p.getCallable().getBody().getControlFlowNode() = this.getCfgNode() } } -/** An SSA phi node. */ -class BaseSsaPhiNode extends BaseSsaVariable instanceof Impl::PhiNode { - /** Gets an input to the phi node defining the SSA variable. */ - BaseSsaVariable getAPhiInput() { this.hasInputFromBlock(result, _) } +/** + * DEPRECATED: Use `SsaPhiDefinition` instead. + * + * An SSA phi node. + */ +deprecated class BaseSsaPhiNode extends BaseSsaVariable instanceof Impl::PhiNode { + /** + * DEPRECATED: Use `getAnInput()` instead. + * + * Gets an input to the phi node defining the SSA variable. + */ + deprecated BaseSsaVariable getAPhiInput() { this.hasInputFromBlock(result, _) } /** Gets an input to the phi node defining the SSA variable. */ BaseSsaVariable getAnInput() { this.hasInputFromBlock(result, _) } /** Holds if `inp` is an input to the phi node along the edge originating in `bb`. */ predicate hasInputFromBlock(BaseSsaVariable inp, BasicBlock bb) { - phiHasInputFromBlock(this, inp, bb) + this.(SsaPhiDefinition).hasInputFromBlock(inp, bb) } } diff --git a/java/ql/lib/semmle/code/java/dispatch/DispatchFlow.qll b/java/ql/lib/semmle/code/java/dispatch/DispatchFlow.qll index bd293eed6b3..2af5df28107 100644 --- a/java/ql/lib/semmle/code/java/dispatch/DispatchFlow.qll +++ b/java/ql/lib/semmle/code/java/dispatch/DispatchFlow.qll @@ -8,7 +8,7 @@ import java private import VirtualDispatch -private import semmle.code.java.dataflow.internal.BaseSSA +private import semmle.code.java.dataflow.internal.BaseSSA as Base private import semmle.code.java.dataflow.internal.DataFlowUtil as DataFlow private import semmle.code.java.dataflow.internal.DataFlowPrivate as DataFlowPrivate private import semmle.code.java.dataflow.InstanceAccess @@ -162,14 +162,28 @@ private module TypeTrackingSteps { storeContents = loadContents } - predicate simpleLocalSmallStep(Node n1, Node n2) { - exists(BaseSsaVariable v, BaseSsaVariable def | - def.(BaseSsaUpdate).getDefiningExpr().(VariableAssign).getSource() = n1.asExpr() - or - def.(BaseSsaImplicitInit).isParameterDefinition(n1.asParameter()) + /** + * Holds if `n` is a read of an SSA variable that is ultimately defined by `def`. + * + * This includes reads of captured variables even though they are not technically + * local steps, but treating them as local is useful for type tracking purposes. + */ + private predicate readsSsa(Node n, Base::SsaDefinition def) { + exists(Base::SsaDefinition v | + v.getAnUltimateDefinition() = def or + v.(Base::SsaCapturedDefinition).getAnUltimateCapturedDefinition() = def | - v.getAnUltimateDefinition() = def and - v.getAUse() = n2.asExpr() + v.getARead() = n.asExpr() + ) + } + + predicate simpleLocalSmallStep(Node n1, Node n2) { + exists(Base::SsaDefinition def | + def.(Base::SsaExplicitWrite).getDefiningExpr().(VariableAssign).getSource() = n1.asExpr() + or + def.(Base::SsaParameterInit).getParameter() = n1.asParameter() + | + readsSsa(n2, def) ) or exists(Callable c | n1.(DataFlow::InstanceParameterNode).getCallable() = c | @@ -220,11 +234,10 @@ private module TypeTrackingSteps { n2.asExpr() = get ) or - exists(EnhancedForStmt for, BaseSsaVariable ssa, BaseSsaVariable def | - for.getVariable() = def.(BaseSsaUpdate).getDefiningExpr() and + exists(EnhancedForStmt for, Base::SsaDefinition def | + for.getVariable() = def.(Base::SsaExplicitWrite).getDefiningExpr() and for.getExpr() = v.getAnAccess() and - ssa.getAnUltimateDefinition() = def and - ssa.getAUse() = n2.asExpr() + readsSsa(n2, def) ) ) } @@ -259,16 +272,15 @@ private module TypeTrackingSteps { } predicate loadStep(Node n1, LocalSourceNode n2, Content f) { - exists(BaseSsaVariable v, BaseSsaVariable def | + exists(Base::SsaDefinition def | exists(EnhancedForStmt for | - for.getVariable() = def.(BaseSsaUpdate).getDefiningExpr() and + for.getVariable() = def.(Base::SsaExplicitWrite).getDefiningExpr() and for.getExpr() = n1.asExpr() and n1.getType() instanceof Array and f = ContentArray() ) | - v.getAnUltimateDefinition() = def and - v.getAUse() = n2.asExpr() + readsSsa(n2, def) ) or n2.asExpr().(ArrayAccess).getArray() = n1.asExpr() diff --git a/java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll b/java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll index a3da9118acc..239f4dd0fbc 100644 --- a/java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll +++ b/java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll @@ -10,7 +10,7 @@ import java private import VirtualDispatch private import semmle.code.java.controlflow.Guards -private import semmle.code.java.dataflow.internal.BaseSSA +private import semmle.code.java.dataflow.internal.BaseSSA as Base private import semmle.code.java.dataflow.internal.DataFlowUtil private import semmle.code.java.dataflow.internal.DataFlowPrivate private import semmle.code.java.dataflow.internal.ContainerFlow @@ -71,21 +71,24 @@ private predicate callFlowStep(Node n1, Node n2) { * flow, calls, returns, fields, array reads or writes, or container taint steps. */ private predicate step(Node n1, Node n2) { - exists(BaseSsaVariable v, BaseSsaVariable def | - def.(BaseSsaUpdate).getDefiningExpr().(VariableAssign).getSource() = n1.asExpr() + exists(Base::SsaDefinition v, Base::SsaDefinition def | + def.(Base::SsaExplicitWrite).getDefiningExpr().(VariableAssign).getSource() = n1.asExpr() or - def.(BaseSsaImplicitInit).isParameterDefinition(n1.asParameter()) + def.(Base::SsaParameterInit).getParameter() = n1.asParameter() or exists(EnhancedForStmt for | - for.getVariable() = def.(BaseSsaUpdate).getDefiningExpr() and + for.getVariable() = def.(Base::SsaExplicitWrite).getDefiningExpr() and for.getExpr() = n1.asExpr() ) | - v.getAnUltimateDefinition() = def and - v.getAUse() = n2.asExpr() + ( + v.(Base::SsaCapturedDefinition).getAnUltimateCapturedDefinition() = def or + v.getAnUltimateDefinition() = def + ) and + v.getARead() = n2.asExpr() ) or - baseSsaAdjacentUseUse(n1.asExpr(), n2.asExpr()) + Base::baseSsaAdjacentUseUse(n1.asExpr(), n2.asExpr()) or exists(Callable c | n1.(InstanceParameterNode).getCallable() = c | exists(InstanceAccess ia | diff --git a/java/ql/lib/semmle/code/java/dispatch/VirtualDispatch.qll b/java/ql/lib/semmle/code/java/dispatch/VirtualDispatch.qll index 78bf1ad0bdc..0119930caf4 100644 --- a/java/ql/lib/semmle/code/java/dispatch/VirtualDispatch.qll +++ b/java/ql/lib/semmle/code/java/dispatch/VirtualDispatch.qll @@ -7,7 +7,7 @@ import java import semmle.code.java.dataflow.TypeFlow private import DispatchFlow as DispatchFlow private import ObjFlow as ObjFlow -private import semmle.code.java.dataflow.internal.BaseSSA +private import semmle.code.java.dataflow.internal.BaseSSA as Base private import semmle.code.java.controlflow.Guards private import semmle.code.java.dispatch.internal.Unification @@ -194,10 +194,10 @@ private module Dispatch { */ private predicate impossibleDispatchTarget(MethodCall source, Method tgt) { tgt = viableImpl_v1_cand(source) and - exists(Guard typeTest, BaseSsaVariable v, Expr q, RefType t | + exists(Guard typeTest, Base::SsaDefinition v, Expr q, RefType t | source.getQualifier() = q and - v.getAUse() = q and - typeTest.appliesTypeTest(v.getAUse(), t, false) and + v.getARead() = q and + typeTest.appliesTypeTest(v.getARead(), t, false) and guardControls_v1(typeTest, q.getBasicBlock(), false) and tgt.getDeclaringType().getSourceDeclaration().getASourceSupertype*() = t.getErasure() ) diff --git a/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll b/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll index c3b58873d1f..3df890c95f4 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll @@ -262,10 +262,10 @@ private predicate reaches(Expr src, Argument arg) { any(StartComponentMethodCall ma).getIntentArg() = arg and src = arg or - exists(Expr mid, BaseSsa::BaseSsaVariable ssa, BaseSsa::BaseSsaUpdate upd | + exists(Expr mid, BaseSsa::SsaDefinition ssa, BaseSsa::SsaExplicitWrite upd | reaches(mid, arg) and - mid = ssa.getAUse() and - upd = ssa.getAnUltimateLocalDefinition() and + mid = ssa.getARead() and + upd = ssa.getAnUltimateDefinition() and src = upd.getDefiningExpr().(VariableAssign).getSource() ) or diff --git a/java/ql/lib/semmle/code/java/security/ListOfConstantsSanitizer.qll b/java/ql/lib/semmle/code/java/security/ListOfConstantsSanitizer.qll index 4294ac84f68..c8d52f4191c 100644 --- a/java/ql/lib/semmle/code/java/security/ListOfConstantsSanitizer.qll +++ b/java/ql/lib/semmle/code/java/security/ListOfConstantsSanitizer.qll @@ -9,7 +9,7 @@ import java private import codeql.typeflow.UniversalFlow as UniversalFlow private import semmle.code.java.Collections private import semmle.code.java.controlflow.Guards -private import semmle.code.java.dataflow.internal.BaseSSA +private import semmle.code.java.dataflow.internal.BaseSSA as Base private import semmle.code.java.dataflow.TaintTracking private import semmle.code.java.dataflow.TypeFlow private import semmle.code.java.dispatch.VirtualDispatch @@ -115,7 +115,7 @@ private predicate nodeWithAddition(FlowNode n, Variable v) { n.asField() = v or n.asSsa().getSourceVariable().getVariable() = v and - (n.asSsa() instanceof BaseSsaUpdate or n.asSsa().(BaseSsaImplicitInit).isParameterDefinition(_)) + n.asSsa() instanceof Base::SsaExplicitWrite ) } From d5708fdd4ef9753e42abf406b1db30bd39267925 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Wed, 5 Nov 2025 14:09:55 +0100 Subject: [PATCH 016/127] Java: Instantiate shared SSA wrappers for main SSA. --- java/ql/lib/semmle/code/java/dataflow/SSA.qll | 2 ++ .../code/java/dataflow/internal/SsaImpl.qll | 32 +++++++++++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/SSA.qll b/java/ql/lib/semmle/code/java/dataflow/SSA.qll index 999b02cce77..4c7372998c2 100644 --- a/java/ql/lib/semmle/code/java/dataflow/SSA.qll +++ b/java/ql/lib/semmle/code/java/dataflow/SSA.qll @@ -15,6 +15,8 @@ module; import java private import internal.SsaImpl +import internal.SsaImpl::Ssa as Ssa +import Ssa /** * A fully qualified variable in the context of a `Callable` in which it is diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll index 579da78b31e..17870093ca2 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll @@ -164,7 +164,7 @@ private predicate uncertainVariableUpdateImpl(TrackedVar v, ControlFlowNode n, B predicate uncertainVariableUpdate(TrackedVar v, ControlFlowNode n, BasicBlock b, int i) = forceLocal(uncertainVariableUpdateImpl/4)(v, n, b, i) -private module SsaInput implements SsaImplCommon::InputSig { +private module SsaImplInput implements SsaImplCommon::InputSig { class SourceVariable = SsaSourceVariable; /** @@ -206,7 +206,35 @@ private module SsaInput implements SsaImplCommon::InputSig } } -import SsaImplCommon::Make as Impl +import SsaImplCommon::Make as Impl + +private module SsaInput implements Impl::SsaInputSig { + private import java as J + + class Expr = J::Expr; + + class Parameter = J::Parameter; + + class VariableWrite = J::VariableWrite; + + predicate explicitWrite(VariableWrite w, BasicBlock bb, int i, SsaSourceVariable v) { + exists(VariableUpdate upd | + upd = w.asExpr() and + certainVariableUpdate(v, upd.getControlFlowNode(), bb, i) and + getDestVar(upd) = v + ) + or + exists(Parameter p, Callable c | + c = p.getCallable() and + v = TLocalVar(c, p) and + w.isParameterInit(p) and + c.getBody().getBasicBlock() = bb and + i = -1 + ) + } +} + +module Ssa = Impl::MakeSsa; final class Definition = Impl::Definition; From 154f0770de7f8f0f8add9911ca325bed217f840d Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 6 Nov 2025 14:37:05 +0100 Subject: [PATCH 017/127] Java: Simplify instantiation of Guards and ControlFlowReachability. --- .../controlflow/ControlFlowReachability.qll | 20 ++------------ .../semmle/code/java/controlflow/Guards.qll | 26 ++----------------- .../semmle/code/java/dataflow/Nullness.qll | 4 +-- 3 files changed, 6 insertions(+), 44 deletions(-) diff --git a/java/ql/lib/semmle/code/java/controlflow/ControlFlowReachability.qll b/java/ql/lib/semmle/code/java/controlflow/ControlFlowReachability.qll index 9fe6b9b0b1d..2b8353a6b07 100644 --- a/java/ql/lib/semmle/code/java/controlflow/ControlFlowReachability.qll +++ b/java/ql/lib/semmle/code/java/controlflow/ControlFlowReachability.qll @@ -6,11 +6,12 @@ module; import java private import codeql.controlflow.ControlFlowReachability -private import semmle.code.java.dataflow.SSA as SSA +private import semmle.code.java.dataflow.SSA private import semmle.code.java.controlflow.Guards as Guards private module ControlFlowInput implements InputSig { private import java as J + import Ssa AstNode getEnclosingAstNode(ControlFlowNode node) { node.getAstNode() = result } @@ -27,23 +28,6 @@ private module ControlFlowInput implements InputSig Date: Thu, 6 Nov 2025 16:18:37 +0100 Subject: [PATCH 018/127] Java: Replace usages of isParameterDefinition. --- java/ql/lib/semmle/code/java/dataflow/DefUse.qll | 2 +- java/ql/lib/semmle/code/java/dataflow/Nullness.qll | 2 +- java/ql/lib/semmle/code/java/dataflow/SSA.qll | 2 ++ .../semmle/code/java/dataflow/internal/DataFlowNodes.qll | 2 +- .../semmle/code/java/dataflow/internal/DataFlowPrivate.qll | 6 +++--- java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll | 2 +- .../internal/rangeanalysis/SignAnalysisSpecific.qll | 2 +- java/ql/lib/semmle/code/java/frameworks/InputStream.qll | 2 +- 8 files changed, 11 insertions(+), 9 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/DefUse.qll b/java/ql/lib/semmle/code/java/dataflow/DefUse.qll index a93f2e30b46..ea4df94d6c1 100644 --- a/java/ql/lib/semmle/code/java/dataflow/DefUse.qll +++ b/java/ql/lib/semmle/code/java/dataflow/DefUse.qll @@ -47,6 +47,6 @@ predicate defUsePair(VariableUpdate def, VarRead use) { */ predicate parameterDefUsePair(Parameter p, VarRead use) { exists(SsaVariable v | - v.getAUse() = use and v.getAnUltimateDefinition().(SsaImplicitInit).isParameterDefinition(p) + v.getAUse() = use and v.getAnUltimateDefinition().(SsaParameterInit).getParameter() = p ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/Nullness.qll b/java/ql/lib/semmle/code/java/dataflow/Nullness.qll index ff93b8d64ee..7802dc9d280 100644 --- a/java/ql/lib/semmle/code/java/dataflow/Nullness.qll +++ b/java/ql/lib/semmle/code/java/dataflow/Nullness.qll @@ -156,7 +156,7 @@ private predicate varMaybeNull(SsaVariable v, ControlFlowNode node, string msg, or // A parameter might be null if there is a null argument somewhere. exists(Parameter p, Expr arg | - v.(SsaImplicitInit).isParameterDefinition(p) and + v.(SsaParameterInit).getParameter() = p and node = v.getCfgNode() and p.getAnArgument() = arg and reason = arg and diff --git a/java/ql/lib/semmle/code/java/dataflow/SSA.qll b/java/ql/lib/semmle/code/java/dataflow/SSA.qll index 4c7372998c2..94f48bf8dc0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/SSA.qll +++ b/java/ql/lib/semmle/code/java/dataflow/SSA.qll @@ -317,6 +317,8 @@ class SsaImplicitInit extends SsaVariable instanceof WriteDefinition { predicate captures(SsaVariable capturedvar) { captures(this, capturedvar) } /** + * DEPRECATED: Use `SsaParameterInit::getParameter()` instead. + * * Holds if the SSA variable is a parameter defined by its initial value in the callable. */ predicate isParameterDefinition(Parameter p) { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll index 674c2380a5f..5dfa83f6f7e 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll @@ -46,7 +46,7 @@ module SsaFlow { or exists(Parameter p | n = TExplicitParameterNode(p) and - result.(Impl::WriteDefSourceNode).getDefinition().(SsaImplicitInit).isParameterDefinition(p) + result.(Impl::WriteDefSourceNode).getDefinition().(SsaParameterInit).getParameter() = p ) or ssaDefAssigns(result.(Impl::WriteDefSourceNode).getDefinition(), n.asExpr()) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll index 1721569e45a..83021f2b7f1 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll @@ -551,15 +551,15 @@ private class ConstantBooleanArgumentNode extends ArgumentNode, ExprNode { */ predicate isUnreachableInCall(NodeRegion nr, DataFlowCall call) { exists( - ExplicitParameterNode paramNode, ConstantBooleanArgumentNode arg, SsaImplicitInit param, + ExplicitParameterNode paramNode, ConstantBooleanArgumentNode arg, SsaParameterInit param, Guard guard | // get constant bool argument and parameter for this call viableParamArg(call, pragma[only_bind_into](paramNode), arg) and // get the ssa variable definition for this parameter - param.isParameterDefinition(paramNode.getParameter()) and + param.getParameter() = paramNode.getParameter() and // which is used in a guard - param.getAUse() = guard and + param.getARead() = guard and // which controls `n` with the opposite value of `arg` guard .controls(nr, diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll index 17870093ca2..438c3f336d7 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll @@ -669,7 +669,7 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu Expr getARead(Definition def) { result = getAUse(def) } predicate ssaDefHasSource(WriteDefinition def) { - def instanceof SsaExplicitUpdate or def.(SsaImplicitInit).isParameterDefinition(_) + def instanceof SsaExplicitUpdate or def instanceof SsaParameterInit } predicate allowFlowIntoUncertainDef(UncertainWriteDefinition def) { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll index 6363b8f7ed3..85fbde65684 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll @@ -273,7 +273,7 @@ private module Impl { } /** Holds if the variable underlying the implicit SSA variable `v` is not a field. */ - predicate nonFieldImplicitSsaDefinition(SsaImplicitInit v) { v.isParameterDefinition(_) } + predicate nonFieldImplicitSsaDefinition(SsaParameterInit v) { any() } /** Returned an expression that is assigned to `f`. */ Expr getAssignedValueToField(Field f) { diff --git a/java/ql/lib/semmle/code/java/frameworks/InputStream.qll b/java/ql/lib/semmle/code/java/frameworks/InputStream.qll index f6097e8c449..979e1587244 100644 --- a/java/ql/lib/semmle/code/java/frameworks/InputStream.qll +++ b/java/ql/lib/semmle/code/java/frameworks/InputStream.qll @@ -57,7 +57,7 @@ private class InputStreamWrapperCapturedLocalStep extends AdditionalTaintStep { | n1.asExpr() = captured.(SsaExplicitUpdate).getDefiningExpr().(VariableAssign).getSource() or - captured.(SsaImplicitInit).isParameterDefinition(n1.asParameter()) + captured.(SsaParameterInit).getParameter() = n1.asParameter() ) } } From 07e635636cc0067e4a0aaf431ceda909b00f81f6 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 7 Nov 2025 09:11:25 +0100 Subject: [PATCH 019/127] Java: Replace getAFirstUse with top-level predicate. --- java/ql/lib/semmle/code/java/dataflow/SSA.qll | 12 +++++++++++- .../code/java/dataflow/internal/ContainerFlow.qll | 2 +- .../code/java/dataflow/internal/DataFlowPrivate.qll | 2 +- .../lib/semmle/code/java/frameworks/InputStream.qll | 2 +- .../semmle/code/java/security/CommandArguments.qll | 4 ++-- .../utils/modelgenerator/internal/CaptureModels.qll | 2 +- java/ql/test/library-tests/ssa/firstUse.ql | 4 ++-- 7 files changed, 19 insertions(+), 9 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/SSA.qll b/java/ql/lib/semmle/code/java/dataflow/SSA.qll index 94f48bf8dc0..e673dae65d6 100644 --- a/java/ql/lib/semmle/code/java/dataflow/SSA.qll +++ b/java/ql/lib/semmle/code/java/dataflow/SSA.qll @@ -140,6 +140,14 @@ class SsaSourceField extends SsaSourceVariable { } } +/** + * Gets an access of the SSA source variable underlying this SSA variable + * that can be reached from this SSA variable without passing through any + * other uses, but potentially through phi nodes and uncertain implicit + * updates. + */ +VarRead ssaGetAFirstUse(SsaDefinition def) { firstUse(def, result) } + /** * An SSA variable. */ @@ -170,6 +178,8 @@ class SsaVariable extends Definition { VarRead getAUse() { result = getAUse(this) } /** + * DEPRECATED: Use `ssaGetAFirstUse(SsaDefinition)` instead. + * * Gets an access of the SSA source variable underlying this SSA variable * that can be reached from this SSA variable without passing through any * other uses, but potentially through phi nodes and uncertain implicit @@ -178,7 +188,7 @@ class SsaVariable extends Definition { * Subsequent uses can be found by following the steps defined by * `adjacentUseUse`. */ - VarRead getAFirstUse() { firstUse(this, result) } + deprecated VarRead getAFirstUse() { firstUse(this, result) } /** Holds if this SSA variable is live at the end of `b`. */ predicate isLiveAtEndOfBlock(BasicBlock b) { ssaDefReachesEndOfBlock(b, this) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/ContainerFlow.qll b/java/ql/lib/semmle/code/java/dataflow/internal/ContainerFlow.qll index 5af24642477..4ddaa398ea4 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/ContainerFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/ContainerFlow.qll @@ -465,7 +465,7 @@ private predicate enhancedForStmtStep(Node node1, Node node2, Type containerType node1.asExpr() = e and containerType = e.getType() and v.getDefiningExpr() = for.getVariable() and - v.getAFirstUse() = node2.asExpr() + ssaGetAFirstUse(v) = node2.asExpr() ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll index 83021f2b7f1..5fa1a845af8 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll @@ -401,7 +401,7 @@ class CastNode extends ExprNode { any(SwitchStmt ss).getExpr(), any(SwitchExpr se).getExpr(), any(InstanceOfExpr ioe).getExpr() ] and - this.asExpr() = upd.getAFirstUse() + this.asExpr() = ssaGetAFirstUse(upd) ) } } diff --git a/java/ql/lib/semmle/code/java/frameworks/InputStream.qll b/java/ql/lib/semmle/code/java/frameworks/InputStream.qll index 979e1587244..770f92583b4 100644 --- a/java/ql/lib/semmle/code/java/frameworks/InputStream.qll +++ b/java/ql/lib/semmle/code/java/frameworks/InputStream.qll @@ -45,7 +45,7 @@ private class InputStreamWrapperCapturedLocalStep extends AdditionalTaintStep { wrapper.getASourceSupertype+() instanceof TypeInputStream and m.getDeclaringType() = wrapper and capturer.captures(captured) and - TaintTracking::localTaint(DataFlow::exprNode(capturer.getAFirstUse()), + TaintTracking::localTaint(DataFlow::exprNode(ssaGetAFirstUse(capturer)), any(DataFlow::PostUpdateNode pun | pun.getPreUpdateNode().asExpr() = m.getParameter(0).getAnAccess() )) and diff --git a/java/ql/lib/semmle/code/java/security/CommandArguments.qll b/java/ql/lib/semmle/code/java/security/CommandArguments.qll index f161a83d17b..cb5e3ca6563 100644 --- a/java/ql/lib/semmle/code/java/security/CommandArguments.qll +++ b/java/ql/lib/semmle/code/java/security/CommandArguments.qll @@ -71,7 +71,7 @@ private class CommandArgumentList extends SsaExplicitUpdate { /** Gets a use of the variable for which the list could be empty. */ private VarRead getAUseBeforeFirstAdd() { - result = this.getAFirstUse() + result = ssaGetAFirstUse(this) or exists(VarRead mid | mid = this.getAUseBeforeFirstAdd() and @@ -150,7 +150,7 @@ private class CommandArgumentArray extends SsaExplicitUpdate { private class CommandArgArrayImmutableFirst extends CommandArgumentArray { CommandArgArrayImmutableFirst() { (exists(this.getAWrite(0)) or exists(firstElementOf(this.getDefiningExpr()))) and - forall(VarRead use | exists(this.getAWrite(0, use)) | use = this.getAFirstUse()) + forall(VarRead use | exists(this.getAWrite(0, use)) | use = ssaGetAFirstUse(this)) } /** Gets the first element of this array. */ diff --git a/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll b/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll index aa68a433291..71b0eac57e1 100644 --- a/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll +++ b/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll @@ -279,7 +279,7 @@ private module SinkModelGeneratorInput implements SinkModelGeneratorInputSig { // exclude variable capture jump steps exists(Ssa::SsaImplicitInit closure | closure.captures(_) and - node.asExpr() = closure.getAFirstUse() + node.asExpr() = Ssa::ssaGetAFirstUse(closure) ) } diff --git a/java/ql/test/library-tests/ssa/firstUse.ql b/java/ql/test/library-tests/ssa/firstUse.ql index bbb5c2d3e38..d3857074435 100644 --- a/java/ql/test/library-tests/ssa/firstUse.ql +++ b/java/ql/test/library-tests/ssa/firstUse.ql @@ -1,6 +1,6 @@ import java import semmle.code.java.dataflow.SSA -from SsaVariable ssa, VarRead use -where use = ssa.getAFirstUse() +from SsaDefinition ssa, VarRead use +where use = ssaGetAFirstUse(ssa) select ssa, use From 483b2d89a7b5717cf82a60c44016369465e82705 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 7 Nov 2025 09:16:41 +0100 Subject: [PATCH 020/127] Java: Replace uses of SsaExplicitUpdate. --- .../lib/semmle/code/java/dataflow/DefUse.qll | 2 +- .../semmle/code/java/dataflow/NullGuards.qll | 4 ++-- .../semmle/code/java/dataflow/Nullness.qll | 8 +++---- .../code/java/dataflow/RangeAnalysis.qll | 2 +- .../semmle/code/java/dataflow/RangeUtils.qll | 24 +++++++++---------- java/ql/lib/semmle/code/java/dataflow/SSA.qll | 8 +++++-- .../java/dataflow/internal/ContainerFlow.qll | 2 +- .../java/dataflow/internal/DataFlowNodes.qll | 2 +- .../dataflow/internal/DataFlowPrivate.qll | 11 ++++----- .../code/java/dataflow/internal/SsaImpl.qll | 4 +--- .../rangeanalysis/SignAnalysisSpecific.qll | 4 ++-- .../code/java/frameworks/InputStream.qll | 2 +- .../code/java/security/CommandArguments.qll | 18 +++++++------- .../Comparison/UselessComparisonTest.ql | 6 ++--- .../Concurrency/DoubleCheckedLocking.qll | 6 ++--- .../Likely Bugs/Concurrency/UnreleasedLock.ql | 6 ++--- .../Dead Code/DeadLocals.qll | 2 +- 17 files changed, 57 insertions(+), 54 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/DefUse.qll b/java/ql/lib/semmle/code/java/dataflow/DefUse.qll index ea4df94d6c1..dad54e13e2e 100644 --- a/java/ql/lib/semmle/code/java/dataflow/DefUse.qll +++ b/java/ql/lib/semmle/code/java/dataflow/DefUse.qll @@ -35,7 +35,7 @@ predicate useUsePair(VarRead use1, VarRead use2) { adjacentUseUse+(use1, use2) } */ predicate defUsePair(VariableUpdate def, VarRead use) { exists(SsaVariable v | - v.getAUse() = use and v.getAnUltimateDefinition().(SsaExplicitUpdate).getDefiningExpr() = def + v.getAUse() = use and v.getAnUltimateDefinition().(SsaExplicitWrite).getDefiningExpr() = def ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll b/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll index bf9a166e048..c29f406f21a 100644 --- a/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll +++ b/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll @@ -110,13 +110,13 @@ Expr clearlyNotNullExpr(Expr reason) { /** Holds if `v` is an SSA variable that is provably not `null`. */ predicate clearlyNotNull(SsaVariable v, Expr reason) { exists(Expr src | - src = v.(SsaExplicitUpdate).getDefiningExpr().(VariableAssign).getSource() and + src = v.(SsaExplicitWrite).getValue() and src = clearlyNotNullExpr(reason) ) or exists(CatchClause cc, LocalVariableDeclExpr decl | decl = cc.getVariable() and - decl = v.(SsaExplicitUpdate).getDefiningExpr() and + decl = v.(SsaExplicitWrite).getDefiningExpr() and reason = decl ) or diff --git a/java/ql/lib/semmle/code/java/dataflow/Nullness.qll b/java/ql/lib/semmle/code/java/dataflow/Nullness.qll index 7802dc9d280..9e9a75399e0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/Nullness.qll +++ b/java/ql/lib/semmle/code/java/dataflow/Nullness.qll @@ -151,7 +151,7 @@ private predicate varMaybeNull(SsaVariable v, ControlFlowNode node, string msg, not exists(MethodCall ma | ma.getAnArgument().getAChildExpr*() = e) ) and // Don't use a guard as reason if there is a null assignment. - not v.(SsaExplicitUpdate).getDefiningExpr().(VariableAssign).getSource() = nullExpr() + not v.(SsaExplicitWrite).getDefiningExpr().(VariableAssign).getSource() = nullExpr() ) or // A parameter might be null if there is a null argument somewhere. @@ -167,7 +167,7 @@ private predicate varMaybeNull(SsaVariable v, ControlFlowNode node, string msg, or // If the source of a variable is null then the variable may be null. exists(VariableAssign def | - v.(SsaExplicitUpdate).getDefiningExpr() = def and + v.(SsaExplicitWrite).getDefiningExpr() = def and def.getSource() = nullExpr(node.asExpr()) and reason = def and msg = "because of $@ assignment" @@ -185,7 +185,7 @@ private Expr nonEmptyExpr() { v.getSourceVariable().getType() instanceof Array | // ...its definition is non-empty... - v.(SsaExplicitUpdate).getDefiningExpr().(VariableAssign).getSource() = nonEmptyExpr() + v.(SsaExplicitWrite).getValue() = nonEmptyExpr() or // ...or it is guarded by a condition proving its length to be non-zero. exists(ConditionBlock cond, boolean branch, FieldAccess length | @@ -280,7 +280,7 @@ predicate nullDeref(SsaSourceVariable v, VarAccess va, string msg, Expr reason) predicate alwaysNullDeref(SsaSourceVariable v, VarAccess va) { exists(BasicBlock bb, SsaVariable ssa | forall(SsaVariable def | def = ssa.getAnUltimateDefinition() | - def.(SsaExplicitUpdate).getDefiningExpr().(VariableAssign).getSource() = alwaysNullExpr() + def.(SsaExplicitWrite).getValue() = alwaysNullExpr() ) or nullGuardControls(ssa, true, bb) and diff --git a/java/ql/lib/semmle/code/java/dataflow/RangeAnalysis.qll b/java/ql/lib/semmle/code/java/dataflow/RangeAnalysis.qll index f65e15d1c61..95d9e90aaa6 100644 --- a/java/ql/lib/semmle/code/java/dataflow/RangeAnalysis.qll +++ b/java/ql/lib/semmle/code/java/dataflow/RangeAnalysis.qll @@ -252,7 +252,7 @@ module Sem implements Semantic { predicate hasInputFromBlock(SsaVariable inp, BasicBlock bb) { super.hasInputFromBlock(inp, bb) } } - class SsaExplicitUpdate extends SsaVariable instanceof SSA::SsaExplicitUpdate { + class SsaExplicitUpdate extends SsaVariable instanceof SSA::SsaExplicitWrite { Expr getDefiningExpr() { result = super.getDefiningExpr() } } diff --git a/java/ql/lib/semmle/code/java/dataflow/RangeUtils.qll b/java/ql/lib/semmle/code/java/dataflow/RangeUtils.qll index efd7bcd8088..2a0f840eca6 100644 --- a/java/ql/lib/semmle/code/java/dataflow/RangeUtils.qll +++ b/java/ql/lib/semmle/code/java/dataflow/RangeUtils.qll @@ -34,13 +34,13 @@ predicate eqFlowCond = U::eqFlowCond/5; * have non-`SsaPhiNode` results. */ private predicate nonNullSsaFwdStep(SsaVariable v, SsaVariable phi) { - exists(SsaExplicitUpdate vnull, SsaPhiNode phi0 | phi0 = phi | + exists(SsaExplicitWrite vnull, SsaPhiNode phi0 | phi0 = phi | 2 = strictcount(phi0.getAPhiInput()) and vnull = phi0.getAPhiInput() and v = phi0.getAPhiInput() and not backEdge(phi0, v, _) and vnull != v and - vnull.getDefiningExpr().(VariableAssign).getSource() instanceof NullLiteral + vnull.getValue() instanceof NullLiteral ) } @@ -58,7 +58,7 @@ private predicate nonNullDefStep(Expr e1, Expr e2) { */ ArrayCreationExpr getArrayDef(SsaVariable v) { exists(Expr src | - v.(SsaExplicitUpdate).getDefiningExpr().(VariableAssign).getSource() = src and + v.(SsaExplicitWrite).getValue() = src and nonNullDefStep*(result, src) ) or @@ -86,9 +86,9 @@ pragma[nomagic] private predicate constantIntegerExpr(Expr e, int val) { e.(CompileTimeConstantExpr).getIntValue() = val or - exists(SsaExplicitUpdate v, Expr src | - e = v.getAUse() and - src = v.getDefiningExpr().(VariableAssign).getSource() and + exists(SsaExplicitWrite v, Expr src | + e = v.getARead() and + src = v.getValue() and constantIntegerExpr(src, val) ) or @@ -112,9 +112,9 @@ pragma[nomagic] private predicate constantBooleanExpr(Expr e, boolean val) { e.(CompileTimeConstantExpr).getBooleanValue() = val or - exists(SsaExplicitUpdate v, Expr src | - e = v.getAUse() and - src = v.getDefiningExpr().(VariableAssign).getSource() and + exists(SsaExplicitWrite v, Expr src | + e = v.getARead() and + src = v.getValue() and constantBooleanExpr(src, val) ) or @@ -125,9 +125,9 @@ pragma[nomagic] private predicate constantStringExpr(Expr e, string val) { e.(CompileTimeConstantExpr).getStringValue() = val or - exists(SsaExplicitUpdate v, Expr src | - e = v.getAUse() and - src = v.getDefiningExpr().(VariableAssign).getSource() and + exists(SsaExplicitWrite v, Expr src | + e = v.getARead() and + src = v.getValue() and constantStringExpr(src, val) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/SSA.qll b/java/ql/lib/semmle/code/java/dataflow/SSA.qll index e673dae65d6..8ef43ff3c34 100644 --- a/java/ql/lib/semmle/code/java/dataflow/SSA.qll +++ b/java/ql/lib/semmle/code/java/dataflow/SSA.qll @@ -215,7 +215,11 @@ class SsaUpdate extends SsaVariable instanceof WriteDefinition { SsaUpdate() { not this instanceof SsaImplicitInit } } -/** An SSA variable that is defined by a `VariableUpdate`. */ +/** + * DEPRECATED: Use `SsaExplicitWrite` instead. + * + * An SSA variable that is defined by a `VariableUpdate`. + */ class SsaExplicitUpdate extends SsaUpdate { private VariableUpdate upd; @@ -368,7 +372,7 @@ private class RefTypeCastingExpr extends CastingExpr { Expr sameValue(SsaVariable v, VarAccess va) { result = v.getAUse() and result = va or - result.(AssignExpr).getDest() = va and result = v.(SsaExplicitUpdate).getDefiningExpr() + result.(AssignExpr).getDest() = va and result = v.(SsaExplicitWrite).getDefiningExpr() or result.(AssignExpr).getSource() = sameValue(v, va) or diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/ContainerFlow.qll b/java/ql/lib/semmle/code/java/dataflow/internal/ContainerFlow.qll index 4ddaa398ea4..1e6156aaa6f 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/ContainerFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/ContainerFlow.qll @@ -460,7 +460,7 @@ predicate arrayStoreStep(Node node1, Node node2) { } private predicate enhancedForStmtStep(Node node1, Node node2, Type containerType) { - exists(EnhancedForStmt for, Expr e, SsaExplicitUpdate v | + exists(EnhancedForStmt for, Expr e, SsaExplicitWrite v | for.getExpr() = e and node1.asExpr() = e and containerType = e.getType() and diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll index 5dfa83f6f7e..9786286389c 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll @@ -29,7 +29,7 @@ private predicate deadcode(Expr e) { module SsaFlow { module Impl = SsaImpl::DataFlowIntegration; - private predicate ssaDefAssigns(SsaExplicitUpdate def, Expr value) { + private predicate ssaDefAssigns(SsaExplicitWrite def, Expr value) { exists(VariableUpdate upd | upd = def.getDefiningExpr() | value = upd.(VariableAssign).getSource() or value = upd.(AssignOp) or diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll index 5fa1a845af8..178a5560d04 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll @@ -64,8 +64,7 @@ private predicate closureFlowStep(Expr e1, Expr e2) { or exists(SsaVariable v | v.getAUse() = e2 and - v.getAnUltimateDefinition().(SsaExplicitUpdate).getDefiningExpr().(VariableAssign).getSource() = - e1 + v.getAnUltimateDefinition().(SsaExplicitWrite).getValue() = e1 ) } @@ -395,7 +394,7 @@ class CastNode extends ExprNode { CastNode() { this.getExpr() instanceof CastingExpr or - exists(SsaExplicitUpdate upd | + exists(SsaExplicitWrite upd | upd.getDefiningExpr().(VariableAssign).getSource() = [ any(SwitchStmt ss).getExpr(), any(SwitchExpr se).getExpr(), @@ -531,9 +530,9 @@ class NodeRegion instanceof BasicBlock { private predicate constantBooleanExpr(Expr e, boolean val) { e.(CompileTimeConstantExpr).getBooleanValue() = val or - exists(SsaExplicitUpdate v, Expr src | - e = v.getAUse() and - src = v.getDefiningExpr().(VariableAssign).getSource() and + exists(SsaExplicitWrite v, Expr src | + e = v.getARead() and + src = v.getValue() and constantBooleanExpr(src, val) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll index 438c3f336d7..9e2853cdefa 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll @@ -668,9 +668,7 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu Expr getARead(Definition def) { result = getAUse(def) } - predicate ssaDefHasSource(WriteDefinition def) { - def instanceof SsaExplicitUpdate or def instanceof SsaParameterInit - } + predicate ssaDefHasSource(WriteDefinition def) { def instanceof SsaExplicitWrite } predicate allowFlowIntoUncertainDef(UncertainWriteDefinition def) { def instanceof SsaUncertainImplicitUpdate diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll index 85fbde65684..48222b40227 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll @@ -240,8 +240,8 @@ private module Impl { } /** Returns the underlying variable update of the explicit SSA variable `v`. */ - VariableUpdate getExplicitSsaAssignment(SsaVariable v) { - result = v.(SsaExplicitUpdate).getDefiningExpr() + VariableUpdate getExplicitSsaAssignment(SsaDefinition v) { + result = v.(SsaExplicitWrite).getDefiningExpr() } /** Returns the assignment of the variable update `def`. */ diff --git a/java/ql/lib/semmle/code/java/frameworks/InputStream.qll b/java/ql/lib/semmle/code/java/frameworks/InputStream.qll index 770f92583b4..3af44bbb546 100644 --- a/java/ql/lib/semmle/code/java/frameworks/InputStream.qll +++ b/java/ql/lib/semmle/code/java/frameworks/InputStream.qll @@ -55,7 +55,7 @@ private class InputStreamWrapperCapturedLocalStep extends AdditionalTaintStep { .getASourceSupertype*() .getSourceDeclaration() = wrapper | - n1.asExpr() = captured.(SsaExplicitUpdate).getDefiningExpr().(VariableAssign).getSource() + n1.asExpr() = captured.(SsaExplicitWrite).getDefiningExpr().(VariableAssign).getSource() or captured.(SsaParameterInit).getParameter() = n1.asParameter() ) diff --git a/java/ql/lib/semmle/code/java/security/CommandArguments.qll b/java/ql/lib/semmle/code/java/security/CommandArguments.qll index cb5e3ca6563..cd2c9cf5428 100644 --- a/java/ql/lib/semmle/code/java/security/CommandArguments.qll +++ b/java/ql/lib/semmle/code/java/security/CommandArguments.qll @@ -40,7 +40,7 @@ private predicate isShell(Expr ex) { or exists(SsaVariable ssa | ex = ssa.getAUse() and - isShell(ssa.getAnUltimateDefinition().(SsaExplicitUpdate).getDefiningExpr()) + isShell(ssa.getAnUltimateDefinition().(SsaExplicitWrite).getDefiningExpr()) ) or isShell(ex.(Assignment).getRhs()) @@ -61,10 +61,10 @@ private class ListOfStringType extends CollectionType { /** * A variable that could be used as a list of arguments to a command. */ -private class CommandArgumentList extends SsaExplicitUpdate { +private class CommandArgumentList extends SsaExplicitWrite { CommandArgumentList() { this.getSourceVariable().getType() instanceof ListOfStringType and - forex(CollectionMutation ma | ma.getQualifier() = this.getAUse() | + forex(CollectionMutation ma | ma.getQualifier() = this.getARead() | ma.getMethod().getName().matches("add%") ) } @@ -87,7 +87,7 @@ private class CommandArgumentList extends SsaExplicitUpdate { * Gets an addition to this list, i.e. a call to an `add` or `addAll` method. */ MethodCall getAnAdd() { - result.getQualifier() = this.getAUse() and + result.getQualifier() = this.getARead() and result.getMethod().getName().matches("add%") } @@ -121,10 +121,10 @@ private predicate arrayVarWrite(ArrayAccess acc) { exists(Assignment a | a.getDe /** * A variable that could be an array of arguments to a command. */ -private class CommandArgumentArray extends SsaExplicitUpdate { +private class CommandArgumentArray extends SsaExplicitWrite { CommandArgumentArray() { this.getSourceVariable().getType() instanceof ArrayOfStringType and - forall(ArrayAccess a | a.getArray() = this.getAUse() and arrayVarWrite(a) | + forall(ArrayAccess a | a.getArray() = this.getARead() and arrayVarWrite(a) | a.getIndexExpr() instanceof CompileTimeConstantExpr ) } @@ -133,7 +133,7 @@ private class CommandArgumentArray extends SsaExplicitUpdate { Expr getAWrite(int index, VarRead use) { exists(Assignment a, ArrayAccess acc | acc.getArray() = use and - use = this.getAUse() and + use = this.getARead() and index = acc.getIndexExpr().(CompileTimeConstantExpr).getIntValue() and acc = a.getDest() and result = a.getRhs() @@ -173,7 +173,9 @@ private Expr firstElementOf(Expr arr) { or result = firstElementOf(arr.(LocalVariableDeclExpr).getInit()) or - exists(CommandArgArrayImmutableFirst caa | arr = caa.getAUse() | result = caa.getFirstElement()) + exists(CommandArgArrayImmutableFirst caa | arr = caa.getARead() | + result = caa.getFirstElement() + ) or exists(MethodCall ma, Method m | arr = ma and diff --git a/java/ql/src/Likely Bugs/Comparison/UselessComparisonTest.ql b/java/ql/src/Likely Bugs/Comparison/UselessComparisonTest.ql index e60c65953d1..32bd1ef20bd 100644 --- a/java/ql/src/Likely Bugs/Comparison/UselessComparisonTest.ql +++ b/java/ql/src/Likely Bugs/Comparison/UselessComparisonTest.ql @@ -127,7 +127,7 @@ Expr overFlowCand() { c.getIntValue() >= 0 ) or - exists(SsaExplicitUpdate x | result = x.getAUse() and x.getDefiningExpr() = overFlowCand()) + exists(SsaExplicitWrite x | result = x.getARead() and x.getDefiningExpr() = overFlowCand()) or result.(AssignExpr).getRhs() = overFlowCand() or @@ -161,8 +161,8 @@ Expr increaseOrDecreaseOfVar(SsaVariable v) { positiveOrNegative(sub.getRightOperand()) ) or - exists(SsaExplicitUpdate x | - result = x.getAUse() and x.getDefiningExpr() = increaseOrDecreaseOfVar(v) + exists(SsaExplicitWrite x | + result = x.getARead() and x.getDefiningExpr() = increaseOrDecreaseOfVar(v) ) or result.(AssignExpr).getRhs() = increaseOrDecreaseOfVar(v) diff --git a/java/ql/src/Likely Bugs/Concurrency/DoubleCheckedLocking.qll b/java/ql/src/Likely Bugs/Concurrency/DoubleCheckedLocking.qll index ac279049ed1..19c2dbc783e 100644 --- a/java/ql/src/Likely Bugs/Concurrency/DoubleCheckedLocking.qll +++ b/java/ql/src/Likely Bugs/Concurrency/DoubleCheckedLocking.qll @@ -8,9 +8,9 @@ import semmle.code.java.dataflow.SSA private Expr getAFieldRead(Field f) { result = f.getAnAccess() or - exists(SsaExplicitUpdate v | v.getSourceVariable().getVariable() instanceof LocalScopeVariable | - result = v.getAUse() and - v.getDefiningExpr().(VariableAssign).getSource() = getAFieldRead(f) + exists(SsaExplicitWrite v | v.getSourceVariable().getVariable() instanceof LocalScopeVariable | + result = v.getARead() and + v.getValue() = getAFieldRead(f) ) or result.(AssignExpr).getSource() = getAFieldRead(f) diff --git a/java/ql/src/Likely Bugs/Concurrency/UnreleasedLock.ql b/java/ql/src/Likely Bugs/Concurrency/UnreleasedLock.ql index c7d33eff4a9..4a4be748a28 100644 --- a/java/ql/src/Likely Bugs/Concurrency/UnreleasedLock.ql +++ b/java/ql/src/Likely Bugs/Concurrency/UnreleasedLock.ql @@ -52,10 +52,10 @@ predicate failedLock(LockType t, BasicBlock lockblock, BasicBlock exblock) { ( lock.asExpr() = t.getLockAccess() or - exists(SsaExplicitUpdate lockbool | + exists(SsaExplicitWrite lockbool | // Using the value of `t.getLockAccess()` ensures that it is a `tryLock` call. - lock.asExpr() = lockbool.getAUse() and - lockbool.getDefiningExpr().(VariableAssign).getSource() = t.getLockAccess() + lock.asExpr() = lockbool.getARead() and + lockbool.getValue() = t.getLockAccess() ) ) and ( diff --git a/java/ql/src/Violations of Best Practice/Dead Code/DeadLocals.qll b/java/ql/src/Violations of Best Practice/Dead Code/DeadLocals.qll index 5afab52c37e..f0b1ab85c60 100644 --- a/java/ql/src/Violations of Best Practice/Dead Code/DeadLocals.qll +++ b/java/ql/src/Violations of Best Practice/Dead Code/DeadLocals.qll @@ -14,7 +14,7 @@ private predicate emptyDecl(LocalVariableDeclExpr decl) { /** A dead variable update. */ predicate deadLocal(VariableUpdate upd) { upd.getDestVar() instanceof LocalScopeVariable and - not exists(SsaExplicitUpdate ssa | upd = ssa.getDefiningExpr()) and + not exists(SsaExplicitWrite ssa | upd = ssa.getDefiningExpr()) and not emptyDecl(upd) and not readImplicitly(upd, _) } From 06df5c0bd1f555afca43252929b585b95b114913 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 7 Nov 2025 10:14:22 +0100 Subject: [PATCH 021/127] Java: Introduce SsaCapturedDefinition and replace uses of getAnUltimateDefinition. --- .../lib/semmle/code/java/dataflow/DefUse.qll | 14 +++++--- .../semmle/code/java/dataflow/NullGuards.qll | 4 +-- .../semmle/code/java/dataflow/Nullness.qll | 4 +-- java/ql/lib/semmle/code/java/dataflow/SSA.qll | 34 +++++++++++++++++-- .../dataflow/internal/DataFlowPrivate.qll | 7 ++-- .../java/dataflow/internal/DataFlowUtil.qll | 4 ++- .../code/java/frameworks/InputStream.qll | 4 ++- .../code/java/security/CommandArguments.qll | 10 ++++-- .../modelgenerator/internal/CaptureModels.qll | 5 +-- java/ql/test/library-tests/ssa/captures.ql | 2 +- 10 files changed, 64 insertions(+), 24 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/DefUse.qll b/java/ql/lib/semmle/code/java/dataflow/DefUse.qll index dad54e13e2e..b0ce62f935c 100644 --- a/java/ql/lib/semmle/code/java/dataflow/DefUse.qll +++ b/java/ql/lib/semmle/code/java/dataflow/DefUse.qll @@ -34,8 +34,12 @@ predicate useUsePair(VarRead use1, VarRead use2) { adjacentUseUse+(use1, use2) } * Other paths may also exist, so the SSA variables in `def` and `use` can be different. */ predicate defUsePair(VariableUpdate def, VarRead use) { - exists(SsaVariable v | - v.getAUse() = use and v.getAnUltimateDefinition().(SsaExplicitWrite).getDefiningExpr() = def + exists(SsaDefinition v, SsaExplicitWrite write | + v.getARead() = use and write.getDefiningExpr() = def + | + v.getAnUltimateDefinition() = write + or + v.(SsaCapturedDefinition).getAnUltimateCapturedDefinition() = write ) } @@ -46,7 +50,9 @@ predicate defUsePair(VariableUpdate def, VarRead use) { * Other paths may also exist, so the SSA variables can be different. */ predicate parameterDefUsePair(Parameter p, VarRead use) { - exists(SsaVariable v | - v.getAUse() = use and v.getAnUltimateDefinition().(SsaParameterInit).getParameter() = p + exists(SsaDefinition v, SsaParameterInit init | v.getARead() = use and init.getParameter() = p | + v.getAnUltimateDefinition() = init + or + v.(SsaCapturedDefinition).getAnUltimateCapturedDefinition() = init ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll b/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll index c29f406f21a..8bf95a6a40c 100644 --- a/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll +++ b/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll @@ -120,8 +120,8 @@ predicate clearlyNotNull(SsaVariable v, Expr reason) { reason = decl ) or - exists(SsaVariable captured | - v.(SsaImplicitInit).captures(captured) and + exists(SsaDefinition captured | + v.(SsaCapturedDefinition).captures(captured) and clearlyNotNull(captured, reason) ) or diff --git a/java/ql/lib/semmle/code/java/dataflow/Nullness.qll b/java/ql/lib/semmle/code/java/dataflow/Nullness.qll index 9e9a75399e0..0350f532e1e 100644 --- a/java/ql/lib/semmle/code/java/dataflow/Nullness.qll +++ b/java/ql/lib/semmle/code/java/dataflow/Nullness.qll @@ -278,8 +278,8 @@ predicate nullDeref(SsaSourceVariable v, VarAccess va, string msg, Expr reason) * A dereference of a variable that is always `null`. */ predicate alwaysNullDeref(SsaSourceVariable v, VarAccess va) { - exists(BasicBlock bb, SsaVariable ssa | - forall(SsaVariable def | def = ssa.getAnUltimateDefinition() | + exists(BasicBlock bb, SsaDefinition ssa | + forall(SsaDefinition def | def = ssa.getAnUltimateDefinition() | def.(SsaExplicitWrite).getValue() = alwaysNullExpr() ) or diff --git a/java/ql/lib/semmle/code/java/dataflow/SSA.qll b/java/ql/lib/semmle/code/java/dataflow/SSA.qll index 8ef43ff3c34..58b5ea780f2 100644 --- a/java/ql/lib/semmle/code/java/dataflow/SSA.qll +++ b/java/ql/lib/semmle/code/java/dataflow/SSA.qll @@ -140,6 +140,25 @@ class SsaSourceField extends SsaSourceVariable { } } +/** An SSA definition in a closure that captures a variable. */ +class SsaCapturedDefinition extends SsaImplicitEntryDefinition { + SsaCapturedDefinition() { captures(this, _) } + + override string toString() { result = "SSA capture def(" + this.getSourceVariable() + ")" } + + /** Holds if this definition captures the value of `capturedvar`. */ + predicate captures(SsaDefinition capturedvar) { captures(this, capturedvar) } + + /** + * Gets a definition that ultimately defines the captured variable and is not itself a phi node. + */ + SsaDefinition getAnUltimateCapturedDefinition() { + exists(SsaDefinition capturedvar | + captures(this, capturedvar) and result = capturedvar.getAnUltimateDefinition() + ) + } +} + /** * Gets an access of the SSA source variable underlying this SSA variable * that can be reached from this SSA variable without passing through any @@ -194,18 +213,25 @@ class SsaVariable extends Definition { predicate isLiveAtEndOfBlock(BasicBlock b) { ssaDefReachesEndOfBlock(b, this) } /** + * DEPRECATED. + * * Gets an SSA variable whose value can flow to this one in one step. This * includes inputs to phi nodes, the prior definition of uncertain updates, * and the captured ssa variable for a closure variable. */ - SsaVariable getAPhiInputOrPriorDef() { + deprecated SsaVariable getAPhiInputOrPriorDef() { result = this.(SsaPhiNode).getAPhiInput() or result = this.(SsaUncertainImplicitUpdate).getPriorDef() or this.(SsaImplicitInit).captures(result) } - /** Gets a definition that ultimately defines this variable and is not itself a phi node. */ - SsaVariable getAnUltimateDefinition() { + /** + * DEPRECATED: Use `SsaCapturedDefinition::getAnUltimateCapturedDefinition()` + * and/or `SsaDefinition::getAnUltimateDefinition()` instead. + * + * Gets a definition that ultimately defines this variable and is not itself a phi node. + */ + deprecated SsaVariable getAnUltimateDefinition() { result = this.getAPhiInputOrPriorDef*() and not result instanceof SsaPhiNode } } @@ -319,6 +345,8 @@ class SsaUncertainImplicitUpdate extends SsaImplicitUpdate { } /** + * DEPRECATED: Use `SsaParameterInit`, `SsaImplicitEntryDefinition`, or `SsaCapturedDefinition` instead. + * * An SSA variable that is defined by its initial value in the callable. This * includes initial values of parameters, fields, and closure variables. */ diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll index 178a5560d04..3dcdc188761 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll @@ -62,9 +62,10 @@ private predicate fieldStep(Node node1, Node node2) { private predicate closureFlowStep(Expr e1, Expr e2) { simpleAstFlowStep(e1, e2) or - exists(SsaVariable v | - v.getAUse() = e2 and - v.getAnUltimateDefinition().(SsaExplicitWrite).getValue() = e1 + exists(SsaDefinition v, SsaExplicitWrite def | v.getARead() = e2 and def.getValue() = e1 | + v.getAnUltimateDefinition() = def + or + v.(SsaCapturedDefinition).getAnUltimateCapturedDefinition() = def ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll index 23e9f680c97..32307de49ce 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll @@ -101,7 +101,9 @@ predicate localExprFlow(Expr e1, Expr e2) { localFlow(exprNode(e1), exprNode(e2) predicate hasNonlocalValue(FieldRead fr) { not exists(SsaVariable v | v.getAUse() = fr) or - exists(SsaVariable v, SsaVariable def | v.getAUse() = fr and def = v.getAnUltimateDefinition() | + exists(SsaDefinition v, SsaDefinition def | + v.getARead() = fr and def = v.getAnUltimateDefinition() + | def instanceof SsaImplicitInit or def instanceof SsaImplicitUpdate ) diff --git a/java/ql/lib/semmle/code/java/frameworks/InputStream.qll b/java/ql/lib/semmle/code/java/frameworks/InputStream.qll index 3af44bbb546..782d46df89d 100644 --- a/java/ql/lib/semmle/code/java/frameworks/InputStream.qll +++ b/java/ql/lib/semmle/code/java/frameworks/InputStream.qll @@ -41,7 +41,9 @@ private class InputStreamWrapperCapturedJumpStep extends AdditionalTaintStep { */ private class InputStreamWrapperCapturedLocalStep extends AdditionalTaintStep { override predicate step(DataFlow::Node n1, DataFlow::Node n2) { - exists(InputStreamRead m, NestedClass wrapper, SsaVariable captured, SsaImplicitInit capturer | + exists( + InputStreamRead m, NestedClass wrapper, SsaDefinition captured, SsaCapturedDefinition capturer + | wrapper.getASourceSupertype+() instanceof TypeInputStream and m.getDeclaringType() = wrapper and capturer.captures(captured) and diff --git a/java/ql/lib/semmle/code/java/security/CommandArguments.qll b/java/ql/lib/semmle/code/java/security/CommandArguments.qll index cd2c9cf5428..1ac42192e04 100644 --- a/java/ql/lib/semmle/code/java/security/CommandArguments.qll +++ b/java/ql/lib/semmle/code/java/security/CommandArguments.qll @@ -38,9 +38,13 @@ private predicate isShell(Expr ex) { cmd.regexpMatch(".*(sh|javac?|python[23]?|osascript|cmd)(\\.exe)?$") ) or - exists(SsaVariable ssa | - ex = ssa.getAUse() and - isShell(ssa.getAnUltimateDefinition().(SsaExplicitWrite).getDefiningExpr()) + exists(SsaDefinition ssa, SsaExplicitWrite def | + ex = ssa.getARead() and + isShell(def.getDefiningExpr()) + | + ssa.getAnUltimateDefinition() = def + or + ssa.(SsaCapturedDefinition).getAnUltimateCapturedDefinition() = def ) or isShell(ex.(Assignment).getRhs()) diff --git a/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll b/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll index 71b0eac57e1..b86a4c54246 100644 --- a/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll +++ b/java/ql/src/utils/modelgenerator/internal/CaptureModels.qll @@ -277,10 +277,7 @@ private module SinkModelGeneratorInput implements SinkModelGeneratorInputSig { predicate sinkModelSanitizer(DataFlow::Node node) { // exclude variable capture jump steps - exists(Ssa::SsaImplicitInit closure | - closure.captures(_) and - node.asExpr() = Ssa::ssaGetAFirstUse(closure) - ) + exists(Ssa::SsaCapturedDefinition closure | node.asExpr() = Ssa::ssaGetAFirstUse(closure)) } predicate apiSource(DataFlow::Node source) { diff --git a/java/ql/test/library-tests/ssa/captures.ql b/java/ql/test/library-tests/ssa/captures.ql index ae89b91c43a..1b621759866 100644 --- a/java/ql/test/library-tests/ssa/captures.ql +++ b/java/ql/test/library-tests/ssa/captures.ql @@ -1,6 +1,6 @@ import java import semmle.code.java.dataflow.SSA -from SsaImplicitInit closure, SsaVariable captured +from SsaCapturedDefinition closure, SsaDefinition captured where closure.captures(captured) select closure, captured From 3e43c53b9d6cb54869236230e373131d1c1e374f Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 7 Nov 2025 10:23:36 +0100 Subject: [PATCH 022/127] Java: Update some qldoc deprecation notices. --- java/ql/lib/semmle/code/java/dataflow/SSA.qll | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/SSA.qll b/java/ql/lib/semmle/code/java/dataflow/SSA.qll index 58b5ea780f2..f99c7c1590a 100644 --- a/java/ql/lib/semmle/code/java/dataflow/SSA.qll +++ b/java/ql/lib/semmle/code/java/dataflow/SSA.qll @@ -5,10 +5,8 @@ * `ControlFlowNode` at which it is defined. Each SSA variable is defined * either by a phi node, an implicit initial value (for parameters and fields), * an explicit update, or an implicit update (for fields). - * An implicit update occurs either at a `Call` that might modify a field, at - * another update that can update the qualifier of a field, or at a `FieldRead` - * of the field in case the field is not amenable to a non-trivial SSA - * representation. + * An implicit update occurs either at a `Call` that might modify a field, or + * at another update that can update the qualifier of a field. */ overlay[local?] module; @@ -168,13 +166,19 @@ class SsaCapturedDefinition extends SsaImplicitEntryDefinition { VarRead ssaGetAFirstUse(SsaDefinition def) { firstUse(def, result) } /** + * DEPRECATED: use `SsaDefinition` instead. + * * An SSA variable. */ class SsaVariable extends Definition { /** Gets the SSA source variable underlying this SSA variable. */ SsaSourceVariable getSourceVariable() { result = super.getSourceVariable() } - /** Gets the `ControlFlowNode` at which this SSA variable is defined. */ + /** + * DEPRECATED: Use `getControlFlowNode()` instead. + * + * Gets the `ControlFlowNode` at which this SSA variable is defined. + */ pragma[nomagic] ControlFlowNode getCfgNode() { exists(BasicBlock bb, int i | @@ -193,7 +197,11 @@ class SsaVariable extends Definition { /** Gets the `BasicBlock` in which this SSA variable is defined. */ BasicBlock getBasicBlock() { result = super.getBasicBlock() } - /** Gets an access of this SSA variable. */ + /** + * DEPRECATED: Use `getARead()` instead. + * + * Gets an access of this SSA variable. + */ VarRead getAUse() { result = getAUse(this) } /** @@ -236,7 +244,11 @@ class SsaVariable extends Definition { } } -/** An SSA variable that either explicitly or implicitly updates the variable. */ +/** + * DEPRECATED: use `SsaWriteDefinition` instead. + * + * An SSA variable that either explicitly or implicitly updates the variable. + */ class SsaUpdate extends SsaVariable instanceof WriteDefinition { SsaUpdate() { not this instanceof SsaImplicitInit } } From 35caede859ba7d8b51a5259ef8a85ec96d72b54e Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 7 Nov 2025 10:32:36 +0100 Subject: [PATCH 023/127] Java: Replace SsaPhiNode with SsaPhiDefinition. --- .../lib/semmle/code/java/dataflow/Nullness.qll | 2 +- .../semmle/code/java/dataflow/RangeAnalysis.qll | 2 +- .../lib/semmle/code/java/dataflow/RangeUtils.qll | 12 ++++++------ java/ql/lib/semmle/code/java/dataflow/SSA.qll | 16 ++++++++++++---- .../rangeanalysis/ModulusAnalysisSpecific.qll | 2 +- .../rangeanalysis/SignAnalysisSpecific.qll | 2 +- .../rangeanalysis/SsaReadPositionSpecific.qll | 2 +- java/ql/test/library-tests/ssa/ssaPhi.ql | 6 +++--- 8 files changed, 26 insertions(+), 18 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/Nullness.qll b/java/ql/lib/semmle/code/java/dataflow/Nullness.qll index 0350f532e1e..29ba9dbe0a3 100644 --- a/java/ql/lib/semmle/code/java/dataflow/Nullness.qll +++ b/java/ql/lib/semmle/code/java/dataflow/Nullness.qll @@ -142,7 +142,7 @@ private predicate varMaybeNull(SsaVariable v, ControlFlowNode node, string msg, msg = "as suggested by $@ null guard" and guardSuggestsVarMaybeNull(e, v) and node = v.getCfgNode() and - not v instanceof SsaPhiNode and + not v instanceof SsaPhiDefinition and not clearlyNotNull(v) and // Comparisons in finally blocks are excluded since missing exception edges in the CFG could otherwise yield FPs. not exists(TryStmt try | try.getFinally() = e.getEnclosingStmt().getEnclosingStmt*()) and diff --git a/java/ql/lib/semmle/code/java/dataflow/RangeAnalysis.qll b/java/ql/lib/semmle/code/java/dataflow/RangeAnalysis.qll index 95d9e90aaa6..72ce0e1947e 100644 --- a/java/ql/lib/semmle/code/java/dataflow/RangeAnalysis.qll +++ b/java/ql/lib/semmle/code/java/dataflow/RangeAnalysis.qll @@ -248,7 +248,7 @@ module Sem implements Semantic { Expr getAUse() { result = super.getAUse() } } - class SsaPhiNode extends SsaVariable instanceof SSA::SsaPhiNode { + class SsaPhiNode extends SsaVariable instanceof SSA::SsaPhiDefinition { predicate hasInputFromBlock(SsaVariable inp, BasicBlock bb) { super.hasInputFromBlock(inp, bb) } } diff --git a/java/ql/lib/semmle/code/java/dataflow/RangeUtils.qll b/java/ql/lib/semmle/code/java/dataflow/RangeUtils.qll index 2a0f840eca6..ea1ccb424c5 100644 --- a/java/ql/lib/semmle/code/java/dataflow/RangeUtils.qll +++ b/java/ql/lib/semmle/code/java/dataflow/RangeUtils.qll @@ -30,14 +30,14 @@ predicate eqFlowCond = U::eqFlowCond/5; * only other input to `phi` is a `null` value. * * Note that the declared type of `phi` is `SsaVariable` instead of - * `SsaPhiNode` in order for the reflexive case of `nonNullSsaFwdStep*(..)` to - * have non-`SsaPhiNode` results. + * `SsaPhiDefinition` in order for the reflexive case of `nonNullSsaFwdStep*(..)` to + * have non-`SsaPhiDefinition` results. */ private predicate nonNullSsaFwdStep(SsaVariable v, SsaVariable phi) { - exists(SsaExplicitWrite vnull, SsaPhiNode phi0 | phi0 = phi | - 2 = strictcount(phi0.getAPhiInput()) and - vnull = phi0.getAPhiInput() and - v = phi0.getAPhiInput() and + exists(SsaExplicitWrite vnull, SsaPhiDefinition phi0 | phi0 = phi | + 2 = strictcount(phi0.getAnInput()) and + vnull = phi0.getAnInput() and + v = phi0.getAnInput() and not backEdge(phi0, v, _) and vnull != v and vnull.getValue() instanceof NullLiteral diff --git a/java/ql/lib/semmle/code/java/dataflow/SSA.qll b/java/ql/lib/semmle/code/java/dataflow/SSA.qll index f99c7c1590a..520f2a294f4 100644 --- a/java/ql/lib/semmle/code/java/dataflow/SSA.qll +++ b/java/ql/lib/semmle/code/java/dataflow/SSA.qll @@ -381,12 +381,20 @@ class SsaImplicitInit extends SsaVariable instanceof WriteDefinition { } } -/** An SSA phi node. */ -class SsaPhiNode extends SsaVariable instanceof PhiNode { +/** + * DEPRECATED: Use `SsaPhiDefinition` instead. + * + * An SSA phi node. + */ +deprecated class SsaPhiNode extends SsaVariable instanceof PhiNode { override string toString() { result = "SSA phi(" + this.getSourceVariable() + ")" } - /** Gets an input to the phi node defining the SSA variable. */ - SsaVariable getAPhiInput() { this.hasInputFromBlock(result, _) } + /** + * DEPRECATED: Use `getAnInput()` instead. + * + * Gets an input to the phi node defining the SSA variable. + */ + deprecated SsaVariable getAPhiInput() { this.hasInputFromBlock(result, _) } /** Gets an input to the phi node defining the SSA variable. */ SsaVariable getAnInput() { this.hasInputFromBlock(result, _) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/ModulusAnalysisSpecific.qll b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/ModulusAnalysisSpecific.qll index e124b8f7137..bb084b46917 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/ModulusAnalysisSpecific.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/ModulusAnalysisSpecific.qll @@ -13,7 +13,7 @@ module Private { class SsaVariable = Ssa::SsaVariable; - class SsaPhiNode = Ssa::SsaPhiNode; + class SsaPhiNode = Ssa::SsaPhiDefinition; class Expr = J::Expr; diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll index 48222b40227..292dfb9e2fa 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll @@ -19,7 +19,7 @@ module Private { class SsaVariable = Ssa::SsaVariable; - class SsaPhiNode = Ssa::SsaPhiNode; + class SsaPhiNode = Ssa::SsaPhiDefinition; class VarAccess = J::VarAccess; diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SsaReadPositionSpecific.qll b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SsaReadPositionSpecific.qll index dbd7736acde..6bf768da44b 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SsaReadPositionSpecific.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SsaReadPositionSpecific.qll @@ -10,7 +10,7 @@ private import SsaReadPositionCommon class SsaVariable = Ssa::SsaVariable; -class SsaPhiNode = Ssa::SsaPhiNode; +class SsaPhiNode = Ssa::SsaPhiDefinition; class BasicBlock = BB::BasicBlock; diff --git a/java/ql/test/library-tests/ssa/ssaPhi.ql b/java/ql/test/library-tests/ssa/ssaPhi.ql index 8aa0942e90a..c896c26b015 100644 --- a/java/ql/test/library-tests/ssa/ssaPhi.ql +++ b/java/ql/test/library-tests/ssa/ssaPhi.ql @@ -1,6 +1,6 @@ import java import semmle.code.java.dataflow.SSA -from SsaPhiNode ssa, SsaSourceVariable v, SsaVariable phiInput -where ssa.getAPhiInput() = phiInput and ssa.getSourceVariable() = v -select v, ssa.getCfgNode(), phiInput.getCfgNode() +from SsaPhiDefinition ssa, SsaSourceVariable v, SsaDefinition phiInput +where ssa.getAnInput() = phiInput and ssa.getSourceVariable() = v +select v, ssa.getControlFlowNode(), phiInput.getControlFlowNode() From f4b9efcdce2a1479377bbc683031e00cc872966a Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 7 Nov 2025 10:52:38 +0100 Subject: [PATCH 024/127] Java: Replace getAUse with getARead. --- .../lib/semmle/code/java/dataflow/NullGuards.qll | 16 ++++++++-------- .../lib/semmle/code/java/dataflow/Nullness.qll | 14 +++++++------- .../semmle/code/java/dataflow/RangeAnalysis.qll | 4 ++-- .../lib/semmle/code/java/dataflow/RangeUtils.qll | 4 ++-- java/ql/lib/semmle/code/java/dataflow/SSA.qll | 4 ++-- .../code/java/dataflow/internal/DataFlowUtil.qll | 2 +- .../internal/rangeanalysis/BoundSpecific.qll | 4 +++- .../rangeanalysis/ModulusAnalysisSpecific.qll | 4 +++- .../rangeanalysis/SignAnalysisSpecific.qll | 2 +- .../rangeanalysis/SsaReadPositionSpecific.qll | 4 ++-- .../java/security/NumericCastTaintedQuery.qll | 8 ++++---- .../lib/semmle/code/java/security/Validation.qll | 6 +++--- .../Collections/ArrayIndexOutOfBounds.ql | 8 ++++---- .../Comparison/UselessComparisonTest.ql | 16 ++++++++-------- .../Comparison/UselessComparisonTest.qll | 14 +++++++------- .../Likely Typos/ContradictoryTypeChecks.ql | 6 +++--- .../Termination/ConstantLoopCondition.ql | 6 +++--- .../CWE/CWE-470/LoadClassNoSignatureCheck.ql | 6 +++--- java/ql/test/library-tests/ssa-large/countssa.ql | 4 ++-- java/ql/test/library-tests/ssa/ssaUse.ql | 6 +++--- 20 files changed, 71 insertions(+), 67 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll b/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll index 8bf95a6a40c..5928960ea24 100644 --- a/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll +++ b/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll @@ -26,9 +26,9 @@ Expr enumConstEquality(Expr e, boolean polarity, EnumConstant c) { } /** Gets an instanceof expression of `v` with type `type` */ -InstanceOfExpr instanceofExpr(SsaVariable v, RefType type) { +InstanceOfExpr instanceofExpr(SsaDefinition v, RefType type) { result.getCheckedType() = type and - result.getExpr() = v.getAUse() + result.getExpr() = v.getARead() } /** @@ -37,8 +37,8 @@ InstanceOfExpr instanceofExpr(SsaVariable v, RefType type) { * * Note this includes Kotlin's `==` and `!=` operators, which are value-equality tests. */ -EqualityTest varEqualityTestExpr(SsaVariable v1, SsaVariable v2, boolean isEqualExpr) { - result.hasOperands(v1.getAUse(), v2.getAUse()) and +EqualityTest varEqualityTestExpr(SsaDefinition v1, SsaDefinition v2, boolean isEqualExpr) { + result.hasOperands(v1.getARead(), v2.getARead()) and isEqualExpr = result.polarity() } @@ -91,18 +91,18 @@ Expr clearlyNotNullExpr(Expr reason) { (reason = r1 or reason = r2) ) or - exists(SsaVariable v, boolean branch, VarRead rval, Guard guard | + exists(SsaDefinition v, boolean branch, VarRead rval, Guard guard | guard = directNullGuard(v, branch, false) and guard.controls(rval.getBasicBlock(), branch) and reason = guard and - rval = v.getAUse() and + rval = v.getARead() and result = rval and not result = baseNotNullExpr() ) or - exists(SsaVariable v | + exists(SsaDefinition v | clearlyNotNull(v, reason) and - result = v.getAUse() and + result = v.getARead() and not result = baseNotNullExpr() ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/Nullness.qll b/java/ql/lib/semmle/code/java/dataflow/Nullness.qll index 29ba9dbe0a3..f2b8f336d09 100644 --- a/java/ql/lib/semmle/code/java/dataflow/Nullness.qll +++ b/java/ql/lib/semmle/code/java/dataflow/Nullness.qll @@ -179,9 +179,9 @@ private Expr nonEmptyExpr() { // An array creation with a known positive size is trivially non-empty. result.(ArrayCreationExpr).getFirstDimensionSize() > 0 or - exists(SsaVariable v | + exists(SsaDefinition v | // A use of an array variable is non-empty if... - result = v.getAUse() and + result = v.getARead() and v.getSourceVariable().getType() instanceof Array | // ...its definition is non-empty... @@ -192,13 +192,13 @@ private Expr nonEmptyExpr() { cond.controls(result.getBasicBlock(), branch) and cond.getCondition() = nonZeroGuard(length, branch) and length.getField().hasName("length") and - length.getQualifier() = v.getAUse() + length.getQualifier() = v.getARead() ) ) or - exists(SsaVariable v | + exists(SsaDefinition v | // A use of a Collection variable is non-empty if... - result = v.getAUse() and + result = v.getARead() and v.getSourceVariable().getType() instanceof CollectionType and exists(ConditionBlock cond, boolean branch, Expr c | // ...it is guarded by a condition... @@ -216,13 +216,13 @@ private Expr nonEmptyExpr() { // ...and the condition proves that it is non-empty, either by using the `isEmpty` method... c.(MethodCall).getMethod().hasName("isEmpty") and branch = false and - c.(MethodCall).getQualifier() = v.getAUse() + c.(MethodCall).getQualifier() = v.getARead() or // ...or a check on its `size`. exists(MethodCall size | c = nonZeroGuard(size, branch) and size.getMethod().hasName("size") and - size.getQualifier() = v.getAUse() + size.getQualifier() = v.getARead() ) ) ) diff --git a/java/ql/lib/semmle/code/java/dataflow/RangeAnalysis.qll b/java/ql/lib/semmle/code/java/dataflow/RangeAnalysis.qll index 72ce0e1947e..ac43590e4dc 100644 --- a/java/ql/lib/semmle/code/java/dataflow/RangeAnalysis.qll +++ b/java/ql/lib/semmle/code/java/dataflow/RangeAnalysis.qll @@ -242,10 +242,10 @@ module Sem implements Semantic { Type getSsaType(SsaVariable var) { result = var.getSourceVariable().getType() } - final private class FinalSsaVariable = SSA::SsaVariable; + final private class FinalSsaVariable = SSA::SsaDefinition; class SsaVariable extends FinalSsaVariable { - Expr getAUse() { result = super.getAUse() } + Expr getAUse() { result = super.getARead() } } class SsaPhiNode extends SsaVariable instanceof SSA::SsaPhiDefinition { diff --git a/java/ql/lib/semmle/code/java/dataflow/RangeUtils.qll b/java/ql/lib/semmle/code/java/dataflow/RangeUtils.qll index ea1ccb424c5..14b4292db38 100644 --- a/java/ql/lib/semmle/code/java/dataflow/RangeUtils.qll +++ b/java/ql/lib/semmle/code/java/dataflow/RangeUtils.qll @@ -74,9 +74,9 @@ ArrayCreationExpr getArrayDef(SsaVariable v) { * `arrlen` without going through a back edge. */ private predicate arrayLengthDef(FieldRead arrlen, ArrayCreationExpr def) { - exists(SsaVariable arr | + exists(SsaDefinition arr | arrlen.getField() instanceof ArrayLengthField and - arrlen.getQualifier() = arr.getAUse() and + arrlen.getQualifier() = arr.getARead() and def = getArrayDef(arr) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/SSA.qll b/java/ql/lib/semmle/code/java/dataflow/SSA.qll index 520f2a294f4..5d0214b6357 100644 --- a/java/ql/lib/semmle/code/java/dataflow/SSA.qll +++ b/java/ql/lib/semmle/code/java/dataflow/SSA.qll @@ -417,8 +417,8 @@ private class RefTypeCastingExpr extends CastingExpr { * * The `VarAccess` represents the access to `v` that `result` has the same value as. */ -Expr sameValue(SsaVariable v, VarAccess va) { - result = v.getAUse() and result = va +Expr sameValue(SsaDefinition v, VarAccess va) { + result = v.getARead() and result = va or result.(AssignExpr).getDest() = va and result = v.(SsaExplicitWrite).getDefiningExpr() or diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll index 32307de49ce..a06ca9a6a3f 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll @@ -99,7 +99,7 @@ predicate localExprFlow(Expr e1, Expr e2) { localFlow(exprNode(e1), exprNode(e2) * updates. */ predicate hasNonlocalValue(FieldRead fr) { - not exists(SsaVariable v | v.getAUse() = fr) + not exists(SsaDefinition v | v.getARead() = fr) or exists(SsaDefinition v, SsaDefinition def | v.getARead() = fr and def = v.getAnUltimateDefinition() diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/BoundSpecific.qll b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/BoundSpecific.qll index a1c690b7df4..3ed92f4c551 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/BoundSpecific.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/BoundSpecific.qll @@ -8,7 +8,9 @@ private import java as J private import semmle.code.java.dataflow.SSA as Ssa private import semmle.code.java.dataflow.RangeUtils as RU -class SsaVariable = Ssa::SsaVariable; +class SsaVariable extends Ssa::SsaDefinition { + Expr getAUse() { result = super.getARead() } +} class Expr = J::Expr; diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/ModulusAnalysisSpecific.qll b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/ModulusAnalysisSpecific.qll index bb084b46917..e0968c9cf17 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/ModulusAnalysisSpecific.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/ModulusAnalysisSpecific.qll @@ -11,7 +11,9 @@ module Private { class BasicBlock = BB::BasicBlock; - class SsaVariable = Ssa::SsaVariable; + class SsaVariable extends Ssa::SsaDefinition { + Expr getAUse() { result = super.getARead() } + } class SsaPhiNode = Ssa::SsaPhiDefinition; diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll index 292dfb9e2fa..8abbabe6d7a 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll @@ -324,7 +324,7 @@ private module Impl { result = e.(CastingExpr).getExpr() } - Expr getARead(SsaVariable v) { result = v.getAUse() } + Expr getARead(SsaDefinition v) { result = v.getARead() } Field getField(FieldAccess fa) { result = fa.getField() } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SsaReadPositionSpecific.qll b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SsaReadPositionSpecific.qll index 6bf768da44b..f826f192dca 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SsaReadPositionSpecific.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SsaReadPositionSpecific.qll @@ -8,14 +8,14 @@ private import semmle.code.java.dataflow.SSA as Ssa private import semmle.code.java.controlflow.BasicBlocks as BB private import SsaReadPositionCommon -class SsaVariable = Ssa::SsaVariable; +class SsaVariable = Ssa::SsaDefinition; class SsaPhiNode = Ssa::SsaPhiDefinition; class BasicBlock = BB::BasicBlock; /** Gets a basic block in which SSA variable `v` is read. */ -BasicBlock getAReadBasicBlock(SsaVariable v) { result = v.getAUse().getBasicBlock() } +BasicBlock getAReadBasicBlock(SsaVariable v) { result = v.getARead().getBasicBlock() } private predicate id(BB::ExprParent x, BB::ExprParent y) { x = y } diff --git a/java/ql/lib/semmle/code/java/security/NumericCastTaintedQuery.qll b/java/ql/lib/semmle/code/java/security/NumericCastTaintedQuery.qll index 841ff4f8515..4b2d7709fbd 100644 --- a/java/ql/lib/semmle/code/java/security/NumericCastTaintedQuery.qll +++ b/java/ql/lib/semmle/code/java/security/NumericCastTaintedQuery.qll @@ -46,14 +46,14 @@ class RightShiftOp extends Expr { } private predicate boundedRead(VarRead read) { - exists(SsaVariable v, ConditionBlock cb, ComparisonExpr comp, boolean testIsTrue | - read = v.getAUse() and + exists(SsaDefinition v, ConditionBlock cb, ComparisonExpr comp, boolean testIsTrue | + read = v.getARead() and cb.controls(read.getBasicBlock(), testIsTrue) and cb.getCondition() = comp | - comp.getLesserOperand() = v.getAUse() and testIsTrue = true + comp.getLesserOperand() = v.getARead() and testIsTrue = true or - comp.getGreaterOperand() = v.getAUse() and testIsTrue = false + comp.getGreaterOperand() = v.getARead() and testIsTrue = false ) } diff --git a/java/ql/lib/semmle/code/java/security/Validation.qll b/java/ql/lib/semmle/code/java/security/Validation.qll index 69f57474317..51b8defb5ec 100644 --- a/java/ql/lib/semmle/code/java/security/Validation.qll +++ b/java/ql/lib/semmle/code/java/security/Validation.qll @@ -32,9 +32,9 @@ private predicate validationCall(MethodCall ma, VarAccess va) { } private predicate validatedAccess(VarAccess va) { - exists(SsaVariable v, MethodCall guardcall | - va = v.getAUse() and - validationCall(guardcall, v.getAUse()) + exists(SsaDefinition v, MethodCall guardcall | + va = v.getARead() and + validationCall(guardcall, v.getARead()) | guardcall.(Guard).controls(va.getBasicBlock(), _) or diff --git a/java/ql/src/Likely Bugs/Collections/ArrayIndexOutOfBounds.ql b/java/ql/src/Likely Bugs/Collections/ArrayIndexOutOfBounds.ql index 845aae01a3e..701084ac794 100644 --- a/java/ql/src/Likely Bugs/Collections/ArrayIndexOutOfBounds.ql +++ b/java/ql/src/Likely Bugs/Collections/ArrayIndexOutOfBounds.ql @@ -19,10 +19,10 @@ import semmle.code.java.dataflow.RangeUtils import semmle.code.java.dataflow.RangeAnalysis pragma[nomagic] -predicate ssaArrayLengthBound(SsaVariable arr, Bound b) { +predicate ssaArrayLengthBound(SsaDefinition arr, Bound b) { exists(FieldAccess len | len.getField() instanceof ArrayLengthField and - len.getQualifier() = arr.getAUse() and + len.getQualifier() = arr.getARead() and b.getExpr() = len ) } @@ -31,9 +31,9 @@ predicate ssaArrayLengthBound(SsaVariable arr, Bound b) { * Holds if the index expression of `aa` is less than or equal to the array length plus `k`. */ predicate boundedArrayAccess(ArrayAccess aa, int k) { - exists(SsaVariable arr, Expr index, Bound b, int delta | + exists(SsaDefinition arr, Expr index, Bound b, int delta | aa.getIndexExpr() = index and - aa.getArray() = arr.getAUse() and + aa.getArray() = arr.getARead() and bounded(index, b, delta, true, _) | ssaArrayLengthBound(arr, b) and diff --git a/java/ql/src/Likely Bugs/Comparison/UselessComparisonTest.ql b/java/ql/src/Likely Bugs/Comparison/UselessComparisonTest.ql index 32bd1ef20bd..5c2fd94a917 100644 --- a/java/ql/src/Likely Bugs/Comparison/UselessComparisonTest.ql +++ b/java/ql/src/Likely Bugs/Comparison/UselessComparisonTest.ql @@ -142,22 +142,22 @@ Expr overFlowCand() { predicate positiveOrNegative(Expr e) { positive(e) or negative(e) } /** Gets an expression that equals `v` plus a positive or negative value. */ -Expr increaseOrDecreaseOfVar(SsaVariable v) { +Expr increaseOrDecreaseOfVar(SsaDefinition v) { exists(AssignAddExpr add | result = add and positiveOrNegative(add.getDest()) and - add.getRhs() = v.getAUse() + add.getRhs() = v.getARead() ) or exists(AddExpr add, Expr e | result = add and - add.hasOperands(v.getAUse(), e) and + add.hasOperands(v.getARead(), e) and positiveOrNegative(e) ) or exists(SubExpr sub | result = sub and - sub.getLeftOperand() = v.getAUse() and + sub.getLeftOperand() = v.getARead() and positiveOrNegative(sub.getRightOperand()) ) or @@ -172,7 +172,7 @@ Expr increaseOrDecreaseOfVar(SsaVariable v) { predicate overFlowTest(ComparisonExpr comp) { ( - exists(SsaVariable v | comp.hasOperands(increaseOrDecreaseOfVar(v), v.getAUse())) + exists(SsaDefinition v | comp.hasOperands(increaseOrDecreaseOfVar(v), v.getARead())) or comp.getLesserOperand() = overFlowCand() and comp.getGreaterOperand().(IntegerLiteral).getIntValue() = 0 @@ -195,9 +195,9 @@ predicate concurrentModificationTest(BinaryExpr test) { */ pragma[nomagic] predicate guardedTest(EqualityTest test, Guard guard, boolean isEq, int i1, int i2) { - exists(SsaVariable v, CompileTimeConstantExpr c1, CompileTimeConstantExpr c2 | - guard.isEquality(v.getAUse(), c1, isEq) and - test.hasOperands(v.getAUse(), c2) and + exists(SsaDefinition v, CompileTimeConstantExpr c1, CompileTimeConstantExpr c2 | + guard.isEquality(v.getARead(), c1, isEq) and + test.hasOperands(v.getARead(), c2) and i1 = c1.getIntValue() and i2 = c2.getIntValue() and v.getSourceVariable().getType() instanceof IntegralType diff --git a/java/ql/src/Likely Bugs/Comparison/UselessComparisonTest.qll b/java/ql/src/Likely Bugs/Comparison/UselessComparisonTest.qll index 2933ae5305e..787cda44807 100644 --- a/java/ql/src/Likely Bugs/Comparison/UselessComparisonTest.qll +++ b/java/ql/src/Likely Bugs/Comparison/UselessComparisonTest.qll @@ -27,14 +27,14 @@ class BoundKind extends string { */ predicate uselessTest(ConditionNode s1, BinaryExpr test, boolean testIsTrue) { exists( - ConditionBlock cb, SsaVariable v, BinaryExpr cond, boolean condIsTrue, int k1, int k2, + ConditionBlock cb, SsaDefinition v, BinaryExpr cond, boolean condIsTrue, int k1, int k2, CompileTimeConstantExpr c1, CompileTimeConstantExpr c2 | s1.getCondition() = cond and cb.getCondition() = cond and - cond.hasOperands(v.getAUse(), c1) and + cond.hasOperands(v.getARead(), c1) and c1.getIntValue() = k1 and - test.hasOperands(v.getAUse(), c2) and + test.hasOperands(v.getARead(), c2) and c2.getIntValue() = k2 and v.getSourceVariable().getVariable() instanceof LocalScopeVariable and cb.controls(test.getBasicBlock(), condIsTrue) and @@ -49,7 +49,7 @@ predicate uselessTest(ConditionNode s1, BinaryExpr test, boolean testIsTrue) { ) or exists(ComparisonExpr comp | comp = cond | - comp.getLesserOperand() = v.getAUse() and + comp.getLesserOperand() = v.getARead() and ( condIsTrue = true and boundKind.isUpper() and @@ -60,7 +60,7 @@ predicate uselessTest(ConditionNode s1, BinaryExpr test, boolean testIsTrue) { (if comp.isStrict() then bound = k1 else bound = k1 + 1) ) or - comp.getGreaterOperand() = v.getAUse() and + comp.getGreaterOperand() = v.getARead() and ( condIsTrue = true and boundKind.isLower() and @@ -88,7 +88,7 @@ predicate uselessTest(ConditionNode s1, BinaryExpr test, boolean testIsTrue) { ) or exists(ComparisonExpr comp | comp = test | - comp.getLesserOperand() = v.getAUse() and + comp.getLesserOperand() = v.getARead() and ( boundKind.providesLowerBound() and testIsTrue = false and @@ -107,7 +107,7 @@ predicate uselessTest(ConditionNode s1, BinaryExpr test, boolean testIsTrue) { ) ) or - comp.getGreaterOperand() = v.getAUse() and + comp.getGreaterOperand() = v.getARead() and ( boundKind.providesLowerBound() and testIsTrue = true and diff --git a/java/ql/src/Likely Bugs/Likely Typos/ContradictoryTypeChecks.ql b/java/ql/src/Likely Bugs/Likely Typos/ContradictoryTypeChecks.ql index e48eb1f5ce6..8f8d04e6eb2 100644 --- a/java/ql/src/Likely Bugs/Likely Typos/ContradictoryTypeChecks.ql +++ b/java/ql/src/Likely Bugs/Likely Typos/ContradictoryTypeChecks.ql @@ -37,11 +37,11 @@ predicate requiresInstanceOf(Expr e, VarAccess va, RefType t) { * `v` is not of type `sup`, which is a supertype of `t`. */ predicate contradictoryTypeCheck(Expr e, Variable v, RefType t, RefType sup, Expr cond) { - exists(SsaVariable ssa | + exists(SsaDefinition ssa | ssa.getSourceVariable().getVariable() = v and - requiresInstanceOf(e, ssa.getAUse(), t) and + requiresInstanceOf(e, ssa.getARead(), t) and sup = t.getAnAncestor() and - instanceOfCheck(cond, ssa.getAUse(), sup) and + instanceOfCheck(cond, ssa.getARead(), sup) and cond.(Guard).controls(e.getBasicBlock(), false) and not t instanceof ErrorType and not sup instanceof ErrorType diff --git a/java/ql/src/Likely Bugs/Termination/ConstantLoopCondition.ql b/java/ql/src/Likely Bugs/Termination/ConstantLoopCondition.ql index d4fbc480e1b..bf03191bdac 100644 --- a/java/ql/src/Likely Bugs/Termination/ConstantLoopCondition.ql +++ b/java/ql/src/Likely Bugs/Termination/ConstantLoopCondition.ql @@ -75,9 +75,9 @@ where loopWhileTrue(loop) and loopExitGuard(loop, cond) ) and // None of the ssa variables in `cond` are updated inside the loop. - forex(SsaVariable ssa, VarRead use | ssa.getAUse() = use and use.getParent*() = cond | - not ssa.getCfgNode().getEnclosingStmt().getEnclosingStmt*() = loop or - ssa.getCfgNode().asExpr().getParent*() = loop.(ForStmt).getAnInit() + forex(SsaDefinition ssa, VarRead use | ssa.getARead() = use and use.getParent*() = cond | + not ssa.getControlFlowNode().getEnclosingStmt().getEnclosingStmt*() = loop or + ssa.getControlFlowNode().asExpr().getParent*() = loop.(ForStmt).getAnInit() ) and // And `cond` does not use method calls, field reads, or array reads. not exists(MethodCall ma | ma.getParent*() = cond) and diff --git a/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql b/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql index d328b79f5b1..ddf00714f40 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql @@ -42,9 +42,9 @@ class CheckSignaturesGuard extends Guard instanceof EqualityTest { } predicate signatureChecked(Expr safe) { - exists(CheckSignaturesGuard g, SsaVariable v | - v.getAUse() = g.getCheckedExpr() and - safe = v.getAUse() and + exists(CheckSignaturesGuard g, SsaDefinition v | + v.getARead() = g.getCheckedExpr() and + safe = v.getARead() and g.controls(safe.getBasicBlock(), g.(EqualityTest).polarity()) ) } diff --git a/java/ql/test/library-tests/ssa-large/countssa.ql b/java/ql/test/library-tests/ssa-large/countssa.ql index 8d7b5939c5c..3d07a8dad29 100644 --- a/java/ql/test/library-tests/ssa-large/countssa.ql +++ b/java/ql/test/library-tests/ssa-large/countssa.ql @@ -3,6 +3,6 @@ import semmle.code.java.dataflow.SSA from int uses, int live where - uses = strictcount(SsaVariable ssa, VarRead use | use = ssa.getAUse()) and - live = strictcount(SsaVariable ssa, BasicBlock b | ssa.isLiveAtEndOfBlock(b)) + uses = strictcount(SsaDefinition ssa, VarRead use | use = ssa.getARead()) and + live = strictcount(SsaDefinition ssa, BasicBlock b | ssa.isLiveAtEndOfBlock(b)) select uses, live diff --git a/java/ql/test/library-tests/ssa/ssaUse.ql b/java/ql/test/library-tests/ssa/ssaUse.ql index cab6f47c955..7bcec95cab8 100644 --- a/java/ql/test/library-tests/ssa/ssaUse.ql +++ b/java/ql/test/library-tests/ssa/ssaUse.ql @@ -1,6 +1,6 @@ import java import semmle.code.java.dataflow.SSA -from SsaVariable ssa, SsaSourceVariable v, Expr use -where use = ssa.getAUse() and ssa.getSourceVariable() = v -select v, ssa.getCfgNode(), ssa.toString(), use +from SsaDefinition ssa, SsaSourceVariable v, Expr use +where use = ssa.getARead() and ssa.getSourceVariable() = v +select v, ssa.getControlFlowNode(), ssa.toString(), use From 8594ae03df8c57a398b86fa83408e07cb6fe39d4 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 7 Nov 2025 10:58:46 +0100 Subject: [PATCH 025/127] Java: Replace remaining SsaImplicitInit. --- .../semmle/code/java/dataflow/internal/DataFlowUtil.qll | 7 +++---- java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll | 4 ++-- .../internal/rangeanalysis/SignAnalysisSpecific.qll | 5 ++--- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll index a06ca9a6a3f..00e7d15ee8b 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll @@ -102,10 +102,9 @@ predicate hasNonlocalValue(FieldRead fr) { not exists(SsaDefinition v | v.getARead() = fr) or exists(SsaDefinition v, SsaDefinition def | - v.getARead() = fr and def = v.getAnUltimateDefinition() - | - def instanceof SsaImplicitInit or - def instanceof SsaImplicitUpdate + v.getARead() = fr and + def = v.getAnUltimateDefinition() and + def instanceof SsaImplicitWrite ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll index 9e2853cdefa..28f7b300d32 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll @@ -510,9 +510,9 @@ private module Cached { /** Holds if `init` is a closure variable that captures the value of `capturedvar`. */ cached - predicate captures(SsaImplicitInit init, SsaVariable capturedvar) { + predicate captures(SsaImplicitEntryDefinition init, SsaVariable capturedvar) { exists(BasicBlock bb, int i | - Impl::ssaDefReachesRead(_, capturedvar, bb, i) and + Ssa::ssaDefReachesUncertainRead(_, capturedvar, bb, i) and variableCapture(capturedvar.getSourceVariable(), init.getSourceVariable(), bb, i) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll index 8abbabe6d7a..554ad6a9348 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll @@ -267,9 +267,8 @@ private module Impl { } /** Gets the variable underlying the implicit SSA variable `v`. */ - Variable getImplicitSsaDeclaration(SsaVariable v) { - result = v.(SsaImplicitUpdate).getSourceVariable().getVariable() or - result = v.(SsaImplicitInit).getSourceVariable().getVariable() + Variable getImplicitSsaDeclaration(SsaDefinition v) { + result = v.(SsaImplicitWrite).getSourceVariable().getVariable() } /** Holds if the variable underlying the implicit SSA variable `v` is not a field. */ From f0bd0346f08f9fedb2dc7bd64331b5ba6d7883a1 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 7 Nov 2025 11:03:46 +0100 Subject: [PATCH 026/127] Java: Replace usages of SsaVariable. --- .../lib/semmle/code/java/dataflow/NullGuards.qll | 16 +++++++++------- .../lib/semmle/code/java/dataflow/Nullness.qll | 12 ++++++------ .../lib/semmle/code/java/dataflow/RangeUtils.qll | 6 +++--- java/ql/lib/semmle/code/java/dataflow/SSA.qll | 2 +- .../code/java/dataflow/internal/SsaImpl.qll | 2 +- .../rangeanalysis/SignAnalysisSpecific.qll | 2 +- java/ql/test/library-tests/ssa/ssaDef.ql | 4 ++-- 7 files changed, 23 insertions(+), 21 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll b/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll index 5928960ea24..b165d1516d6 100644 --- a/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll +++ b/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll @@ -108,7 +108,7 @@ Expr clearlyNotNullExpr(Expr reason) { } /** Holds if `v` is an SSA variable that is provably not `null`. */ -predicate clearlyNotNull(SsaVariable v, Expr reason) { +predicate clearlyNotNull(SsaDefinition v, Expr reason) { exists(Expr src | src = v.(SsaExplicitWrite).getValue() and src = clearlyNotNullExpr(reason) @@ -136,7 +136,7 @@ predicate clearlyNotNull(SsaVariable v, Expr reason) { Expr clearlyNotNullExpr() { result = clearlyNotNullExpr(_) } /** Holds if `v` is an SSA variable that is provably not `null`. */ -predicate clearlyNotNull(SsaVariable v) { clearlyNotNull(v, _) } +predicate clearlyNotNull(SsaDefinition v) { clearlyNotNull(v, _) } /** * Holds if the evaluation of a call to `m` resulting in the value `branch` @@ -207,7 +207,7 @@ deprecated Expr basicOrCustomNullGuard(Expr e, boolean branch, boolean isnull) { * If `result` evaluates to `branch`, then `v` is guaranteed to be null if `isnull` * is true, and non-null if `isnull` is false. */ -Expr directNullGuard(SsaVariable v, boolean branch, boolean isnull) { +Expr directNullGuard(SsaDefinition v, boolean branch, boolean isnull) { result = basicNullGuard(sameValue(v, _), branch, isnull) } @@ -219,7 +219,7 @@ Expr directNullGuard(SsaVariable v, boolean branch, boolean isnull) { * If `result` evaluates to `branch`, then `v` is guaranteed to be null if `isnull` * is true, and non-null if `isnull` is false. */ -deprecated Guard nullGuard(SsaVariable v, boolean branch, boolean isnull) { +deprecated Guard nullGuard(SsaDefinition v, boolean branch, boolean isnull) { result = directNullGuard(v, branch, isnull) } @@ -228,7 +228,9 @@ deprecated Guard nullGuard(SsaVariable v, boolean branch, boolean isnull) { * from `bb1` to `bb2` implies that `v` is guaranteed to be null if `isnull` is * true, and non-null if `isnull` is false. */ -predicate nullGuardControlsBranchEdge(SsaVariable v, boolean isnull, BasicBlock bb1, BasicBlock bb2) { +predicate nullGuardControlsBranchEdge( + SsaDefinition v, boolean isnull, BasicBlock bb1, BasicBlock bb2 +) { exists(GuardValue gv | Guards_v3::ssaControlsBranchEdge(v, bb1, bb2, gv) and gv.isNullness(isnull) @@ -240,7 +242,7 @@ predicate nullGuardControlsBranchEdge(SsaVariable v, boolean isnull, BasicBlock * `bb` `v` is guaranteed to be null if `isnull` is true, and non-null if * `isnull` is false. */ -predicate nullGuardControls(SsaVariable v, boolean isnull, BasicBlock bb) { +predicate nullGuardControls(SsaDefinition v, boolean isnull, BasicBlock bb) { exists(GuardValue gv | Guards_v3::ssaControls(v, bb, gv) and gv.isNullness(isnull) @@ -263,6 +265,6 @@ predicate guardSuggestsExprMaybeNull(Expr guard, Expr e) { /** * Holds if `guard` is a guard expression that suggests that `v` might be null. */ -predicate guardSuggestsVarMaybeNull(Expr guard, SsaVariable v) { +predicate guardSuggestsVarMaybeNull(Expr guard, SsaDefinition v) { guardSuggestsExprMaybeNull(guard, sameValue(v, _)) } diff --git a/java/ql/lib/semmle/code/java/dataflow/Nullness.qll b/java/ql/lib/semmle/code/java/dataflow/Nullness.qll index f2b8f336d09..d8b1c19b07f 100644 --- a/java/ql/lib/semmle/code/java/dataflow/Nullness.qll +++ b/java/ql/lib/semmle/code/java/dataflow/Nullness.qll @@ -113,7 +113,7 @@ predicate dereference(Expr e) { * * The `VarAccess` is included for nicer error reporting. */ -private ControlFlowNode varDereference(SsaVariable v, VarAccess va) { +private ControlFlowNode varDereference(SsaDefinition v, VarAccess va) { dereference(result.asExpr()) and result.asExpr() = sameValue(v, va) } @@ -121,7 +121,7 @@ private ControlFlowNode varDereference(SsaVariable v, VarAccess va) { /** * The first dereference of a variable in a given `BasicBlock`. */ -private predicate firstVarDereferenceInBlock(BasicBlock bb, SsaVariable v, VarAccess va) { +private predicate firstVarDereferenceInBlock(BasicBlock bb, SsaDefinition v, VarAccess va) { exists(ControlFlowNode n | varDereference(v, va) = n and n.getBasicBlock() = bb and @@ -135,13 +135,13 @@ private predicate firstVarDereferenceInBlock(BasicBlock bb, SsaVariable v, VarAc } /** A variable suspected of being `null`. */ -private predicate varMaybeNull(SsaVariable v, ControlFlowNode node, string msg, Expr reason) { +private predicate varMaybeNull(SsaDefinition v, ControlFlowNode node, string msg, Expr reason) { // A variable compared to null might be null. exists(Expr e | reason = e and msg = "as suggested by $@ null guard" and guardSuggestsVarMaybeNull(e, v) and - node = v.getCfgNode() and + node = v.getControlFlowNode() and not v instanceof SsaPhiDefinition and not clearlyNotNull(v) and // Comparisons in finally blocks are excluded since missing exception edges in the CFG could otherwise yield FPs. @@ -157,7 +157,7 @@ private predicate varMaybeNull(SsaVariable v, ControlFlowNode node, string msg, // A parameter might be null if there is a null argument somewhere. exists(Parameter p, Expr arg | v.(SsaParameterInit).getParameter() = p and - node = v.getCfgNode() and + node = v.getControlFlowNode() and p.getAnArgument() = arg and reason = arg and msg = "because of $@ null argument" and @@ -266,7 +266,7 @@ private module NullnessFlow = ControlFlowReachability::Flow; * Holds if the dereference of `v` at `va` might be `null`. */ predicate nullDeref(SsaSourceVariable v, VarAccess va, string msg, Expr reason) { - exists(SsaVariable origin, SsaVariable ssa, ControlFlowNode src, ControlFlowNode sink | + exists(SsaDefinition origin, SsaDefinition ssa, ControlFlowNode src, ControlFlowNode sink | varMaybeNull(origin, src, msg, reason) and NullnessFlow::flow(src, origin, sink, ssa) and ssa.getSourceVariable() = v and diff --git a/java/ql/lib/semmle/code/java/dataflow/RangeUtils.qll b/java/ql/lib/semmle/code/java/dataflow/RangeUtils.qll index 14b4292db38..269c47dc3b7 100644 --- a/java/ql/lib/semmle/code/java/dataflow/RangeUtils.qll +++ b/java/ql/lib/semmle/code/java/dataflow/RangeUtils.qll @@ -33,7 +33,7 @@ predicate eqFlowCond = U::eqFlowCond/5; * `SsaPhiDefinition` in order for the reflexive case of `nonNullSsaFwdStep*(..)` to * have non-`SsaPhiDefinition` results. */ -private predicate nonNullSsaFwdStep(SsaVariable v, SsaVariable phi) { +private predicate nonNullSsaFwdStep(SsaDefinition v, SsaDefinition phi) { exists(SsaExplicitWrite vnull, SsaPhiDefinition phi0 | phi0 = phi | 2 = strictcount(phi0.getAnInput()) and vnull = phi0.getAnInput() and @@ -56,13 +56,13 @@ private predicate nonNullDefStep(Expr e1, Expr e2) { * explicit `ArrayCreationExpr` definition and that the definition does not go * through a back edge. */ -ArrayCreationExpr getArrayDef(SsaVariable v) { +ArrayCreationExpr getArrayDef(SsaDefinition v) { exists(Expr src | v.(SsaExplicitWrite).getValue() = src and nonNullDefStep*(result, src) ) or - exists(SsaVariable mid | + exists(SsaDefinition mid | result = getArrayDef(mid) and nonNullSsaFwdStep(mid, v) ) diff --git a/java/ql/lib/semmle/code/java/dataflow/SSA.qll b/java/ql/lib/semmle/code/java/dataflow/SSA.qll index 5d0214b6357..1f7dce589f7 100644 --- a/java/ql/lib/semmle/code/java/dataflow/SSA.qll +++ b/java/ql/lib/semmle/code/java/dataflow/SSA.qll @@ -105,7 +105,7 @@ class SsaSourceVariable extends TSsaSourceVariable { SsaSourceVariable getQualifier() { this = TQualifiedField(_, result, _) } /** Gets an SSA variable that has this variable as its underlying source variable. */ - SsaVariable getAnSsaVariable() { result.getSourceVariable() = this } + SsaDefinition getAnSsaVariable() { result.getSourceVariable() = this } } /** diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll index 28f7b300d32..1a60b1c7966 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll @@ -510,7 +510,7 @@ private module Cached { /** Holds if `init` is a closure variable that captures the value of `capturedvar`. */ cached - predicate captures(SsaImplicitEntryDefinition init, SsaVariable capturedvar) { + predicate captures(SsaImplicitEntryDefinition init, SsaDefinition capturedvar) { exists(BasicBlock bb, int i | Ssa::ssaDefReachesUncertainRead(_, capturedvar, bb, i) and variableCapture(capturedvar.getSourceVariable(), init.getSourceVariable(), bb, i) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll index 554ad6a9348..4a418160477 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll @@ -17,7 +17,7 @@ module Private { class Guard = G::Guards_v2::Guard; - class SsaVariable = Ssa::SsaVariable; + class SsaVariable = Ssa::SsaDefinition; class SsaPhiNode = Ssa::SsaPhiDefinition; diff --git a/java/ql/test/library-tests/ssa/ssaDef.ql b/java/ql/test/library-tests/ssa/ssaDef.ql index c487c539e78..a0702d58e0b 100644 --- a/java/ql/test/library-tests/ssa/ssaDef.ql +++ b/java/ql/test/library-tests/ssa/ssaDef.ql @@ -1,7 +1,7 @@ import java import semmle.code.java.dataflow.SSA -from SsaVariable ssa, SsaSourceVariable v, string s +from SsaDefinition ssa, SsaSourceVariable v, string s where ssa.getSourceVariable() = v and ( @@ -9,4 +9,4 @@ where or not exists(ssa.toString()) and s = "error" ) -select v, ssa.getCfgNode(), s +select v, ssa.getControlFlowNode(), s From ee5d65eba17aa3fc597fbabbc1ac49da47d0a52b Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 7 Nov 2025 11:12:43 +0100 Subject: [PATCH 027/127] Java: Update toString for implicit writes. --- java/ql/lib/semmle/code/java/dataflow/SSA.qll | 69 +++++++++++++++---- 1 file changed, 55 insertions(+), 14 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/SSA.qll b/java/ql/lib/semmle/code/java/dataflow/SSA.qll index 1f7dce589f7..68887cc2b80 100644 --- a/java/ql/lib/semmle/code/java/dataflow/SSA.qll +++ b/java/ql/lib/semmle/code/java/dataflow/SSA.qll @@ -157,6 +157,29 @@ class SsaCapturedDefinition extends SsaImplicitEntryDefinition { } } +/** + * An SSA definition representing the potential definition of a variable + * via a call. + */ +class SsaImplicitCallDefinition extends SsaImplicitWrite { + SsaImplicitCallDefinition() { isNonLocal(this) and not hasQualifierUpdate(this) } + + override string toString() { result = "SSA call def(" + this.getSourceVariable() + ")" } + + /** + * Gets a reachable `FieldWrite` that might represent this ssa update, if any. + */ + overlay[global] + FieldWrite getANonLocalUpdate() { result = getANonLocalUpdate(this) } +} + +/** An SSA definition due to an update of the qualifier. */ +class SsaImplicitQualifierDefinition extends SsaImplicitWrite { + SsaImplicitQualifierDefinition() { hasQualifierUpdate(this) } + + override string toString() { result = "SSA qualifier def(" + this.getSourceVariable() + ")" } +} + /** * Gets an access of the SSA source variable underlying this SSA variable * that can be reached from this SSA variable without passing through any @@ -299,47 +322,65 @@ class SsaImplicitUpdate extends SsaUpdate { private string getKind() { this.hasExplicitQualifierUpdate() and - result = "explicit qualifier" + result = "explicit qualifier" // -> SSA qualifier def or if this.hasImplicitQualifierUpdate() then if isNonLocal(this) - then result = "nonlocal + nonlocal qualifier" - else result = "nonlocal qualifier" + then result = "nonlocal + nonlocal qualifier" // -> SSA qualifier def + else result = "nonlocal qualifier" // -> SSA qualifier def else ( - isNonLocal(this) and result = "nonlocal" + isNonLocal(this) and result = "nonlocal" // -> SSA call def ) } /** + * DEPRECATED: Use `SsaImplicitCallDefinition.getANonLocalUpdate()` instead. + * * Gets a reachable `FieldWrite` that might represent this ssa update, if any. */ overlay[global] - FieldWrite getANonLocalUpdate() { - exists(SsaSourceField f, Callable setter | - relevantFieldUpdate(setter, f.getField(), result) and - defUpdatesNamedField(this, f, setter) - ) - } + deprecated FieldWrite getANonLocalUpdate() { result = getANonLocalUpdate(this) } /** + * DEPRECATED: Use `SsaImplicitQualifierDefinition` instead. + * * Holds if this ssa variable might change the value to something unknown. * * Examples include updates that might change the value of the qualifier, or * reads from untracked variables, for example those where the field or one * of its qualifiers is volatile. */ - predicate assignsUnknownValue() { + deprecated predicate assignsUnknownValue() { this.hasExplicitQualifierUpdate() or this.hasImplicitQualifierUpdate() } } -overlay[global] -private predicate isNonLocalImpl(SsaImplicitUpdate su) { exists(su.getANonLocalUpdate()) } +private predicate hasQualifierUpdate(SsaImplicitWrite def) { + exists(SsaWriteDefinition qdef, BasicBlock bb, int i | + qdef.definesAt(def.getSourceVariable().getQualifier(), bb, i) and + def.definesAt(_, bb, i) and + not qdef instanceof SsaImplicitEntryDefinition + ) +} -private predicate isNonLocal(SsaImplicitUpdate su) = forceLocal(isNonLocalImpl/1)(su) +/** + * Gets a reachable `FieldWrite` that might represent this ssa update, if any. + */ +overlay[global] +private FieldWrite getANonLocalUpdate(SsaImplicitWrite calldef) { + exists(SsaSourceField f, Callable setter | + relevantFieldUpdate(setter, f.getField(), result) and + defUpdatesNamedField(calldef, f, setter) + ) +} + +overlay[global] +private predicate isNonLocalImpl(SsaImplicitWrite calldef) { exists(getANonLocalUpdate(calldef)) } + +private predicate isNonLocal(SsaImplicitWrite calldef) = forceLocal(isNonLocalImpl/1)(calldef) /** * An SSA variable that represents an uncertain implicit update of the value. From 5849d85f1f5263ceb5445dc08309a298a1a67f0e Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 7 Nov 2025 11:24:20 +0100 Subject: [PATCH 028/127] Java: Deprecate two more SSA classes. --- java/ql/lib/semmle/code/java/dataflow/SSA.qll | 12 +++++++++--- .../semmle/code/java/dataflow/internal/SsaImpl.qll | 10 +++++----- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/SSA.qll b/java/ql/lib/semmle/code/java/dataflow/SSA.qll index 68887cc2b80..233b083a4eb 100644 --- a/java/ql/lib/semmle/code/java/dataflow/SSA.qll +++ b/java/ql/lib/semmle/code/java/dataflow/SSA.qll @@ -293,12 +293,14 @@ class SsaExplicitUpdate extends SsaUpdate { } /** + * DEPRECATED: Use `SsaImplicitWrite` instead. + * * An SSA variable that represents any sort of implicit update. This can be a * `Call` that might reach a non-local update of the field, an explicit or * implicit update of the qualifier of the field, or the implicit update that * occurs just prior to a `FieldRead` of an untracked field. */ -class SsaImplicitUpdate extends SsaUpdate { +deprecated class SsaImplicitUpdate extends SsaUpdate { SsaImplicitUpdate() { not this instanceof SsaExplicitUpdate } override string toString() { @@ -383,18 +385,22 @@ private predicate isNonLocalImpl(SsaImplicitWrite calldef) { exists(getANonLocal private predicate isNonLocal(SsaImplicitWrite calldef) = forceLocal(isNonLocalImpl/1)(calldef) /** + * DEPRECATED: Use `SsaUncertainWrite` instead. + * * An SSA variable that represents an uncertain implicit update of the value. * This is a `Call` that might reach a non-local update of the field or one of * its qualifiers. */ -class SsaUncertainImplicitUpdate extends SsaImplicitUpdate { +deprecated class SsaUncertainImplicitUpdate extends SsaImplicitUpdate { SsaUncertainImplicitUpdate() { ssaUncertainImplicitUpdate(this) } /** + * DEPRECATED: Use `getPriorDefinition()` instead. + * * Gets the immediately preceding definition. Since this update is uncertain * the value from the preceding definition might still be valid. */ - SsaVariable getPriorDef() { ssaDefReachesUncertainDef(result, this) } + deprecated SsaVariable getPriorDef() { ssaDefReachesUncertainDef(result, this) } } /** diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll index 1a60b1c7966..34bb39a8509 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll @@ -486,13 +486,13 @@ private module Cached { overlay[global] cached - predicate defUpdatesNamedField(SsaImplicitUpdate def, TrackedField f, Callable setter) { + predicate defUpdatesNamedField(SsaImplicitWrite def, TrackedField f, Callable setter) { f = def.getSourceVariable() and - updatesNamedField0(def.getCfgNode().asCall(), f, setter) + updatesNamedField0(def.getControlFlowNode().asCall(), f, setter) } cached - predicate ssaUncertainImplicitUpdate(SsaImplicitUpdate def) { + deprecated predicate ssaUncertainImplicitUpdate(SsaImplicitUpdate def) { exists(SsaSourceVariable v, BasicBlock bb, int i | def.definesAt(v, bb, i) and uncertainVariableUpdate(v, _, bb, i) @@ -522,7 +522,7 @@ private module Cached { * SSA definition of `v`. */ cached - predicate ssaDefReachesUncertainDef(TrackedSsaDef def, SsaUncertainImplicitUpdate redef) { + deprecated predicate ssaDefReachesUncertainDef(TrackedSsaDef def, SsaUncertainImplicitUpdate redef) { Impl::uncertainWriteDefinitionInput(redef, def) } @@ -671,7 +671,7 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu predicate ssaDefHasSource(WriteDefinition def) { def instanceof SsaExplicitWrite } predicate allowFlowIntoUncertainDef(UncertainWriteDefinition def) { - def instanceof SsaUncertainImplicitUpdate + def instanceof SsaUncertainWrite } class GuardValue = Guards::GuardValue; From 95ac61df42be5d5b18a479cd216f07d990d84011 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Mon, 27 Oct 2025 12:50:11 +0100 Subject: [PATCH 029/127] Java: Drop caching of deprecated predicates. --- .../code/java/dataflow/internal/SsaImpl.qll | 109 ++++++++---------- 1 file changed, 51 insertions(+), 58 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll index 34bb39a8509..21843f3e93b 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll @@ -244,6 +244,53 @@ final class UncertainWriteDefinition = Impl::UncertainWriteDefinition; final class PhiNode = Impl::PhiNode; +predicate ssaExplicitUpdate(SsaUpdate def, VariableUpdate upd) { + exists(SsaSourceVariable v, BasicBlock bb, int i | + def.definesAt(v, bb, i) and + certainVariableUpdate(v, upd.getControlFlowNode(), bb, i) and + getDestVar(upd) = def.getSourceVariable() + ) +} + +deprecated predicate ssaUncertainImplicitUpdate(SsaImplicitUpdate def) { + exists(SsaSourceVariable v, BasicBlock bb, int i | + def.definesAt(v, bb, i) and + uncertainVariableUpdate(v, _, bb, i) + ) +} + +predicate ssaImplicitInit(WriteDefinition def) { + exists(SsaSourceVariable v, BasicBlock bb, int i | + def.definesAt(v, bb, i) and + hasEntryDef(v, bb) and + i = -1 + ) +} + +/** + * Holds if the SSA definition of `v` at `def` reaches `redef` without crossing another + * SSA definition of `v`. + */ +deprecated predicate ssaDefReachesUncertainDef(TrackedSsaDef def, SsaUncertainImplicitUpdate redef) { + Impl::uncertainWriteDefinitionInput(redef, def) +} + +VarRead getAUse(Definition def) { + exists(SsaSourceVariable v, BasicBlock bb, int i | + Impl::ssaDefReachesRead(v, def, bb, i) and + result.getControlFlowNode() = bb.getNode(i) and + result = v.getAnAccess() + ) +} + +predicate ssaDefReachesEndOfBlock(BasicBlock bb, Definition def) { + Impl::ssaDefReachesEndOfBlock(bb, def, _) +} + +deprecated predicate phiHasInputFromBlock(PhiNode phi, Definition inp, BasicBlock bb) { + Impl::phiHasInputFromBlock(phi, inp, bb) +} + cached private module Cached { /** Gets the destination variable of an update of a tracked variable. */ @@ -258,15 +305,6 @@ private module Cached { result.getAnAccess() = upd.(UnaryAssignExpr).getExpr() } - cached - predicate ssaExplicitUpdate(SsaUpdate def, VariableUpdate upd) { - exists(SsaSourceVariable v, BasicBlock bb, int i | - def.definesAt(v, bb, i) and - certainVariableUpdate(v, upd.getControlFlowNode(), bb, i) and - getDestVar(upd) = def.getSourceVariable() - ) - } - /* * The SSA construction for a field `f` relies on implicit update nodes at * every call site that conceivably could reach an update of the field. @@ -486,26 +524,9 @@ private module Cached { overlay[global] cached - predicate defUpdatesNamedField(SsaImplicitWrite def, TrackedField f, Callable setter) { - f = def.getSourceVariable() and - updatesNamedField0(def.getControlFlowNode().asCall(), f, setter) - } - - cached - deprecated predicate ssaUncertainImplicitUpdate(SsaImplicitUpdate def) { - exists(SsaSourceVariable v, BasicBlock bb, int i | - def.definesAt(v, bb, i) and - uncertainVariableUpdate(v, _, bb, i) - ) - } - - cached - predicate ssaImplicitInit(WriteDefinition def) { - exists(SsaSourceVariable v, BasicBlock bb, int i | - def.definesAt(v, bb, i) and - hasEntryDef(v, bb) and - i = -1 - ) + predicate defUpdatesNamedField(SsaImplicitWrite calldef, TrackedField f, Callable setter) { + f = calldef.getSourceVariable() and + updatesNamedField0(calldef.getControlFlowNode().asCall(), f, setter) } /** Holds if `init` is a closure variable that captures the value of `capturedvar`. */ @@ -517,15 +538,6 @@ private module Cached { ) } - /** - * Holds if the SSA definition of `v` at `def` reaches `redef` without crossing another - * SSA definition of `v`. - */ - cached - deprecated predicate ssaDefReachesUncertainDef(TrackedSsaDef def, SsaUncertainImplicitUpdate redef) { - Impl::uncertainWriteDefinitionInput(redef, def) - } - /** * Holds if the value defined at `def` can reach `use` without passing through * any other uses, but possibly through phi nodes and uncertain implicit updates. @@ -538,25 +550,6 @@ private module Cached { ) } - cached - VarRead getAUse(Definition def) { - exists(SsaSourceVariable v, BasicBlock bb, int i | - Impl::ssaDefReachesRead(v, def, bb, i) and - result.getControlFlowNode() = bb.getNode(i) and - result = v.getAnAccess() - ) - } - - cached - predicate ssaDefReachesEndOfBlock(BasicBlock bb, Definition def) { - Impl::ssaDefReachesEndOfBlock(bb, def, _) - } - - cached - predicate phiHasInputFromBlock(PhiNode phi, Definition inp, BasicBlock bb) { - Impl::phiHasInputFromBlock(phi, inp, bb) - } - cached module DataFlowIntegration { import DataFlowIntegrationImpl @@ -666,7 +659,7 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu } } - Expr getARead(Definition def) { result = getAUse(def) } + Expr getARead(Definition def) { result = def.(SsaDefinition).getARead() } predicate ssaDefHasSource(WriteDefinition def) { def instanceof SsaExplicitWrite } From e059ded1339b7f100a94e9b8ad20a0ba26bcdc7b Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 6 Nov 2025 15:31:06 +0100 Subject: [PATCH 030/127] Java: Accept toString changes in qltest. --- .../modulus-analysis/ModulusAnalysis.expected | 58 ++-- .../range-analysis/RangeAnalysis.expected | 304 +++++++++--------- .../test/library-tests/ssa/captures.expected | 18 +- .../test/library-tests/ssa/firstUse.expected | 66 ++-- .../ql/test/library-tests/ssa/ssaDef.expected | 66 ++-- .../ql/test/library-tests/ssa/ssaUse.expected | 66 ++-- 6 files changed, 289 insertions(+), 289 deletions(-) diff --git a/java/ql/test/library-tests/dataflow/modulus-analysis/ModulusAnalysis.expected b/java/ql/test/library-tests/dataflow/modulus-analysis/ModulusAnalysis.expected index 953283d79db..45430971424 100644 --- a/java/ql/test/library-tests/dataflow/modulus-analysis/ModulusAnalysis.expected +++ b/java/ql/test/library-tests/dataflow/modulus-analysis/ModulusAnalysis.expected @@ -4,17 +4,17 @@ | ModulusAnalysis.java:4:5:4:22 | ...=... | 0 | 43 | 0 | | ModulusAnalysis.java:4:5:4:22 | c2 | 0 | 43 | 0 | | ModulusAnalysis.java:4:20:4:21 | 43 | 0 | 43 | 0 | -| ModulusAnalysis.java:7:13:7:22 | eq | SSA init(i) | 3 | 0 | -| ModulusAnalysis.java:7:18:7:18 | i | SSA init(i) | 0 | 0 | -| ModulusAnalysis.java:7:18:7:22 | ... + ... | SSA init(i) | 3 | 0 | +| ModulusAnalysis.java:7:13:7:22 | eq | SSA param(i) | 3 | 0 | +| ModulusAnalysis.java:7:18:7:18 | i | SSA param(i) | 0 | 0 | +| ModulusAnalysis.java:7:18:7:22 | ... + ... | SSA param(i) | 3 | 0 | | ModulusAnalysis.java:7:22:7:22 | 3 | 0 | 3 | 0 | | ModulusAnalysis.java:9:13:9:29 | mul | 0 | 3 | 42 | | ModulusAnalysis.java:9:19:9:20 | eq | SSA def(eq) | 0 | 0 | -| ModulusAnalysis.java:9:19:9:20 | eq | SSA init(i) | 3 | 0 | +| ModulusAnalysis.java:9:19:9:20 | eq | SSA param(i) | 3 | 0 | | ModulusAnalysis.java:9:19:9:25 | ... * ... | 0 | 0 | 42 | | ModulusAnalysis.java:9:19:9:29 | ... + ... | 0 | 3 | 42 | | ModulusAnalysis.java:9:24:9:25 | c1 | 0 | 42 | 0 | -| ModulusAnalysis.java:9:24:9:25 | c1 | SSA init(this.c1) | 0 | 0 | +| ModulusAnalysis.java:9:24:9:25 | c1 | SSA entry def(this.c1) | 0 | 0 | | ModulusAnalysis.java:9:29:9:29 | 3 | 0 | 3 | 0 | | ModulusAnalysis.java:11:13:11:21 | seven | 0 | 7 | 0 | | ModulusAnalysis.java:11:21:11:21 | 7 | 0 | 7 | 0 | @@ -29,47 +29,47 @@ | ModulusAnalysis.java:13:32:13:34 | mul | SSA def(mul) | 0 | 0 | | ModulusAnalysis.java:16:13:18:23 | j | 0 | 3 | 4 | | ModulusAnalysis.java:16:17:18:23 | ...?...:... | 0 | 3 | 4 | -| ModulusAnalysis.java:17:15:17:15 | i | SSA init(i) | 0 | 0 | +| ModulusAnalysis.java:17:15:17:15 | i | SSA param(i) | 0 | 0 | | ModulusAnalysis.java:17:15:17:19 | ... * ... | 0 | 0 | 4 | | ModulusAnalysis.java:17:15:17:23 | ... + ... | 0 | 3 | 4 | | ModulusAnalysis.java:17:19:17:19 | 4 | 0 | 4 | 0 | | ModulusAnalysis.java:17:23:17:23 | 3 | 0 | 3 | 0 | -| ModulusAnalysis.java:18:15:18:15 | i | SSA init(i) | 0 | 0 | +| ModulusAnalysis.java:18:15:18:15 | i | SSA param(i) | 0 | 0 | | ModulusAnalysis.java:18:15:18:19 | ... * ... | 0 | 0 | 8 | | ModulusAnalysis.java:18:15:18:23 | ... + ... | 0 | 7 | 8 | | ModulusAnalysis.java:18:19:18:19 | 8 | 0 | 8 | 0 | | ModulusAnalysis.java:18:23:18:23 | 7 | 0 | 7 | 0 | | ModulusAnalysis.java:19:28:19:28 | j | 0 | 3 | 4 | | ModulusAnalysis.java:19:28:19:28 | j | SSA def(j) | 0 | 0 | -| ModulusAnalysis.java:21:13:21:13 | x | SSA init(x) | 0 | 0 | +| ModulusAnalysis.java:21:13:21:13 | x | SSA param(x) | 0 | 0 | | ModulusAnalysis.java:21:17:21:18 | c1 | 0 | 42 | 0 | -| ModulusAnalysis.java:21:17:21:18 | c1 | SSA init(this.c1) | 0 | 0 | +| ModulusAnalysis.java:21:17:21:18 | c1 | SSA entry def(this.c1) | 0 | 0 | | ModulusAnalysis.java:21:23:21:23 | 3 | 0 | 3 | 0 | -| ModulusAnalysis.java:21:28:21:28 | y | SSA init(y) | 0 | 0 | +| ModulusAnalysis.java:21:28:21:28 | y | SSA param(y) | 0 | 0 | | ModulusAnalysis.java:21:32:21:33 | c1 | 0 | 42 | 0 | -| ModulusAnalysis.java:21:32:21:33 | c1 | SSA init(this.c1) | 0 | 0 | +| ModulusAnalysis.java:21:32:21:33 | c1 | SSA entry def(this.c1) | 0 | 0 | | ModulusAnalysis.java:21:38:21:38 | 7 | 0 | 7 | 0 | | ModulusAnalysis.java:22:32:22:32 | x | 0 | 3 | 42 | -| ModulusAnalysis.java:22:32:22:32 | x | SSA init(x) | 0 | 0 | +| ModulusAnalysis.java:22:32:22:32 | x | SSA param(x) | 0 | 0 | | ModulusAnalysis.java:22:32:22:36 | ... + ... | 0 | 10 | 42 | -| ModulusAnalysis.java:22:32:22:36 | ... + ... | SSA init(x) | 7 | 42 | -| ModulusAnalysis.java:22:32:22:36 | ... + ... | SSA init(y) | 3 | 42 | +| ModulusAnalysis.java:22:32:22:36 | ... + ... | SSA param(x) | 7 | 42 | +| ModulusAnalysis.java:22:32:22:36 | ... + ... | SSA param(y) | 3 | 42 | | ModulusAnalysis.java:22:36:22:36 | y | 0 | 7 | 42 | -| ModulusAnalysis.java:22:36:22:36 | y | SSA init(y) | 0 | 0 | -| ModulusAnalysis.java:25:13:25:13 | x | SSA init(x) | 0 | 0 | +| ModulusAnalysis.java:22:36:22:36 | y | SSA param(y) | 0 | 0 | +| ModulusAnalysis.java:25:13:25:13 | x | SSA param(x) | 0 | 0 | | ModulusAnalysis.java:25:17:25:18 | c1 | 0 | 42 | 0 | -| ModulusAnalysis.java:25:17:25:18 | c1 | SSA init(this.c1) | 0 | 0 | +| ModulusAnalysis.java:25:17:25:18 | c1 | SSA entry def(this.c1) | 0 | 0 | | ModulusAnalysis.java:25:23:25:23 | 3 | 0 | 3 | 0 | -| ModulusAnalysis.java:25:28:25:28 | y | SSA init(y) | 0 | 0 | +| ModulusAnalysis.java:25:28:25:28 | y | SSA param(y) | 0 | 0 | | ModulusAnalysis.java:25:32:25:33 | c1 | 0 | 42 | 0 | -| ModulusAnalysis.java:25:32:25:33 | c1 | SSA init(this.c1) | 0 | 0 | +| ModulusAnalysis.java:25:32:25:33 | c1 | SSA entry def(this.c1) | 0 | 0 | | ModulusAnalysis.java:25:38:25:38 | 7 | 0 | 7 | 0 | | ModulusAnalysis.java:26:32:26:32 | x | 0 | 3 | 42 | -| ModulusAnalysis.java:26:32:26:32 | x | SSA init(x) | 0 | 0 | +| ModulusAnalysis.java:26:32:26:32 | x | SSA param(x) | 0 | 0 | | ModulusAnalysis.java:26:32:26:36 | ... - ... | 0 | 38 | 42 | -| ModulusAnalysis.java:26:32:26:36 | ... - ... | SSA init(x) | 35 | 42 | +| ModulusAnalysis.java:26:32:26:36 | ... - ... | SSA param(x) | 35 | 42 | | ModulusAnalysis.java:26:36:26:36 | y | 0 | 7 | 42 | -| ModulusAnalysis.java:26:36:26:36 | y | SSA init(y) | 0 | 0 | +| ModulusAnalysis.java:26:36:26:36 | y | SSA param(y) | 0 | 0 | | ModulusAnalysis.java:29:13:29:35 | l | 0 | 1 | 4 | | ModulusAnalysis.java:29:17:29:26 | arr.length | SSA impl upd[untracked](arr.length) | 0 | 0 | | ModulusAnalysis.java:29:17:29:30 | ... * ... | 0 | 0 | 4 | @@ -87,13 +87,13 @@ | ModulusAnalysis.java:33:28:33:28 | l | 0 | 1 | 4 | | ModulusAnalysis.java:33:28:33:28 | l | SSA def(l) | 0 | 0 | | ModulusAnalysis.java:36:13:36:25 | ...=... | 0 | 3 | 4 | -| ModulusAnalysis.java:36:17:36:17 | i | SSA init(i) | 0 | 0 | +| ModulusAnalysis.java:36:17:36:17 | i | SSA param(i) | 0 | 0 | | ModulusAnalysis.java:36:17:36:21 | ... * ... | 0 | 0 | 4 | | ModulusAnalysis.java:36:17:36:25 | ... + ... | 0 | 3 | 4 | | ModulusAnalysis.java:36:21:36:21 | 4 | 0 | 4 | 0 | | ModulusAnalysis.java:36:25:36:25 | 3 | 0 | 3 | 0 | | ModulusAnalysis.java:39:13:39:25 | ...=... | 0 | 7 | 8 | -| ModulusAnalysis.java:39:17:39:17 | i | SSA init(i) | 0 | 0 | +| ModulusAnalysis.java:39:17:39:17 | i | SSA param(i) | 0 | 0 | | ModulusAnalysis.java:39:17:39:21 | ... * ... | 0 | 0 | 8 | | ModulusAnalysis.java:39:17:39:25 | ... + ... | 0 | 7 | 8 | | ModulusAnalysis.java:39:21:39:21 | 8 | 0 | 8 | 0 | @@ -104,22 +104,22 @@ | ModulusAnalysis.java:44:32:44:32 | j | SSA phi(j) | 0 | 0 | | ModulusAnalysis.java:46:32:46:32 | j | 0 | 3 | 4 | | ModulusAnalysis.java:46:32:46:32 | j | SSA phi(j) | 0 | 0 | -| ModulusAnalysis.java:49:14:49:14 | x | SSA init(x) | 0 | 0 | +| ModulusAnalysis.java:49:14:49:14 | x | SSA param(x) | 0 | 0 | | ModulusAnalysis.java:49:18:49:19 | 15 | 0 | 15 | 0 | | ModulusAnalysis.java:49:25:49:25 | 3 | 0 | 3 | 0 | | ModulusAnalysis.java:50:32:50:32 | x | 0 | 3 | 16 | -| ModulusAnalysis.java:50:32:50:32 | x | SSA init(x) | 0 | 0 | +| ModulusAnalysis.java:50:32:50:32 | x | SSA param(x) | 0 | 0 | | ModulusAnalysis.java:56:18:56:22 | i | 0 | 0 | 0 | | ModulusAnalysis.java:56:22:56:22 | 0 | 0 | 0 | 0 | | ModulusAnalysis.java:56:25:56:25 | i | SSA phi(i) | 0 | 0 | -| ModulusAnalysis.java:56:29:56:31 | cap | SSA init(cap) | 0 | 0 | +| ModulusAnalysis.java:56:29:56:31 | cap | SSA param(cap) | 0 | 0 | | ModulusAnalysis.java:56:34:56:34 | i | SSA phi(i) | 0 | 0 | | ModulusAnalysis.java:56:34:56:36 | ...++ | SSA phi(i) | 0 | 0 | | ModulusAnalysis.java:57:32:57:32 | i | SSA phi(i) | 0 | 0 | | ModulusAnalysis.java:59:18:59:22 | j | 0 | 0 | 0 | | ModulusAnalysis.java:59:22:59:22 | 0 | 0 | 0 | 0 | | ModulusAnalysis.java:59:25:59:25 | j | SSA phi(j) | 0 | 0 | -| ModulusAnalysis.java:59:29:59:31 | cap | SSA init(cap) | 0 | 0 | +| ModulusAnalysis.java:59:29:59:31 | cap | SSA param(cap) | 0 | 0 | | ModulusAnalysis.java:59:34:59:34 | j | SSA phi(j) | 0 | 0 | | ModulusAnalysis.java:59:34:59:39 | ...+=... | SSA phi(j) | 1 | 0 | | ModulusAnalysis.java:59:39:59:39 | 1 | 0 | 1 | 0 | @@ -129,7 +129,7 @@ | ModulusAnalysis.java:62:25:62:25 | k | 0 | 0 | 3 | | ModulusAnalysis.java:62:25:62:25 | k | SSA def(k) | 0 | 3 | | ModulusAnalysis.java:62:25:62:25 | k | SSA phi(k) | 0 | 0 | -| ModulusAnalysis.java:62:29:62:31 | cap | SSA init(cap) | 0 | 0 | +| ModulusAnalysis.java:62:29:62:31 | cap | SSA param(cap) | 0 | 0 | | ModulusAnalysis.java:62:34:62:34 | k | 0 | 0 | 3 | | ModulusAnalysis.java:62:34:62:34 | k | SSA def(k) | 0 | 3 | | ModulusAnalysis.java:62:34:62:34 | k | SSA phi(k) | 0 | 0 | diff --git a/java/ql/test/library-tests/dataflow/range-analysis/RangeAnalysis.expected b/java/ql/test/library-tests/dataflow/range-analysis/RangeAnalysis.expected index 6b9d75a8bc7..2648fd92686 100644 --- a/java/ql/test/library-tests/dataflow/range-analysis/RangeAnalysis.expected +++ b/java/ql/test/library-tests/dataflow/range-analysis/RangeAnalysis.expected @@ -1,232 +1,232 @@ -| A.java:3:9:3:9 | x | SSA init(x) | 0 | lower | NoReason | -| A.java:3:9:3:9 | x | SSA init(x) | 0 | upper | NoReason | +| A.java:3:9:3:9 | x | SSA param(x) | 0 | lower | NoReason | +| A.java:3:9:3:9 | x | SSA param(x) | 0 | upper | NoReason | | A.java:3:13:3:15 | 500 | 0 | 500 | lower | NoReason | | A.java:3:13:3:15 | 500 | 0 | 500 | upper | NoReason | | A.java:4:11:4:11 | x | 0 | 499 | upper | ... < ... | -| A.java:4:11:4:11 | x | SSA init(x) | 0 | lower | NoReason | -| A.java:4:11:4:11 | x | SSA init(x) | 0 | upper | NoReason | +| A.java:4:11:4:11 | x | SSA param(x) | 0 | lower | NoReason | +| A.java:4:11:4:11 | x | SSA param(x) | 0 | upper | NoReason | | A.java:4:15:4:17 | 400 | 0 | 400 | lower | NoReason | | A.java:4:15:4:17 | 400 | 0 | 400 | upper | NoReason | | A.java:5:16:5:16 | x | 0 | 401 | lower | ... > ... | | A.java:5:16:5:16 | x | 0 | 499 | upper | ... < ... | -| A.java:5:16:5:16 | x | SSA init(x) | 0 | lower | NoReason | -| A.java:5:16:5:16 | x | SSA init(x) | 0 | upper | NoReason | -| A.java:8:11:8:11 | y | SSA init(y) | 0 | lower | NoReason | -| A.java:8:11:8:11 | y | SSA init(y) | 0 | upper | NoReason | -| A.java:8:11:8:15 | ... - ... | SSA init(y) | -2 | lower | NoReason | -| A.java:8:11:8:15 | ... - ... | SSA init(y) | -2 | upper | NoReason | +| A.java:5:16:5:16 | x | SSA param(x) | 0 | lower | NoReason | +| A.java:5:16:5:16 | x | SSA param(x) | 0 | upper | NoReason | +| A.java:8:11:8:11 | y | SSA param(y) | 0 | lower | NoReason | +| A.java:8:11:8:11 | y | SSA param(y) | 0 | upper | NoReason | +| A.java:8:11:8:15 | ... - ... | SSA param(y) | -2 | lower | NoReason | +| A.java:8:11:8:15 | ... - ... | SSA param(y) | -2 | upper | NoReason | | A.java:8:15:8:15 | 2 | 0 | 2 | lower | NoReason | | A.java:8:15:8:15 | 2 | 0 | 2 | upper | NoReason | | A.java:8:20:8:20 | x | 0 | 400 | upper | ... > ... | -| A.java:8:20:8:20 | x | SSA init(x) | 0 | lower | NoReason | -| A.java:8:20:8:20 | x | SSA init(x) | 0 | upper | NoReason | +| A.java:8:20:8:20 | x | SSA param(x) | 0 | lower | NoReason | +| A.java:8:20:8:20 | x | SSA param(x) | 0 | upper | NoReason | | A.java:8:25:8:25 | y | 0 | 402 | upper | ... == ... | -| A.java:8:25:8:25 | y | SSA init(x) | 2 | lower | ... == ... | -| A.java:8:25:8:25 | y | SSA init(x) | 2 | upper | ... == ... | -| A.java:8:25:8:25 | y | SSA init(y) | 0 | lower | NoReason | -| A.java:8:25:8:25 | y | SSA init(y) | 0 | upper | NoReason | +| A.java:8:25:8:25 | y | SSA param(x) | 2 | lower | ... == ... | +| A.java:8:25:8:25 | y | SSA param(x) | 2 | upper | ... == ... | +| A.java:8:25:8:25 | y | SSA param(y) | 0 | lower | NoReason | +| A.java:8:25:8:25 | y | SSA param(y) | 0 | upper | NoReason | | A.java:8:29:8:31 | 300 | 0 | 300 | lower | NoReason | | A.java:8:29:8:31 | 300 | 0 | 300 | upper | NoReason | | A.java:9:16:9:16 | x | 0 | 299 | lower | ... > ... | | A.java:9:16:9:16 | x | 0 | 400 | upper | ... > ... | -| A.java:9:16:9:16 | x | SSA init(x) | 0 | lower | NoReason | -| A.java:9:16:9:16 | x | SSA init(x) | 0 | upper | NoReason | -| A.java:9:16:9:16 | x | SSA init(y) | -2 | lower | ... == ... | -| A.java:9:16:9:16 | x | SSA init(y) | -2 | upper | ... == ... | +| A.java:9:16:9:16 | x | SSA param(x) | 0 | lower | NoReason | +| A.java:9:16:9:16 | x | SSA param(x) | 0 | upper | NoReason | +| A.java:9:16:9:16 | x | SSA param(y) | -2 | lower | ... == ... | +| A.java:9:16:9:16 | x | SSA param(y) | -2 | upper | ... == ... | | A.java:9:16:9:20 | ... + ... | 0 | 600 | lower | ... > ... | | A.java:9:16:9:20 | ... + ... | 0 | 802 | upper | ... == ... | | A.java:9:16:9:20 | ... + ... | 0 | 802 | upper | ... > ... | -| A.java:9:16:9:20 | ... + ... | SSA init(x) | 301 | lower | ... == ... | -| A.java:9:16:9:20 | ... + ... | SSA init(x) | 301 | lower | NoReason | -| A.java:9:16:9:20 | ... + ... | SSA init(x) | 402 | upper | ... == ... | -| A.java:9:16:9:20 | ... + ... | SSA init(x) | 402 | upper | NoReason | -| A.java:9:16:9:20 | ... + ... | SSA init(y) | 299 | lower | ... == ... | -| A.java:9:16:9:20 | ... + ... | SSA init(y) | 299 | lower | NoReason | -| A.java:9:16:9:20 | ... + ... | SSA init(y) | 400 | upper | ... == ... | -| A.java:9:16:9:20 | ... + ... | SSA init(y) | 400 | upper | NoReason | +| A.java:9:16:9:20 | ... + ... | SSA param(x) | 301 | lower | ... == ... | +| A.java:9:16:9:20 | ... + ... | SSA param(x) | 301 | lower | NoReason | +| A.java:9:16:9:20 | ... + ... | SSA param(x) | 402 | upper | ... == ... | +| A.java:9:16:9:20 | ... + ... | SSA param(x) | 402 | upper | NoReason | +| A.java:9:16:9:20 | ... + ... | SSA param(y) | 299 | lower | ... == ... | +| A.java:9:16:9:20 | ... + ... | SSA param(y) | 299 | lower | NoReason | +| A.java:9:16:9:20 | ... + ... | SSA param(y) | 400 | upper | ... == ... | +| A.java:9:16:9:20 | ... + ... | SSA param(y) | 400 | upper | NoReason | | A.java:9:20:9:20 | y | 0 | 301 | lower | ... > ... | | A.java:9:20:9:20 | y | 0 | 402 | upper | ... == ... | -| A.java:9:20:9:20 | y | SSA init(x) | 2 | lower | ... == ... | -| A.java:9:20:9:20 | y | SSA init(x) | 2 | upper | ... == ... | -| A.java:9:20:9:20 | y | SSA init(y) | 0 | lower | NoReason | -| A.java:9:20:9:20 | y | SSA init(y) | 0 | upper | NoReason | +| A.java:9:20:9:20 | y | SSA param(x) | 2 | lower | ... == ... | +| A.java:9:20:9:20 | y | SSA param(x) | 2 | upper | ... == ... | +| A.java:9:20:9:20 | y | SSA param(y) | 0 | lower | NoReason | +| A.java:9:20:9:20 | y | SSA param(y) | 0 | upper | NoReason | | A.java:12:11:12:11 | x | 0 | 400 | upper | ... > ... | -| A.java:12:11:12:11 | x | SSA init(x) | 0 | lower | NoReason | -| A.java:12:11:12:11 | x | SSA init(x) | 0 | upper | NoReason | -| A.java:12:16:12:16 | y | SSA init(y) | 0 | lower | NoReason | -| A.java:12:16:12:16 | y | SSA init(y) | 0 | upper | NoReason | -| A.java:12:16:12:20 | ... + ... | SSA init(y) | 1 | lower | NoReason | -| A.java:12:16:12:20 | ... + ... | SSA init(y) | 1 | upper | NoReason | +| A.java:12:11:12:11 | x | SSA param(x) | 0 | lower | NoReason | +| A.java:12:11:12:11 | x | SSA param(x) | 0 | upper | NoReason | +| A.java:12:16:12:16 | y | SSA param(y) | 0 | lower | NoReason | +| A.java:12:16:12:16 | y | SSA param(y) | 0 | upper | NoReason | +| A.java:12:16:12:20 | ... + ... | SSA param(y) | 1 | lower | NoReason | +| A.java:12:16:12:20 | ... + ... | SSA param(y) | 1 | upper | NoReason | | A.java:12:20:12:20 | 1 | 0 | 1 | lower | NoReason | | A.java:12:20:12:20 | 1 | 0 | 1 | upper | NoReason | -| A.java:13:13:13:23 | sum | SSA init(y) | 400 | upper | NoReason | +| A.java:13:13:13:23 | sum | SSA param(y) | 400 | upper | NoReason | | A.java:13:19:13:19 | x | 0 | 400 | upper | ... > ... | -| A.java:13:19:13:19 | x | SSA init(x) | 0 | lower | NoReason | -| A.java:13:19:13:19 | x | SSA init(x) | 0 | upper | NoReason | -| A.java:13:19:13:23 | ... + ... | SSA init(y) | 400 | upper | NoReason | -| A.java:13:23:13:23 | y | SSA init(y) | 0 | lower | NoReason | -| A.java:13:23:13:23 | y | SSA init(y) | 0 | upper | NoReason | +| A.java:13:19:13:19 | x | SSA param(x) | 0 | lower | NoReason | +| A.java:13:19:13:19 | x | SSA param(x) | 0 | upper | NoReason | +| A.java:13:19:13:23 | ... + ... | SSA param(y) | 400 | upper | NoReason | +| A.java:13:23:13:23 | y | SSA param(y) | 0 | lower | NoReason | +| A.java:13:23:13:23 | y | SSA param(y) | 0 | upper | NoReason | | A.java:15:13:15:13 | y | 0 | 399 | upper | ... != ... | -| A.java:15:13:15:13 | y | SSA init(x) | -1 | lower | ... != ... | -| A.java:15:13:15:13 | y | SSA init(x) | -1 | upper | ... != ... | -| A.java:15:13:15:13 | y | SSA init(y) | 0 | lower | NoReason | -| A.java:15:13:15:13 | y | SSA init(y) | 0 | upper | NoReason | +| A.java:15:13:15:13 | y | SSA param(x) | -1 | lower | ... != ... | +| A.java:15:13:15:13 | y | SSA param(x) | -1 | upper | ... != ... | +| A.java:15:13:15:13 | y | SSA param(y) | 0 | lower | NoReason | +| A.java:15:13:15:13 | y | SSA param(y) | 0 | upper | NoReason | | A.java:15:17:15:19 | 300 | 0 | 300 | lower | NoReason | | A.java:15:17:15:19 | 300 | 0 | 300 | upper | NoReason | | A.java:16:15:16:25 | sum | 0 | 603 | lower | ... > ... | | A.java:16:15:16:25 | sum | 0 | 799 | upper | ... != ... | | A.java:16:15:16:25 | sum | 0 | 799 | upper | ... > ... | -| A.java:16:15:16:25 | sum | SSA init(x) | 301 | lower | ... != ... | -| A.java:16:15:16:25 | sum | SSA init(x) | 301 | lower | NoReason | -| A.java:16:15:16:25 | sum | SSA init(x) | 399 | upper | ... != ... | -| A.java:16:15:16:25 | sum | SSA init(x) | 399 | upper | NoReason | -| A.java:16:15:16:25 | sum | SSA init(y) | 302 | lower | ... != ... | -| A.java:16:15:16:25 | sum | SSA init(y) | 302 | lower | NoReason | -| A.java:16:15:16:25 | sum | SSA init(y) | 400 | upper | ... != ... | -| A.java:16:15:16:25 | sum | SSA init(y) | 400 | upper | NoReason | +| A.java:16:15:16:25 | sum | SSA param(x) | 301 | lower | ... != ... | +| A.java:16:15:16:25 | sum | SSA param(x) | 301 | lower | NoReason | +| A.java:16:15:16:25 | sum | SSA param(x) | 399 | upper | ... != ... | +| A.java:16:15:16:25 | sum | SSA param(x) | 399 | upper | NoReason | +| A.java:16:15:16:25 | sum | SSA param(y) | 302 | lower | ... != ... | +| A.java:16:15:16:25 | sum | SSA param(y) | 302 | lower | NoReason | +| A.java:16:15:16:25 | sum | SSA param(y) | 400 | upper | ... != ... | +| A.java:16:15:16:25 | sum | SSA param(y) | 400 | upper | NoReason | | A.java:16:21:16:21 | x | 0 | 302 | lower | ... > ... | | A.java:16:21:16:21 | x | 0 | 400 | upper | ... > ... | -| A.java:16:21:16:21 | x | SSA init(x) | 0 | lower | NoReason | -| A.java:16:21:16:21 | x | SSA init(x) | 0 | upper | NoReason | -| A.java:16:21:16:21 | x | SSA init(y) | 1 | lower | ... != ... | -| A.java:16:21:16:21 | x | SSA init(y) | 1 | upper | ... != ... | +| A.java:16:21:16:21 | x | SSA param(x) | 0 | lower | NoReason | +| A.java:16:21:16:21 | x | SSA param(x) | 0 | upper | NoReason | +| A.java:16:21:16:21 | x | SSA param(y) | 1 | lower | ... != ... | +| A.java:16:21:16:21 | x | SSA param(y) | 1 | upper | ... != ... | | A.java:16:21:16:25 | ... + ... | 0 | 603 | lower | ... > ... | | A.java:16:21:16:25 | ... + ... | 0 | 799 | upper | ... != ... | | A.java:16:21:16:25 | ... + ... | 0 | 799 | upper | ... > ... | -| A.java:16:21:16:25 | ... + ... | SSA init(x) | 301 | lower | ... != ... | -| A.java:16:21:16:25 | ... + ... | SSA init(x) | 301 | lower | NoReason | -| A.java:16:21:16:25 | ... + ... | SSA init(x) | 399 | upper | ... != ... | -| A.java:16:21:16:25 | ... + ... | SSA init(x) | 399 | upper | NoReason | -| A.java:16:21:16:25 | ... + ... | SSA init(y) | 302 | lower | ... != ... | -| A.java:16:21:16:25 | ... + ... | SSA init(y) | 302 | lower | NoReason | -| A.java:16:21:16:25 | ... + ... | SSA init(y) | 400 | upper | ... != ... | -| A.java:16:21:16:25 | ... + ... | SSA init(y) | 400 | upper | NoReason | +| A.java:16:21:16:25 | ... + ... | SSA param(x) | 301 | lower | ... != ... | +| A.java:16:21:16:25 | ... + ... | SSA param(x) | 301 | lower | NoReason | +| A.java:16:21:16:25 | ... + ... | SSA param(x) | 399 | upper | ... != ... | +| A.java:16:21:16:25 | ... + ... | SSA param(x) | 399 | upper | NoReason | +| A.java:16:21:16:25 | ... + ... | SSA param(y) | 302 | lower | ... != ... | +| A.java:16:21:16:25 | ... + ... | SSA param(y) | 302 | lower | NoReason | +| A.java:16:21:16:25 | ... + ... | SSA param(y) | 400 | upper | ... != ... | +| A.java:16:21:16:25 | ... + ... | SSA param(y) | 400 | upper | NoReason | | A.java:16:25:16:25 | y | 0 | 301 | lower | ... > ... | | A.java:16:25:16:25 | y | 0 | 399 | upper | ... != ... | -| A.java:16:25:16:25 | y | SSA init(x) | -1 | lower | ... != ... | -| A.java:16:25:16:25 | y | SSA init(x) | -1 | upper | ... != ... | -| A.java:16:25:16:25 | y | SSA init(y) | 0 | lower | NoReason | -| A.java:16:25:16:25 | y | SSA init(y) | 0 | upper | NoReason | +| A.java:16:25:16:25 | y | SSA param(x) | -1 | lower | ... != ... | +| A.java:16:25:16:25 | y | SSA param(x) | -1 | upper | ... != ... | +| A.java:16:25:16:25 | y | SSA param(y) | 0 | lower | NoReason | +| A.java:16:25:16:25 | y | SSA param(y) | 0 | upper | NoReason | | A.java:20:11:20:11 | x | 0 | 400 | upper | ... > ... | -| A.java:20:11:20:11 | x | SSA init(x) | 0 | lower | NoReason | -| A.java:20:11:20:11 | x | SSA init(x) | 0 | upper | NoReason | +| A.java:20:11:20:11 | x | SSA param(x) | 0 | lower | NoReason | +| A.java:20:11:20:11 | x | SSA param(x) | 0 | upper | NoReason | | A.java:20:15:20:17 | 500 | 0 | 500 | lower | NoReason | | A.java:20:15:20:17 | 500 | 0 | 500 | upper | NoReason | | A.java:21:16:21:16 | x | 0 | 400 | upper | ... > ... | | A.java:21:16:21:16 | x | 0 | 501 | lower | ... > ... | -| A.java:21:16:21:16 | x | SSA init(x) | 0 | lower | NoReason | -| A.java:21:16:21:16 | x | SSA init(x) | 0 | upper | NoReason | +| A.java:21:16:21:16 | x | SSA param(x) | 0 | lower | NoReason | +| A.java:21:16:21:16 | x | SSA param(x) | 0 | upper | NoReason | | A.java:25:12:25:12 | 0 | 0 | 0 | lower | NoReason | | A.java:25:12:25:12 | 0 | 0 | 0 | upper | NoReason | -| A.java:29:9:29:9 | x | SSA init(x) | 0 | lower | NoReason | -| A.java:29:9:29:9 | x | SSA init(x) | 0 | upper | NoReason | +| A.java:29:9:29:9 | x | SSA param(x) | 0 | lower | NoReason | +| A.java:29:9:29:9 | x | SSA param(x) | 0 | upper | NoReason | | A.java:29:13:29:15 | 500 | 0 | 500 | lower | NoReason | | A.java:29:13:29:15 | 500 | 0 | 500 | upper | NoReason | | A.java:30:11:30:11 | x | 0 | 499 | upper | ... < ... | -| A.java:30:11:30:11 | x | SSA init(x) | 0 | lower | NoReason | -| A.java:30:11:30:11 | x | SSA init(x) | 0 | upper | NoReason | +| A.java:30:11:30:11 | x | SSA param(x) | 0 | lower | NoReason | +| A.java:30:11:30:11 | x | SSA param(x) | 0 | upper | NoReason | | A.java:30:15:30:17 | 400 | 0 | 400 | lower | NoReason | | A.java:30:15:30:17 | 400 | 0 | 400 | upper | NoReason | | A.java:31:16:31:16 | x | 0 | 401 | lower | ... > ... | | A.java:31:16:31:16 | x | 0 | 499 | upper | ... < ... | -| A.java:31:16:31:16 | x | SSA init(x) | 0 | lower | NoReason | -| A.java:31:16:31:16 | x | SSA init(x) | 0 | upper | NoReason | -| A.java:34:11:34:11 | y | SSA init(y) | 0 | lower | NoReason | -| A.java:34:11:34:11 | y | SSA init(y) | 0 | upper | NoReason | +| A.java:31:16:31:16 | x | SSA param(x) | 0 | lower | NoReason | +| A.java:31:16:31:16 | x | SSA param(x) | 0 | upper | NoReason | +| A.java:34:11:34:11 | y | SSA param(y) | 0 | lower | NoReason | +| A.java:34:11:34:11 | y | SSA param(y) | 0 | upper | NoReason | | A.java:34:16:34:16 | x | 0 | 400 | upper | ... > ... | -| A.java:34:16:34:16 | x | SSA init(x) | 0 | lower | NoReason | -| A.java:34:16:34:16 | x | SSA init(x) | 0 | upper | NoReason | +| A.java:34:16:34:16 | x | SSA param(x) | 0 | lower | NoReason | +| A.java:34:16:34:16 | x | SSA param(x) | 0 | upper | NoReason | | A.java:34:16:34:20 | ... - ... | 0 | 399 | upper | ... > ... | -| A.java:34:16:34:20 | ... - ... | SSA init(x) | -1 | lower | NoReason | -| A.java:34:16:34:20 | ... - ... | SSA init(x) | -1 | upper | NoReason | +| A.java:34:16:34:20 | ... - ... | SSA param(x) | -1 | lower | NoReason | +| A.java:34:16:34:20 | ... - ... | SSA param(x) | -1 | upper | NoReason | | A.java:34:20:34:20 | 1 | 0 | 1 | lower | NoReason | | A.java:34:20:34:20 | 1 | 0 | 1 | upper | NoReason | | A.java:34:25:34:25 | y | 0 | 399 | upper | ... == ... | -| A.java:34:25:34:25 | y | SSA init(x) | -1 | lower | ... == ... | -| A.java:34:25:34:25 | y | SSA init(x) | -1 | upper | ... == ... | -| A.java:34:25:34:25 | y | SSA init(y) | 0 | lower | NoReason | -| A.java:34:25:34:25 | y | SSA init(y) | 0 | upper | NoReason | +| A.java:34:25:34:25 | y | SSA param(x) | -1 | lower | ... == ... | +| A.java:34:25:34:25 | y | SSA param(x) | -1 | upper | ... == ... | +| A.java:34:25:34:25 | y | SSA param(y) | 0 | lower | NoReason | +| A.java:34:25:34:25 | y | SSA param(y) | 0 | upper | NoReason | | A.java:34:29:34:31 | 300 | 0 | 300 | lower | NoReason | | A.java:34:29:34:31 | 300 | 0 | 300 | upper | NoReason | | A.java:34:36:34:36 | y | 0 | 301 | lower | ... > ... | | A.java:34:36:34:36 | y | 0 | 399 | upper | ... == ... | -| A.java:34:36:34:36 | y | SSA init(x) | -1 | lower | ... == ... | -| A.java:34:36:34:36 | y | SSA init(x) | -1 | upper | ... == ... | -| A.java:34:36:34:36 | y | SSA init(y) | 0 | lower | NoReason | -| A.java:34:36:34:36 | y | SSA init(y) | 0 | upper | NoReason | +| A.java:34:36:34:36 | y | SSA param(x) | -1 | lower | ... == ... | +| A.java:34:36:34:36 | y | SSA param(x) | -1 | upper | ... == ... | +| A.java:34:36:34:36 | y | SSA param(y) | 0 | lower | NoReason | +| A.java:34:36:34:36 | y | SSA param(y) | 0 | upper | NoReason | | A.java:34:36:34:40 | ... + ... | 0 | 303 | lower | ... > ... | | A.java:34:36:34:40 | ... + ... | 0 | 401 | upper | ... == ... | -| A.java:34:36:34:40 | ... + ... | SSA init(x) | 1 | lower | ... == ... | -| A.java:34:36:34:40 | ... + ... | SSA init(x) | 1 | upper | ... == ... | -| A.java:34:36:34:40 | ... + ... | SSA init(y) | 2 | lower | NoReason | -| A.java:34:36:34:40 | ... + ... | SSA init(y) | 2 | upper | NoReason | +| A.java:34:36:34:40 | ... + ... | SSA param(x) | 1 | lower | ... == ... | +| A.java:34:36:34:40 | ... + ... | SSA param(x) | 1 | upper | ... == ... | +| A.java:34:36:34:40 | ... + ... | SSA param(y) | 2 | lower | NoReason | +| A.java:34:36:34:40 | ... + ... | SSA param(y) | 2 | upper | NoReason | | A.java:34:40:34:40 | 2 | 0 | 2 | lower | NoReason | | A.java:34:40:34:40 | 2 | 0 | 2 | upper | NoReason | -| A.java:34:45:34:45 | z | SSA init(z) | 0 | lower | NoReason | -| A.java:34:45:34:45 | z | SSA init(z) | 0 | upper | NoReason | +| A.java:34:45:34:45 | z | SSA param(z) | 0 | lower | NoReason | +| A.java:34:45:34:45 | z | SSA param(z) | 0 | upper | NoReason | | A.java:34:50:34:50 | z | 0 | 303 | lower | ... == ... | | A.java:34:50:34:50 | z | 0 | 401 | upper | ... == ... | -| A.java:34:50:34:50 | z | SSA init(x) | 1 | lower | ... == ... | -| A.java:34:50:34:50 | z | SSA init(x) | 1 | upper | ... == ... | -| A.java:34:50:34:50 | z | SSA init(y) | 2 | lower | ... == ... | -| A.java:34:50:34:50 | z | SSA init(y) | 2 | upper | ... == ... | -| A.java:34:50:34:50 | z | SSA init(z) | 0 | lower | NoReason | -| A.java:34:50:34:50 | z | SSA init(z) | 0 | upper | NoReason | +| A.java:34:50:34:50 | z | SSA param(x) | 1 | lower | ... == ... | +| A.java:34:50:34:50 | z | SSA param(x) | 1 | upper | ... == ... | +| A.java:34:50:34:50 | z | SSA param(y) | 2 | lower | ... == ... | +| A.java:34:50:34:50 | z | SSA param(y) | 2 | upper | ... == ... | +| A.java:34:50:34:50 | z | SSA param(z) | 0 | lower | NoReason | +| A.java:34:50:34:50 | z | SSA param(z) | 0 | upper | NoReason | | A.java:34:55:34:57 | 350 | 0 | 350 | lower | NoReason | | A.java:34:55:34:57 | 350 | 0 | 350 | upper | NoReason | | A.java:35:16:35:16 | x | 0 | 349 | lower | ... == ... | | A.java:35:16:35:16 | x | 0 | 349 | upper | ... == ... | -| A.java:35:16:35:16 | x | SSA init(x) | 0 | lower | NoReason | -| A.java:35:16:35:16 | x | SSA init(x) | 0 | upper | NoReason | -| A.java:35:16:35:16 | x | SSA init(y) | 1 | lower | ... == ... | -| A.java:35:16:35:16 | x | SSA init(y) | 1 | upper | ... == ... | -| A.java:35:16:35:16 | x | SSA init(z) | -1 | lower | ... == ... | -| A.java:35:16:35:16 | x | SSA init(z) | -1 | upper | ... == ... | +| A.java:35:16:35:16 | x | SSA param(x) | 0 | lower | NoReason | +| A.java:35:16:35:16 | x | SSA param(x) | 0 | upper | NoReason | +| A.java:35:16:35:16 | x | SSA param(y) | 1 | lower | ... == ... | +| A.java:35:16:35:16 | x | SSA param(y) | 1 | upper | ... == ... | +| A.java:35:16:35:16 | x | SSA param(z) | -1 | lower | ... == ... | +| A.java:35:16:35:16 | x | SSA param(z) | -1 | upper | ... == ... | | A.java:35:16:35:20 | ... + ... | 0 | 697 | lower | ... == ... | | A.java:35:16:35:20 | ... + ... | 0 | 697 | upper | ... == ... | -| A.java:35:16:35:20 | ... + ... | SSA init(x) | 348 | lower | ... == ... | -| A.java:35:16:35:20 | ... + ... | SSA init(x) | 348 | lower | NoReason | -| A.java:35:16:35:20 | ... + ... | SSA init(x) | 348 | upper | ... == ... | -| A.java:35:16:35:20 | ... + ... | SSA init(x) | 348 | upper | NoReason | -| A.java:35:16:35:20 | ... + ... | SSA init(y) | 349 | lower | ... == ... | -| A.java:35:16:35:20 | ... + ... | SSA init(y) | 349 | lower | NoReason | -| A.java:35:16:35:20 | ... + ... | SSA init(y) | 349 | upper | ... == ... | -| A.java:35:16:35:20 | ... + ... | SSA init(y) | 349 | upper | NoReason | -| A.java:35:16:35:20 | ... + ... | SSA init(z) | 347 | lower | ... == ... | -| A.java:35:16:35:20 | ... + ... | SSA init(z) | 347 | upper | ... == ... | +| A.java:35:16:35:20 | ... + ... | SSA param(x) | 348 | lower | ... == ... | +| A.java:35:16:35:20 | ... + ... | SSA param(x) | 348 | lower | NoReason | +| A.java:35:16:35:20 | ... + ... | SSA param(x) | 348 | upper | ... == ... | +| A.java:35:16:35:20 | ... + ... | SSA param(x) | 348 | upper | NoReason | +| A.java:35:16:35:20 | ... + ... | SSA param(y) | 349 | lower | ... == ... | +| A.java:35:16:35:20 | ... + ... | SSA param(y) | 349 | lower | NoReason | +| A.java:35:16:35:20 | ... + ... | SSA param(y) | 349 | upper | ... == ... | +| A.java:35:16:35:20 | ... + ... | SSA param(y) | 349 | upper | NoReason | +| A.java:35:16:35:20 | ... + ... | SSA param(z) | 347 | lower | ... == ... | +| A.java:35:16:35:20 | ... + ... | SSA param(z) | 347 | upper | ... == ... | | A.java:35:16:35:24 | ... + ... | 0 | 1047 | lower | ... == ... | | A.java:35:16:35:24 | ... + ... | 0 | 1047 | upper | ... == ... | -| A.java:35:16:35:24 | ... + ... | SSA init(x) | 698 | lower | ... == ... | -| A.java:35:16:35:24 | ... + ... | SSA init(x) | 698 | lower | ... == ... | -| A.java:35:16:35:24 | ... + ... | SSA init(x) | 698 | lower | NoReason | -| A.java:35:16:35:24 | ... + ... | SSA init(x) | 698 | upper | ... == ... | -| A.java:35:16:35:24 | ... + ... | SSA init(x) | 698 | upper | ... == ... | -| A.java:35:16:35:24 | ... + ... | SSA init(x) | 698 | upper | NoReason | -| A.java:35:16:35:24 | ... + ... | SSA init(y) | 699 | lower | ... == ... | -| A.java:35:16:35:24 | ... + ... | SSA init(y) | 699 | lower | ... == ... | -| A.java:35:16:35:24 | ... + ... | SSA init(y) | 699 | lower | NoReason | -| A.java:35:16:35:24 | ... + ... | SSA init(y) | 699 | upper | ... == ... | -| A.java:35:16:35:24 | ... + ... | SSA init(y) | 699 | upper | ... == ... | -| A.java:35:16:35:24 | ... + ... | SSA init(y) | 699 | upper | NoReason | -| A.java:35:16:35:24 | ... + ... | SSA init(z) | 697 | lower | ... == ... | -| A.java:35:16:35:24 | ... + ... | SSA init(z) | 697 | lower | NoReason | -| A.java:35:16:35:24 | ... + ... | SSA init(z) | 697 | upper | ... == ... | -| A.java:35:16:35:24 | ... + ... | SSA init(z) | 697 | upper | NoReason | +| A.java:35:16:35:24 | ... + ... | SSA param(x) | 698 | lower | ... == ... | +| A.java:35:16:35:24 | ... + ... | SSA param(x) | 698 | lower | ... == ... | +| A.java:35:16:35:24 | ... + ... | SSA param(x) | 698 | lower | NoReason | +| A.java:35:16:35:24 | ... + ... | SSA param(x) | 698 | upper | ... == ... | +| A.java:35:16:35:24 | ... + ... | SSA param(x) | 698 | upper | ... == ... | +| A.java:35:16:35:24 | ... + ... | SSA param(x) | 698 | upper | NoReason | +| A.java:35:16:35:24 | ... + ... | SSA param(y) | 699 | lower | ... == ... | +| A.java:35:16:35:24 | ... + ... | SSA param(y) | 699 | lower | ... == ... | +| A.java:35:16:35:24 | ... + ... | SSA param(y) | 699 | lower | NoReason | +| A.java:35:16:35:24 | ... + ... | SSA param(y) | 699 | upper | ... == ... | +| A.java:35:16:35:24 | ... + ... | SSA param(y) | 699 | upper | ... == ... | +| A.java:35:16:35:24 | ... + ... | SSA param(y) | 699 | upper | NoReason | +| A.java:35:16:35:24 | ... + ... | SSA param(z) | 697 | lower | ... == ... | +| A.java:35:16:35:24 | ... + ... | SSA param(z) | 697 | lower | NoReason | +| A.java:35:16:35:24 | ... + ... | SSA param(z) | 697 | upper | ... == ... | +| A.java:35:16:35:24 | ... + ... | SSA param(z) | 697 | upper | NoReason | | A.java:35:20:35:20 | y | 0 | 348 | lower | ... == ... | | A.java:35:20:35:20 | y | 0 | 348 | upper | ... == ... | -| A.java:35:20:35:20 | y | SSA init(x) | -1 | lower | ... == ... | -| A.java:35:20:35:20 | y | SSA init(x) | -1 | upper | ... == ... | -| A.java:35:20:35:20 | y | SSA init(y) | 0 | lower | NoReason | -| A.java:35:20:35:20 | y | SSA init(y) | 0 | upper | NoReason | -| A.java:35:20:35:20 | y | SSA init(z) | -2 | lower | ... == ... | -| A.java:35:20:35:20 | y | SSA init(z) | -2 | upper | ... == ... | +| A.java:35:20:35:20 | y | SSA param(x) | -1 | lower | ... == ... | +| A.java:35:20:35:20 | y | SSA param(x) | -1 | upper | ... == ... | +| A.java:35:20:35:20 | y | SSA param(y) | 0 | lower | NoReason | +| A.java:35:20:35:20 | y | SSA param(y) | 0 | upper | NoReason | +| A.java:35:20:35:20 | y | SSA param(z) | -2 | lower | ... == ... | +| A.java:35:20:35:20 | y | SSA param(z) | -2 | upper | ... == ... | | A.java:35:24:35:24 | z | 0 | 350 | lower | ... == ... | | A.java:35:24:35:24 | z | 0 | 350 | upper | ... == ... | -| A.java:35:24:35:24 | z | SSA init(x) | 1 | lower | ... == ... | -| A.java:35:24:35:24 | z | SSA init(x) | 1 | upper | ... == ... | -| A.java:35:24:35:24 | z | SSA init(y) | 2 | lower | ... == ... | -| A.java:35:24:35:24 | z | SSA init(y) | 2 | upper | ... == ... | -| A.java:35:24:35:24 | z | SSA init(z) | 0 | lower | NoReason | -| A.java:35:24:35:24 | z | SSA init(z) | 0 | upper | NoReason | +| A.java:35:24:35:24 | z | SSA param(x) | 1 | lower | ... == ... | +| A.java:35:24:35:24 | z | SSA param(x) | 1 | upper | ... == ... | +| A.java:35:24:35:24 | z | SSA param(y) | 2 | lower | ... == ... | +| A.java:35:24:35:24 | z | SSA param(y) | 2 | upper | ... == ... | +| A.java:35:24:35:24 | z | SSA param(z) | 0 | lower | NoReason | +| A.java:35:24:35:24 | z | SSA param(z) | 0 | upper | NoReason | | A.java:39:12:39:12 | 0 | 0 | 0 | lower | NoReason | | A.java:39:12:39:12 | 0 | 0 | 0 | upper | NoReason | diff --git a/java/ql/test/library-tests/ssa/captures.expected b/java/ql/test/library-tests/ssa/captures.expected index 2ec18f4880d..3d8b8e13602 100644 --- a/java/ql/test/library-tests/ssa/captures.expected +++ b/java/ql/test/library-tests/ssa/captures.expected @@ -1,9 +1,9 @@ -| Nested.java:8:29:8:57 | SSA init(next(..).p1) | Nested.java:4:34:10:3 | SSA init(p1) | -| Nested.java:8:29:8:57 | SSA init(next(..).x1) | Nested.java:5:9:5:14 | SSA def(x1) | -| Nested.java:16:22:16:34 | SSA init(getInt(..).obj) | Nested.java:15:12:15:29 | SSA def(obj) | -| Nested.java:19:27:22:7 | SSA init(getInt(..).hash) | Nested.java:16:15:16:34 | SSA def(hash) | -| Nested.java:19:27:22:7 | SSA init(getInt(..).x2) | Nested.java:17:9:17:15 | SSA def(x2) | -| Nested.java:20:27:20:39 | SSA init(getInt(..).obj) | Nested.java:15:12:15:29 | SSA def(obj) | -| Nested.java:30:23:30:36 | SSA init(getInt(..).obj2) | Nested.java:30:5:30:37 | SSA phi(obj2) | -| Nested.java:37:20:37:25 | SSA init(getInt(..).x3) | Nested.java:36:7:36:12 | SSA def(x3) | -| Nested.java:40:20:40:25 | SSA init(getInt(..).x3) | Nested.java:39:7:39:12 | SSA def(x3) | +| Nested.java:8:29:8:57 | SSA capture def(next(..).p1) | Nested.java:4:34:10:3 | SSA param(p1) | +| Nested.java:8:29:8:57 | SSA capture def(next(..).x1) | Nested.java:5:9:5:14 | SSA def(x1) | +| Nested.java:16:22:16:34 | SSA capture def(getInt(..).obj) | Nested.java:15:12:15:29 | SSA def(obj) | +| Nested.java:19:27:22:7 | SSA capture def(getInt(..).hash) | Nested.java:16:15:16:34 | SSA def(hash) | +| Nested.java:19:27:22:7 | SSA capture def(getInt(..).x2) | Nested.java:17:9:17:15 | SSA def(x2) | +| Nested.java:20:27:20:39 | SSA capture def(getInt(..).obj) | Nested.java:15:12:15:29 | SSA def(obj) | +| Nested.java:30:23:30:36 | SSA capture def(getInt(..).obj2) | Nested.java:30:5:30:37 | SSA phi(obj2) | +| Nested.java:37:20:37:25 | SSA capture def(getInt(..).x3) | Nested.java:36:7:36:12 | SSA def(x3) | +| Nested.java:40:20:40:25 | SSA capture def(getInt(..).x3) | Nested.java:39:7:39:12 | SSA def(x3) | diff --git a/java/ql/test/library-tests/ssa/firstUse.expected b/java/ql/test/library-tests/ssa/firstUse.expected index 2d86e6ed117..4fd2a78bb89 100644 --- a/java/ql/test/library-tests/ssa/firstUse.expected +++ b/java/ql/test/library-tests/ssa/firstUse.expected @@ -1,43 +1,43 @@ -| Fields.java:12:19:21:3 | SSA init(this.xs) | Fields.java:13:15:13:16 | xs | -| Fields.java:14:5:14:9 | SSA impl upd[nonlocal](this.xs) | Fields.java:15:9:15:10 | xs | +| Fields.java:12:19:21:3 | SSA entry def(this.xs) | Fields.java:13:15:13:16 | xs | +| Fields.java:14:5:14:9 | SSA call def(this.xs) | Fields.java:15:9:15:10 | xs | | Fields.java:15:5:15:10 | SSA def(x) | Fields.java:16:9:16:9 | x | -| Fields.java:17:7:17:11 | SSA impl upd[nonlocal](this.xs) | Fields.java:18:9:18:15 | this.xs | +| Fields.java:17:7:17:11 | SSA call def(this.xs) | Fields.java:18:9:18:15 | this.xs | | Fields.java:18:5:18:16 | SSA phi(this.xs) | Fields.java:18:9:18:15 | this.xs | | Fields.java:19:5:19:19 | SSA def(this.xs) | Fields.java:20:9:20:10 | xs | -| Fields.java:23:19:49:3 | SSA init(Fields.stat) | Fields.java:27:15:27:18 | stat | -| Fields.java:23:19:49:3 | SSA init(this.xs) | Fields.java:26:15:26:16 | xs | +| Fields.java:23:19:49:3 | SSA entry def(Fields.stat) | Fields.java:27:15:27:18 | stat | +| Fields.java:23:19:49:3 | SSA entry def(this.xs) | Fields.java:26:15:26:16 | xs | | Fields.java:24:12:24:27 | SSA def(f) | Fields.java:25:15:25:15 | f | -| Fields.java:24:12:24:27 | SSA impl upd[explicit qualifier](f.xs) | Fields.java:25:15:25:18 | f.xs | -| Fields.java:24:16:24:27 | SSA impl upd[nonlocal](Fields.stat) | Fields.java:27:15:27:18 | stat | -| Fields.java:28:5:28:12 | SSA impl upd[nonlocal](Fields.stat) | Fields.java:31:9:31:12 | stat | -| Fields.java:28:5:28:12 | SSA impl upd[nonlocal](f.xs) | Fields.java:29:9:29:12 | f.xs | -| Fields.java:28:5:28:12 | SSA impl upd[nonlocal](this.xs) | Fields.java:30:9:30:10 | xs | -| Fields.java:32:5:32:9 | SSA impl upd[nonlocal](Fields.stat) | Fields.java:35:9:35:12 | stat | -| Fields.java:32:5:32:9 | SSA impl upd[nonlocal](f.xs) | Fields.java:33:9:33:12 | f.xs | -| Fields.java:32:5:32:9 | SSA impl upd[nonlocal](this.xs) | Fields.java:34:9:34:10 | xs | +| Fields.java:24:12:24:27 | SSA qualifier def(f.xs) | Fields.java:25:15:25:18 | f.xs | +| Fields.java:24:16:24:27 | SSA call def(Fields.stat) | Fields.java:27:15:27:18 | stat | +| Fields.java:28:5:28:12 | SSA call def(Fields.stat) | Fields.java:31:9:31:12 | stat | +| Fields.java:28:5:28:12 | SSA call def(f.xs) | Fields.java:29:9:29:12 | f.xs | +| Fields.java:28:5:28:12 | SSA call def(this.xs) | Fields.java:30:9:30:10 | xs | +| Fields.java:32:5:32:9 | SSA call def(Fields.stat) | Fields.java:35:9:35:12 | stat | +| Fields.java:32:5:32:9 | SSA call def(f.xs) | Fields.java:33:9:33:12 | f.xs | +| Fields.java:32:5:32:9 | SSA call def(this.xs) | Fields.java:34:9:34:10 | xs | | Fields.java:36:5:36:19 | SSA def(this.xs) | Fields.java:38:9:38:10 | xs | | Fields.java:39:5:39:21 | SSA def(f.xs) | Fields.java:40:9:40:12 | f.xs | | Fields.java:41:5:41:10 | SSA def(z) | Fields.java:42:9:42:9 | z | | Fields.java:43:7:43:22 | SSA def(f) | Fields.java:44:9:44:9 | f | -| Fields.java:43:7:43:22 | SSA impl upd[explicit qualifier](f.xs) | Fields.java:44:9:44:12 | f.xs | -| Fields.java:43:11:43:22 | SSA impl upd[nonlocal](Fields.stat) | Fields.java:48:9:48:12 | stat | +| Fields.java:43:7:43:22 | SSA qualifier def(f.xs) | Fields.java:44:9:44:12 | f.xs | +| Fields.java:43:11:43:22 | SSA call def(Fields.stat) | Fields.java:48:9:48:12 | stat | | Fields.java:44:5:44:13 | SSA phi(Fields.stat) | Fields.java:48:9:48:12 | stat | | Fields.java:44:5:44:13 | SSA phi(f) | Fields.java:44:9:44:9 | f | | Fields.java:44:5:44:13 | SSA phi(f.xs) | Fields.java:44:9:44:12 | f.xs | -| Fields.java:45:5:45:16 | SSA impl upd[nonlocal](Fields.stat) | Fields.java:48:9:48:12 | stat | -| Nested.java:8:29:8:57 | SSA init(next(..).p1) | Nested.java:8:38:8:39 | p1 | -| Nested.java:8:29:8:57 | SSA init(next(..).x1) | Nested.java:8:43:8:44 | x1 | -| Nested.java:16:22:16:34 | SSA init(getInt(..).obj) | Nested.java:16:22:16:24 | obj | +| Fields.java:45:5:45:16 | SSA call def(Fields.stat) | Fields.java:48:9:48:12 | stat | +| Nested.java:8:29:8:57 | SSA capture def(next(..).p1) | Nested.java:8:38:8:39 | p1 | +| Nested.java:8:29:8:57 | SSA capture def(next(..).x1) | Nested.java:8:43:8:44 | x1 | +| Nested.java:16:22:16:34 | SSA capture def(getInt(..).obj) | Nested.java:16:22:16:24 | obj | | Nested.java:18:15:23:5 | SSA def(h2) | Nested.java:25:9:25:10 | h2 | -| Nested.java:19:27:22:7 | SSA init(getInt(..).hash) | Nested.java:21:21:21:24 | hash | -| Nested.java:19:27:22:7 | SSA init(getInt(..).x2) | Nested.java:21:16:21:17 | x2 | +| Nested.java:19:27:22:7 | SSA capture def(getInt(..).hash) | Nested.java:21:21:21:24 | hash | +| Nested.java:19:27:22:7 | SSA capture def(getInt(..).x2) | Nested.java:21:16:21:17 | x2 | | Nested.java:20:19:20:39 | SSA def(hnest) | Nested.java:21:37:21:41 | hnest | -| Nested.java:20:27:20:39 | SSA init(getInt(..).obj) | Nested.java:20:27:20:29 | obj | -| Nested.java:30:23:30:36 | SSA init(getInt(..).obj2) | Nested.java:30:23:30:26 | obj2 | -| Nested.java:33:29:42:3 | SSA init(p3) | Nested.java:35:9:35:10 | p3 | -| Nested.java:37:20:37:25 | SSA init(getInt(..).x3) | Nested.java:37:20:37:21 | x3 | -| Nested.java:40:20:40:25 | SSA init(getInt(..).x3) | Nested.java:40:20:40:21 | x3 | -| Test.java:4:19:32:2 | SSA init(param) | Test.java:9:7:9:11 | param | +| Nested.java:20:27:20:39 | SSA capture def(getInt(..).obj) | Nested.java:20:27:20:29 | obj | +| Nested.java:30:23:30:36 | SSA capture def(getInt(..).obj2) | Nested.java:30:23:30:26 | obj2 | +| Nested.java:33:29:42:3 | SSA param(p3) | Nested.java:35:9:35:10 | p3 | +| Nested.java:37:20:37:25 | SSA capture def(getInt(..).x3) | Nested.java:37:20:37:21 | x3 | +| Nested.java:40:20:40:25 | SSA capture def(getInt(..).x3) | Nested.java:40:20:40:21 | x3 | +| Test.java:4:19:32:2 | SSA param(param) | Test.java:9:7:9:11 | param | | Test.java:6:7:6:11 | SSA def(x) | Test.java:10:4:10:4 | x | | Test.java:6:7:6:11 | SSA def(x) | Test.java:20:10:20:10 | x | | Test.java:10:4:10:6 | SSA def(x) | Test.java:11:10:11:10 | x | @@ -58,15 +58,15 @@ | Test.java:27:25:27:27 | SSA def(i) | Test.java:27:19:27:19 | i | | Test.java:28:4:28:9 | SSA def(x) | Test.java:28:4:28:4 | x | | Test.java:28:4:28:9 | SSA def(x) | Test.java:31:10:31:10 | x | -| TestInstanceOfPattern.java:3:24:9:2 | SSA init(obj) | TestInstanceOfPattern.java:4:7:4:9 | obj | +| TestInstanceOfPattern.java:3:24:9:2 | SSA param(obj) | TestInstanceOfPattern.java:4:7:4:9 | obj | | TestInstanceOfPattern.java:4:29:4:29 | SSA def(s) | TestInstanceOfPattern.java:5:8:5:8 | s | | TestInstanceOfPattern.java:7:8:7:8 | SSA impl upd[untracked](this.s) | TestInstanceOfPattern.java:7:8:7:8 | s | -| TestInstanceOfPattern.java:10:25:16:2 | SSA init(obj) | TestInstanceOfPattern.java:11:9:11:11 | obj | +| TestInstanceOfPattern.java:10:25:16:2 | SSA param(obj) | TestInstanceOfPattern.java:11:9:11:11 | obj | | TestInstanceOfPattern.java:11:31:11:31 | SSA def(s) | TestInstanceOfPattern.java:14:8:14:8 | s | | TestInstanceOfPattern.java:12:8:12:8 | SSA impl upd[untracked](this.s) | TestInstanceOfPattern.java:12:8:12:8 | s | -| TestInstanceOfPattern.java:17:25:23:2 | SSA init(obj) | TestInstanceOfPattern.java:18:7:18:9 | obj | +| TestInstanceOfPattern.java:17:25:23:2 | SSA param(obj) | TestInstanceOfPattern.java:18:7:18:9 | obj | | TestInstanceOfPattern.java:18:29:18:29 | SSA def(s) | TestInstanceOfPattern.java:18:34:18:34 | s | | TestInstanceOfPattern.java:21:8:21:8 | SSA impl upd[untracked](this.s) | TestInstanceOfPattern.java:21:8:21:8 | s | -| TestInstanceOfPattern.java:24:25:30:2 | SSA init(obj) | TestInstanceOfPattern.java:25:7:25:9 | obj | -| TestInstanceOfPattern.java:24:25:30:2 | SSA init(this.s) | TestInstanceOfPattern.java:25:34:25:34 | s | -| TestInstanceOfPattern.java:24:25:30:2 | SSA init(this.s) | TestInstanceOfPattern.java:26:8:26:8 | s | +| TestInstanceOfPattern.java:24:25:30:2 | SSA entry def(this.s) | TestInstanceOfPattern.java:25:34:25:34 | s | +| TestInstanceOfPattern.java:24:25:30:2 | SSA entry def(this.s) | TestInstanceOfPattern.java:26:8:26:8 | s | +| TestInstanceOfPattern.java:24:25:30:2 | SSA param(obj) | TestInstanceOfPattern.java:25:7:25:9 | obj | diff --git a/java/ql/test/library-tests/ssa/ssaDef.expected b/java/ql/test/library-tests/ssa/ssaDef.expected index cac2ada3c51..12aaf49a650 100644 --- a/java/ql/test/library-tests/ssa/ssaDef.expected +++ b/java/ql/test/library-tests/ssa/ssaDef.expected @@ -1,53 +1,53 @@ | Fields.java:13:5:13:17 | x | Fields.java:15:5:15:10 | ...=... | SSA def(x) | -| Fields.java:13:15:13:16 | this.xs | Fields.java:12:19:21:3 | { ... } | SSA init(this.xs) | -| Fields.java:13:15:13:16 | this.xs | Fields.java:14:5:14:9 | upd(...) | SSA impl upd[nonlocal](this.xs) | -| Fields.java:13:15:13:16 | this.xs | Fields.java:17:7:17:11 | upd(...) | SSA impl upd[nonlocal](this.xs) | +| Fields.java:13:15:13:16 | this.xs | Fields.java:12:19:21:3 | { ... } | SSA entry def(this.xs) | +| Fields.java:13:15:13:16 | this.xs | Fields.java:14:5:14:9 | upd(...) | SSA call def(this.xs) | +| Fields.java:13:15:13:16 | this.xs | Fields.java:17:7:17:11 | upd(...) | SSA call def(this.xs) | | Fields.java:13:15:13:16 | this.xs | Fields.java:18:5:18:16 | ; | SSA phi(this.xs) | | Fields.java:13:15:13:16 | this.xs | Fields.java:19:5:19:19 | ...=... | SSA def(this.xs) | | Fields.java:24:5:24:28 | f | Fields.java:24:12:24:27 | f | SSA def(f) | | Fields.java:24:5:24:28 | f | Fields.java:43:7:43:22 | ...=... | SSA def(f) | | Fields.java:24:5:24:28 | f | Fields.java:44:5:44:13 | ; | SSA phi(f) | -| Fields.java:25:15:25:18 | f.xs | Fields.java:24:12:24:27 | f | SSA impl upd[explicit qualifier](f.xs) | -| Fields.java:25:15:25:18 | f.xs | Fields.java:28:5:28:12 | f(...) | SSA impl upd[nonlocal](f.xs) | -| Fields.java:25:15:25:18 | f.xs | Fields.java:32:5:32:9 | f(...) | SSA impl upd[nonlocal](f.xs) | +| Fields.java:25:15:25:18 | f.xs | Fields.java:24:12:24:27 | f | SSA qualifier def(f.xs) | +| Fields.java:25:15:25:18 | f.xs | Fields.java:28:5:28:12 | f(...) | SSA call def(f.xs) | +| Fields.java:25:15:25:18 | f.xs | Fields.java:32:5:32:9 | f(...) | SSA call def(f.xs) | | Fields.java:25:15:25:18 | f.xs | Fields.java:39:5:39:21 | ...=... | SSA def(f.xs) | -| Fields.java:25:15:25:18 | f.xs | Fields.java:43:7:43:22 | ...=... | SSA impl upd[explicit qualifier](f.xs) | +| Fields.java:25:15:25:18 | f.xs | Fields.java:43:7:43:22 | ...=... | SSA qualifier def(f.xs) | | Fields.java:25:15:25:18 | f.xs | Fields.java:44:5:44:13 | ; | SSA phi(f.xs) | | Fields.java:26:5:26:17 | z | Fields.java:41:5:41:10 | ...=... | SSA def(z) | -| Fields.java:26:15:26:16 | this.xs | Fields.java:23:19:49:3 | { ... } | SSA init(this.xs) | -| Fields.java:26:15:26:16 | this.xs | Fields.java:28:5:28:12 | f(...) | SSA impl upd[nonlocal](this.xs) | -| Fields.java:26:15:26:16 | this.xs | Fields.java:32:5:32:9 | f(...) | SSA impl upd[nonlocal](this.xs) | +| Fields.java:26:15:26:16 | this.xs | Fields.java:23:19:49:3 | { ... } | SSA entry def(this.xs) | +| Fields.java:26:15:26:16 | this.xs | Fields.java:28:5:28:12 | f(...) | SSA call def(this.xs) | +| Fields.java:26:15:26:16 | this.xs | Fields.java:32:5:32:9 | f(...) | SSA call def(this.xs) | | Fields.java:26:15:26:16 | this.xs | Fields.java:36:5:36:19 | ...=... | SSA def(this.xs) | -| Fields.java:27:15:27:18 | Fields.stat | Fields.java:23:19:49:3 | { ... } | SSA init(Fields.stat) | -| Fields.java:27:15:27:18 | Fields.stat | Fields.java:24:16:24:27 | new Fields(...) | SSA impl upd[nonlocal](Fields.stat) | -| Fields.java:27:15:27:18 | Fields.stat | Fields.java:28:5:28:12 | f(...) | SSA impl upd[nonlocal](Fields.stat) | -| Fields.java:27:15:27:18 | Fields.stat | Fields.java:32:5:32:9 | f(...) | SSA impl upd[nonlocal](Fields.stat) | -| Fields.java:27:15:27:18 | Fields.stat | Fields.java:43:11:43:22 | new Fields(...) | SSA impl upd[nonlocal](Fields.stat) | +| Fields.java:27:15:27:18 | Fields.stat | Fields.java:23:19:49:3 | { ... } | SSA entry def(Fields.stat) | +| Fields.java:27:15:27:18 | Fields.stat | Fields.java:24:16:24:27 | new Fields(...) | SSA call def(Fields.stat) | +| Fields.java:27:15:27:18 | Fields.stat | Fields.java:28:5:28:12 | f(...) | SSA call def(Fields.stat) | +| Fields.java:27:15:27:18 | Fields.stat | Fields.java:32:5:32:9 | f(...) | SSA call def(Fields.stat) | +| Fields.java:27:15:27:18 | Fields.stat | Fields.java:43:11:43:22 | new Fields(...) | SSA call def(Fields.stat) | | Fields.java:27:15:27:18 | Fields.stat | Fields.java:44:5:44:13 | ; | SSA phi(Fields.stat) | -| Fields.java:27:15:27:18 | Fields.stat | Fields.java:45:5:45:16 | new Fields(...) | SSA impl upd[nonlocal](Fields.stat) | -| Nested.java:4:26:4:31 | next(..).p1 | Nested.java:8:29:8:57 | { ... } | SSA init(next(..).p1) | -| Nested.java:4:26:4:31 | p1 | Nested.java:4:34:10:3 | { ... } | SSA init(p1) | -| Nested.java:5:5:5:15 | next(..).x1 | Nested.java:8:29:8:57 | { ... } | SSA init(next(..).x1) | +| Fields.java:27:15:27:18 | Fields.stat | Fields.java:45:5:45:16 | new Fields(...) | SSA call def(Fields.stat) | +| Nested.java:4:26:4:31 | next(..).p1 | Nested.java:8:29:8:57 | { ... } | SSA capture def(next(..).p1) | +| Nested.java:4:26:4:31 | p1 | Nested.java:4:34:10:3 | { ... } | SSA param(p1) | +| Nested.java:5:5:5:15 | next(..).x1 | Nested.java:8:29:8:57 | { ... } | SSA capture def(next(..).x1) | | Nested.java:5:5:5:15 | x1 | Nested.java:5:9:5:14 | x1 | SSA def(x1) | -| Nested.java:15:5:15:30 | getInt(..).obj | Nested.java:16:22:16:34 | { ... } | SSA init(getInt(..).obj) | -| Nested.java:15:5:15:30 | getInt(..).obj | Nested.java:20:27:20:39 | { ... } | SSA init(getInt(..).obj) | +| Nested.java:15:5:15:30 | getInt(..).obj | Nested.java:16:22:16:34 | { ... } | SSA capture def(getInt(..).obj) | +| Nested.java:15:5:15:30 | getInt(..).obj | Nested.java:20:27:20:39 | { ... } | SSA capture def(getInt(..).obj) | | Nested.java:15:5:15:30 | obj | Nested.java:15:12:15:29 | obj | SSA def(obj) | -| Nested.java:16:5:16:35 | getInt(..).hash | Nested.java:19:27:22:7 | { ... } | SSA init(getInt(..).hash) | +| Nested.java:16:5:16:35 | getInt(..).hash | Nested.java:19:27:22:7 | { ... } | SSA capture def(getInt(..).hash) | | Nested.java:16:5:16:35 | hash | Nested.java:16:15:16:34 | hash | SSA def(hash) | -| Nested.java:17:5:17:16 | getInt(..).x2 | Nested.java:19:27:22:7 | { ... } | SSA init(getInt(..).x2) | +| Nested.java:17:5:17:16 | getInt(..).x2 | Nested.java:19:27:22:7 | { ... } | SSA capture def(getInt(..).x2) | | Nested.java:17:5:17:16 | x2 | Nested.java:17:9:17:15 | x2 | SSA def(x2) | | Nested.java:18:5:23:6 | h2 | Nested.java:18:15:23:5 | h2 | SSA def(h2) | | Nested.java:20:9:20:40 | hnest | Nested.java:20:19:20:39 | hnest | SSA def(hnest) | -| Nested.java:24:5:24:31 | getInt(..).obj2 | Nested.java:30:23:30:36 | { ... } | SSA init(getInt(..).obj2) | +| Nested.java:24:5:24:31 | getInt(..).obj2 | Nested.java:30:23:30:36 | { ... } | SSA capture def(getInt(..).obj2) | | Nested.java:24:5:24:31 | obj2 | Nested.java:26:7:26:25 | ...=... | SSA def(obj2) | | Nested.java:24:5:24:31 | obj2 | Nested.java:28:7:28:25 | ...=... | SSA def(obj2) | | Nested.java:24:5:24:31 | obj2 | Nested.java:30:5:30:37 | var ...; | SSA phi(obj2) | -| Nested.java:33:21:33:26 | p3 | Nested.java:33:29:42:3 | { ... } | SSA init(p3) | -| Nested.java:34:5:34:11 | getInt(..).x3 | Nested.java:37:20:37:25 | { ... } | SSA init(getInt(..).x3) | -| Nested.java:34:5:34:11 | getInt(..).x3 | Nested.java:40:20:40:25 | { ... } | SSA init(getInt(..).x3) | +| Nested.java:33:21:33:26 | p3 | Nested.java:33:29:42:3 | { ... } | SSA param(p3) | +| Nested.java:34:5:34:11 | getInt(..).x3 | Nested.java:37:20:37:25 | { ... } | SSA capture def(getInt(..).x3) | +| Nested.java:34:5:34:11 | getInt(..).x3 | Nested.java:40:20:40:25 | { ... } | SSA capture def(getInt(..).x3) | | Nested.java:34:5:34:11 | x3 | Nested.java:36:7:36:12 | ...=... | SSA def(x3) | | Nested.java:34:5:34:11 | x3 | Nested.java:39:7:39:12 | ...=... | SSA def(x3) | -| Test.java:4:8:4:16 | param | Test.java:4:19:32:2 | { ... } | SSA init(param) | +| Test.java:4:8:4:16 | param | Test.java:4:19:32:2 | { ... } | SSA param(param) | | Test.java:4:8:4:16 | param | Test.java:20:10:20:10 | x | SSA phi(param) | | Test.java:4:8:4:16 | param | Test.java:21:8:21:14 | ...++ | SSA def(param) | | Test.java:6:3:6:12 | x | Test.java:6:7:6:11 | x | SSA def(x) | @@ -65,14 +65,14 @@ | Test.java:27:8:27:16 | i | Test.java:27:12:27:16 | i | SSA def(i) | | Test.java:27:8:27:16 | i | Test.java:27:19:27:19 | i | SSA phi(i) | | Test.java:27:8:27:16 | i | Test.java:27:25:27:27 | ...++ | SSA def(i) | -| TestInstanceOfPattern.java:3:12:3:21 | obj | TestInstanceOfPattern.java:3:24:9:2 | { ... } | SSA init(obj) | +| TestInstanceOfPattern.java:3:12:3:21 | obj | TestInstanceOfPattern.java:3:24:9:2 | { ... } | SSA param(obj) | | TestInstanceOfPattern.java:4:22:4:29 | s | TestInstanceOfPattern.java:4:29:4:29 | s | SSA def(s) | | TestInstanceOfPattern.java:7:8:7:8 | this.s | TestInstanceOfPattern.java:7:8:7:8 | s | SSA impl upd[untracked](this.s) | -| TestInstanceOfPattern.java:10:13:10:22 | obj | TestInstanceOfPattern.java:10:25:16:2 | { ... } | SSA init(obj) | +| TestInstanceOfPattern.java:10:13:10:22 | obj | TestInstanceOfPattern.java:10:25:16:2 | { ... } | SSA param(obj) | | TestInstanceOfPattern.java:11:24:11:31 | s | TestInstanceOfPattern.java:11:31:11:31 | s | SSA def(s) | | TestInstanceOfPattern.java:12:8:12:8 | this.s | TestInstanceOfPattern.java:12:8:12:8 | s | SSA impl upd[untracked](this.s) | -| TestInstanceOfPattern.java:17:13:17:22 | obj | TestInstanceOfPattern.java:17:25:23:2 | { ... } | SSA init(obj) | +| TestInstanceOfPattern.java:17:13:17:22 | obj | TestInstanceOfPattern.java:17:25:23:2 | { ... } | SSA param(obj) | | TestInstanceOfPattern.java:18:22:18:29 | s | TestInstanceOfPattern.java:18:29:18:29 | s | SSA def(s) | | TestInstanceOfPattern.java:21:8:21:8 | this.s | TestInstanceOfPattern.java:21:8:21:8 | s | SSA impl upd[untracked](this.s) | -| TestInstanceOfPattern.java:24:13:24:22 | obj | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA init(obj) | -| TestInstanceOfPattern.java:25:34:25:34 | this.s | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA init(this.s) | +| TestInstanceOfPattern.java:24:13:24:22 | obj | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA param(obj) | +| TestInstanceOfPattern.java:25:34:25:34 | this.s | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA entry def(this.s) | diff --git a/java/ql/test/library-tests/ssa/ssaUse.expected b/java/ql/test/library-tests/ssa/ssaUse.expected index f55797b309b..7544aa76d55 100644 --- a/java/ql/test/library-tests/ssa/ssaUse.expected +++ b/java/ql/test/library-tests/ssa/ssaUse.expected @@ -1,6 +1,6 @@ | Fields.java:13:5:13:17 | x | Fields.java:15:5:15:10 | ...=... | SSA def(x) | Fields.java:16:9:16:9 | x | -| Fields.java:13:15:13:16 | this.xs | Fields.java:12:19:21:3 | { ... } | SSA init(this.xs) | Fields.java:13:15:13:16 | xs | -| Fields.java:13:15:13:16 | this.xs | Fields.java:14:5:14:9 | upd(...) | SSA impl upd[nonlocal](this.xs) | Fields.java:15:9:15:10 | xs | +| Fields.java:13:15:13:16 | this.xs | Fields.java:12:19:21:3 | { ... } | SSA entry def(this.xs) | Fields.java:13:15:13:16 | xs | +| Fields.java:13:15:13:16 | this.xs | Fields.java:14:5:14:9 | upd(...) | SSA call def(this.xs) | Fields.java:15:9:15:10 | xs | | Fields.java:13:15:13:16 | this.xs | Fields.java:18:5:18:16 | ; | SSA phi(this.xs) | Fields.java:18:9:18:15 | this.xs | | Fields.java:13:15:13:16 | this.xs | Fields.java:19:5:19:19 | ...=... | SSA def(this.xs) | Fields.java:20:9:20:10 | xs | | Fields.java:24:5:24:28 | f | Fields.java:24:12:24:27 | f | SSA def(f) | Fields.java:25:15:25:15 | f | @@ -12,39 +12,39 @@ | Fields.java:24:5:24:28 | f | Fields.java:24:12:24:27 | f | SSA def(f) | Fields.java:40:9:40:9 | f | | Fields.java:24:5:24:28 | f | Fields.java:44:5:44:13 | ; | SSA phi(f) | Fields.java:44:9:44:9 | f | | Fields.java:24:5:24:28 | f | Fields.java:44:5:44:13 | ; | SSA phi(f) | Fields.java:46:9:46:9 | f | -| Fields.java:25:15:25:18 | f.xs | Fields.java:24:12:24:27 | f | SSA impl upd[explicit qualifier](f.xs) | Fields.java:25:15:25:18 | f.xs | -| Fields.java:25:15:25:18 | f.xs | Fields.java:28:5:28:12 | f(...) | SSA impl upd[nonlocal](f.xs) | Fields.java:29:9:29:12 | f.xs | -| Fields.java:25:15:25:18 | f.xs | Fields.java:32:5:32:9 | f(...) | SSA impl upd[nonlocal](f.xs) | Fields.java:33:9:33:12 | f.xs | -| Fields.java:25:15:25:18 | f.xs | Fields.java:32:5:32:9 | f(...) | SSA impl upd[nonlocal](f.xs) | Fields.java:37:9:37:12 | f.xs | +| Fields.java:25:15:25:18 | f.xs | Fields.java:24:12:24:27 | f | SSA qualifier def(f.xs) | Fields.java:25:15:25:18 | f.xs | +| Fields.java:25:15:25:18 | f.xs | Fields.java:28:5:28:12 | f(...) | SSA call def(f.xs) | Fields.java:29:9:29:12 | f.xs | +| Fields.java:25:15:25:18 | f.xs | Fields.java:32:5:32:9 | f(...) | SSA call def(f.xs) | Fields.java:33:9:33:12 | f.xs | +| Fields.java:25:15:25:18 | f.xs | Fields.java:32:5:32:9 | f(...) | SSA call def(f.xs) | Fields.java:37:9:37:12 | f.xs | | Fields.java:25:15:25:18 | f.xs | Fields.java:39:5:39:21 | ...=... | SSA def(f.xs) | Fields.java:40:9:40:12 | f.xs | | Fields.java:25:15:25:18 | f.xs | Fields.java:44:5:44:13 | ; | SSA phi(f.xs) | Fields.java:44:9:44:12 | f.xs | | Fields.java:25:15:25:18 | f.xs | Fields.java:44:5:44:13 | ; | SSA phi(f.xs) | Fields.java:46:9:46:12 | f.xs | | Fields.java:26:5:26:17 | z | Fields.java:41:5:41:10 | ...=... | SSA def(z) | Fields.java:42:9:42:9 | z | -| Fields.java:26:15:26:16 | this.xs | Fields.java:23:19:49:3 | { ... } | SSA init(this.xs) | Fields.java:26:15:26:16 | xs | -| Fields.java:26:15:26:16 | this.xs | Fields.java:28:5:28:12 | f(...) | SSA impl upd[nonlocal](this.xs) | Fields.java:30:9:30:10 | xs | -| Fields.java:26:15:26:16 | this.xs | Fields.java:32:5:32:9 | f(...) | SSA impl upd[nonlocal](this.xs) | Fields.java:34:9:34:10 | xs | +| Fields.java:26:15:26:16 | this.xs | Fields.java:23:19:49:3 | { ... } | SSA entry def(this.xs) | Fields.java:26:15:26:16 | xs | +| Fields.java:26:15:26:16 | this.xs | Fields.java:28:5:28:12 | f(...) | SSA call def(this.xs) | Fields.java:30:9:30:10 | xs | +| Fields.java:26:15:26:16 | this.xs | Fields.java:32:5:32:9 | f(...) | SSA call def(this.xs) | Fields.java:34:9:34:10 | xs | | Fields.java:26:15:26:16 | this.xs | Fields.java:36:5:36:19 | ...=... | SSA def(this.xs) | Fields.java:38:9:38:10 | xs | | Fields.java:26:15:26:16 | this.xs | Fields.java:36:5:36:19 | ...=... | SSA def(this.xs) | Fields.java:41:9:41:10 | xs | | Fields.java:26:15:26:16 | this.xs | Fields.java:36:5:36:19 | ...=... | SSA def(this.xs) | Fields.java:47:9:47:10 | xs | -| Fields.java:27:15:27:18 | Fields.stat | Fields.java:24:16:24:27 | new Fields(...) | SSA impl upd[nonlocal](Fields.stat) | Fields.java:27:15:27:18 | stat | -| Fields.java:27:15:27:18 | Fields.stat | Fields.java:28:5:28:12 | f(...) | SSA impl upd[nonlocal](Fields.stat) | Fields.java:31:9:31:12 | stat | -| Fields.java:27:15:27:18 | Fields.stat | Fields.java:32:5:32:9 | f(...) | SSA impl upd[nonlocal](Fields.stat) | Fields.java:35:9:35:12 | stat | -| Fields.java:27:15:27:18 | Fields.stat | Fields.java:45:5:45:16 | new Fields(...) | SSA impl upd[nonlocal](Fields.stat) | Fields.java:48:9:48:12 | stat | -| Nested.java:4:26:4:31 | next(..).p1 | Nested.java:8:29:8:57 | { ... } | SSA init(next(..).p1) | Nested.java:8:38:8:39 | p1 | -| Nested.java:5:5:5:15 | next(..).x1 | Nested.java:8:29:8:57 | { ... } | SSA init(next(..).x1) | Nested.java:8:43:8:44 | x1 | -| Nested.java:5:5:5:15 | next(..).x1 | Nested.java:8:29:8:57 | { ... } | SSA init(next(..).x1) | Nested.java:8:48:8:49 | x1 | -| Nested.java:5:5:5:15 | next(..).x1 | Nested.java:8:29:8:57 | { ... } | SSA init(next(..).x1) | Nested.java:8:53:8:54 | x1 | -| Nested.java:15:5:15:30 | getInt(..).obj | Nested.java:16:22:16:34 | { ... } | SSA init(getInt(..).obj) | Nested.java:16:22:16:24 | obj | -| Nested.java:15:5:15:30 | getInt(..).obj | Nested.java:20:27:20:39 | { ... } | SSA init(getInt(..).obj) | Nested.java:20:27:20:29 | obj | -| Nested.java:16:5:16:35 | getInt(..).hash | Nested.java:19:27:22:7 | { ... } | SSA init(getInt(..).hash) | Nested.java:21:21:21:24 | hash | -| Nested.java:17:5:17:16 | getInt(..).x2 | Nested.java:19:27:22:7 | { ... } | SSA init(getInt(..).x2) | Nested.java:21:16:21:17 | x2 | +| Fields.java:27:15:27:18 | Fields.stat | Fields.java:24:16:24:27 | new Fields(...) | SSA call def(Fields.stat) | Fields.java:27:15:27:18 | stat | +| Fields.java:27:15:27:18 | Fields.stat | Fields.java:28:5:28:12 | f(...) | SSA call def(Fields.stat) | Fields.java:31:9:31:12 | stat | +| Fields.java:27:15:27:18 | Fields.stat | Fields.java:32:5:32:9 | f(...) | SSA call def(Fields.stat) | Fields.java:35:9:35:12 | stat | +| Fields.java:27:15:27:18 | Fields.stat | Fields.java:45:5:45:16 | new Fields(...) | SSA call def(Fields.stat) | Fields.java:48:9:48:12 | stat | +| Nested.java:4:26:4:31 | next(..).p1 | Nested.java:8:29:8:57 | { ... } | SSA capture def(next(..).p1) | Nested.java:8:38:8:39 | p1 | +| Nested.java:5:5:5:15 | next(..).x1 | Nested.java:8:29:8:57 | { ... } | SSA capture def(next(..).x1) | Nested.java:8:43:8:44 | x1 | +| Nested.java:5:5:5:15 | next(..).x1 | Nested.java:8:29:8:57 | { ... } | SSA capture def(next(..).x1) | Nested.java:8:48:8:49 | x1 | +| Nested.java:5:5:5:15 | next(..).x1 | Nested.java:8:29:8:57 | { ... } | SSA capture def(next(..).x1) | Nested.java:8:53:8:54 | x1 | +| Nested.java:15:5:15:30 | getInt(..).obj | Nested.java:16:22:16:34 | { ... } | SSA capture def(getInt(..).obj) | Nested.java:16:22:16:24 | obj | +| Nested.java:15:5:15:30 | getInt(..).obj | Nested.java:20:27:20:39 | { ... } | SSA capture def(getInt(..).obj) | Nested.java:20:27:20:29 | obj | +| Nested.java:16:5:16:35 | getInt(..).hash | Nested.java:19:27:22:7 | { ... } | SSA capture def(getInt(..).hash) | Nested.java:21:21:21:24 | hash | +| Nested.java:17:5:17:16 | getInt(..).x2 | Nested.java:19:27:22:7 | { ... } | SSA capture def(getInt(..).x2) | Nested.java:21:16:21:17 | x2 | | Nested.java:18:5:23:6 | h2 | Nested.java:18:15:23:5 | h2 | SSA def(h2) | Nested.java:25:9:25:10 | h2 | | Nested.java:20:9:20:40 | hnest | Nested.java:20:19:20:39 | hnest | SSA def(hnest) | Nested.java:21:37:21:41 | hnest | -| Nested.java:24:5:24:31 | getInt(..).obj2 | Nested.java:30:23:30:36 | { ... } | SSA init(getInt(..).obj2) | Nested.java:30:23:30:26 | obj2 | -| Nested.java:33:21:33:26 | p3 | Nested.java:33:29:42:3 | { ... } | SSA init(p3) | Nested.java:35:9:35:10 | p3 | -| Nested.java:34:5:34:11 | getInt(..).x3 | Nested.java:37:20:37:25 | { ... } | SSA init(getInt(..).x3) | Nested.java:37:20:37:21 | x3 | -| Nested.java:34:5:34:11 | getInt(..).x3 | Nested.java:40:20:40:25 | { ... } | SSA init(getInt(..).x3) | Nested.java:40:20:40:21 | x3 | -| Test.java:4:8:4:16 | param | Test.java:4:19:32:2 | { ... } | SSA init(param) | Test.java:9:7:9:11 | param | +| Nested.java:24:5:24:31 | getInt(..).obj2 | Nested.java:30:23:30:36 | { ... } | SSA capture def(getInt(..).obj2) | Nested.java:30:23:30:26 | obj2 | +| Nested.java:33:21:33:26 | p3 | Nested.java:33:29:42:3 | { ... } | SSA param(p3) | Nested.java:35:9:35:10 | p3 | +| Nested.java:34:5:34:11 | getInt(..).x3 | Nested.java:37:20:37:25 | { ... } | SSA capture def(getInt(..).x3) | Nested.java:37:20:37:21 | x3 | +| Nested.java:34:5:34:11 | getInt(..).x3 | Nested.java:40:20:40:25 | { ... } | SSA capture def(getInt(..).x3) | Nested.java:40:20:40:21 | x3 | +| Test.java:4:8:4:16 | param | Test.java:4:19:32:2 | { ... } | SSA param(param) | Test.java:9:7:9:11 | param | | Test.java:4:8:4:16 | param | Test.java:20:10:20:10 | x | SSA phi(param) | Test.java:21:8:21:12 | param | | Test.java:6:3:6:12 | x | Test.java:6:7:6:11 | x | SSA def(x) | Test.java:10:4:10:4 | x | | Test.java:6:3:6:12 | x | Test.java:10:4:10:6 | ...++ | SSA def(x) | Test.java:11:10:11:10 | x | @@ -58,17 +58,17 @@ | Test.java:27:8:27:16 | i | Test.java:27:19:27:19 | i | SSA phi(i) | Test.java:27:19:27:19 | i | | Test.java:27:8:27:16 | i | Test.java:27:19:27:19 | i | SSA phi(i) | Test.java:27:25:27:25 | i | | Test.java:27:8:27:16 | i | Test.java:27:19:27:19 | i | SSA phi(i) | Test.java:28:9:28:9 | i | -| TestInstanceOfPattern.java:3:12:3:21 | obj | TestInstanceOfPattern.java:3:24:9:2 | { ... } | SSA init(obj) | TestInstanceOfPattern.java:4:7:4:9 | obj | +| TestInstanceOfPattern.java:3:12:3:21 | obj | TestInstanceOfPattern.java:3:24:9:2 | { ... } | SSA param(obj) | TestInstanceOfPattern.java:4:7:4:9 | obj | | TestInstanceOfPattern.java:4:22:4:29 | s | TestInstanceOfPattern.java:4:29:4:29 | s | SSA def(s) | TestInstanceOfPattern.java:5:8:5:8 | s | | TestInstanceOfPattern.java:7:8:7:8 | this.s | TestInstanceOfPattern.java:7:8:7:8 | s | SSA impl upd[untracked](this.s) | TestInstanceOfPattern.java:7:8:7:8 | s | -| TestInstanceOfPattern.java:10:13:10:22 | obj | TestInstanceOfPattern.java:10:25:16:2 | { ... } | SSA init(obj) | TestInstanceOfPattern.java:11:9:11:11 | obj | +| TestInstanceOfPattern.java:10:13:10:22 | obj | TestInstanceOfPattern.java:10:25:16:2 | { ... } | SSA param(obj) | TestInstanceOfPattern.java:11:9:11:11 | obj | | TestInstanceOfPattern.java:11:24:11:31 | s | TestInstanceOfPattern.java:11:31:11:31 | s | SSA def(s) | TestInstanceOfPattern.java:14:8:14:8 | s | | TestInstanceOfPattern.java:12:8:12:8 | this.s | TestInstanceOfPattern.java:12:8:12:8 | s | SSA impl upd[untracked](this.s) | TestInstanceOfPattern.java:12:8:12:8 | s | -| TestInstanceOfPattern.java:17:13:17:22 | obj | TestInstanceOfPattern.java:17:25:23:2 | { ... } | SSA init(obj) | TestInstanceOfPattern.java:18:7:18:9 | obj | +| TestInstanceOfPattern.java:17:13:17:22 | obj | TestInstanceOfPattern.java:17:25:23:2 | { ... } | SSA param(obj) | TestInstanceOfPattern.java:18:7:18:9 | obj | | TestInstanceOfPattern.java:18:22:18:29 | s | TestInstanceOfPattern.java:18:29:18:29 | s | SSA def(s) | TestInstanceOfPattern.java:18:34:18:34 | s | | TestInstanceOfPattern.java:18:22:18:29 | s | TestInstanceOfPattern.java:18:29:18:29 | s | SSA def(s) | TestInstanceOfPattern.java:19:8:19:8 | s | | TestInstanceOfPattern.java:21:8:21:8 | this.s | TestInstanceOfPattern.java:21:8:21:8 | s | SSA impl upd[untracked](this.s) | TestInstanceOfPattern.java:21:8:21:8 | s | -| TestInstanceOfPattern.java:24:13:24:22 | obj | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA init(obj) | TestInstanceOfPattern.java:25:7:25:9 | obj | -| TestInstanceOfPattern.java:25:34:25:34 | this.s | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA init(this.s) | TestInstanceOfPattern.java:25:34:25:34 | s | -| TestInstanceOfPattern.java:25:34:25:34 | this.s | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA init(this.s) | TestInstanceOfPattern.java:26:8:26:8 | s | -| TestInstanceOfPattern.java:25:34:25:34 | this.s | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA init(this.s) | TestInstanceOfPattern.java:28:8:28:8 | s | +| TestInstanceOfPattern.java:24:13:24:22 | obj | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA param(obj) | TestInstanceOfPattern.java:25:7:25:9 | obj | +| TestInstanceOfPattern.java:25:34:25:34 | this.s | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA entry def(this.s) | TestInstanceOfPattern.java:25:34:25:34 | s | +| TestInstanceOfPattern.java:25:34:25:34 | this.s | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA entry def(this.s) | TestInstanceOfPattern.java:26:8:26:8 | s | +| TestInstanceOfPattern.java:25:34:25:34 | this.s | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA entry def(this.s) | TestInstanceOfPattern.java:28:8:28:8 | s | From 109a5eb7e785061d4738809e4c1f280fa7c399f7 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 6 Nov 2025 15:55:06 +0100 Subject: [PATCH 031/127] Java: Accept qltest changes due to dropped UntrackedDef. --- .../dataflow/modulus-analysis/ModulusAnalysis.expected | 3 +-- java/ql/test/library-tests/ssa/firstUse.expected | 3 --- java/ql/test/library-tests/ssa/ssaDef.expected | 3 --- java/ql/test/library-tests/ssa/ssaUse.expected | 3 --- 4 files changed, 1 insertion(+), 11 deletions(-) diff --git a/java/ql/test/library-tests/dataflow/modulus-analysis/ModulusAnalysis.expected b/java/ql/test/library-tests/dataflow/modulus-analysis/ModulusAnalysis.expected index 45430971424..7750e18b747 100644 --- a/java/ql/test/library-tests/dataflow/modulus-analysis/ModulusAnalysis.expected +++ b/java/ql/test/library-tests/dataflow/modulus-analysis/ModulusAnalysis.expected @@ -21,7 +21,6 @@ | ModulusAnalysis.java:12:13:12:15 | mul | 0 | 3 | 42 | | ModulusAnalysis.java:12:13:12:15 | mul | SSA def(mul) | 0 | 0 | | ModulusAnalysis.java:12:19:12:20 | c2 | 0 | 43 | 0 | -| ModulusAnalysis.java:12:19:12:20 | c2 | SSA impl upd[untracked](this.c2) | 0 | 0 | | ModulusAnalysis.java:12:25:12:29 | seven | 0 | 7 | 0 | | ModulusAnalysis.java:12:25:12:29 | seven | SSA def(seven) | 0 | 0 | | ModulusAnalysis.java:13:32:13:34 | mul | 0 | 3 | 42 | @@ -71,7 +70,7 @@ | ModulusAnalysis.java:26:36:26:36 | y | 0 | 7 | 42 | | ModulusAnalysis.java:26:36:26:36 | y | SSA param(y) | 0 | 0 | | ModulusAnalysis.java:29:13:29:35 | l | 0 | 1 | 4 | -| ModulusAnalysis.java:29:17:29:26 | arr.length | SSA impl upd[untracked](arr.length) | 0 | 0 | +| ModulusAnalysis.java:29:17:29:26 | arr.length | arr.length | 0 | 0 | | ModulusAnalysis.java:29:17:29:30 | ... * ... | 0 | 0 | 4 | | ModulusAnalysis.java:29:17:29:35 | ... - ... | 0 | 1 | 4 | | ModulusAnalysis.java:29:30:29:30 | 4 | 0 | 4 | 0 | diff --git a/java/ql/test/library-tests/ssa/firstUse.expected b/java/ql/test/library-tests/ssa/firstUse.expected index 4fd2a78bb89..6494791be34 100644 --- a/java/ql/test/library-tests/ssa/firstUse.expected +++ b/java/ql/test/library-tests/ssa/firstUse.expected @@ -60,13 +60,10 @@ | Test.java:28:4:28:9 | SSA def(x) | Test.java:31:10:31:10 | x | | TestInstanceOfPattern.java:3:24:9:2 | SSA param(obj) | TestInstanceOfPattern.java:4:7:4:9 | obj | | TestInstanceOfPattern.java:4:29:4:29 | SSA def(s) | TestInstanceOfPattern.java:5:8:5:8 | s | -| TestInstanceOfPattern.java:7:8:7:8 | SSA impl upd[untracked](this.s) | TestInstanceOfPattern.java:7:8:7:8 | s | | TestInstanceOfPattern.java:10:25:16:2 | SSA param(obj) | TestInstanceOfPattern.java:11:9:11:11 | obj | | TestInstanceOfPattern.java:11:31:11:31 | SSA def(s) | TestInstanceOfPattern.java:14:8:14:8 | s | -| TestInstanceOfPattern.java:12:8:12:8 | SSA impl upd[untracked](this.s) | TestInstanceOfPattern.java:12:8:12:8 | s | | TestInstanceOfPattern.java:17:25:23:2 | SSA param(obj) | TestInstanceOfPattern.java:18:7:18:9 | obj | | TestInstanceOfPattern.java:18:29:18:29 | SSA def(s) | TestInstanceOfPattern.java:18:34:18:34 | s | -| TestInstanceOfPattern.java:21:8:21:8 | SSA impl upd[untracked](this.s) | TestInstanceOfPattern.java:21:8:21:8 | s | | TestInstanceOfPattern.java:24:25:30:2 | SSA entry def(this.s) | TestInstanceOfPattern.java:25:34:25:34 | s | | TestInstanceOfPattern.java:24:25:30:2 | SSA entry def(this.s) | TestInstanceOfPattern.java:26:8:26:8 | s | | TestInstanceOfPattern.java:24:25:30:2 | SSA param(obj) | TestInstanceOfPattern.java:25:7:25:9 | obj | diff --git a/java/ql/test/library-tests/ssa/ssaDef.expected b/java/ql/test/library-tests/ssa/ssaDef.expected index 12aaf49a650..a10b9d327b2 100644 --- a/java/ql/test/library-tests/ssa/ssaDef.expected +++ b/java/ql/test/library-tests/ssa/ssaDef.expected @@ -67,12 +67,9 @@ | Test.java:27:8:27:16 | i | Test.java:27:25:27:27 | ...++ | SSA def(i) | | TestInstanceOfPattern.java:3:12:3:21 | obj | TestInstanceOfPattern.java:3:24:9:2 | { ... } | SSA param(obj) | | TestInstanceOfPattern.java:4:22:4:29 | s | TestInstanceOfPattern.java:4:29:4:29 | s | SSA def(s) | -| TestInstanceOfPattern.java:7:8:7:8 | this.s | TestInstanceOfPattern.java:7:8:7:8 | s | SSA impl upd[untracked](this.s) | | TestInstanceOfPattern.java:10:13:10:22 | obj | TestInstanceOfPattern.java:10:25:16:2 | { ... } | SSA param(obj) | | TestInstanceOfPattern.java:11:24:11:31 | s | TestInstanceOfPattern.java:11:31:11:31 | s | SSA def(s) | -| TestInstanceOfPattern.java:12:8:12:8 | this.s | TestInstanceOfPattern.java:12:8:12:8 | s | SSA impl upd[untracked](this.s) | | TestInstanceOfPattern.java:17:13:17:22 | obj | TestInstanceOfPattern.java:17:25:23:2 | { ... } | SSA param(obj) | | TestInstanceOfPattern.java:18:22:18:29 | s | TestInstanceOfPattern.java:18:29:18:29 | s | SSA def(s) | -| TestInstanceOfPattern.java:21:8:21:8 | this.s | TestInstanceOfPattern.java:21:8:21:8 | s | SSA impl upd[untracked](this.s) | | TestInstanceOfPattern.java:24:13:24:22 | obj | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA param(obj) | | TestInstanceOfPattern.java:25:34:25:34 | this.s | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA entry def(this.s) | diff --git a/java/ql/test/library-tests/ssa/ssaUse.expected b/java/ql/test/library-tests/ssa/ssaUse.expected index 7544aa76d55..8525f62a883 100644 --- a/java/ql/test/library-tests/ssa/ssaUse.expected +++ b/java/ql/test/library-tests/ssa/ssaUse.expected @@ -60,14 +60,11 @@ | Test.java:27:8:27:16 | i | Test.java:27:19:27:19 | i | SSA phi(i) | Test.java:28:9:28:9 | i | | TestInstanceOfPattern.java:3:12:3:21 | obj | TestInstanceOfPattern.java:3:24:9:2 | { ... } | SSA param(obj) | TestInstanceOfPattern.java:4:7:4:9 | obj | | TestInstanceOfPattern.java:4:22:4:29 | s | TestInstanceOfPattern.java:4:29:4:29 | s | SSA def(s) | TestInstanceOfPattern.java:5:8:5:8 | s | -| TestInstanceOfPattern.java:7:8:7:8 | this.s | TestInstanceOfPattern.java:7:8:7:8 | s | SSA impl upd[untracked](this.s) | TestInstanceOfPattern.java:7:8:7:8 | s | | TestInstanceOfPattern.java:10:13:10:22 | obj | TestInstanceOfPattern.java:10:25:16:2 | { ... } | SSA param(obj) | TestInstanceOfPattern.java:11:9:11:11 | obj | | TestInstanceOfPattern.java:11:24:11:31 | s | TestInstanceOfPattern.java:11:31:11:31 | s | SSA def(s) | TestInstanceOfPattern.java:14:8:14:8 | s | -| TestInstanceOfPattern.java:12:8:12:8 | this.s | TestInstanceOfPattern.java:12:8:12:8 | s | SSA impl upd[untracked](this.s) | TestInstanceOfPattern.java:12:8:12:8 | s | | TestInstanceOfPattern.java:17:13:17:22 | obj | TestInstanceOfPattern.java:17:25:23:2 | { ... } | SSA param(obj) | TestInstanceOfPattern.java:18:7:18:9 | obj | | TestInstanceOfPattern.java:18:22:18:29 | s | TestInstanceOfPattern.java:18:29:18:29 | s | SSA def(s) | TestInstanceOfPattern.java:18:34:18:34 | s | | TestInstanceOfPattern.java:18:22:18:29 | s | TestInstanceOfPattern.java:18:29:18:29 | s | SSA def(s) | TestInstanceOfPattern.java:19:8:19:8 | s | -| TestInstanceOfPattern.java:21:8:21:8 | this.s | TestInstanceOfPattern.java:21:8:21:8 | s | SSA impl upd[untracked](this.s) | TestInstanceOfPattern.java:21:8:21:8 | s | | TestInstanceOfPattern.java:24:13:24:22 | obj | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA param(obj) | TestInstanceOfPattern.java:25:7:25:9 | obj | | TestInstanceOfPattern.java:25:34:25:34 | this.s | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA entry def(this.s) | TestInstanceOfPattern.java:25:34:25:34 | s | | TestInstanceOfPattern.java:25:34:25:34 | this.s | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA entry def(this.s) | TestInstanceOfPattern.java:26:8:26:8 | s | From 437ca58e3f7cf8f73e8f04f1d327c5e84f605312 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 7 Nov 2025 12:49:27 +0100 Subject: [PATCH 032/127] Java: Add change note. --- java/ql/lib/change-notes/2025-10-07-ssa-api-updates.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 java/ql/lib/change-notes/2025-10-07-ssa-api-updates.md diff --git a/java/ql/lib/change-notes/2025-10-07-ssa-api-updates.md b/java/ql/lib/change-notes/2025-10-07-ssa-api-updates.md new file mode 100644 index 00000000000..c8388ef086d --- /dev/null +++ b/java/ql/lib/change-notes/2025-10-07-ssa-api-updates.md @@ -0,0 +1,4 @@ +--- +category: deprecated +--- +* The SSA interface has been updated and all classes and several predicates have been renamed. See the qldoc for more specific migration information. From 4a58a0158a5e717f3d3a741c61cd4c3876e6de02 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 11 Nov 2025 15:28:45 +0100 Subject: [PATCH 033/127] Java: Reinstate useless null check results for fields that are no longer tracked as SSA variables. --- java/ql/lib/semmle/code/java/dataflow/NullGuards.qll | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll b/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll index b165d1516d6..709bb1e3d47 100644 --- a/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll +++ b/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll @@ -105,6 +105,13 @@ Expr clearlyNotNullExpr(Expr reason) { result = v.getARead() and not result = baseNotNullExpr() ) + or + exists(Field f | + result = f.getAnAccess() and + f.isFinal() and + f.getInitializer() = clearlyNotNullExpr(reason) and + not result = baseNotNullExpr() + ) } /** Holds if `v` is an SSA variable that is provably not `null`. */ From 95987724773aed10a41d99eff43b87425e571ee0 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 12 Nov 2025 14:37:45 +0000 Subject: [PATCH 034/127] Update rust/ql/examples/snippets/simple_constant_password.ql Co-authored-by: Tom Hvitved --- rust/ql/examples/snippets/simple_constant_password.ql | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/rust/ql/examples/snippets/simple_constant_password.ql b/rust/ql/examples/snippets/simple_constant_password.ql index 202029994f4..1f0e0a8e101 100644 --- a/rust/ql/examples/snippets/simple_constant_password.ql +++ b/rust/ql/examples/snippets/simple_constant_password.ql @@ -30,9 +30,10 @@ module ConstantPasswordConfig implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node node) { // `node` is an argument whose corresponding parameter name matches the pattern "pass%" - exists(CallExpr call, Function target, int argIndex | + exists(CallExpr call, Function target, int argIndex, Variable v | call.getStaticTarget() = target and - target.getParam(argIndex).getPat().(IdentPat).getName().getText().matches("pass%") and + v.getParameter() = target.getParam(argIndex) and + v.getText().matches("pass%") and call.getArg(argIndex) = node.asExpr().getExpr() ) } From 23e42c89ee4ae90c125ac9ef7063b0ade765d4e3 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 29 Aug 2025 11:56:15 +0200 Subject: [PATCH 035/127] JS: Overlay annotations for AST layer --- .../ql/lib/Expressions/ExprHasNoEffect.qll | 6 ++ javascript/ql/lib/semmle/javascript/AMD.qll | 20 ++++-- javascript/ql/lib/semmle/javascript/AST.qll | 5 ++ javascript/ql/lib/semmle/javascript/CFG.qll | 2 + .../ql/lib/semmle/javascript/Classes.qll | 5 ++ .../ql/lib/semmle/javascript/Closure.qll | 23 +++++++ .../ql/lib/semmle/javascript/Comments.qll | 2 + .../ql/lib/semmle/javascript/Constants.qll | 2 + .../ql/lib/semmle/javascript/DefUse.qll | 4 ++ javascript/ql/lib/semmle/javascript/E4X.qll | 2 + .../lib/semmle/javascript/ES2015Modules.qll | 27 ++++++++ .../ql/lib/semmle/javascript/Errors.qll | 2 + javascript/ql/lib/semmle/javascript/Expr.qll | 37 +++++++++++ .../ql/lib/semmle/javascript/Externs.qll | 2 + javascript/ql/lib/semmle/javascript/Files.qll | 8 +++ .../ql/lib/semmle/javascript/Functions.qll | 4 ++ javascript/ql/lib/semmle/javascript/HTML.qll | 3 + javascript/ql/lib/semmle/javascript/JSDoc.qll | 3 + javascript/ql/lib/semmle/javascript/JSON.qll | 2 + javascript/ql/lib/semmle/javascript/JSX.qll | 2 + javascript/ql/lib/semmle/javascript/Lines.qll | 2 + .../ql/lib/semmle/javascript/Locations.qll | 2 + .../ql/lib/semmle/javascript/Modules.qll | 16 +++++ javascript/ql/lib/semmle/javascript/NPM.qll | 2 + .../ql/lib/semmle/javascript/NodeJS.qll | 15 +++++ .../ql/lib/semmle/javascript/Promises.qll | 2 + .../ql/lib/semmle/javascript/Regexp.qll | 16 +++++ javascript/ql/lib/semmle/javascript/SSA.qll | 2 + javascript/ql/lib/semmle/javascript/Stmt.qll | 2 + .../ql/lib/semmle/javascript/Templates.qll | 3 + .../ql/lib/semmle/javascript/Tokens.qll | 2 + .../lib/semmle/javascript/TypeAnnotations.qll | 9 +++ .../ql/lib/semmle/javascript/TypeScript.qll | 63 +++++++++++++++++++ .../ql/lib/semmle/javascript/Variables.qll | 8 +++ javascript/ql/lib/semmle/javascript/XML.qll | 2 + javascript/ql/lib/semmle/javascript/YAML.qll | 2 + .../javascript/dataflow/AbstractValues.qll | 3 + .../dataflow/AdditionalFlowSteps.qll | 5 ++ .../javascript/dataflow/Configuration.qll | 8 +++ .../CustomAbstractValueDefinitions.qll | 5 ++ .../semmle/javascript/dataflow/DataFlow.qll | 16 +++++ .../javascript/dataflow/FlowSummary.qll | 2 + .../javascript/dataflow/InferredTypes.qll | 3 + .../lib/semmle/javascript/dataflow/Nodes.qll | 24 ++++++- .../javascript/dataflow/Refinements.qll | 21 +++++++ .../semmle/javascript/dataflow/Sources.qll | 4 ++ .../dataflow/internal/AbstractValuesImpl.qll | 2 + .../dataflow/internal/AccessPaths.qll | 2 + .../internal/AdditionalFlowInternal.qll | 4 ++ .../javascript/dataflow/internal/Contents.qll | 9 +++ .../dataflow/internal/DataFlowNode.qll | 2 + .../dataflow/internal/DataFlowPrivate.qll | 52 +++++++++++++++ .../dataflow/internal/FlowSteps.qll | 25 ++++---- .../dataflow/internal/FlowSummaryPrivate.qll | 3 + .../dataflow/internal/VariableCapture.qll | 3 + .../dataflow/internal/VariableOrThis.qll | 3 + .../dataflow/internal/sharedlib/Ssa.qll | 2 + .../javascript/frameworks/LazyCache.qll | 3 + .../frameworks/LodashUnderscore.qll | 20 ++++++ .../javascript/frameworks/NodeJSLib.qll | 4 ++ .../javascript/frameworks/Templating.qll | 38 +++++++++++ .../javascript/frameworks/UriLibraries.qll | 2 + .../frameworks/data/ModelsAsData.qll | 2 + .../data/internal/ApiGraphModels.qll | 2 + .../internal/ApiGraphModelsExtensions.qll | 2 + .../data/internal/ApiGraphModelsSpecific.qll | 5 ++ .../internal/BasicBlockInternal.qll | 2 + .../javascript/internal/CachedStages.qll | 10 +-- .../javascript/internal/StmtContainers.qll | 2 + .../flow_summaries/AmbiguousCoreMethods.qll | 2 + .../internal/flow_summaries/Arrays.qll | 2 + .../internal/flow_summaries/AsyncAwait.qll | 2 + .../internal/flow_summaries/Decoders.qll | 3 + .../flow_summaries/DynamicImportStep.qll | 2 + .../internal/flow_summaries/ExceptionFlow.qll | 2 + .../flow_summaries/FlowSummaryUtil.qll | 3 + .../internal/flow_summaries/ForOfLoops.qll | 2 + .../internal/flow_summaries/Generators.qll | 2 + .../internal/flow_summaries/Iterators.qll | 2 + .../internal/flow_summaries/JsonStringify.qll | 2 + .../internal/flow_summaries/Maps.qll | 2 + .../internal/flow_summaries/Promises.qll | 2 + .../internal/flow_summaries/Sets.qll | 2 + .../internal/flow_summaries/Strings.qll | 2 + .../internal/flow_summaries/TypedArrays.qll | 3 + .../flow_summaries/UrlSearchParams.qll | 2 + 86 files changed, 615 insertions(+), 21 deletions(-) diff --git a/javascript/ql/lib/Expressions/ExprHasNoEffect.qll b/javascript/ql/lib/Expressions/ExprHasNoEffect.qll index 9813d9b32ed..5e194b3fc3a 100644 --- a/javascript/ql/lib/Expressions/ExprHasNoEffect.qll +++ b/javascript/ql/lib/Expressions/ExprHasNoEffect.qll @@ -1,6 +1,8 @@ /** * Provides classes and predicates for the 'js/useless-expression' query. */ +overlay[local] +module; import javascript import DOMProperties @@ -60,6 +62,7 @@ predicate isDeclaration(Expr e) { /** * Holds if there exists a getter for a property called `name` anywhere in the program. */ +overlay[global] predicate isGetterProperty(string name) { // there is a call of the form `Object.defineProperty(..., name, descriptor)` ... exists(CallToObjectDefineProperty defProp | name = defProp.getPropertyName() | @@ -85,6 +88,7 @@ predicate isGetterProperty(string name) { /** * A property access that may invoke a getter. */ +overlay[global] class GetterPropertyAccess extends PropAccess { override predicate isImpure() { isGetterProperty(this.getPropertyName()) } } @@ -123,6 +127,7 @@ predicate isReceiverSuppressingCall(CallExpr c, Expr dummy, PropAccess callee) { * even if they do, the call itself is useless and should be flagged by this * query. */ +overlay[global] predicate noSideEffects(Expr e) { e.isPure() or @@ -148,6 +153,7 @@ predicate isCompoundExpression(Expr e) { /** * Holds if the expression `e` should be reported as having no effect. */ +overlay[global] predicate hasNoEffect(Expr e) { noSideEffects(e) and inVoidContext(e) and diff --git a/javascript/ql/lib/semmle/javascript/AMD.qll b/javascript/ql/lib/semmle/javascript/AMD.qll index 4828aff27cc..e66a04ce4ec 100644 --- a/javascript/ql/lib/semmle/javascript/AMD.qll +++ b/javascript/ql/lib/semmle/javascript/AMD.qll @@ -2,6 +2,8 @@ * Provides classes for working with * [Asynchronous Module Definitions](https://github.com/amdjs/amdjs-api/wiki/AMD). */ +overlay[local] +module; import javascript private import semmle.javascript.internal.CachedStages @@ -62,9 +64,11 @@ class AmdModuleDefinition extends CallExpr instanceof AmdModuleDefinition::Range } /** DEPRECATED. Use `getDependencyExpr` instead. */ + overlay[global] deprecated PathExpr getDependency(int i) { result = this.getDependencyExpr(i) } /** DEPRECATED. Use `getADependencyExpr` instead. */ + overlay[global] deprecated PathExpr getADependency() { result = this.getADependencyExpr() } /** Gets the `i`th dependency of this module definition. */ @@ -194,16 +198,19 @@ class AmdModuleDefinition extends CallExpr instanceof AmdModuleDefinition::Range * Gets an abstract value representing one or more values that may flow * into this module's `module.exports` property. */ + overlay[global] DefiniteAbstractValue getAModuleExportsValue() { result = [this.getAnImplicitExportsValue(), this.getAnExplicitExportsValue()] } + overlay[global] pragma[noinline, nomagic] private AbstractValue getAnImplicitExportsValue() { // implicit exports: anything that is returned from the factory function result = this.getModuleExpr().analyze().getAValue() } + overlay[global] pragma[noinline] private AbstractValue getAnExplicitExportsValue() { // explicit exports: anything assigned to `module.exports` @@ -227,6 +234,7 @@ class AmdModuleDefinition extends CallExpr instanceof AmdModuleDefinition::Range private predicate isPseudoDependency(string s) { s = ["exports", "require", "module"] } /** An AMD dependency, considered as a path expression. */ +overlay[global] private class AmdDependencyPath extends PathExprCandidate { AmdDependencyPath() { exists(AmdModuleDefinition amd | @@ -239,6 +247,7 @@ private class AmdDependencyPath extends PathExprCandidate { } /** A constant path element appearing in an AMD dependency expression. */ +overlay[global] deprecated private class ConstantAmdDependencyPathElement extends PathExpr, ConstantString { ConstantAmdDependencyPathElement() { this = any(AmdDependencyPath amd).getAPart() } @@ -281,6 +290,7 @@ private class AmdDependencyImport extends Import { * Specifically, we look for files whose absolute path ends with the imported path, possibly * adding well-known JavaScript file extensions like `.js`. */ + overlay[global] private File guessTarget() { exists(FilePath imported, string abspath, string dirname, string basename | this.targetCandidate(result, abspath, imported, dirname, basename) @@ -303,6 +313,7 @@ private class AmdDependencyImport extends Import { * Additionally, `abspath` is bound to the absolute path of `f`, `imported` to the imported path, and * `dirname` and `basename` to the dirname and basename (respectively) of `imported`. */ + overlay[global] private predicate targetCandidate( File f, string abspath, FilePath imported, string dirname, string basename ) { @@ -316,10 +327,12 @@ private class AmdDependencyImport extends Import { /** * Gets the module whose absolute path matches this import, if there is only a single such module. */ + overlay[global] private Module resolveByAbsolutePath() { result.getFile() = unique(File file | file = this.guessTarget()) } + overlay[global] override Module getImportedModule() { result = super.getImportedModule() or @@ -348,14 +361,12 @@ private class AmdDependencyImport extends Import { */ class AmdModule extends Module { cached - AmdModule() { - Stages::DataFlowStage::ref() and - exists(unique(AmdModuleDefinition def | amdModuleTopLevel(def, this))) - } + AmdModule() { exists(unique(AmdModuleDefinition def | amdModuleTopLevel(def, this))) } /** Gets the definition of this module. */ AmdModuleDefinition getDefine() { amdModuleTopLevel(result, this) } + overlay[global] override DataFlow::Node getAnExportedValue(string name) { exists(DataFlow::PropWrite pwn | result = pwn.getRhs() | pwn.getBase().analyze().getAValue() = this.getDefine().getAModuleExportsValue() and @@ -363,6 +374,7 @@ class AmdModule extends Module { ) } + overlay[global] override DataFlow::Node getABulkExportedNode() { // Assigned to `module.exports` via the factory's `module` parameter exists(AbstractModuleObject m, DataFlow::PropWrite write | diff --git a/javascript/ql/lib/semmle/javascript/AST.qll b/javascript/ql/lib/semmle/javascript/AST.qll index db0a2e153d5..6a0d35abea5 100644 --- a/javascript/ql/lib/semmle/javascript/AST.qll +++ b/javascript/ql/lib/semmle/javascript/AST.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with the AST-based representation of JavaScript programs. */ +overlay[local] +module; import javascript private import internal.StmtContainers @@ -470,6 +472,7 @@ module AST { */ class ValueNode extends AstNode, @dataflownode { /** Gets type inference results for this element. */ + overlay[global] DataFlow::AnalyzedNode analyze() { result = DataFlow::valueNode(this).analyze() } /** Gets the data flow node associated with this program element. */ @@ -481,6 +484,7 @@ module AST { * This can be used to map an expression to the class it refers to, or * associate it with a named value coming from an dependency. */ + overlay[global] ExprNameBindingNode getNameBinding() { result = this } /** @@ -490,6 +494,7 @@ module AST { * (according to the type system), or to associate it with a named type coming * from a dependency. */ + overlay[global] TypeNameBindingNode getTypeBinding() { TypeResolution::valueHasType(this, result) } } } diff --git a/javascript/ql/lib/semmle/javascript/CFG.qll b/javascript/ql/lib/semmle/javascript/CFG.qll index 95e1e9aef72..2270ddfeaaf 100644 --- a/javascript/ql/lib/semmle/javascript/CFG.qll +++ b/javascript/ql/lib/semmle/javascript/CFG.qll @@ -272,6 +272,8 @@ * Note that the `import` statement as a whole is part of the CFG of the body, while its single * import specifier `x as y` forms part of the preamble. */ +overlay[local] +module; import javascript private import internal.StmtContainers diff --git a/javascript/ql/lib/semmle/javascript/Classes.qll b/javascript/ql/lib/semmle/javascript/Classes.qll index 394ab791027..2485553370c 100644 --- a/javascript/ql/lib/semmle/javascript/Classes.qll +++ b/javascript/ql/lib/semmle/javascript/Classes.qll @@ -4,6 +4,8 @@ * Class declarations and class expressions are modeled by (QL) classes `ClassDeclaration` * and `ClassExpression`, respectively, which are both subclasses of `ClassDefinition`. */ +overlay[local] +module; import javascript @@ -119,6 +121,7 @@ class ClassOrInterface extends @class_or_interface, TypeParameterized { * * Anonymous classes and interfaces do not have a canonical name. */ + overlay[global] deprecated TypeName getTypeName() { result.getADefinition() = this } /** @@ -253,6 +256,7 @@ class ClassDefinition extends @class_definition, ClassOrInterface, AST::ValueNod /** * Gets the definition of the super class of this class, if it can be determined. */ + overlay[global] ClassDefinition getSuperClassDefinition() { result = this.getSuperClass().analyze().getAValue().(AbstractClass).getClass() } @@ -580,6 +584,7 @@ class MemberDeclaration extends @property, Documentable { int getMemberIndex() { properties(this, _, result, _, _) } /** Holds if the name of this member is computed by an impure expression. */ + overlay[global] predicate hasImpureNameExpr() { this.isComputed() and this.getNameExpr().isImpure() } /** diff --git a/javascript/ql/lib/semmle/javascript/Closure.qll b/javascript/ql/lib/semmle/javascript/Closure.qll index c3169833339..fd13023b2e6 100644 --- a/javascript/ql/lib/semmle/javascript/Closure.qll +++ b/javascript/ql/lib/semmle/javascript/Closure.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with the Closure-Library module system. */ +overlay[local] +module; import javascript @@ -40,6 +42,7 @@ module Closure { /** * A reference to a Closure namespace. */ + overlay[global] deprecated class ClosureNamespaceRef extends DataFlow::Node instanceof ClosureNamespaceRef::Range { /** * Gets the namespace being referenced. @@ -47,6 +50,7 @@ module Closure { string getClosureNamespace() { result = super.getClosureNamespace() } } + overlay[global] deprecated module ClosureNamespaceRef { /** * A reference to a Closure namespace. @@ -64,9 +68,11 @@ module Closure { /** * A data flow node that returns the value of a closure namespace. */ + overlay[global] deprecated class ClosureNamespaceAccess extends ClosureNamespaceRef instanceof ClosureNamespaceAccess::Range { } + overlay[global] deprecated module ClosureNamespaceAccess { /** * A data flow node that returns the value of a closure namespace. @@ -79,6 +85,7 @@ module Closure { /** * A call to a method on the `goog.` namespace, as a closure reference. */ + overlay[global] abstract deprecated private class DefaultNamespaceRef extends DataFlow::MethodCallNode, ClosureNamespaceRef::Range { @@ -91,6 +98,7 @@ module Closure { * Holds if `node` is the data flow node corresponding to the expression in * a top-level expression statement. */ + overlay[global] deprecated private predicate isTopLevelExpr(DataFlow::Node node) { any(TopLevel tl).getAChildStmt().(ExprStmt).getExpr().flow() = node } @@ -98,6 +106,7 @@ module Closure { /** * A top-level call to `goog.provide`. */ + overlay[global] deprecated private class DefaultClosureProvideCall extends DefaultNamespaceRef { DefaultClosureProvideCall() { this.getMethodName() = "provide" and @@ -108,12 +117,14 @@ module Closure { /** * A top-level call to `goog.provide`. */ + overlay[global] deprecated class ClosureProvideCall extends ClosureNamespaceRef, DataFlow::MethodCallNode instanceof DefaultClosureProvideCall { } /** * A call to `goog.require`. */ + overlay[global] deprecated private class DefaultClosureRequireCall extends DefaultNamespaceRef, ClosureNamespaceAccess::Range { @@ -123,12 +134,14 @@ module Closure { /** * A call to `goog.require`. */ + overlay[global] deprecated class ClosureRequireCall extends ClosureNamespaceAccess, DataFlow::MethodCallNode instanceof DefaultClosureRequireCall { } /** * A top-level call to `goog.module` or `goog.declareModuleId`. */ + overlay[global] deprecated private class DefaultClosureModuleDeclaration extends DefaultNamespaceRef { DefaultClosureModuleDeclaration() { (this.getMethodName() = "module" or this.getMethodName() = "declareModuleId") and @@ -139,6 +152,7 @@ module Closure { /** * A top-level call to `goog.module` or `goog.declareModuleId`. */ + overlay[global] deprecated class ClosureModuleDeclaration extends ClosureNamespaceRef, DataFlow::MethodCallNode instanceof DefaultClosureModuleDeclaration { } @@ -156,6 +170,7 @@ module Closure { /** * Gets the call to `goog.module` or `goog.declareModuleId` in this module. */ + overlay[global] deprecated ClosureModuleDeclaration getModuleDeclaration() { result.getTopLevel() = this } /** @@ -181,6 +196,7 @@ module Closure { result = this.getScope().getVariable("exports") } + overlay[global] override DataFlow::Node getAnExportedValue(string name) { exists(DataFlow::PropWrite write, Expr base | result = write.getRhs() and @@ -193,6 +209,7 @@ module Closure { ) } + overlay[global] override DataFlow::Node getABulkExportedNode() { result = this.getExportsVariable().getAnAssignedExpr().flow() } @@ -232,6 +249,7 @@ module Closure { /** * Holds if `name` is a closure namespace, including proper namespace prefixes. */ + overlay[global] pragma[noinline] predicate isClosureNamespace(string name) { exists(string namespace | @@ -253,6 +271,7 @@ module Closure { * Holds if a prefix of `name` is a closure namespace. */ bindingset[name] + overlay[global] private predicate hasClosureNamespacePrefix(string name) { isClosureNamespace(name.substring(0, name.indexOf("."))) or @@ -262,6 +281,7 @@ module Closure { /** * Gets the closure namespace path addressed by the given data flow node, if any. */ + overlay[global] string getClosureNamespaceFromSourceNode(DataFlow::SourceNode node) { node = AccessPath::getAReferenceOrAssignmentTo(result) and hasClosureNamespacePrefix(result) @@ -270,6 +290,7 @@ module Closure { /** * Gets the closure namespace path written to by the given property write, if any. */ + overlay[global] string getWrittenClosureNamespace(DataFlow::PropWrite node) { node.getRhs() = AccessPath::getAnAssignmentTo(result) and hasClosureNamespacePrefix(result) @@ -278,6 +299,7 @@ module Closure { /** * Gets a data flow node that refers to the given value exported from a Closure module. */ + overlay[global] DataFlow::SourceNode moduleImport(string moduleName) { getClosureNamespaceFromSourceNode(result) = moduleName } @@ -285,6 +307,7 @@ module Closure { /** * A call to `goog.bind`, as a partial function invocation. */ + overlay[global] private class BindCall extends DataFlow::PartialInvokeNode::Range, DataFlow::CallNode { BindCall() { this = moduleImport("goog.bind").getACall() } diff --git a/javascript/ql/lib/semmle/javascript/Comments.qll b/javascript/ql/lib/semmle/javascript/Comments.qll index 889843728a2..46ce8b8a4ba 100644 --- a/javascript/ql/lib/semmle/javascript/Comments.qll +++ b/javascript/ql/lib/semmle/javascript/Comments.qll @@ -1,4 +1,6 @@ /** Provides classes for working with JavaScript comments. */ +overlay[local] +module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/Constants.qll b/javascript/ql/lib/semmle/javascript/Constants.qll index 21e70869c67..b0b4a6c03ee 100644 --- a/javascript/ql/lib/semmle/javascript/Constants.qll +++ b/javascript/ql/lib/semmle/javascript/Constants.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with expressions that evaluate to constant values. */ +overlay[local] +module; import javascript private import semmle.javascript.internal.CachedStages diff --git a/javascript/ql/lib/semmle/javascript/DefUse.qll b/javascript/ql/lib/semmle/javascript/DefUse.qll index a9d021f939e..95cf57d543d 100644 --- a/javascript/ql/lib/semmle/javascript/DefUse.qll +++ b/javascript/ql/lib/semmle/javascript/DefUse.qll @@ -1,4 +1,6 @@ /** Provides classes and predicates for working with variable definitions and uses. */ +overlay[local] +module; import javascript @@ -231,6 +233,7 @@ class VarUse extends ControlFlowNode, @varref instanceof RValue { * * For global variables, each definition is considered to reach each use. */ + overlay[global] VarDef getADef() { result = this.getSsaVariable().getDefinition().getAContributingVarDef() or result.getAVariable() = this.getVariable().(GlobalVariable) @@ -241,5 +244,6 @@ class VarUse extends ControlFlowNode, @varref instanceof RValue { * * This predicate is only defined for variables that can be SSA-converted. */ + overlay[global] SsaVariable getSsaVariable() { result.getAUse() = this } } diff --git a/javascript/ql/lib/semmle/javascript/E4X.qll b/javascript/ql/lib/semmle/javascript/E4X.qll index cd112d60664..ce917c48cff 100644 --- a/javascript/ql/lib/semmle/javascript/E4X.qll +++ b/javascript/ql/lib/semmle/javascript/E4X.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with E4X. */ +overlay[local] +module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/ES2015Modules.qll b/javascript/ql/lib/semmle/javascript/ES2015Modules.qll index e584697c1e4..6eee9ea56e5 100644 --- a/javascript/ql/lib/semmle/javascript/ES2015Modules.qll +++ b/javascript/ql/lib/semmle/javascript/ES2015Modules.qll @@ -1,4 +1,6 @@ /** Provides classes for working with ECMAScript 2015 modules. */ +overlay[local] +module; import javascript private import semmle.javascript.internal.CachedStages @@ -29,11 +31,13 @@ class ES2015Module extends Module { /** Gets an export declaration in this module. */ ExportDeclaration getAnExport() { result.getTopLevel() = this } + overlay[global] override DataFlow::Node getAnExportedValue(string name) { exists(ExportDeclaration ed | ed = this.getAnExport() and result = ed.getSourceNode(name)) } /** Holds if this module exports variable `v` under the name `name`. */ + overlay[global] predicate exportsAs(LexicalName v, string name) { this.getAnExport().exportsAs(v, name) } override predicate isStrict() { @@ -50,6 +54,7 @@ class ES2015Module extends Module { * When a module has both named and `default` exports, the non-standard interpretation can lead to * ambiguities, so we only allow the standard interpretation in that case. */ + overlay[global] predicate hasBothNamedAndDefaultExports() { hasNamedExports(this) and hasDefaultExport(this) @@ -59,6 +64,7 @@ class ES2015Module extends Module { /** * Holds if `mod` contains one or more named export declarations other than `default`. */ +overlay[global] private predicate hasNamedExports(ES2015Module mod) { mod.getAnExport().(ExportNamedDeclaration).getASpecifier().getExportedName() != "default" or @@ -71,6 +77,7 @@ private predicate hasNamedExports(ES2015Module mod) { /** * Holds if this module contains a default export. */ +overlay[global] private predicate hasDefaultExport(ES2015Module mod) { // export default foo; mod.getAnExport() instanceof ExportDefaultDeclaration @@ -172,6 +179,7 @@ class ImportDeclaration extends Stmt, Import, @import_declaration { } /** A literal path expression appearing in an `import` declaration. */ +overlay[global] deprecated private class LiteralImportPath extends PathExpr, ConstantString { LiteralImportPath() { exists(ImportDeclaration req | this = req.getChildExpr(-1)) } @@ -198,6 +206,7 @@ deprecated private class LiteralImportPath extends PathExpr, ConstantString { */ class ImportSpecifier extends Expr, @import_specifier { /** Gets the import declaration in which this specifier appears. */ + overlay[global] ImportDeclaration getImportDeclaration() { result.getASpecifier() = this } /** Gets the imported symbol; undefined for default and namespace import specifiers. */ @@ -297,6 +306,7 @@ class BulkImportDeclaration extends ImportDeclaration { * import console, { log } from 'console'; * ``` */ +overlay[global] class SelectiveImportDeclaration extends ImportDeclaration { SelectiveImportDeclaration() { not this instanceof BulkImportDeclaration } @@ -330,9 +340,11 @@ class SelectiveImportDeclaration extends ImportDeclaration { */ abstract class ExportDeclaration extends Stmt, @export_declaration { /** Gets the module to which this export declaration belongs. */ + overlay[global] ES2015Module getEnclosingModule() { this = result.getAnExport() } /** Holds if this export declaration exports variable `v` under the name `name`. */ + overlay[global] abstract predicate exportsAs(LexicalName v, string name); /** @@ -356,6 +368,7 @@ abstract class ExportDeclaration extends Stmt, @export_declaration { * exports under the same name. In particular, its source node belongs * to module `a` or possibly to some other module from which `a` re-exports. */ + overlay[global] abstract DataFlow::Node getSourceNode(string name); /** Holds if is declared with the `type` keyword, so only types are exported. */ @@ -407,11 +420,13 @@ class BulkReExportDeclaration extends ReExportDeclaration, @export_all_declarati /** Gets the name of the module from which this declaration re-exports. */ override ConstantString getImportedPath() { result = this.getChildExpr(0) } + overlay[global] override predicate exportsAs(LexicalName v, string name) { this.getReExportedES2015Module().exportsAs(v, name) and not isShadowedFromBulkExport(this, name) } + overlay[global] override DataFlow::Node getSourceNode(string name) { result = this.getReExportedES2015Module().getAnExport().getSourceNode(name) } @@ -430,6 +445,7 @@ class BulkReExportDeclaration extends ReExportDeclaration, @export_all_declarati * At runtime, the interface `X` will have been removed, so `X` is actually re-exported anyway, * but we ignore this subtlety. */ +overlay[global] private predicate isShadowedFromBulkExport(BulkReExportDeclaration reExport, string name) { exists(ExportNamedDeclaration other | other.getTopLevel() = reExport.getEnclosingModule() | other.getAnExportedDecl().getName() = name @@ -452,6 +468,7 @@ class ExportDefaultDeclaration extends ExportDeclaration, @export_default_declar /** Gets the operand statement or expression that is exported by this declaration. */ ExprOrStmt getOperand() { result = this.getChild(0) } + overlay[global] override predicate exportsAs(LexicalName v, string name) { name = "default" and v = this.getADecl().getVariable() } @@ -464,6 +481,7 @@ class ExportDefaultDeclaration extends ExportDeclaration, @export_default_declar ) } + overlay[global] override DataFlow::Node getSourceNode(string name) { name = "default" and result = DataFlow::valueNode(this.getOperand()) } @@ -506,6 +524,7 @@ class ExportNamedDeclaration extends ExportDeclaration, @export_named_declaratio /** Gets the variable declaration, if any, exported by this named export. */ VarDecl getADecl() { result = this.getAnExportedDecl() } + overlay[global] override predicate exportsAs(LexicalName v, string name) { exists(LexicalDecl vd | vd = this.getAnExportedDecl() | name = vd.getName() and v = vd.getALexicalName() @@ -518,6 +537,7 @@ class ExportNamedDeclaration extends ExportDeclaration, @export_named_declaratio ) } + overlay[global] override DataFlow::Node getSourceNode(string name) { exists(VarDef d | d.getTarget() = this.getADecl() | name = d.getTarget().(VarDecl).getName() and @@ -555,6 +575,7 @@ class ExportNamedDeclaration extends ExportDeclaration, @export_named_declaratio private import semmle.javascript.dataflow.internal.PreCallGraphStep +overlay[global] private class ExportNamespaceStep extends PreCallGraphStep { override predicate storeStep(DataFlow::Node pred, DataFlow::SourceNode succ, string prop) { exists(ExportNamedDeclaration exprt, ExportNamespaceSpecifier spec | @@ -572,6 +593,7 @@ private class ExportNamespaceStep extends PreCallGraphStep { private class TypeOnlyExportDeclaration extends ExportNamedDeclaration { TypeOnlyExportDeclaration() { this.isTypeOnly() } + overlay[global] override predicate exportsAs(LexicalName v, string name) { super.exportsAs(v, name) and not v instanceof Variable @@ -745,9 +767,11 @@ abstract class ReExportDeclaration extends ExportDeclaration { abstract ConstantString getImportedPath(); /** Gets the module from which this declaration re-exports, if it is an ES2015 module. */ + overlay[global] ES2015Module getReExportedES2015Module() { result = this.getReExportedModule() } /** Gets the module from which this declaration re-exports. */ + overlay[global] cached Module getReExportedModule() { Stages::Imports::ref() and @@ -756,6 +780,7 @@ abstract class ReExportDeclaration extends ExportDeclaration { } /** A literal path expression appearing in a re-export declaration. */ +overlay[global] deprecated private class LiteralReExportPath extends PathExpr, ConstantString { LiteralReExportPath() { exists(ReExportDeclaration bred | this = bred.getImportedPath()) } @@ -795,11 +820,13 @@ class SelectiveReExportDeclaration extends ReExportDeclaration, ExportNamedDecla class OriginalExportDeclaration extends ExportDeclaration { OriginalExportDeclaration() { not this instanceof ReExportDeclaration } + overlay[global] override predicate exportsAs(LexicalName v, string name) { this.(ExportDefaultDeclaration).exportsAs(v, name) or this.(ExportNamedDeclaration).exportsAs(v, name) } + overlay[global] override DataFlow::Node getSourceNode(string name) { result = this.(ExportDefaultDeclaration).getSourceNode(name) or result = this.(ExportNamedDeclaration).getSourceNode(name) diff --git a/javascript/ql/lib/semmle/javascript/Errors.qll b/javascript/ql/lib/semmle/javascript/Errors.qll index 6a5d73566a4..518b76b5346 100644 --- a/javascript/ql/lib/semmle/javascript/Errors.qll +++ b/javascript/ql/lib/semmle/javascript/Errors.qll @@ -1,4 +1,6 @@ /** Provides classes for working with syntax errors. */ +overlay[local] +module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/Expr.qll b/javascript/ql/lib/semmle/javascript/Expr.qll index ae02511ba41..177ef6991ce 100644 --- a/javascript/ql/lib/semmle/javascript/Expr.qll +++ b/javascript/ql/lib/semmle/javascript/Expr.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with expressions. */ +overlay[local] +module; import javascript private import semmle.javascript.internal.CachedStages @@ -115,12 +117,14 @@ class Expr extends @expr, ExprOrStmt, ExprOrType, AST::ValueNode { string getStringValue() { Stages::Ast::ref() and result = getStringValue(this) } /** Holds if this expression is impure, that is, its evaluation could have side effects. */ + overlay[global] predicate isImpure() { any() } /** * Holds if this expression is pure, that is, its evaluation is guaranteed * to be side-effect free. */ + overlay[global] predicate isPure() { not this.isImpure() } /** @@ -153,21 +157,25 @@ class Expr extends @expr, ExprOrStmt, ExprOrType, AST::ValueNode { * Holds if this expression accesses the global variable `g`, either directly * or through the `window` object. */ + overlay[global] predicate accessesGlobal(string g) { this.flow().accessesGlobal(g) } /** * Holds if this expression may evaluate to `s`. */ + overlay[global] predicate mayHaveStringValue(string s) { this.flow().mayHaveStringValue(s) } /** * Holds if this expression may evaluate to `b`. */ + overlay[global] predicate mayHaveBooleanValue(boolean b) { this.flow().mayHaveBooleanValue(b) } /** * Holds if this expression may refer to the initial value of parameter `p`. */ + overlay[global] predicate mayReferToParameter(Parameter p) { DataFlow::parameterNode(p).flowsToExpr(this) } /** @@ -178,6 +186,7 @@ class Expr extends @expr, ExprOrStmt, ExprOrType, AST::ValueNode { * Has no result if the expression is in a JavaScript file or in a TypeScript * file that was extracted without type information. */ + overlay[global] deprecated Type getType() { ast_node_type(this, result) } /** @@ -250,6 +259,7 @@ class Expr extends @expr, ExprOrStmt, ExprOrType, AST::ValueNode { * Gets the data-flow node where exceptions thrown by this expression will * propagate if this expression causes an exception to be thrown. */ + overlay[caller] pragma[inline] DataFlow::Node getExceptionTarget() { result = getCatchParameterFromStmt(this.getRawEnclosingStmt(this)) @@ -301,6 +311,7 @@ class Identifier extends @identifier, ExprOrType { * ``` */ class Label extends @label, Identifier, Expr { + overlay[global] override predicate isImpure() { none() } override string getAPrimaryQlClass() { result = "Label" } @@ -330,6 +341,7 @@ class Literal extends @literal, Expr { */ string getRawValue() { literals(_, result, this) } + overlay[global] override predicate isImpure() { none() } override string getAPrimaryQlClass() { result = "Literal" } @@ -352,6 +364,7 @@ class ParExpr extends @par_expr, Expr { override int getIntValue() { result = this.getExpression().getIntValue() } + overlay[global] override predicate isImpure() { this.getExpression().isImpure() } override Expr getUnderlyingValue() { result = this.getExpression().getUnderlyingValue() } @@ -500,6 +513,7 @@ class RegExpLiteral extends @regexp_literal, Literal, RegExpParent { * ``` */ class ThisExpr extends @this_expr, Expr { + overlay[global] override predicate isImpure() { none() } /** @@ -555,6 +569,7 @@ class ArrayExpr extends @array_expr, Expr { /** Holds if this array literal has an omitted element. */ predicate hasOmittedElement() { this.elementIsOmitted(_) } + overlay[global] override predicate isImpure() { this.getAnElement().isImpure() } override string getAPrimaryQlClass() { result = "ArrayExpr" } @@ -597,6 +612,7 @@ class ObjectExpr extends @obj_expr, Expr { */ predicate hasTrailingComma() { this.getLastToken().getPreviousToken().getValue() = "," } + overlay[global] override predicate isImpure() { this.getAProperty().isImpure() } override string getAPrimaryQlClass() { result = "ObjectExpr" } @@ -664,6 +680,7 @@ class Property extends @property, Documentable { * Holds if this property is impure, that is, the evaluation of its name or * its initializer expression could have side effects. */ + overlay[global] predicate isImpure() { this.isComputed() and this.getNameExpr().isImpure() or @@ -826,6 +843,7 @@ class FunctionExpr extends @function_expr, Expr, Function { Stages::Ast::ref() and result = Expr.super.getContainer() } + overlay[global] override predicate isImpure() { none() } override string getAPrimaryQlClass() { result = "FunctionExpr" } @@ -846,6 +864,7 @@ class ArrowFunctionExpr extends @arrow_function_expr, Expr, Function { override StmtContainer getEnclosingContainer() { result = Expr.super.getContainer() } + overlay[global] override predicate isImpure() { none() } override Function getThisBinder() { @@ -877,6 +896,7 @@ class SeqExpr extends @seq_expr, Expr { /** Gets the last expression in this sequence. */ Expr getLastOperand() { result = this.getOperand(this.getNumOperands() - 1) } + overlay[global] override predicate isImpure() { this.getAnOperand().isImpure() } override Expr getUnderlyingValue() { result = this.getLastOperand().getUnderlyingValue() } @@ -906,6 +926,7 @@ class ConditionalExpr extends @conditional_expr, Expr { /** Gets either the 'then' or the 'else' expression of this conditional. */ Expr getABranch() { result = this.getConsequent() or result = this.getAlternate() } + overlay[global] override predicate isImpure() { this.getCondition().isImpure() or this.getABranch().isImpure() @@ -985,6 +1006,7 @@ class InvokeExpr extends @invokeexpr, Expr { * * This predicate is an approximation, computed using only local data flow. */ + overlay[global] predicate hasOptionArgument(int i, string name, Expr value) { value = this.flow().(DataFlow::InvokeNode).getOptionArgument(i, name).asExpr() } @@ -997,6 +1019,7 @@ class InvokeExpr extends @invokeexpr, Expr { * * This predicate is only populated for files extracted with full TypeScript extraction. */ + overlay[global] deprecated CallSignatureType getResolvedSignature() { invoke_expr_signature(this, result) } /** @@ -1014,6 +1037,7 @@ class InvokeExpr extends @invokeexpr, Expr { * * This predicate is only populated for files extracted with full TypeScript extraction. */ + overlay[global] deprecated CanonicalFunctionName getResolvedCalleeName() { ast_node_symbol(this, result) } /** @@ -1022,6 +1046,7 @@ class InvokeExpr extends @invokeexpr, Expr { * Note that the resolved function may be overridden in a subclass and thus is not * necessarily the actual target of this invocation at runtime. */ + overlay[global] Function getResolvedCallee() { TypeResolution::callTarget(this, result) } } @@ -1156,6 +1181,7 @@ class DotExpr extends @dot_expr, PropAccess { /** Gets the identifier specifying the name of the accessed property. */ Identifier getProperty() { result = this.getChildExpr(1) } + overlay[global] override predicate isImpure() { this.getBase().isImpure() } override string getAPrimaryQlClass() { result = "DotExpr" } @@ -1176,6 +1202,7 @@ class IndexExpr extends @index_expr, PropAccess { override string getPropertyName() { result = this.getIndex().(Literal).getValue() } + overlay[global] override predicate isImpure() { this.getBase().isImpure() or this.getIndex().isImpure() @@ -1201,6 +1228,7 @@ class UnaryExpr extends @unaryexpr, Expr { /** Gets the operator of this expression. */ string getOperator() { none() } + overlay[global] override predicate isImpure() { this.getOperand().isImpure() } override ControlFlowNode getFirstControlFlowNode() { @@ -1302,6 +1330,7 @@ class VoidExpr extends @void_expr, UnaryExpr { class DeleteExpr extends @delete_expr, UnaryExpr { override string getOperator() { result = "delete" } + overlay[global] override predicate isImpure() { any() } } @@ -1352,6 +1381,7 @@ class BinaryExpr extends @binaryexpr, Expr { /** Gets the operator of this expression. */ string getOperator() { none() } + overlay[global] override predicate isImpure() { this.getAnOperand().isImpure() } override ControlFlowNode getFirstControlFlowNode() { @@ -2233,6 +2263,7 @@ class YieldExpr extends @yield_expr, Expr { /** Holds if this is a `yield*` expression. */ predicate isDelegating() { is_delegating(this) } + overlay[global] override predicate isImpure() { any() } override ControlFlowNode getFirstControlFlowNode() { @@ -2289,6 +2320,7 @@ class ComprehensionExpr extends @comprehension_expr, Expr { /** Gets the body expression of this comprehension. */ Expr getBody() { result = this.getChildExpr(0) } + overlay[global] override predicate isImpure() { this.getABlock().isImpure() or this.getAFilter().isImpure() or @@ -2349,6 +2381,7 @@ class ComprehensionBlock extends @comprehension_block, Expr { /** Gets the domain over which this comprehension block iterates. */ Expr getDomain() { result = this.getChildExpr(1) } + overlay[global] override predicate isImpure() { this.getIterator().isImpure() or this.getDomain().isImpure() @@ -2675,6 +2708,7 @@ class AwaitExpr extends @await_expr, Expr { /** Gets the operand of this `await` expression. */ Expr getOperand() { result = this.getChildExpr(0) } + overlay[global] override predicate isImpure() { any() } override ControlFlowNode getFirstControlFlowNode() { @@ -2698,6 +2732,7 @@ class AwaitExpr extends @await_expr, Expr { * ``` */ class FunctionSentExpr extends @function_sent_expr, Expr { + overlay[global] override predicate isImpure() { none() } override string getAPrimaryQlClass() { result = "FunctionSentExpr" } @@ -2857,6 +2892,7 @@ class DynamicImportExpr extends @dynamic_import, Expr, Import { } /** A literal path expression appearing in a dynamic import. */ +overlay[global] deprecated private class LiteralDynamicImportPath extends PathExpr, ConstantString { LiteralDynamicImportPath() { exists(DynamicImportExpr di | this.getParentExpr*() = di.getSource()) @@ -2919,6 +2955,7 @@ class OptionalChainRoot extends ChainElem { * ``` */ class ImportMetaExpr extends @import_meta_expr, Expr { + overlay[global] override predicate isImpure() { none() } override string getAPrimaryQlClass() { result = "ImportMetaExpr" } diff --git a/javascript/ql/lib/semmle/javascript/Externs.qll b/javascript/ql/lib/semmle/javascript/Externs.qll index a2a2533d849..f894107528c 100644 --- a/javascript/ql/lib/semmle/javascript/Externs.qll +++ b/javascript/ql/lib/semmle/javascript/Externs.qll @@ -36,6 +36,8 @@ * Array.prototype.length; * */ +overlay[local] +module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/Files.qll b/javascript/ql/lib/semmle/javascript/Files.qll index b9274d92eba..8cc14ca0492 100644 --- a/javascript/ql/lib/semmle/javascript/Files.qll +++ b/javascript/ql/lib/semmle/javascript/Files.qll @@ -1,4 +1,6 @@ /** Provides classes for working with files and folders. */ +overlay[local] +module; import javascript private import NodeModuleResolutionImpl @@ -33,12 +35,14 @@ module Folder = Impl::Folder; /** A folder. */ class Folder extends Container, Impl::Folder { /** Gets the file or subfolder in this folder that has the given `name`, if any. */ + overlay[global] Container getChildContainer(string name) { result = this.getAChildContainer() and result.getBaseName() = name } /** Gets the file in this folder that has the given `stem` and `extension`, if any. */ + overlay[global] File getFile(string stem, string extension) { result = this.getAChildContainer() and result.getStem() = stem and @@ -46,6 +50,7 @@ class Folder extends Container, Impl::Folder { } /** Like `getFile` except `d.ts` is treated as a single extension. */ + overlay[global] private File getFileLongExtension(string stem, string extension) { not (stem.matches("%.d") and extension = "ts") and result = this.getFile(stem, extension) @@ -65,6 +70,7 @@ class Folder extends Container, Impl::Folder { * * HTML files will not be found by this method. */ + overlay[global] File getJavaScriptFile(string stem) { result = min(int p, string ext | @@ -78,6 +84,7 @@ class Folder extends Container, Impl::Folder { * Gets an implementation file and/or a typings file from this folder that has the given `stem`. * This could be a single `.ts` file or a pair of `.js` and `.d.ts` files. */ + overlay[global] File getJavaScriptFileOrTypings(string stem) { exists(File jsFile | jsFile = this.getJavaScriptFile(stem) | result = jsFile @@ -88,6 +95,7 @@ class Folder extends Container, Impl::Folder { } /** Gets a subfolder contained in this folder. */ + overlay[global] Folder getASubFolder() { result = this.getAChildContainer() } } diff --git a/javascript/ql/lib/semmle/javascript/Functions.qll b/javascript/ql/lib/semmle/javascript/Functions.qll index b72bfbc888e..9b1f98c3d0b 100644 --- a/javascript/ql/lib/semmle/javascript/Functions.qll +++ b/javascript/ql/lib/semmle/javascript/Functions.qll @@ -1,4 +1,6 @@ /** Provides classes for working with functions. */ +overlay[local] +module; import javascript @@ -434,11 +436,13 @@ class Function extends @function, Parameterized, TypeParameterized, StmtContaine * * This predicate is only populated for files extracted with full TypeScript extraction. */ + overlay[global] deprecated CanonicalFunctionName getCanonicalName() { ast_node_symbol(this, result) } /** * Gets the call signature of this function, as determined by the TypeScript compiler, if any. */ + overlay[global] deprecated CallSignatureType getCallSignature() { declared_function_signature(this, result) } } diff --git a/javascript/ql/lib/semmle/javascript/HTML.qll b/javascript/ql/lib/semmle/javascript/HTML.qll index 43b66db459f..8f70150963e 100644 --- a/javascript/ql/lib/semmle/javascript/HTML.qll +++ b/javascript/ql/lib/semmle/javascript/HTML.qll @@ -1,4 +1,6 @@ /** Provides classes for working with HTML documents. */ +overlay[local] +module; import javascript @@ -283,6 +285,7 @@ module HTML { /** * A path string arising from the `src` attribute of a `script` tag. */ + overlay[global] deprecated private class ScriptSrcPath extends PathString { ScriptSrcPath() { scriptSrc(this, _) } diff --git a/javascript/ql/lib/semmle/javascript/JSDoc.qll b/javascript/ql/lib/semmle/javascript/JSDoc.qll index 85b7695cd70..f63e24d9c6c 100644 --- a/javascript/ql/lib/semmle/javascript/JSDoc.qll +++ b/javascript/ql/lib/semmle/javascript/JSDoc.qll @@ -1,4 +1,6 @@ /** Provides classes for working with JSDoc comments. */ +overlay[local] +module; import javascript private import semmle.javascript.internal.CachedStages @@ -627,6 +629,7 @@ module JSDoc { /** * A statement container which may declare JSDoc name aliases. */ + overlay[global] deprecated class Environment extends StmtContainer { /** * Gets the fully qualified name aliased by the given unqualified name diff --git a/javascript/ql/lib/semmle/javascript/JSON.qll b/javascript/ql/lib/semmle/javascript/JSON.qll index 19fc3ec84d7..ca322bacd46 100644 --- a/javascript/ql/lib/semmle/javascript/JSON.qll +++ b/javascript/ql/lib/semmle/javascript/JSON.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with JSON data. */ +overlay[local] +module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/JSX.qll b/javascript/ql/lib/semmle/javascript/JSX.qll index ed8a7b097a6..d182f155354 100644 --- a/javascript/ql/lib/semmle/javascript/JSX.qll +++ b/javascript/ql/lib/semmle/javascript/JSX.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with JSX code. */ +overlay[local] +module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/Lines.qll b/javascript/ql/lib/semmle/javascript/Lines.qll index 1db9187008a..272be691498 100644 --- a/javascript/ql/lib/semmle/javascript/Lines.qll +++ b/javascript/ql/lib/semmle/javascript/Lines.qll @@ -4,6 +4,8 @@ * This information is only available for snapshots that have been extracted with * the `--extract-program-text` flag. */ +overlay[local] +module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/Locations.qll b/javascript/ql/lib/semmle/javascript/Locations.qll index a3ad79ef93e..87b41c2cb43 100644 --- a/javascript/ql/lib/semmle/javascript/Locations.qll +++ b/javascript/ql/lib/semmle/javascript/Locations.qll @@ -1,4 +1,6 @@ /** Provides classes for working with locations and program elements that have locations. */ +overlay[local] +module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/Modules.qll b/javascript/ql/lib/semmle/javascript/Modules.qll index 8b0330b708b..bc69695121e 100644 --- a/javascript/ql/lib/semmle/javascript/Modules.qll +++ b/javascript/ql/lib/semmle/javascript/Modules.qll @@ -3,6 +3,8 @@ * ECMAScript 2015-style modules, and the older CommonJS and AMD-style * modules. */ +overlay[local] +module; import javascript private import semmle.javascript.internal.CachedStages @@ -23,9 +25,11 @@ abstract class Module extends TopLevel { Import getAnImport() { result.getTopLevel() = this } /** Gets a module from which this module imports. */ + overlay[global] Module getAnImportedModule() { result = this.getAnImport().getImportedModule() } /** Gets a symbol exported by this module. */ + overlay[global] string getAnExportedSymbol() { exists(this.getAnExportedValue(result)) } /** @@ -39,12 +43,14 @@ abstract class Module extends TopLevel { * Symbols defined in another module that are re-exported by * this module are only sometimes considered. */ + overlay[global] cached abstract DataFlow::Node getAnExportedValue(string name); /** * Gets a value that is exported as the whole exports object of this module. */ + overlay[global] cached DataFlow::Node getABulkExportedNode() { none() } // overridden in subclasses @@ -55,6 +61,7 @@ abstract class Module extends TopLevel { * This can be used to determine which value a default-import will likely refer to, * as the interaction between different module types is not standardized. */ + overlay[global] DataFlow::Node getDefaultOrBulkExport() { result = [this.getAnExportedValue("default"), this.getABulkExportedNode()] } @@ -69,6 +76,7 @@ abstract class Module extends TopLevel { * This predicate is not part of the public API, it is only exposed to allow * overriding by subclasses. */ + overlay[global] deprecated predicate searchRoot(PathExpr path, Folder searchRoot, int priority) { path.getEnclosingModule() = this and priority = 0 and @@ -90,6 +98,7 @@ abstract class Module extends TopLevel { * resolves to a folder containing a main module (such as `index.js`), then * that file is the result. */ + overlay[global] deprecated File resolve(PathExpr path) { path.getEnclosingModule() = this and ( @@ -124,6 +133,7 @@ abstract class Import extends AstNode { abstract Module getEnclosingModule(); /** DEPRECATED. Use `getImportedPathExpr` instead. */ + overlay[global] deprecated PathExpr getImportedPath() { result = this.getImportedPathExpr() } /** Gets the (unresolved) path that this import refers to. */ @@ -138,6 +148,7 @@ abstract class Import extends AstNode { * Any externs module whose name exactly matches the imported * path is assumed to be a possible target of the import. */ + overlay[global] Module resolveExternsImport() { result.isExterns() and result.getName() = this.getImportedPathString() } @@ -145,16 +156,19 @@ abstract class Import extends AstNode { /** * Gets the module the path of this import resolves to. */ + overlay[global] Module resolveImportedPath() { result.getFile() = this.getImportedFile() } /** * Gets the module the path of this import resolves to. */ + overlay[global] File getImportedFile() { result = ImportPathResolver::resolveExpr(this.getImportedPathExpr()) } /** * DEPRECATED. Use `getImportedModule()` instead. */ + overlay[global] deprecated Module resolveFromTypeScriptSymbol() { exists(CanonicalName symbol | ast_node_symbol(this, symbol) and @@ -170,6 +184,7 @@ abstract class Import extends AstNode { * behavior of Node.js imports, which prefer core modules such as `fs` over any * source module of the same name. */ + overlay[global] cached Module getImportedModule() { Stages::Imports::ref() and @@ -210,6 +225,7 @@ abstract class Import extends AstNode { * in cases where it would cause ambiguity between named exports and properties * of a default export. */ + overlay[global] final DataFlow::Node getImportedModuleNodeStrict() { result = this.getImportedModuleNode() and not ( diff --git a/javascript/ql/lib/semmle/javascript/NPM.qll b/javascript/ql/lib/semmle/javascript/NPM.qll index cbe580b4568..857fc163804 100644 --- a/javascript/ql/lib/semmle/javascript/NPM.qll +++ b/javascript/ql/lib/semmle/javascript/NPM.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with NPM module definitions and dependencies. */ +overlay[local?] +module; import javascript private import NodeModuleResolutionImpl diff --git a/javascript/ql/lib/semmle/javascript/NodeJS.qll b/javascript/ql/lib/semmle/javascript/NodeJS.qll index 7e9e2fdea90..dfc2dd15ad3 100644 --- a/javascript/ql/lib/semmle/javascript/NodeJS.qll +++ b/javascript/ql/lib/semmle/javascript/NodeJS.qll @@ -17,6 +17,7 @@ private import semmle.javascript.dataflow.internal.DataFlowNode * process.stdout.write(fs.readFileSync(process.argv[i], 'utf8')); * ``` */ +overlay[local] class NodeModule extends Module { NodeModule() { is_module(this) and @@ -36,11 +37,13 @@ class NodeModule extends Module { * Gets an abstract value representing one or more values that may flow * into this module's `module.exports` property. */ + overlay[global] pragma[noinline] DefiniteAbstractValue getAModuleExportsValue() { result = this.getAModuleExportsProperty().getAValue() } + overlay[global] pragma[noinline] private AbstractProperty getAModuleExportsProperty() { result.getBase().(AbstractModuleObject).getModule() = this and @@ -52,12 +55,14 @@ class NodeModule extends Module { * For performance this predicate only computes relevant expressions (in `getAModuleExportsCandidate`). * So if using this predicate - consider expanding the list of relevant expressions. */ + overlay[global] DataFlow::AnalyzedNode getAModuleExportsNode() { result = getAModuleExportsCandidate() and result.getAValue() = this.getAModuleExportsValue() } /** Gets a symbol exported by this module. */ + overlay[global] override string getAnExportedSymbol() { result = super.getAnExportedSymbol() or @@ -70,6 +75,7 @@ class NodeModule extends Module { ) } + overlay[global] override DataFlow::Node getAnExportedValue(string name) { // a property write whose base is `exports` or `module.exports` exists(DataFlow::PropWrite pwn | result = pwn.getRhs() | @@ -114,6 +120,7 @@ class NodeModule extends Module { ) } + overlay[global] override DataFlow::Node getABulkExportedNode() { Stages::Imports::ref() and exists(DataFlow::PropWrite write | @@ -124,6 +131,7 @@ class NodeModule extends Module { } /** Gets a symbol that the module object inherits from its prototypes. */ + overlay[global] private string getAnImplicitlyExportedSymbol() { exists(ExternalConstructor ec | ec = this.getPrototypeOfExportedExpr() | result = ec.getAMember().getName() @@ -136,6 +144,7 @@ class NodeModule extends Module { } /** Gets an externs declaration of the prototype object of a value exported by this module. */ + overlay[global] private ExternalConstructor getPrototypeOfExportedExpr() { exists(AbstractValue exported | exported = this.getAModuleExportsValue() | result instanceof ObjectExternal @@ -146,6 +155,7 @@ class NodeModule extends Module { ) } + overlay[global] deprecated override predicate searchRoot(PathExpr path, Folder searchRoot, int priority) { path.getEnclosingModule() = this and exists(string pathval | pathval = path.getValue() | @@ -224,6 +234,7 @@ predicate findNodeModulesFolder(Folder f, Folder nodeModules, int distance) { /** * A Node.js `require` variable. */ +overlay[local] private class RequireVariable extends Variable { RequireVariable() { this = any(ModuleScope m).getVariable("require") @@ -236,6 +247,7 @@ private class RequireVariable extends Variable { } } +overlay[local] private predicate isModuleModule(EarlyStageNode nd) { exists(ImportDeclaration imp | imp.getRawImportPath() = "module" | nd = TDestructuredModuleImportNode(imp) @@ -249,6 +261,7 @@ private predicate isModuleModule(EarlyStageNode nd) { ) } +overlay[local] private predicate isCreateRequire(EarlyStageNode nd) { exists(PropAccess prop | isModuleModule(TValueNode(prop.getBase())) and @@ -278,6 +291,7 @@ private predicate isCreateRequire(EarlyStageNode nd) { /** * Holds if `nd` may refer to `require`, either directly or modulo local data flow. */ +overlay[local] cached private predicate isRequire(EarlyStageNode nd) { exists(VarAccess access | @@ -320,6 +334,7 @@ private predicate isRequire(EarlyStageNode nd) { * require('fs') * ``` */ +overlay[local] class Require extends CallExpr, Import { Require() { isRequire(TValueNode(this.getCallee())) } diff --git a/javascript/ql/lib/semmle/javascript/Promises.qll b/javascript/ql/lib/semmle/javascript/Promises.qll index 2feb92e2e55..dfdcdfd632c 100644 --- a/javascript/ql/lib/semmle/javascript/Promises.qll +++ b/javascript/ql/lib/semmle/javascript/Promises.qll @@ -186,11 +186,13 @@ module Promises { /** * Gets the pseudo-field used to describe resolved values in a promise. */ + overlay[local] string valueProp() { result = "$PromiseResolveField$" } /** * Gets the pseudo-field used to describe rejected values in a promise. */ + overlay[local] string errorProp() { result = "$PromiseRejectField$" } /** A property set containing the pseudo-properites of a promise object. */ diff --git a/javascript/ql/lib/semmle/javascript/Regexp.qll b/javascript/ql/lib/semmle/javascript/Regexp.qll index ea2993ae7da..dba2c853008 100644 --- a/javascript/ql/lib/semmle/javascript/Regexp.qll +++ b/javascript/ql/lib/semmle/javascript/Regexp.qll @@ -4,6 +4,8 @@ * Regular expression literals are represented as an abstract syntax tree of regular expression * terms. */ +overlay[local] +module; import javascript private import semmle.javascript.dataflow.InferredTypes @@ -150,6 +152,7 @@ class RegExpTerm extends Locatable, @regexpterm { * /[a-z]+/g; // YES - Regexp literals are always used as regexp * ``` */ + overlay[global] predicate isUsedAsRegExp() { exists(RegExpParent parent | parent = this.getRootTerm().getParent() | parent instanceof RegExpLiteral @@ -964,6 +967,7 @@ class RegExpParseError extends Error, @regexp_parse_error { /** * Holds if `func` is a method defined on `String.prototype` with name `name`. */ +overlay[global] private predicate isNativeStringMethod(Function func, string name) { exists(ExternalInstanceMemberDecl decl | decl.hasQualifiedName("String", name) and @@ -975,6 +979,7 @@ private predicate isNativeStringMethod(Function func, string name) { * Holds if `name` is the name of a property on a Match object returned by `String.prototype.match`, * not including array indices. */ +overlay[global] private predicate isMatchObjectProperty(string name) { any(ExternalInstanceMemberDecl decl).hasQualifiedName("Array", name) or @@ -982,6 +987,7 @@ private predicate isMatchObjectProperty(string name) { } /** Holds if `call` is a call to `match` whose result is used in a way that is incompatible with Match objects. */ +overlay[global] private predicate isUsedAsNonMatchObject(DataFlow::MethodCallNode call) { call.getMethodName() = ["match", "matchAll"] and call.getNumArgument() = 1 and @@ -1006,6 +1012,7 @@ private predicate isUsedAsNonMatchObject(DataFlow::MethodCallNode call) { /** * Holds if `value` is used in a way that suggests it returns a number. */ +overlay[global] pragma[inline] private predicate isUsedAsNumber(DataFlow::LocalSourceNode value) { any(Comparison compare) @@ -1027,6 +1034,7 @@ private predicate isUsedAsNumber(DataFlow::LocalSourceNode value) { /** * Holds if `source` may be interpreted as a regular expression. */ +overlay[global] cached predicate isInterpretedAsRegExp(DataFlow::Node source) { Stages::Taint::ref() and @@ -1073,6 +1081,7 @@ predicate isInterpretedAsRegExp(DataFlow::Node source) { * Gets a node whose value may flow (inter-procedurally) to `re`, where it is interpreted * as a part of a regular expression. */ +overlay[global] private DataFlow::Node regExpSource(DataFlow::Node re, DataFlow::TypeBackTracker t) { t.start() and re = result and @@ -1090,6 +1099,7 @@ private DataFlow::Node regExpSource(DataFlow::Node re, DataFlow::TypeBackTracker * Gets a node whose value may flow (inter-procedurally) to `re`, where it is interpreted * as a part of a regular expression. */ +overlay[global] private DataFlow::Node regExpSource(DataFlow::Node re) { result = regExpSource(re, DataFlow::TypeBackTracker::end()) } @@ -1098,6 +1108,7 @@ private DataFlow::Node regExpSource(DataFlow::Node re) { * A node whose value may flow to a position where it is interpreted * as a part of a regular expression. */ +overlay[global] abstract class RegExpPatternSource extends DataFlow::Node { /** * Gets a node where the pattern of this node is parsed as a part of @@ -1126,6 +1137,7 @@ abstract class RegExpPatternSource extends DataFlow::Node { /** * A regular expression literal, viewed as the pattern source for itself. */ +overlay[global] private class RegExpLiteralPatternSource extends RegExpPatternSource, DataFlow::ValueNode { override RegExpLiteral astNode; @@ -1145,6 +1157,7 @@ private class RegExpLiteralPatternSource extends RegExpPatternSource, DataFlow:: * A node whose string value may flow to a position where it is interpreted * as a part of a regular expression. */ +overlay[global] private class StringRegExpPatternSource extends RegExpPatternSource { DataFlow::Node parse; @@ -1169,6 +1182,7 @@ private class StringRegExpPatternSource extends RegExpPatternSource { * A node whose string value may flow to a position where it is interpreted * as a part of a regular expression. */ +overlay[global] private class StringConcatRegExpPatternSource extends RegExpPatternSource { DataFlow::Node parse; @@ -1331,6 +1345,7 @@ module RegExp { /** * Gets the AST of a regular expression object that can flow to `node`. */ + overlay[global] RegExpTerm getRegExpObjectFromNode(DataFlow::Node node) { exists(DataFlow::RegExpCreationNode regexp | regexp.getAReference().flowsTo(node) and @@ -1342,6 +1357,7 @@ module RegExp { * Gets the AST of a regular expression that can flow to `node`, * including `RegExp` objects as well as strings interpreted as regular expressions. */ + overlay[global] RegExpTerm getRegExpFromNode(DataFlow::Node node) { result = getRegExpObjectFromNode(node) or diff --git a/javascript/ql/lib/semmle/javascript/SSA.qll b/javascript/ql/lib/semmle/javascript/SSA.qll index a2c5bf1d34e..52486a7b7e3 100644 --- a/javascript/ql/lib/semmle/javascript/SSA.qll +++ b/javascript/ql/lib/semmle/javascript/SSA.qll @@ -73,6 +73,8 @@ * expression in `k` induces a re-capture of `x` to reflect the fact that `x` * is incremented between the two `console.log` calls. */ +overlay[local] +module; import javascript private import semmle.javascript.dataflow.Refinements diff --git a/javascript/ql/lib/semmle/javascript/Stmt.qll b/javascript/ql/lib/semmle/javascript/Stmt.qll index 93eb1d1dea0..f97b07ac8e9 100644 --- a/javascript/ql/lib/semmle/javascript/Stmt.qll +++ b/javascript/ql/lib/semmle/javascript/Stmt.qll @@ -1,4 +1,6 @@ /** Provides classes for working with statements. */ +overlay[local] +module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/Templates.qll b/javascript/ql/lib/semmle/javascript/Templates.qll index 5e2b4a2d8aa..1b3db059226 100644 --- a/javascript/ql/lib/semmle/javascript/Templates.qll +++ b/javascript/ql/lib/semmle/javascript/Templates.qll @@ -1,4 +1,6 @@ /** Provides classes for working with ECMAScript 2015-style template expressions. */ +overlay[local] +module; import javascript @@ -58,6 +60,7 @@ class TemplateLiteral extends Expr, @template_literal { */ int getNumElement() { result = count(this.getAnElement()) } + overlay[global] override predicate isImpure() { this.getAnElement().isImpure() } override string getAPrimaryQlClass() { result = "TemplateLiteral" } diff --git a/javascript/ql/lib/semmle/javascript/Tokens.qll b/javascript/ql/lib/semmle/javascript/Tokens.qll index c9eeef69dfb..4e1c63440b5 100644 --- a/javascript/ql/lib/semmle/javascript/Tokens.qll +++ b/javascript/ql/lib/semmle/javascript/Tokens.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with the token-based representation of JavaScript programs. */ +overlay[local] +module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/TypeAnnotations.qll b/javascript/ql/lib/semmle/javascript/TypeAnnotations.qll index 6d0a13c4a38..50201363bea 100644 --- a/javascript/ql/lib/semmle/javascript/TypeAnnotations.qll +++ b/javascript/ql/lib/semmle/javascript/TypeAnnotations.qll @@ -1,6 +1,8 @@ /** * Provides classes for reasoning about type annotations independently of dialect. */ +overlay[local] +module; import javascript private import internal.StmtContainers @@ -18,6 +20,7 @@ class TypeAnnotation extends @type_annotation, NodeInStmtContainer { * This can be used to map a type name to the class/interface it refers to, or * associate it with a named type coming from an dependency. */ + overlay[global] TypeNameBindingNode getTypeBinding() { result = this } /** Holds if this is the `any` type. */ @@ -90,6 +93,7 @@ class TypeAnnotation extends @type_annotation, NodeInStmtContainer { * * Holds if this is a reference to the type with qualified name `globalName` relative to the global scope. */ + overlay[global] deprecated predicate hasQualifiedName(string globalName) { UnderlyingTypes::nodeHasUnderlyingType(this, globalName) } @@ -99,6 +103,7 @@ class TypeAnnotation extends @type_annotation, NodeInStmtContainer { * * Holds if this is a reference to the type exported from `moduleName` under the name `exportedName`. */ + overlay[global] deprecated predicate hasQualifiedName(string moduleName, string exportedName) { UnderlyingTypes::nodeHasUnderlyingType(this, moduleName, exportedName) } @@ -107,6 +112,7 @@ class TypeAnnotation extends @type_annotation, NodeInStmtContainer { * Holds if this is a reference to the type with qualified name `globalName` relative to the global scope, * or is declared as a subtype thereof, or is a union or intersection containing such a type. */ + overlay[global] final predicate hasUnderlyingType(string globalName) { UnderlyingTypes::nodeHasUnderlyingType(this, globalName) } @@ -115,6 +121,7 @@ class TypeAnnotation extends @type_annotation, NodeInStmtContainer { * Holds if this is a reference to the type exported from `moduleName` under the name `exportedName`, * or is declared as a subtype thereof, or is a union or intersection containing such a type. */ + overlay[global] final predicate hasUnderlyingType(string moduleName, string exportedName) { UnderlyingTypes::nodeHasUnderlyingType(this, moduleName, exportedName) } @@ -135,6 +142,7 @@ class TypeAnnotation extends @type_annotation, NodeInStmtContainer { * * Note that this has no result for JSDoc type annotations. */ + overlay[global] deprecated Type getType() { none() } /** @@ -142,5 +150,6 @@ class TypeAnnotation extends @type_annotation, NodeInStmtContainer { * * This unfolds nullability modifiers and generic type applications. */ + overlay[global] final DataFlow::ClassNode getClass() { UnderlyingTypes::nodeHasUnderlyingClassType(this, result) } } diff --git a/javascript/ql/lib/semmle/javascript/TypeScript.qll b/javascript/ql/lib/semmle/javascript/TypeScript.qll index 79b71fcd8c0..b9d6ea0af98 100644 --- a/javascript/ql/lib/semmle/javascript/TypeScript.qll +++ b/javascript/ql/lib/semmle/javascript/TypeScript.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import javascript /** @@ -31,6 +34,7 @@ class NamespaceDefinition extends Stmt, @namespace_definition, AST::ValueNode { /** * Gets the canonical name of the namespace being defined. */ + overlay[global] deprecated Namespace getNamespace() { result.getADefinition() = this } } @@ -111,11 +115,13 @@ class TypeDefinition extends AstNode, @type_definition { /** * Gets the canonical name of the type being defined. */ + overlay[global] deprecated TypeName getTypeName() { result.getADefinition() = this } /** * Gets the type defined by this declaration. */ + overlay[global] deprecated Type getType() { ast_node_type(this.getIdentifier(), result) } override string getAPrimaryQlClass() { result = "TypeDefinition" } @@ -221,6 +227,7 @@ class ExternalModuleReference extends Expr, Import, @external_module_reference { } /** A literal path expression appearing in an external module reference. */ +overlay[global] deprecated private class LiteralExternalModulePath extends PathExpr, ConstantString { LiteralExternalModulePath() { exists(ExternalModuleReference emr | this.getParentExpr*() = emr.getExpression()) @@ -268,6 +275,7 @@ class TypeAliasDeclaration extends @type_alias_declaration, TypeParameterized, S /** * Gets the canonical name of the type being defined. */ + overlay[global] deprecated TypeName getTypeName() { result.getADefinition() = this } override string getAPrimaryQlClass() { result = "TypeAliasDeclaration" } @@ -548,6 +556,7 @@ class LocalNamespaceName extends @local_namespace_name, LexicalName { /** * Gets the canonical name of the namespace referenced by this name. */ + overlay[global] deprecated Namespace getNamespace() { result = this.getADeclaration().getNamespace() } override DeclarationSpace getDeclarationSpace() { result = "namespace" } @@ -568,6 +577,7 @@ class TypeExpr extends ExprOrType, @typeexpr, TypeAnnotation { * Has no result if this occurs in a TypeScript file that was extracted * without type information. */ + overlay[global] deprecated override Type getType() { ast_node_type(this, result) } override Stmt getEnclosingStmt() { result = ExprOrType.super.getEnclosingStmt() } @@ -692,6 +702,7 @@ class TypeAccess extends @typeaccess, TypeExpr, TypeRef { /** * Gets the canonical name of the type being accessed. */ + overlay[global] deprecated TypeName getTypeName() { ast_node_symbol(this, result) } override string getAPrimaryQlClass() { result = "TypeAccess" } @@ -1379,6 +1390,7 @@ class LocalNamespaceDecl extends VarDecl, NamespaceRef { /** * Gets the canonical name of the namespace being defined or aliased by this name. */ + overlay[global] deprecated Namespace getNamespace() { ast_node_symbol(this, result) } } @@ -1397,6 +1409,7 @@ class NamespaceAccess extends TypeExpr, NamespaceRef, @namespace_access { /** * Gets the canonical name of the namespace being accessed. */ + overlay[global] deprecated Namespace getNamespace() { ast_node_symbol(this, result) } override string getAPrimaryQlClass() { result = "NamespaceAccess" } @@ -1506,6 +1519,7 @@ class EnumDeclaration extends NamespaceDefinition, @enum_declaration, AST::Value /** * Gets the canonical name of the type being defined. */ + overlay[global] deprecated TypeName getTypeName() { ast_node_symbol(this, result) } /** @@ -1594,6 +1608,7 @@ class EnumMember extends AstNode, @enum_member { /** * Gets the canonical name of the type defined by this enum member. */ + overlay[global] deprecated TypeName getTypeName() { ast_node_symbol(this, result) } override string getAPrimaryQlClass() { result = "EnumMember" } @@ -1762,6 +1777,7 @@ class TypeRootFolder extends Folder { /** * Gets the priority with which this type root folder should be used from within the given search root. */ + overlay[global] int getSearchPriority(Folder searchRoot) { findNodeModulesFolder(searchRoot, this.getNodeModulesFolder(), result) } @@ -1780,6 +1796,7 @@ class TypeRootFolder extends Folder { * For instance, there may be many AST nodes representing different uses of the * `number` keyword, but there only exists one `number` type. */ +overlay[global] deprecated class Type extends @type { /** * Gets a string representation of this type. @@ -1984,6 +2001,7 @@ deprecated class Type extends @type { * * A union type or intersection type, such as `string | number` or `T & U`. */ +overlay[global] deprecated class UnionOrIntersectionType extends Type, @union_or_intersection_type { /** * Gets the `i`th member of this union or intersection, starting at 0. @@ -2012,6 +2030,7 @@ deprecated class UnionOrIntersectionType extends Type, @union_or_intersection_ty * Note that the `boolean` type is represented as the union `true | false`, * but is still displayed as `boolean` in string representations. */ +overlay[global] deprecated class UnionType extends UnionOrIntersectionType, @union_type { } /** @@ -2022,6 +2041,7 @@ deprecated class UnionType extends UnionOrIntersectionType, @union_type { } * * An intersection type, such as `T & {x: number}`. */ +overlay[global] deprecated class IntersectionType extends UnionOrIntersectionType, @intersection_type { } /** @@ -2040,6 +2060,7 @@ deprecated class IntersectionType extends UnionOrIntersectionType, @intersection * Foreign array-like objects such as `HTMLCollection` are not normal JavaScript arrays, * and their corresponding types are not considered array types either. */ +overlay[global] deprecated class ArrayType extends Type { ArrayType() { this instanceof @tuple_type or @@ -2061,6 +2082,7 @@ deprecated class ArrayType extends Type { * * An array type such as `Array`, or equivalently, `string[]`. */ +overlay[global] deprecated class PlainArrayType extends ArrayType, TypeReference { PlainArrayType() { this.hasQualifiedName("Array") } @@ -2075,6 +2097,7 @@ deprecated class PlainArrayType extends ArrayType, TypeReference { * * A read-only array type such as `ReadonlyArray`. */ +overlay[global] deprecated class ReadonlyArrayType extends ArrayType, TypeReference { ReadonlyArrayType() { this.hasQualifiedName("ReadonlyArray") } } @@ -2087,6 +2110,7 @@ deprecated class ReadonlyArrayType extends ArrayType, TypeReference { * * A tuple type, such as `[number, string]`. */ +overlay[global] deprecated class TupleType extends ArrayType, @tuple_type { /** * Gets the `i`th member of this tuple type, starting at 0. @@ -2148,6 +2172,7 @@ deprecated class TupleType extends ArrayType, @tuple_type { * * The predefined `any` type. */ +overlay[global] deprecated class AnyType extends Type, @any_type { } /** @@ -2158,6 +2183,7 @@ deprecated class AnyType extends Type, @any_type { } * * The predefined `unknown` type. */ +overlay[global] deprecated class UnknownType extends Type, @unknown_type { } /** @@ -2168,6 +2194,7 @@ deprecated class UnknownType extends Type, @unknown_type { } * * The predefined `string` type. */ +overlay[global] deprecated class StringType extends Type, @string_type { } /** @@ -2178,6 +2205,7 @@ deprecated class StringType extends Type, @string_type { } * * The predefined `number` type. */ +overlay[global] deprecated class NumberType extends Type, @number_type { } /** @@ -2188,6 +2216,7 @@ deprecated class NumberType extends Type, @number_type { } * * The predefined `bigint` type. */ +overlay[global] deprecated class BigIntType extends Type, @bigint_type { } /** @@ -2198,6 +2227,7 @@ deprecated class BigIntType extends Type, @bigint_type { } * * A boolean, number, or string literal type. */ +overlay[global] deprecated class LiteralType extends Type, @literal_type { /** * Gets the string value of this literal. @@ -2213,6 +2243,7 @@ deprecated class LiteralType extends Type, @literal_type { * * The boolean literal type `true` or `false`. */ +overlay[global] deprecated class BooleanLiteralType extends LiteralType, @boolean_literal_type { /** * Gets the boolean value represented by this type. @@ -2227,6 +2258,7 @@ deprecated class BooleanLiteralType extends LiteralType, @boolean_literal_type { /** * A number literal as a static type. */ +overlay[global] deprecated class NumberLiteralType extends LiteralType, @number_literal_type { override string getStringValue() { type_literal_value(this, result) } @@ -2249,6 +2281,7 @@ deprecated class NumberLiteralType extends LiteralType, @number_literal_type { * * A string literal as a static type. */ +overlay[global] deprecated class StringLiteralType extends LiteralType, @string_literal_type { override string getStringValue() { type_literal_value(this, result) } } @@ -2261,6 +2294,7 @@ deprecated class StringLiteralType extends LiteralType, @string_literal_type { * * A bigint literal as a static type. */ +overlay[global] deprecated class BigIntLiteralType extends LiteralType { override string getStringValue() { type_literal_value(this, result) } @@ -2283,6 +2317,7 @@ deprecated class BigIntLiteralType extends LiteralType { * * The `boolean` type, internally represented as the union type `true | false`. */ +overlay[global] deprecated class BooleanType extends UnionType { BooleanType() { this.getAnElementType() instanceof @true_type and @@ -2299,6 +2334,7 @@ deprecated class BooleanType extends UnionType { * * The `string` type or a string literal type. */ +overlay[global] deprecated class StringLikeType extends Type { StringLikeType() { this instanceof StringType or @@ -2314,6 +2350,7 @@ deprecated class StringLikeType extends Type { * * The `number` type or a number literal type. */ +overlay[global] deprecated class NumberLikeType extends Type { NumberLikeType() { this instanceof NumberType or @@ -2329,6 +2366,7 @@ deprecated class NumberLikeType extends Type { * * The `boolean`, `true,` or `false` type. */ +overlay[global] deprecated class BooleanLikeType extends Type { BooleanLikeType() { this instanceof BooleanType or @@ -2344,6 +2382,7 @@ deprecated class BooleanLikeType extends Type { * * The `void` type. */ +overlay[global] deprecated class VoidType extends Type, @void_type { } /** @@ -2354,6 +2393,7 @@ deprecated class VoidType extends Type, @void_type { } * * The `undefined` type. */ +overlay[global] deprecated class UndefinedType extends Type, @undefined_type { } /** @@ -2364,6 +2404,7 @@ deprecated class UndefinedType extends Type, @undefined_type { } * * The `null` type. */ +overlay[global] deprecated class NullType extends Type, @null_type { } /** @@ -2374,6 +2415,7 @@ deprecated class NullType extends Type, @null_type { } * * The `never` type. */ +overlay[global] deprecated class NeverType extends Type, @never_type { } /** @@ -2384,6 +2426,7 @@ deprecated class NeverType extends Type, @never_type { } * * The `symbol` type or a specific `unique symbol` type. */ +overlay[global] deprecated class SymbolType extends Type, @symbol_type { } /** @@ -2394,6 +2437,7 @@ deprecated class SymbolType extends Type, @symbol_type { } * * The `symbol` type. */ +overlay[global] deprecated class PlainSymbolType extends SymbolType, @plain_symbol_type { } /** @@ -2404,6 +2448,7 @@ deprecated class PlainSymbolType extends SymbolType, @plain_symbol_type { } * * A `unique symbol` type. */ +overlay[global] deprecated class UniqueSymbolType extends SymbolType, @unique_symbol_type { /** * Gets the canonical name of the variable exposing the symbol. @@ -2438,6 +2483,7 @@ deprecated class UniqueSymbolType extends SymbolType, @unique_symbol_type { * * The `object` type. */ +overlay[global] deprecated class ObjectKeywordType extends Type, @objectkeyword_type { } /** @@ -2448,6 +2494,7 @@ deprecated class ObjectKeywordType extends Type, @objectkeyword_type { } * * A type that refers to a class, interface, enum, or enum member. */ +overlay[global] deprecated class TypeReference extends Type, @type_reference { /** * Gets the canonical name of the type being referenced. @@ -2506,6 +2553,7 @@ deprecated class TypeReference extends Type, @type_reference { * * A type that refers to a class, possibly with type arguments. */ +overlay[global] deprecated class ClassType extends TypeReference { ClassDefinition declaration; @@ -2525,6 +2573,7 @@ deprecated class ClassType extends TypeReference { * * A type that refers to an interface, possibly with type arguents. */ +overlay[global] deprecated class InterfaceType extends TypeReference { InterfaceDeclaration declaration; @@ -2544,6 +2593,7 @@ deprecated class InterfaceType extends TypeReference { * * A type that refers to an enum. */ +overlay[global] deprecated class EnumType extends TypeReference { EnumDeclaration declaration; @@ -2563,6 +2613,7 @@ deprecated class EnumType extends TypeReference { * * A type that refers to the value of an enum member. */ +overlay[global] deprecated class EnumLiteralType extends TypeReference { EnumMember declaration; @@ -2582,6 +2633,7 @@ deprecated class EnumLiteralType extends TypeReference { * * A type that refers to a type alias. */ +overlay[global] deprecated class TypeAliasReference extends TypeReference { TypeAliasReference() { type_alias(this, _) } @@ -2601,6 +2653,7 @@ deprecated class TypeAliasReference extends TypeReference { * * An anonymous interface type, such as `{ x: number }`. */ +overlay[global] deprecated class AnonymousInterfaceType extends Type, @object_type { } /** @@ -2611,6 +2664,7 @@ deprecated class AnonymousInterfaceType extends Type, @object_type { } * * A type that refers to a type variable. */ +overlay[global] deprecated class TypeVariableType extends Type, @typevariable_type { /** * Gets a syntactic declaration of this type variable. @@ -2656,6 +2710,7 @@ deprecated class TypeVariableType extends Type, @typevariable_type { * * A type that refers to a type variable declared on a class, interface or function. */ +overlay[global] deprecated class CanonicalTypeVariableType extends TypeVariableType, @canonical_type_variable_type { override TypeName getHostType() { result = this.getCanonicalName().getParent() } @@ -2681,6 +2736,7 @@ deprecated class CanonicalTypeVariableType extends TypeVariableType, @canonical_ * - `(x: T) => T` * - `(x: S, y: T) => T`. */ +overlay[global] deprecated class LexicalTypeVariableType extends TypeVariableType, @lexical_type_variable_type { override string getName() { types(this, _, result) // The toString value contains the name. @@ -2703,6 +2759,7 @@ deprecated class LexicalTypeVariableType extends TypeVariableType, @lexical_type * } * ``` */ +overlay[global] deprecated class ThisType extends Type, @this_type { /** * Gets the type containing the `this` type. @@ -2721,6 +2778,7 @@ deprecated class ThisType extends Type, @this_type { * The type of a named value, `typeof X`, typically denoting the type of * a class constructor, namespace object, enum object, or module object. */ +overlay[global] deprecated class TypeofType extends Type, @typeof_type { /** * Gets the canonical name of the named value. @@ -2801,6 +2859,7 @@ module SignatureKind { * * A function or constructor signature in a TypeScript type. */ +overlay[global] deprecated class CallSignatureType extends @signature_type { /** * Gets a value indicating if this is a function or constructor signature. @@ -2955,6 +3014,7 @@ deprecated class CallSignatureType extends @signature_type { * * A function call signature in a type, that is, a signature without the `new` keyword. */ +overlay[global] deprecated class FunctionCallSignatureType extends CallSignatureType, @function_signature_type { } /** @@ -2965,6 +3025,7 @@ deprecated class FunctionCallSignatureType extends CallSignatureType, @function_ * * A constructor call signature in a type, that is, a signature with the `new` keyword. */ +overlay[global] deprecated class ConstructorCallSignatureType extends CallSignatureType, @constructor_signature_type { } @@ -2976,6 +3037,7 @@ deprecated class ConstructorCallSignatureType extends CallSignatureType, @constr * - It has one type parameter, say, `T` * - It has a `then` method whose first argument is a callback that takes a `T` as argument. */ +overlay[global] deprecated private class PromiseTypeName extends TypeName { PromiseTypeName() { // The name must suggest it is a promise. @@ -3005,6 +3067,7 @@ deprecated private class PromiseTypeName extends TypeName { * This includes types whose name and `then` method signature suggest it is a promise, * such as `PromiseLike` and `Thenable`. */ +overlay[global] deprecated class PromiseType extends TypeReference { PromiseType() { this.getNumTypeArgument() = 1 and diff --git a/javascript/ql/lib/semmle/javascript/Variables.qll b/javascript/ql/lib/semmle/javascript/Variables.qll index adc0ad5b9c8..5fa7473c304 100644 --- a/javascript/ql/lib/semmle/javascript/Variables.qll +++ b/javascript/ql/lib/semmle/javascript/Variables.qll @@ -1,4 +1,6 @@ /** Provides classes for modeling program variables. */ +overlay[local] +module; import javascript @@ -62,6 +64,7 @@ class LocalScope extends Scope { */ class ModuleScope extends Scope, @module_scope { /** Gets the module that induces this scope. */ + overlay[global] Module getModule() { result = this.getScopeElement() } override string toString() { result = "module scope" } @@ -256,6 +259,7 @@ class VarRef extends @varref, Identifier, BindingPattern, LexicalRef { override VarRef getABindingVarRef() { result = this } + overlay[global] override predicate isImpure() { none() } override Expr getUnderlyingReference() { result = this } @@ -543,6 +547,7 @@ class ArrayPattern extends DestructuringPattern, @array_pattern { /** Holds if this array pattern has an omitted element. */ predicate hasOmittedElement() { this.elementIsOmitted(_) } + overlay[global] override predicate isImpure() { this.getAnElement().isImpure() } override VarRef getABindingVarRef() { @@ -583,6 +588,7 @@ class ObjectPattern extends DestructuringPattern, @object_pattern { /** Gets the rest property pattern of this object pattern, if any. */ override Expr getRest() { result = this.getChildExpr(-1) } + overlay[global] override predicate isImpure() { this.getAPropertyPattern().isImpure() } override VarRef getABindingVarRef() { @@ -640,6 +646,7 @@ class PropertyPattern extends @property, AstNode { ObjectPattern getObjectPattern() { properties(this, result, _, _, _) } /** Holds if this pattern is impure, that is, if its evaluation could have side effects. */ + overlay[global] predicate isImpure() { this.isComputed() and this.getNameExpr().isImpure() or @@ -844,6 +851,7 @@ class SimpleParameter extends Parameter, VarDecl { * Gets a use of this parameter that refers to its initial value as * passed in from the caller. */ + overlay[global] VarUse getAnInitialUse() { exists(SsaDefinition ssa | ssa.getAContributingVarDef() = this and diff --git a/javascript/ql/lib/semmle/javascript/XML.qll b/javascript/ql/lib/semmle/javascript/XML.qll index 54157809260..ca401bd3f4b 100644 --- a/javascript/ql/lib/semmle/javascript/XML.qll +++ b/javascript/ql/lib/semmle/javascript/XML.qll @@ -1,6 +1,8 @@ /** * Provides classes and predicates for working with XML files and their content. */ +overlay[local] +module; import semmle.files.FileSystem private import codeql.xml.Xml diff --git a/javascript/ql/lib/semmle/javascript/YAML.qll b/javascript/ql/lib/semmle/javascript/YAML.qll index a312d78b6fb..01473226b44 100644 --- a/javascript/ql/lib/semmle/javascript/YAML.qll +++ b/javascript/ql/lib/semmle/javascript/YAML.qll @@ -4,6 +4,8 @@ * YAML documents are represented as abstract syntax trees whose nodes * are either YAML values or alias nodes referring to another YAML value. */ +overlay[local] +module; import javascript private import codeql.yaml.Yaml as LibYaml diff --git a/javascript/ql/lib/semmle/javascript/dataflow/AbstractValues.qll b/javascript/ql/lib/semmle/javascript/dataflow/AbstractValues.qll index 41509516cc1..17908c0b67f 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/AbstractValues.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/AbstractValues.qll @@ -37,6 +37,8 @@ * they represent; additionally, indefinite abstract values record * the source of imprecision that caused them to arise. */ +overlay[local] +module; private import javascript private import semmle.javascript.dataflow.internal.AbstractValuesImpl @@ -97,6 +99,7 @@ class AbstractValue extends TAbstractValue { * In all cases, purely local flow tracking is used to find prototype objects, so * this predicate cannot be relied on to compute all possible prototype objects. */ + overlay[global] DefiniteAbstractValue getAPrototype() { exists(AbstractProtoProperty proto | proto.getBase() = this and diff --git a/javascript/ql/lib/semmle/javascript/dataflow/AdditionalFlowSteps.qll b/javascript/ql/lib/semmle/javascript/dataflow/AdditionalFlowSteps.qll index d0deff8788c..83d523e0709 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/AdditionalFlowSteps.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/AdditionalFlowSteps.qll @@ -33,21 +33,25 @@ private import semmle.javascript.internal.CachedStages * Note: For performance reasons, all subclasses of this class should be part * of the standard library. Use `isAdditionalFlowStep` for query-specific flow steps. */ +overlay[local] class AdditionalFlowStep extends Unit { /** * Holds if `pred` → `succ` should be considered a value-preserving data flow edge.f */ + overlay[global] predicate step(DataFlow::Node pred, DataFlow::Node succ) { none() } /** * Holds if `pred` → `succ` should be considered a value-preserving data flow edge that * crosses calling contexts. */ + overlay[global] predicate jumpStep(DataFlow::Node pred, DataFlow::Node succ) { none() } /** * Holds if `pred` should be stored in the given `content` of the object `succ`. */ + overlay[global] predicate storeStep(DataFlow::Node pred, DataFlow::ContentSet contents, DataFlow::Node succ) { none() } @@ -55,6 +59,7 @@ class AdditionalFlowStep extends Unit { /** * Holds if the given `content` of the object in `pred` should be read into `succ`. */ + overlay[global] predicate readStep(DataFlow::Node pred, DataFlow::ContentSet contents, DataFlow::Node succ) { none() } diff --git a/javascript/ql/lib/semmle/javascript/dataflow/Configuration.qll b/javascript/ql/lib/semmle/javascript/dataflow/Configuration.qll index f773000c8cc..3b4a6be84d0 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/Configuration.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/Configuration.qll @@ -625,15 +625,19 @@ abstract deprecated class LabeledBarrierGuardNode extends BarrierGuardNode { * * For use with load/store steps in `DataFlow::SharedFlowStep` and TypeTracking. */ +overlay[local] module PseudoProperties { /** Holds if `s` is a pseudo-property. */ bindingset[s] + overlay[caller] predicate isPseudoProperty(string s) { s.matches("$%$") } bindingset[s] + overlay[caller] private string pseudoProperty(string s) { result = "$" + s + "$" } bindingset[s, v] + overlay[caller] private string pseudoProperty(string s, string v) { result = "$" + s + "|" + v + "$" } /** @@ -680,6 +684,7 @@ module PseudoProperties { * Gets a pseudo-property for the location of a map value where the key is `key`. * The string value of the `key` is encoded in the result, and there is only a result if the string value of `key` is known. */ + overlay[caller] pragma[inline] string mapValueKnownKey(DataFlow::Node key) { result = mapValueKey(any(string s | key.mayHaveStringValue(s))) @@ -689,17 +694,20 @@ module PseudoProperties { * Gets a pseudo-property for the location of a map value where the key is `key`. */ bindingset[key] + overlay[caller] string mapValueKey(string key) { result = pseudoProperty("mapValue", key) } /** * Holds if `prop` equals `mapValueKey(key)` for some value of `key`. */ bindingset[prop] + overlay[caller] predicate isMapValueKey(string prop) { prop.matches("$mapValue|%$") } /** * Gets a pseudo-property for the location of a map value where the key is `key`. */ + overlay[caller] pragma[inline] string mapValue(DataFlow::Node key) { result = mapValueKnownKey(key) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/CustomAbstractValueDefinitions.qll b/javascript/ql/lib/semmle/javascript/dataflow/CustomAbstractValueDefinitions.qll index 5a762f4aa1b..3c12284d77b 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/CustomAbstractValueDefinitions.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/CustomAbstractValueDefinitions.qll @@ -7,6 +7,8 @@ * For performance reasons, all subclasses of `CustomAbstractValueDefinition` * should be part of the standard library. */ +overlay[local] +module; private import javascript private import internal.AbstractValuesImpl @@ -32,6 +34,7 @@ class CustomAbstractValueFromDefinition extends AbstractValue, TCustomAbstractVa override predicate isIndefinite(DataFlow::Incompleteness cause) { def.isIndefinite(cause) } + overlay[global] override DefiniteAbstractValue getAPrototype() { result = def.getAPrototype() } override predicate hasLocationInfo( @@ -98,6 +101,7 @@ abstract class CustomAbstractValueDefinition extends Locatable { * Gets an abstract value that represents a prototype object of the * induced abstract value. */ + overlay[global] AbstractValue getAPrototype() { exists(AbstractProtoProperty proto | proto.getBase() = this.getAbstractValue() and @@ -119,6 +123,7 @@ abstract class CustomAbstractValueDefinition extends Locatable { /** * Flow analysis for custom abstract values. */ +overlay[global] class CustomAbstractValueFromDefinitionNode extends DataFlow::AnalyzedNode, DataFlow::ValueNode { CustomAbstractValueFromDefinition val; diff --git a/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll b/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll index 071d6d08433..a61b67e643f 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll @@ -17,6 +17,8 @@ * Flow through global variables, object properties or function calls is not * modeled (except for immediately invoked functions as explained above). */ +overlay[local] +module; import javascript private import internal.CallGraphs @@ -64,9 +66,11 @@ module DataFlow { * `p.getALocalSource()` does _not_ return the corresponding argument, and * `p.isIncomplete("call")` holds. */ + overlay[global] predicate isIncomplete(Incompleteness cause) { isIncomplete(this, cause) } /** Gets type inference results for this data flow node. */ + overlay[global] AnalyzedNode analyze() { result = this } /** Gets the expression corresponding to this data flow node, if any. */ @@ -98,6 +102,7 @@ module DataFlow { * Holds if this data flow node accesses the global variable `g`, either directly * or through the `window` object. */ + overlay[global] predicate accessesGlobal(string g) { globalVarRef(g).flowsTo(this) } /** Holds if this node may evaluate to the string `s`, possibly through local data flow. */ @@ -124,11 +129,13 @@ module DataFlow { int getIntValue() { result = this.asExpr().getIntValue() } /** Gets a function value that may reach this node. */ + overlay[global] final FunctionNode getAFunctionValue() { CallGraph::getAFunctionReference(result, 0).flowsTo(this) } /** Gets a function value that may reach this node with the given `imprecision` level. */ + overlay[global] final FunctionNode getAFunctionValue(int imprecision) { CallGraph::getAFunctionReference(result, imprecision).flowsTo(this) } @@ -137,6 +144,7 @@ module DataFlow { * Gets a function value that may reach this node, * possibly derived from a partial function invocation. */ + overlay[global] final FunctionNode getABoundFunctionValue(int boundArgs) { result = this.getAFunctionValue() and boundArgs = 0 or @@ -192,6 +200,7 @@ module DataFlow { FlowSteps::identityFunctionStep(result, this) } + overlay[global] private NameResolution::Node getNameResolutionNode() { this = valueNode(result) or @@ -205,6 +214,7 @@ module DataFlow { * Holds if this node is annotated with the given named type, * or is declared as a subtype thereof, or is a union or intersection containing such a type. */ + overlay[global] cached predicate hasUnderlyingType(string globalName) { Stages::TypeTracking::ref() and @@ -218,6 +228,7 @@ module DataFlow { * Holds if this node is annotated with the given named type, * or is declared as a subtype thereof, or is a union or intersection containing such a type. */ + overlay[global] cached predicate hasUnderlyingType(string moduleName, string typeName) { Stages::TypeTracking::ref() and @@ -466,6 +477,7 @@ module DataFlow { /** * Gets an accessor (`get` or `set` method) that may be invoked by this property reference. */ + overlay[global] final DataFlow::FunctionNode getAnAccessorCallee() { result = CallGraph::getAnAccessorCallee(this) } @@ -1762,6 +1774,7 @@ module DataFlow { ) } + overlay[global] private class ReflectiveParamsStep extends LegacyPreCallGraphStep { override predicate loadStep(DataFlow::Node obj, DataFlow::Node element, string prop) { exists(DataFlow::ReflectiveParametersNode params, DataFlow::FunctionNode f, int i | @@ -1774,6 +1787,7 @@ module DataFlow { } /** A taint step from the reflective parameters node to any parameter. */ + overlay[global] private class ReflectiveParamsTaintStep extends TaintTracking::LegacyTaintStep { override predicate step(DataFlow::Node obj, DataFlow::Node element) { exists(DataFlow::ReflectiveParametersNode params, DataFlow::FunctionNode f | @@ -1787,6 +1801,7 @@ module DataFlow { /** * Holds if there is a step from `pred` to `succ` through a field accessed through `this` in a class. */ + overlay[global] predicate localFieldStep(DataFlow::Node pred, DataFlow::Node succ) { exists(ClassNode cls, string prop | pred = AccessPath::getAnAssignmentTo(cls.getADirectSuperClass*().getAReceiverNode(), prop) or @@ -1819,6 +1834,7 @@ module DataFlow { * `p.getALocalSource()` does _not_ return the corresponding argument, and * `p.isIncomplete("call")` holds. */ + overlay[global] predicate isIncomplete(Node nd, Incompleteness cause) { exists(SsaVariable ssa | nd = TSsaDefNode(ssa.getDefinition()) | defIsIncomplete(ssa.(SsaExplicitDefinition).getDef(), cause) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/FlowSummary.qll b/javascript/ql/lib/semmle/javascript/dataflow/FlowSummary.qll index eb7160683a7..13aa5628111 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/FlowSummary.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/FlowSummary.qll @@ -1,4 +1,6 @@ /** Provides classes and predicates for defining flow summaries. */ +overlay[local] +module; private import javascript private import semmle.javascript.dataflow.internal.sharedlib.FlowSummaryImpl as Impl diff --git a/javascript/ql/lib/semmle/javascript/dataflow/InferredTypes.qll b/javascript/ql/lib/semmle/javascript/dataflow/InferredTypes.qll index b7b2b9ba1e5..48c21d41d75 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/InferredTypes.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/InferredTypes.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + /** * Types inferred by the flow analysis, represented as type tags. * diff --git a/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll b/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll index 0e6394a6f55..c4c7b1d7d18 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll @@ -3,6 +3,8 @@ * as nodes corresponding to function definitions or nodes corresponding to * parameters. */ +overlay[local] +module; private import javascript private import semmle.javascript.dependencies.Dependencies @@ -158,6 +160,7 @@ class InvokeNode extends DataFlow::SourceNode instanceof DataFlow::Impl::InvokeN * addEventHandler("click", foo.bind(this, "value of x")) * ``` */ + overlay[global] ParameterNode getABoundCallbackParameter(int callback, int param) { exists(int boundArgs | result = @@ -178,6 +181,7 @@ class InvokeNode extends DataFlow::SourceNode instanceof DataFlow::Impl::InvokeN private ObjectLiteralNode getOptionsArgument(int i) { result.flowsTo(this.getArgument(i)) } /** Gets an abstract value representing possible callees of this call site. */ + overlay[global] final AbstractValue getACalleeValue() { exists(DataFlow::Node callee, DataFlow::AnalyzedNode analyzed | pragma[only_bind_into](callee) = this.getCalleeNode() and @@ -192,6 +196,7 @@ class InvokeNode extends DataFlow::SourceNode instanceof DataFlow::Impl::InvokeN * To alter the call graph as seen by the interprocedural data flow libraries, override * the `getACallee(int imprecision)` predicate instead. */ + overlay[global] final Function getACallee() { result = this.getACallee(0) } /** @@ -206,6 +211,7 @@ class InvokeNode extends DataFlow::SourceNode instanceof DataFlow::Impl::InvokeN * This predicate can be overridden to alter the call graph used by the interprocedural * data flow libraries. */ + overlay[global] Function getACallee(int imprecision) { result = CallGraph::getACallee(this, imprecision).getFunction() } @@ -214,6 +220,7 @@ class InvokeNode extends DataFlow::SourceNode instanceof DataFlow::Impl::InvokeN * Holds if the approximation of possible callees for this call site is * affected by the given analysis incompleteness `cause`. */ + overlay[global] predicate isIndefinite(DataFlow::Incompleteness cause) { this.getACalleeValue().isIndefinite(cause) } @@ -229,6 +236,7 @@ class InvokeNode extends DataFlow::SourceNode instanceof DataFlow::Impl::InvokeN * independent contexts, so tracking flow through it leads to * imprecision. */ + overlay[global] predicate isImprecise() { this.isIndefinite("global") and exists(DefiniteAbstractValue v | v = this.getACalleeValue() | not v instanceof AbstractCallable) @@ -238,6 +246,7 @@ class InvokeNode extends DataFlow::SourceNode instanceof DataFlow::Impl::InvokeN * Holds if our approximation of possible callees for this call site is * likely to be incomplete. */ + overlay[global] predicate isIncomplete() { // the flow analysis identifies a source of incompleteness other than // global flow (which usually leads to imprecision rather than incompleteness) @@ -248,6 +257,7 @@ class InvokeNode extends DataFlow::SourceNode instanceof DataFlow::Impl::InvokeN * Holds if our approximation of possible callees for this call site is * likely to be imprecise or incomplete. */ + overlay[global] predicate isUncertain() { this.isImprecise() or this.isIncomplete() } /** @@ -763,7 +773,7 @@ module ModuleImportNode { cached ModuleImportNode moduleImport(string path) { // NB. internal modules may be imported with a "node:" prefix - Stages::Imports::ref() and result.getPath() = ["node:" + path, path] + result.getPath() = ["node:" + path, path] } /** @@ -771,6 +781,7 @@ ModuleImportNode moduleImport(string path) { * `require("lodash")` in a context where a package.json file includes * `"lodash"` as a dependency. */ +overlay[global] ModuleImportNode dependencyModuleImport(Dependency dep) { result = dep.getAUse("import").(Import).getImportedModuleNode() } @@ -780,6 +791,7 @@ ModuleImportNode dependencyModuleImport(Dependency dep) { * the given `path`, or accesses `m` as a member on a default or * namespace import from `path`. */ +overlay[global] DataFlow::SourceNode moduleMember(string path, string m) { result = moduleImport(path).getAPropertyRead(m) } @@ -861,6 +873,7 @@ module MemberKind { * * Additional patterns can be recognized as class nodes, by extending `DataFlow::ClassNode::Range`. */ +overlay[global] class ClassNode extends DataFlow::ValueNode, DataFlow::SourceNode { override AST::ValueNode astNode; AbstractCallable function; @@ -1329,6 +1342,7 @@ class ClassNode extends DataFlow::ValueNode, DataFlow::SourceNode { /** * Helper predicate to get a prototype reference in a file. */ +overlay[global] private DataFlow::PropRef getAPrototypeReferenceInFile(string name, File f) { result.getBase() = AccessPath::getAReferenceOrAssignmentTo(name) and result.getPropertyName() = "prototype" and @@ -1338,6 +1352,7 @@ private DataFlow::PropRef getAPrototypeReferenceInFile(string name, File f) { /** * Helper predicate to get an instantiation in a file. */ +overlay[global] private DataFlow::NewNode getAnInstantiationInFile(string name, File f) { result = AccessPath::getAReferenceTo(name).(DataFlow::LocalSourceNode).getAnInstantiation() and result.getFile() = f @@ -1346,6 +1361,7 @@ private DataFlow::NewNode getAnInstantiationInFile(string name, File f) { /** * Gets a reference to the function `func`, where there exists a read/write of the "prototype" property on that reference. */ +overlay[global] pragma[noinline] private DataFlow::SourceNode getAFunctionValueWithPrototype(AbstractValue func) { exists(result.getAPropertyReference("prototype")) and @@ -1353,6 +1369,7 @@ private DataFlow::SourceNode getAFunctionValueWithPrototype(AbstractValue func) func instanceof AbstractCallable // the join-order goes bad if `func` has type `AbstractFunction`. } +overlay[global] module ClassNode { /** * A dataflow node that should be considered a class node. @@ -1435,6 +1452,7 @@ module ClassNode { * _.partial(fn, x, y, z) * ``` */ +overlay[global] class PartialInvokeNode extends DataFlow::Node instanceof PartialInvokeNode::Range { /** Gets a node holding a callback invoked by this partial invocation node. */ DataFlow::Node getACallbackNode() { @@ -1470,6 +1488,7 @@ class PartialInvokeNode extends DataFlow::Node instanceof PartialInvokeNode::Ran } } +overlay[global] module PartialInvokeNode { /** * A data flow node that performs a partial function application. @@ -1717,6 +1736,7 @@ class RegExpCreationNode extends DataFlow::SourceNode { predicate maybeGlobal() { RegExp::maybeGlobal(this.tryGetFlags()) } /** Gets a data flow node referring to this regular expression. */ + overlay[global] private DataFlow::SourceNode getAReference(DataFlow::TypeTracker t) { t.start() and result = this @@ -1725,6 +1745,7 @@ class RegExpCreationNode extends DataFlow::SourceNode { } /** Gets a data flow node referring to this regular expression. */ + overlay[global] cached DataFlow::SourceNode getAReference() { Stages::FlowSteps::ref() and @@ -1736,6 +1757,7 @@ class RegExpCreationNode extends DataFlow::SourceNode { * A guard node for a variable in a negative condition, such as `x` in `if(!x)`. * Can be added to a `isBarrier` in a data-flow configuration to block flow through such checks. */ +overlay[global] class VarAccessBarrier extends DataFlow::Node { VarAccessBarrier() { exists(ConditionGuardNode guard, SsaRefinementNode refinement | diff --git a/javascript/ql/lib/semmle/javascript/dataflow/Refinements.qll b/javascript/ql/lib/semmle/javascript/dataflow/Refinements.qll index feb0187487e..b1302df6fbc 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/Refinements.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/Refinements.qll @@ -27,6 +27,8 @@ * so the refinement can evaluate to both `true` and `false` for the same * candidate value. */ +overlay[local] +module; import javascript private import AbstractValues @@ -45,6 +47,7 @@ abstract class RefinementCandidate extends Expr { /** * Gets a refinement value inferred for this expression in context `ctxt`. */ + overlay[global] pragma[nomagic] abstract RefinementValue eval(RefinementContext ctxt); } @@ -64,6 +67,7 @@ class Refinement extends Expr instanceof RefinementCandidate { /** * Gets a refinement value inferred for this expression in context `ctxt`. */ + overlay[global] RefinementValue eval(RefinementContext ctxt) { result = super.eval(ctxt) } } @@ -71,6 +75,7 @@ class Refinement extends Expr instanceof RefinementCandidate { abstract private class LiteralRefinement extends RefinementCandidate, Literal { override SsaSourceVariable getARefinedVar() { none() } + overlay[global] override RefinementValue eval(RefinementContext ctxt) { ctxt.appliesTo(this) and result = this.eval() } @@ -78,16 +83,19 @@ abstract private class LiteralRefinement extends RefinementCandidate, Literal { /** * Gets the refinement value that represents this literal. */ + overlay[global] RefinementValue eval() { result = TAny() } } /** A `null` literal, viewed as a refinement expression. */ private class NullLiteralRefinement extends LiteralRefinement, NullLiteral { + overlay[global] override RefinementValue eval() { result = TValueWithType(TTNull()) } } /** A Boolean literal, viewed as a refinement expression. */ private class BoolRefinement extends LiteralRefinement, BooleanLiteral { + overlay[global] override RefinementValue eval() { exists(boolean b | b.toString() = this.getValue() | result = TBoolConstant(b)) } @@ -95,11 +103,13 @@ private class BoolRefinement extends LiteralRefinement, BooleanLiteral { /** A constant string, viewed as a refinement expression. */ private class StringRefinement extends LiteralRefinement, ConstantString { + overlay[global] override RefinementValue eval() { result = TStringConstant(this.getStringValue()) } } /** A numeric literal, viewed as a refinement expression. */ abstract private class NumberRefinement extends LiteralRefinement, NumberLiteral { + overlay[global] override RefinementValue eval() { result = TValueWithType(TTNumber()) } } @@ -112,6 +122,7 @@ abstract private class NumberRefinement extends LiteralRefinement, NumberLiteral private class IntRefinement extends NumberRefinement, NumberLiteral { IntRefinement() { this.getValue().toInt() = 0 } + overlay[global] override RefinementValue eval() { result = TIntConstant(this.getValue().toInt()) } } @@ -123,6 +134,7 @@ private class UndefinedInRefinement extends RefinementCandidate, { override SsaSourceVariable getARefinedVar() { none() } + overlay[global] override RefinementValue eval(RefinementContext ctxt) { ctxt.appliesTo(this) and result = TValueWithType(TTUndefined()) @@ -135,6 +147,7 @@ private class VariableRefinement extends RefinementCandidate, VarUse { override SsaSourceVariable getARefinedVar() { result = this.getVariable() } + overlay[global] override RefinementValue eval(RefinementContext ctxt) { ctxt.appliesTo(this) and result = ctxt.(VarRefinementContext).getAValue() @@ -149,6 +162,7 @@ private class ParRefinement extends RefinementCandidate, ParExpr { result = this.getExpression().(RefinementCandidate).getARefinedVar() } + overlay[global] override RefinementValue eval(RefinementContext ctxt) { result = this.getExpression().(RefinementCandidate).eval(ctxt) } @@ -162,6 +176,7 @@ private class TypeofRefinement extends RefinementCandidate, TypeofExpr { result = this.getOperand().(RefinementCandidate).getARefinedVar() } + overlay[global] override RefinementValue eval(RefinementContext ctxt) { exists(RefinementValue opVal | opVal = this.getOperand().(RefinementCandidate).eval(ctxt) and @@ -182,6 +197,7 @@ private class EqRefinement extends RefinementCandidate, EqualityTest { result = this.getRightOperand().(RefinementCandidate).getARefinedVar() } + overlay[global] override RefinementValue eval(RefinementContext ctxt) { exists(RefinementCandidate l, RefinementValue lv, RefinementCandidate r, RefinementValue rv | l = this.getLeftOperand() and @@ -220,6 +236,7 @@ private class IndexRefinement extends RefinementCandidate, IndexExpr { result = this.getIndex().(RefinementCandidate).getARefinedVar() } + overlay[global] override RefinementValue eval(RefinementContext ctxt) { exists( RefinementCandidate base, RefinementValue baseVal, RefinementCandidate index, @@ -242,6 +259,7 @@ private class IndexRefinement extends RefinementCandidate, IndexExpr { * if any. */ bindingset[s, i] +overlay[global] private RefinementValue evalIndex(StringConstant s, IntConstant i) { result = TStringConstant(s.getValue().charAt(i.getValue())) } @@ -249,6 +267,7 @@ private RefinementValue evalIndex(StringConstant s, IntConstant i) { /** * A context in which a refinement expression is analyzed. */ +overlay[global] newtype TRefinementContext = /** * A refinement context associated with refinement `ref`, specifying that variable `var` @@ -266,6 +285,7 @@ newtype TRefinementContext = /** * A context in which a refinement expression is analyzed. */ +overlay[global] class RefinementContext extends TRefinementContext { /** * Holds if refinement expression `cand` might be analyzed in this context. @@ -280,6 +300,7 @@ class RefinementContext extends TRefinementContext { * A refinement context specifying that some variable is assumed to have one particular * abstract value. */ +overlay[global] class VarRefinementContext extends RefinementContext, TVarRefinementContext { override predicate appliesTo(RefinementCandidate cand) { exists(AnalyzedRefinement ref, SsaSourceVariable var | diff --git a/javascript/ql/lib/semmle/javascript/dataflow/Sources.qll b/javascript/ql/lib/semmle/javascript/dataflow/Sources.qll index 7503e5001e0..85a8a163cba 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/Sources.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/Sources.qll @@ -5,6 +5,8 @@ * Note that unlike `TypeTracking.qll`, this library only performs * local tracking within a function. */ +overlay[local] +module; private import javascript private import semmle.javascript.dataflow.TypeTracking @@ -192,6 +194,7 @@ class SourceNode extends DataFlow::Node instanceof SourceNode::Range { * * See `TypeTracker` for more details about how to use this. */ + overlay[global] pragma[inline] DataFlow::SourceNode track(TypeTracker t2, TypeTracker t) { t = t2.step(this, result) } @@ -200,6 +203,7 @@ class SourceNode extends DataFlow::Node instanceof SourceNode::Range { * * See `TypeBackTracker` for more details about how to use this. */ + overlay[global] pragma[inline] DataFlow::SourceNode backtrack(TypeBackTracker t2, TypeBackTracker t) { t2 = t.step(result, this) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/AbstractValuesImpl.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/AbstractValuesImpl.qll index 6bcef1dc412..97daed1f30a 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/AbstractValuesImpl.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/AbstractValuesImpl.qll @@ -3,6 +3,8 @@ * * Provides a representation for abstract values. */ +overlay[local] +module; private import javascript import semmle.javascript.dataflow.AbstractValues diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/AccessPaths.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/AccessPaths.qll index 3bcc36a6577..b7538c7ffbf 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/AccessPaths.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/AccessPaths.qll @@ -14,6 +14,8 @@ * to the same value have the same access paths, so access paths are neither sound nor * complete as an approximation of expression semantics. */ +overlay[local] +module; import javascript private import semmle.javascript.internal.CachedStages diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/AdditionalFlowInternal.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/AdditionalFlowInternal.qll index d7f92ce8dd3..dfa924699ba 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/AdditionalFlowInternal.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/AdditionalFlowInternal.qll @@ -5,6 +5,7 @@ private import semmle.javascript.dataflow.internal.DataFlowPrivate /** * Gets a data-flow node synthesized using `AdditionalFlowInternal#needsSynthesizedNode`. */ +overlay[local] DataFlow::Node getSynthesizedNode(AstNode node, string tag) { result = TGenericSynthesizedNode(node, tag, _) } @@ -12,6 +13,7 @@ DataFlow::Node getSynthesizedNode(AstNode node, string tag) { /** * An extension to `AdditionalFlowStep` with additional internal-only predicates. */ +overlay[local] class AdditionalFlowInternal extends DataFlow::AdditionalFlowStep { /** * Holds if a data-flow node should be synthesized for the pair `(node, tag)`. @@ -25,10 +27,12 @@ class AdditionalFlowInternal extends DataFlow::AdditionalFlowStep { /** * Holds if `node` should only permit flow of values stored in `contents`. */ + overlay[global] predicate expectsContent(DataFlow::Node node, DataFlow::ContentSet contents) { none() } /** * Holds if `node` should not permit flow of values stored in `contents`. */ + overlay[global] predicate clearsContent(DataFlow::Node node, DataFlow::ContentSet contents) { none() } } diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/Contents.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/Contents.qll index a5af2737c18..be9bc2c81a3 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/Contents.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/Contents.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + private import javascript private import semmle.javascript.frameworks.data.internal.ApiGraphModels as ApiGraphModels private import semmle.javascript.dataflow.internal.FlowSummaryPrivate as FlowSummaryPrivate @@ -333,12 +336,14 @@ module Public { /** * A content set containing only the given content. */ + overlay[caller] pragma[inline] ContentSet singleton(Content content) { result.asSingleton() = content } /** * A content set corresponding to the given property name. */ + overlay[caller] pragma[inline] ContentSet property(PropertyName name) { result.asSingleton().asPropertyName() = name } @@ -399,6 +404,7 @@ module Public { * If `bound` is too large, it is truncated to the greatest lower bound we can represent. */ bindingset[bound] + overlay[caller] ContentSet arrayElementLowerBoundFromInt(int bound) { result = arrayElementLowerBound(bound.minimum(getMaxPreciseArrayIndex() + 1)) } @@ -409,6 +415,7 @@ module Public { * If `n` is too large, it is truncated to the greatest lower bound we can represent. */ bindingset[n] + overlay[caller] ContentSet arrayElementFromInt(int n) { result = arrayElementKnown(n) or @@ -448,6 +455,7 @@ module Public { * If `key` is not one of the keys we track precisely, this is mapped to the unknown key instead. */ bindingset[key] + overlay[caller] ContentSet mapValueFromKey(string key) { result = mapValueWithKnownKey(key) or @@ -510,6 +518,7 @@ module Public { * are mapped to their corresponding content sets (which are no longer seen as property names). */ bindingset[propertyName] + overlay[caller] ContentSet fromLegacyProperty(string propertyName) { result = fromLegacyPseudoProperty(propertyName) or diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowNode.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowNode.qll index 8d54f639cb0..4a354e1f759 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowNode.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowNode.qll @@ -3,6 +3,8 @@ * * Contains the raw data type underlying `DataFlow::Node`. */ +overlay[local] +module; private import javascript private import codeql.util.Boolean diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll index 1a4051ccdf6..68cf0aa4287 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + private import javascript private import semmle.javascript.dataflow.internal.CallGraphs private import semmle.javascript.dataflow.internal.DataFlowNode @@ -310,6 +313,7 @@ private predicate returnNodeImpl(DataFlow::Node node, ReturnKind kind) { kind = MkExceptionalReturnKind() } +overlay[global] private DataFlow::Node getAnOutNodeImpl(DataFlowCall call, ReturnKind kind) { kind = MkNormalReturnKind() and result = call.asOrdinaryCall() or @@ -336,10 +340,12 @@ class ReturnNode extends DataFlow::Node { } /** A node that receives an output from a call. */ +overlay[global] class OutNode extends DataFlow::Node { OutNode() { this = getAnOutNodeImpl(_, _) } } +overlay[global] OutNode getAnOutNode(DataFlowCall call, ReturnKind kind) { result = getAnOutNodeImpl(call, kind) } cached @@ -416,9 +422,11 @@ abstract class LibraryCallable extends string { LibraryCallable() { any() } /** Gets a call to this library callable. */ + overlay[global] DataFlow::InvokeNode getACall() { none() } /** Same as `getACall()` except this does not depend on the call graph or API graph. */ + overlay[global] DataFlow::InvokeNode getACallSimple() { none() } } @@ -432,6 +440,7 @@ abstract class LibraryCallableInternal extends LibraryCallable { * * Same as `getACall()` but is evaluated later and may depend negatively on `getACall()`. */ + overlay[global] DataFlow::InvokeNode getACallStage2() { none() } } @@ -467,6 +476,7 @@ predicate isParameterNode(ParameterNode p, DataFlowCallable c, ParameterPosition isParameterNodeImpl(p, c, pos) } +overlay[global] private predicate isArgumentNodeImpl(Node n, DataFlowCall call, ArgumentPosition pos) { n = call.asOrdinaryCall().getArgument(pos.asPositional()) or @@ -523,6 +533,7 @@ private predicate isArgumentNodeImpl(Node n, DataFlowCall call, ArgumentPosition ) } +overlay[global] predicate isArgumentNode(ArgumentNode n, DataFlowCall call, ArgumentPosition pos) { isArgumentNodeImpl(n, call, pos) } @@ -545,11 +556,13 @@ DataFlowCallable nodeGetEnclosingCallable(Node node) { node instanceof DataFlow::XmlAttributeNode and result.asFileCallable() = node.getFile() } +overlay[global] newtype TDataFlowType = TFunctionType(Function f) or TInstanceType(DataFlow::ClassNode cls) or TAnyType() +overlay[global] class DataFlowType extends TDataFlowType { string toDebugString() { result = @@ -575,6 +588,7 @@ class DataFlowType extends TDataFlowType { /** * Holds if `t1` is strictly stronger than `t2`. */ +overlay[global] predicate typeStrongerThan(DataFlowType t1, DataFlowType t2) { // 't1' is a subclass of 't2' t1.asInstanceOfClass() = t2.asInstanceOfClass().getADirectSubClass+() @@ -584,6 +598,7 @@ predicate typeStrongerThan(DataFlowType t1, DataFlowType t2) { t2 = TAnyType() } +overlay[global] private DataFlowType getPreciseType(Node node) { exists(Function f | (node = TValueNode(f) or node = TFunctionSelfReferenceNode(f)) and @@ -598,6 +613,7 @@ private DataFlowType getPreciseType(Node node) { result = getPreciseType(node.(PostUpdateNode).getPreUpdateNode()) } +overlay[global] DataFlowType getNodeType(Node node) { result = getPreciseType(node) or @@ -681,19 +697,23 @@ predicate neverSkipInPathGraph(Node node) { node.asExpr() instanceof VarRef } +overlay[global] string ppReprType(DataFlowType t) { none() } +overlay[global] pragma[inline] private predicate compatibleTypesWithAny(DataFlowType t1, DataFlowType t2) { t1 != TAnyType() and t2 = TAnyType() } +overlay[global] pragma[nomagic] private predicate compatibleTypes1(DataFlowType t1, DataFlowType t2) { t1.asInstanceOfClass().getADirectSubClass+() = t2.asInstanceOfClass() } +overlay[global] pragma[inline] predicate compatibleTypes(DataFlowType t1, DataFlowType t2) { t1 = t2 @@ -767,6 +787,7 @@ ContentApprox getContentApprox(Content c) { c instanceof MkCapturedContent and result = TApproxCapturedContent() } +overlay[global] cached private newtype TDataFlowCall = MkOrdinaryCall(DataFlow::InvokeNode node) or @@ -791,6 +812,7 @@ private newtype TDataFlowCall = FlowSummaryImpl::Private::summaryCallbackRange(c, receiver) } +overlay[global] class DataFlowCall extends TDataFlowCall { DataFlowCallable getEnclosingCallable() { none() } // Overridden in subclass @@ -816,6 +838,7 @@ class DataFlowCall extends TDataFlowCall { Location getLocation() { none() } // Overridden in subclass } +overlay[global] private class OrdinaryCall extends DataFlowCall, MkOrdinaryCall { private DataFlow::InvokeNode node; @@ -832,6 +855,7 @@ private class OrdinaryCall extends DataFlowCall, MkOrdinaryCall { override Location getLocation() { result = node.getLocation() } } +overlay[global] private class PartialCall extends DataFlowCall, MkPartialCall { private DataFlow::PartialInvokeNode node; private DataFlow::Node callback; @@ -851,6 +875,7 @@ private class PartialCall extends DataFlowCall, MkPartialCall { override Location getLocation() { result = node.getLocation() } } +overlay[global] private class BoundCall extends DataFlowCall, MkBoundCall { private DataFlow::InvokeNode node; private int boundArgs; @@ -868,6 +893,7 @@ private class BoundCall extends DataFlowCall, MkBoundCall { override Location getLocation() { result = node.getLocation() } } +overlay[global] private class AccessorCall extends DataFlowCall, MkAccessorCall { private DataFlow::PropRef ref; @@ -882,6 +908,7 @@ private class AccessorCall extends DataFlowCall, MkAccessorCall { override Location getLocation() { result = ref.getLocation() } } +overlay[global] class SummaryCall extends DataFlowCall, MkSummaryCall { private FlowSummaryImpl::Public::SummarizedCallable enclosingCallable; private FlowSummaryImpl::Private::SummaryNode receiver; @@ -908,6 +935,7 @@ class SummaryCall extends DataFlowCall, MkSummaryCall { * This is to help ensure captured variables can flow into the lambda in cases where * we can't find its call sites. */ +overlay[global] private class ImpliedLambdaCall extends DataFlowCall, MkImpliedLambdaCall { private Function function; @@ -981,6 +1009,7 @@ class DataFlowExpr = Expr; Node exprNode(DataFlowExpr expr) { result = DataFlow::exprNode(expr) } +overlay[global] pragma[nomagic] predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos) { ppos = apos @@ -993,6 +1022,7 @@ predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos) { // are only using these in cases where either the call or callee is generated by a flow summary. } +overlay[global] pragma[inline] DataFlowCallable viableCallable(DataFlowCall node) { // Note: we never include call edges externs here, as it negatively affects the field-flow branch limit, @@ -1021,6 +1051,7 @@ DataFlowCallable viableCallable(DataFlowCall node) { result.asSourceCallableNotExterns() = node.asImpliedLambdaCall() } +overlay[global] private DataFlowCall getACallOnThis(DataFlow::ClassNode cls) { result.asOrdinaryCall() = cls.getAReceiverNode().getAPropertyRead().getACall() or @@ -1029,6 +1060,7 @@ private DataFlowCall getACallOnThis(DataFlow::ClassNode cls) { result.asPartialCall().getACallbackNode() = cls.getAReceiverNode().getAPropertyRead() } +overlay[global] private predicate downwardCall(DataFlowCall call) { exists(DataFlow::ClassNode cls | call = getACallOnThis(cls) and @@ -1041,9 +1073,11 @@ private predicate downwardCall(DataFlowCall call) { * Holds if the set of viable implementations that can be called by `call` * might be improved by knowing the call context. */ +overlay[global] predicate mayBenefitFromCallContext(DataFlowCall call) { downwardCall(call) } /** Gets the type of the receiver of `call`. */ +overlay[global] private DataFlowType getThisArgumentType(DataFlowCall call) { exists(DataFlow::Node node | isArgumentNodeImpl(node, call, MkThisParameter()) and @@ -1052,6 +1086,7 @@ private DataFlowType getThisArgumentType(DataFlowCall call) { } /** Gets the type of the 'this' parameter of `call`. */ +overlay[global] private DataFlowType getThisParameterType(DataFlowCallable callable) { exists(DataFlow::Node node | isParameterNodeImpl(node, callable, MkThisParameter()) and @@ -1063,6 +1098,7 @@ private DataFlowType getThisParameterType(DataFlowCallable callable) { * Gets a viable dispatch target of `call` in the context `ctx`. This is * restricted to those `call`s for which a context might make a difference. */ +overlay[global] DataFlowCallable viableImplInCallContext(DataFlowCall call, DataFlowCall ctx) { mayBenefitFromCallContext(call) and result = viableCallable(call) and @@ -1071,16 +1107,19 @@ DataFlowCallable viableImplInCallContext(DataFlowCall call, DataFlowCall ctx) { } bindingset[node, fun] +overlay[caller] pragma[inline_late] private predicate sameContainerAsEnclosingContainer(Node node, Function fun) { node.getContainer() = fun.getEnclosingContainer() } +overlay[global] abstract private class BarrierGuardAdapter extends DataFlow::Node { // Note: avoid depending on DataFlow::FlowLabel here as it will cause these barriers to be re-evaluated predicate blocksExpr(boolean outcome, Expr e) { none() } } +overlay[global] deprecated private class BarrierGuardAdapterSubclass extends BarrierGuardAdapter instanceof DataFlow::AdditionalBarrierGuardNode { override predicate blocksExpr(boolean outcome, Expr e) { super.blocks(outcome, e) } @@ -1092,6 +1131,7 @@ deprecated private class BarrierGuardAdapterSubclass extends BarrierGuardAdapter * * The standard library contains no subclasses of that class; this is for backwards compatibility only. */ +overlay[global] pragma[nomagic] private predicate legacyBarrier(DataFlow::Node node) { node = MakeBarrierGuard::getABarrierNode() @@ -1100,6 +1140,7 @@ private predicate legacyBarrier(DataFlow::Node node) { /** * Holds if `node` should be removed from the local data flow graph, for compatibility with legacy code. */ +overlay[global] pragma[nomagic] private predicate isBlockedLegacyNode(Node node) { // Ignore captured variable nodes for those variables that are handled by the captured-variable library. @@ -1155,6 +1196,7 @@ private predicate imprecisePostUpdateStep(DataFlow::PostUpdateNode postUpdate, D * Holds if there is a value-preserving steps `node1` -> `node2` that might * be cross function boundaries. */ +overlay[global] private predicate valuePreservingStep(Node node1, Node node2) { node1.getASuccessor() = node2 and not isBlockedLegacyNode(node1) and @@ -1223,10 +1265,12 @@ private predicate useUseFlow(Node node1, Node node2) { ) } +overlay[global] predicate simpleLocalFlowStep(Node node1, Node node2, string model) { simpleLocalFlowStep(node1, node2) and model = "" } +overlay[global] predicate simpleLocalFlowStep(Node node1, Node node2) { valuePreservingStep(node1, node2) and nodeGetEnclosingCallable(pragma[only_bind_out](node1)) = @@ -1314,6 +1358,7 @@ private predicate excludedJumpStep(Node node1, Node node2) { * that does not follow a call edge. For example, a step through a global * variable. */ +overlay[global] predicate jumpStep(Node node1, Node node2) { valuePreservingStep(node1, node2) and node1.getContainer() != node2.getContainer() and @@ -1330,6 +1375,7 @@ predicate jumpStep(Node node1, Node node2) { * `node1` references an object with a content `c.getAReadContent()` whose * value ends up in `node2`. */ +overlay[global] predicate readStep(Node node1, ContentSet c, Node node2) { exists(DataFlow::PropRead read | node1 = read.getBase() and @@ -1487,6 +1533,7 @@ private int firstSpreadArgumentIndex(InvokeExpr expr) { * `node2` references an object with a content `c.getAStoreContent()` that * contains the value of `node1`. */ +overlay[global] predicate storeStep(Node node1, ContentSet c, Node node2) { exists(DataFlow::PropWrite write | node1 = write.getRhs() and @@ -1545,6 +1592,7 @@ predicate storeStep(Node node1, ContentSet c, Node node2) { * any value stored inside `f` is cleared at the pre-update node associated with `x` * in `x.f = newValue`. */ +overlay[global] predicate clearsContent(Node n, ContentSet c) { FlowSummaryPrivate::Steps::summaryClearsContent(n.(FlowSummaryNode).getSummaryNode(), c) or @@ -1578,6 +1626,7 @@ predicate clearsContent(Node n, ContentSet c) { * Holds if the value that is being tracked is expected to be stored inside content `c` * at node `n`. */ +overlay[global] predicate expectsContent(Node n, ContentSet c) { FlowSummaryPrivate::Steps::summaryExpectsContent(n.(FlowSummaryNode).getSummaryNode(), c) or @@ -1602,6 +1651,7 @@ abstract class NodeRegion extends Unit { /** * Holds if the node `n` is unreachable when the call context is `call`. */ +overlay[global] predicate isUnreachableInCall(NodeRegion n, DataFlowCall call) { none() // TODO: could be useful, but not currently implemented for JS } @@ -1635,6 +1685,7 @@ predicate lambdaCreation(Node creation, LambdaCallKind kind, DataFlowCallable c) } /** Holds if `call` is a lambda call of kind `kind` where `receiver` is the lambda expression. */ +overlay[global] predicate lambdaCall(DataFlowCall call, LambdaCallKind kind, Node receiver) { call.isSummaryCall(_, receiver.(FlowSummaryNode).getSummaryNode()) and exists(kind) or @@ -1646,6 +1697,7 @@ predicate lambdaCall(DataFlowCall call, LambdaCallKind kind, Node receiver) { /** Extra data-flow steps needed for lambda flow analysis. */ predicate additionalLambdaFlowStep(Node nodeFrom, Node nodeTo, boolean preservesValue) { none() } +overlay[global] class ArgumentNode extends DataFlow::Node { ArgumentNode() { isArgumentNodeImpl(this, _, _) } diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSteps.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSteps.qll index 1711faa4ade..9595ef935ce 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSteps.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSteps.qll @@ -519,22 +519,23 @@ private module CachedSteps { predicate receiverPropWrite(Function f, string prop, DataFlow::Node rhs) { DataFlow::thisNode(f).hasPropertyWrite(prop, rhs) } - - /** - * Holds if there is a step from `pred` to `succ` through a call to an identity function. - */ - cached - predicate identityFunctionStep(DataFlow::Node pred, DataFlow::CallNode succ) { - exists(DataFlow::GlobalVarRefNode global | - global.getName() = "Object" and - succ.(DataFlow::MethodCallNode).calls(global, ["freeze", "seal"]) and - pred = succ.getArgument(0) - ) - } } import CachedSteps +/** + * Holds if there is a step from `pred` to `succ` through a call to an identity function. + */ +overlay[local] +cached +predicate identityFunctionStep(DataFlow::Node pred, DataFlow::CallNode succ) { + exists(DataFlow::GlobalVarRefNode global | + global.getName() = "Object" and + succ.(DataFlow::MethodCallNode).calls(global, ["freeze", "seal"]) and + pred = succ.getArgument(0) + ) +} + /** * A utility class that is equivalent to `boolean` but does not require type joining. */ diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSummaryPrivate.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSummaryPrivate.qll index a5131e4fd64..509aa79eda8 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSummaryPrivate.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSummaryPrivate.qll @@ -1,6 +1,8 @@ /** * Provides JS specific classes and predicates for defining flow summaries. */ +overlay[local] +module; private import javascript private import semmle.javascript.dataflow.internal.DataFlowPrivate @@ -140,6 +142,7 @@ string encodeArgumentPosition(ArgumentPosition pos) { ReturnKind getStandardReturnValueKind() { result = MkNormalReturnKind() and Stage::ref() } private module FlowSummaryStepInput implements Private::StepsInputSig { + overlay[global] DataFlowCall getACall(SummarizedCallable sc) { exists(LibraryCallable callable | callable = sc | result.asOrdinaryCall() = diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableCapture.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableCapture.qll index 8edacdc2f0f..62892d7e5db 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableCapture.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableCapture.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + private import javascript as js private import semmle.javascript.dataflow.internal.DataFlowNode private import semmle.javascript.dataflow.internal.VariableOrThis diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableOrThis.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableOrThis.qll index a517e0d91fd..8a3b79a420f 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableOrThis.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableOrThis.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + private import javascript private import DataFlowNode diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll index 7e610c3c23c..1dd06c23638 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll @@ -3,6 +3,8 @@ * * JavaScript's old SSA library is still responsible for the ordinary SSA flow. */ +overlay[local] +module; private import javascript as js private import codeql.ssa.Ssa diff --git a/javascript/ql/lib/semmle/javascript/frameworks/LazyCache.qll b/javascript/ql/lib/semmle/javascript/frameworks/LazyCache.qll index 2c460fcc345..aec8c82247f 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/LazyCache.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/LazyCache.qll @@ -1,6 +1,8 @@ /** * Models imports through the NPM `lazy-cache` package. */ +overlay[local] +module; import javascript @@ -58,6 +60,7 @@ module LazyCache { } /** A constant path element appearing in a call to a lazy-cache object. */ + overlay[global] deprecated private class LazyCachePathExpr extends PathExpr, ConstantString { LazyCachePathExpr() { this = any(LazyCacheImport rp).getArgument(0) } diff --git a/javascript/ql/lib/semmle/javascript/frameworks/LodashUnderscore.qll b/javascript/ql/lib/semmle/javascript/frameworks/LodashUnderscore.qll index 20258622737..c6de3dd7316 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/LodashUnderscore.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/LodashUnderscore.qll @@ -181,9 +181,11 @@ module LodashUnderscore { } } + overlay[local] private class LodashEach extends DataFlow::SummarizedCallable { LodashEach() { this = "_.each-like" } + overlay[global] override DataFlow::CallNode getACall() { result = member(["each", "eachRight", "forEach", "forEachRight", "every", "some"]).getACall() } @@ -195,9 +197,11 @@ module LodashUnderscore { } } + overlay[local] private class LodashMap extends DataFlow::SummarizedCallable { LodashMap() { this = "_.map" } + overlay[global] override DataFlow::CallNode getACall() { result = member("map").getACall() } override predicate propagatesFlow(string input, string output, boolean preservesValue) { @@ -212,9 +216,11 @@ module LodashUnderscore { } } + overlay[local] private class LodashFlatMap extends DataFlow::SummarizedCallable { LodashFlatMap() { this = "_.flatMap" } + overlay[global] override DataFlow::CallNode getACall() { result = member("flatMap").getACall() } override predicate propagatesFlow(string input, string output, boolean preservesValue) { @@ -232,9 +238,11 @@ module LodashUnderscore { } } + overlay[local] private class LodashFlatMapDeep extends DataFlow::SummarizedCallable { LodashFlatMapDeep() { this = "_.flatMapDeep" } + overlay[global] override DataFlow::CallNode getACall() { result = member(["flatMapDeep", "flatMapDepth"]).getACall() } @@ -254,9 +262,11 @@ module LodashUnderscore { } } + overlay[local] private class LodashReduce extends DataFlow::SummarizedCallable { LodashReduce() { this = "_.reduce-like" } + overlay[global] override DataFlow::CallNode getACall() { result = member(["reduce", "reduceRight"]).getACall() } override predicate propagatesFlow(string input, string output, boolean preservesValue) { @@ -271,9 +281,11 @@ module LodashUnderscore { } } + overlay[local] private class LoashSortBy extends DataFlow::SummarizedCallable { LoashSortBy() { this = "_.sortBy-like" } + overlay[global] override DataFlow::CallNode getACall() { result = member(["sortBy", "orderBy"]).getACall() } override predicate propagatesFlow(string input, string output, boolean preservesValue) { @@ -287,9 +299,11 @@ module LodashUnderscore { } } + overlay[local] private class LodashMinMaxBy extends DataFlow::SummarizedCallable { LodashMinMaxBy() { this = "_.minBy / _.maxBy" } + overlay[global] override DataFlow::CallNode getACall() { result = member(["minBy", "maxBy"]).getACall() } override predicate propagatesFlow(string input, string output, boolean preservesValue) { @@ -299,9 +313,11 @@ module LodashUnderscore { } } + overlay[local] private class LodashPartition extends DataFlow::SummarizedCallable { LodashPartition() { this = "_.partition" } + overlay[global] override DataFlow::CallNode getACall() { result = member("partition").getACall() } override predicate propagatesFlow(string input, string output, boolean preservesValue) { @@ -311,9 +327,11 @@ module LodashUnderscore { } } + overlay[local] private class UnderscoreMapObject extends DataFlow::SummarizedCallable { UnderscoreMapObject() { this = "_.mapObject" } + overlay[global] override DataFlow::CallNode getACall() { result = member("mapObject").getACall() } override predicate propagatesFlow(string input, string output, boolean preservesValue) { @@ -330,9 +348,11 @@ module LodashUnderscore { } } + overlay[local] private class LodashTap extends DataFlow::SummarizedCallable { LodashTap() { this = "_.tap" } + overlay[global] override DataFlow::CallNode getACall() { result = member("tap").getACall() } override predicate propagatesFlow(string input, string output, boolean preservesValue) { diff --git a/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll b/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll index c5f8c3d14f1..89d436bb64c 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll @@ -8,14 +8,17 @@ import semmle.javascript.security.SensitiveActions private import semmle.javascript.dataflow.internal.PreCallGraphStep module NodeJSLib { + overlay[local] private GlobalVariable processVariable() { variables(result, "process", any(GlobalScope sc)) } + overlay[local] pragma[nomagic] private GlobalVarAccess processExprInTopLevel(TopLevel tl) { result = processVariable().getAnAccess() and tl = result.getTopLevel() } + overlay[local] pragma[nomagic] private GlobalVarAccess processExprInNodeModule() { result = processExprInTopLevel(any(NodeModule m)) @@ -25,6 +28,7 @@ module NodeJSLib { * An access to the global `process` variable in a Node.js module, interpreted as * an import of the `process` module. */ + overlay[local] private class ImplicitProcessImport extends DataFlow::ModuleImportNode::Range { ImplicitProcessImport() { this = DataFlow::exprNode(processExprInNodeModule()) } diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Templating.qll b/javascript/ql/lib/semmle/javascript/frameworks/Templating.qll index a7286c7a199..f1f91785329 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Templating.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Templating.qll @@ -1,6 +1,8 @@ /** * Provides predicates for working with templating libraries. */ +overlay[local] +module; import javascript @@ -45,6 +47,7 @@ module Templating { Locatable getParent() { template_placeholder_tag_info(this, result, _) } /** Gets a data flow node representing the value plugged into this placeholder. */ + overlay[global] DataFlow::TemplatePlaceholderTagNode asDataFlowNode() { result.getTag() = this } /** Gets the top-level containing the template expression to be inserted at this placeholder. */ @@ -54,6 +57,7 @@ module Templating { * Holds if this performs raw interpolation, that is, inserts its result * in the output without escaping it. */ + overlay[global] predicate isRawInterpolation() { this.getRawText() .regexpMatch(getLikelyTemplateSyntax(this.getFile()).getRawInterpolationRegexp()) @@ -62,6 +66,7 @@ module Templating { /** * Holds if this performs HTML escaping on the result before inserting it in the template. */ + overlay[global] predicate isEscapingInterpolation() { this.getRawText() .regexpMatch(getLikelyTemplateSyntax(this.getFile()).getEscapingInterpolationRegexp()) @@ -93,6 +98,7 @@ module Templating { * Holds if this placeholder occurs in the definition of another template, which means the output * is susceptible to code injection. */ + overlay[global] predicate isInNestedTemplateContext(string templateType) { templateType = "AngularJS" and AngularJS::isInterpretedByAngularJS(this.getParent()) and @@ -135,6 +141,7 @@ module Templating { * * For example, the call generated from `items | async` would be found by `getAPipeCall("async")`. */ + overlay[global] DataFlow::CallNode getAPipeCall(string name) { result.getCalleeNode().asExpr().(PipeRefExpr).getName() = name } @@ -153,16 +160,19 @@ module Templating { Expr getExpression() { result = this.getChildStmt(0).(ExprStmt).getExpr() } /** Gets the data flow node representing the initialization of the given variable in this scope. */ + overlay[global] DataFlow::Node getVariableInit(string name) { result = DataFlow::ssaDefinitionNode(Ssa::implicitInit(this.getScope().getVariable(name))) } /** Gets a data flow node corresponding to a use of the given template variable within this top-level. */ + overlay[global] DataFlow::SourceNode getAVariableUse(string name) { result = this.getScope().getVariable(name).getAnAccess().flow() } /** Gets a data flow node corresponding to a use of the given template variable within this top-level. */ + overlay[global] DataFlow::SourceNode getAnAccessPathUse(string accessPath) { result = this.getAVariableUse(accessPath) or @@ -177,6 +187,7 @@ module Templating { /** * A place where a template is instantiated or rendered. */ + overlay[global] class TemplateInstantiation extends DataFlow::Node instanceof TemplateInstantiation::Range { /** Gets a data flow node that refers to the instantiated template string, if any. */ DataFlow::SourceNode getOutput() { result = super.getOutput() } @@ -206,6 +217,7 @@ module Templating { } /** Companion module to the `TemplateInstantiation` class. */ + overlay[global] module TemplateInstantiation { abstract class Range extends DataFlow::Node { /** Gets a data flow node that refers to the instantiated template, if any. */ @@ -230,6 +242,7 @@ module Templating { } /** Gets an API node that may flow to `succ` through a template instantiation. */ + overlay[global] private API::Node getTemplateInput(DataFlow::SourceNode succ) { exists(TemplateInstantiation inst, API::Node base, string name | base.asSink() = inst.getTemplateParamsNode() and @@ -258,6 +271,7 @@ module Templating { ) } + overlay[global] private class TemplateInputStep extends DataFlow::SharedFlowStep { override predicate step(DataFlow::Node pred, DataFlow::Node succ) { getTemplateInput(succ).asSink() = pred @@ -268,6 +282,7 @@ module Templating { * A data flow step from the expression in a placeholder tag to the tag itself, * representing the value plugged into the template. */ + overlay[global] private class TemplatePlaceholderStep extends DataFlow::SharedFlowStep { override predicate step(DataFlow::Node pred, DataFlow::Node succ) { exists(TemplatePlaceholderTag tag | @@ -281,6 +296,7 @@ module Templating { * A taint step from a `TemplatePlaceholderTag` to the enclosing expression in the * surrounding JavaScript program. */ + overlay[global] private class PlaceholderToGeneratedCodeStep extends TaintTracking::SharedTaintStep { override predicate step(DataFlow::Node pred, DataFlow::Node succ) { exists(TemplatePlaceholderTag tag | @@ -296,6 +312,7 @@ module Templating { final TemplatePlaceholderTag getAPlaceholder() { result.getFile() = this } /** Gets a template file referenced by this one via a template inclusion tag, such as `{% include foo %}` */ + overlay[global] TemplateFile getAnImportedFile() { result = this.getAPlaceholder().(TemplateInclusionTag).getImportedFile() } @@ -314,6 +331,7 @@ module Templating { * - The root folder is considered unknown, and so a heuristic is used to guess the most * likely template file being referenced. */ + overlay[global] abstract class TemplateFileReference extends DataFlow::Node { /** Gets the value that identifies the template. */ string getValue() { @@ -335,6 +353,7 @@ module Templating { } /** Get file argument of a template instantiation, seen as a template file reference. */ + overlay[global] private class DefaultTemplateFileReference extends TemplateFileReference { DefaultTemplateFileReference() { this = any(TemplateInstantiation inst).getTemplateFileNode() } } @@ -352,6 +371,7 @@ module Templating { * - The root folder is considered unknown, and so a heuristic is used to guess the most * likely template file being referenced. */ + overlay[global] abstract class TemplateFileReferenceString extends string { bindingset[this] TemplateFileReferenceString() { this = this } @@ -382,6 +402,7 @@ module Templating { } /** The value of a template reference node, as a template reference string. */ + overlay[global] private class DefaultTemplateReferenceString extends TemplateFileReferenceString { TemplateFileReference r; @@ -397,6 +418,7 @@ module Templating { } /** The `X` in a path of form `../X`, treated as a separate path string with a different context folder. */ + overlay[global] private class UpwardTraversalSuffix extends TemplateFileReferenceString { TemplateFileReferenceString original; @@ -412,6 +434,7 @@ module Templating { * Gets a "fingerprint" for the given template file, which is used to references * that might refer to it (for pruning purposes only). */ + overlay[global] pragma[nomagic] private string getTemplateFileFingerprint(TemplateFile file) { result = file.getStem() @@ -424,6 +447,7 @@ module Templating { * Gets a "fingerprint" for the given string, which must match one of the fingerprints of * the referenced file (for pruning purposes only). */ + overlay[global] pragma[nomagic] private string getTemplateRefFingerprint(TemplateFileReferenceString ref) { result = ref.getStem() and not result = ["index", ""] @@ -442,6 +466,7 @@ module Templating { * * This is only used to speed up `getAMatchingTarget` by pruning out pairs that can't match. */ + overlay[global] pragma[nomagic] private TemplateFile getAPotentialTarget(TemplateFileReferenceString ref) { getTemplateFileFingerprint(result) = getTemplateRefFingerprint(ref) @@ -467,6 +492,7 @@ module Templating { * Additionally, a file whose stem is `index` matches if `ref` would match the parent folder by * the above rules. For example: `bar` matches `src/bar/index.html`. */ + overlay[global] pragma[nomagic] private TemplateFile getAMatchingTarget(TemplateFileReferenceString ref) { result = getAPotentialTarget(ref) and @@ -491,6 +517,7 @@ module Templating { * The string `list` in `A/components/foo.js` will resolve to `A/views/list.html`, * and vice versa in `B/components/foo.js`. */ + overlay[global] pragma[nomagic] private int getRankOfMatchingTarget( TemplateFile file, Folder baseFolder, TemplateFileReferenceString ref @@ -508,6 +535,7 @@ module Templating { /** * Gets the template file referred to by `ref` when resolved from `baseFolder`. */ + overlay[global] private TemplateFile getBestMatchingTarget(Folder baseFolder, TemplateFileReferenceString ref) { result = max(getAMatchingTarget(ref) as f order by getRankOfMatchingTarget(f, baseFolder, ref)) } @@ -599,6 +627,7 @@ module Templating { override string getAPackageName() { result = "dot" } } + overlay[global] private TemplateSyntax getOwnTemplateSyntaxInFolder(Folder f) { exists(PackageDependencies deps | deps.getADependency(result.getAPackageName(), _) and @@ -606,6 +635,7 @@ module Templating { ) } + overlay[global] private TemplateSyntax getTemplateSyntaxInFolder(Folder f) { result = getOwnTemplateSyntaxInFolder(f) or @@ -613,6 +643,7 @@ module Templating { result = getTemplateSyntaxInFolder(f.getParentContainer()) } + overlay[global] private TemplateSyntax getTemplateSyntaxFromInstantiation(TemplateFile file) { result = any(TemplateInstantiation inst | inst.getTemplateFile() = file).getTemplateSyntax() } @@ -620,6 +651,7 @@ module Templating { /** * Gets a template syntax likely to be used in the given file. */ + overlay[global] TemplateSyntax getLikelyTemplateSyntax(TemplateFile file) { result = getTemplateSyntaxFromInstantiation(file) or @@ -632,6 +664,7 @@ module Templating { } /** A step through the `safe` pipe, which bypasses HTML escaping. */ + overlay[global] private class SafePipeStep extends TaintTracking::SharedTaintStep { override predicate step(DataFlow::Node pred, DataFlow::Node succ) { exists(DataFlow::CallNode call | @@ -645,6 +678,7 @@ module Templating { /** * An EJS-style `include` call within a template tag, such as `<%- include(file, { params }) %>`. */ + overlay[global] private class EjsIncludeCallInTemplate extends TemplateInstantiation::Range, DataFlow::CallNode { EjsIncludeCallInTemplate() { exists(TemplatePlaceholderTag tag | @@ -669,6 +703,7 @@ module Templating { * * These API nodes are used in the `getTemplateInput` predicate. */ + overlay[global] private class IncludeFunctionAsEntryPoint extends API::EntryPoint { IncludeFunctionAsEntryPoint() { this = "IncludeFunctionAsEntryPoint" } @@ -703,6 +738,7 @@ module Templating { string getPath() { result = rawPath.trim().replaceAll("\\", "/").regexpReplaceAll("^\\./", "") } /** Gets the file referenced by this inclusion tag. */ + overlay[global] TemplateFile getImportedFile() { result = this.getPath() @@ -712,6 +748,7 @@ module Templating { } /** The imported string from a template inclusion tag. */ + overlay[global] private class TemplateInclusionPathString extends TemplateFileReferenceString { TemplateInclusionTag tag; @@ -723,6 +760,7 @@ module Templating { /** * A call to a member of the `consolidate` library, seen as a template instantiation. */ + overlay[global] private class ConsolidateCall extends TemplateInstantiation::Range, API::CallNode { string engine; diff --git a/javascript/ql/lib/semmle/javascript/frameworks/UriLibraries.qll b/javascript/ql/lib/semmle/javascript/frameworks/UriLibraries.qll index 90dcc886ed4..9097497b4f0 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/UriLibraries.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/UriLibraries.qll @@ -422,9 +422,11 @@ private module ClosureLibraryUri { } } +overlay[local] private class QueryStringStringification extends DataFlow::SummarizedCallable { QueryStringStringification() { this = "query-string stringification" } + overlay[global] override DataFlow::InvokeNode getACall() { result = API::moduleImport(["querystring", "query-string", "querystringify", "qs"]) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll index 82deb735c62..9e7f94c139b 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll @@ -48,6 +48,7 @@ private class ThreatModelSourceFromDataExtension extends ThreatModelSource::Rang } } +overlay[local] private class SummarizedCallableFromModel extends DataFlow::SummarizedCallable { string type; string path; @@ -57,6 +58,7 @@ private class SummarizedCallableFromModel extends DataFlow::SummarizedCallable { this = type + ";" + path } + overlay[global] override DataFlow::InvokeNode getACall() { ModelOutput::resolvedSummaryBase(type, path, result) } override predicate propagatesFlow( diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModels.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModels.qll index c04a85487ac..80ec45a3cf1 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModels.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModels.qll @@ -62,6 +62,8 @@ * should be prefixed with a tilde character (`~`). For example, `~Bar` can be used to indicate that * the type is not intended to match a static type. */ +overlay[local?] +module; private import codeql.util.Unit private import ApiGraphModelsSpecific as Specific diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsExtensions.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsExtensions.qll index 4969da43be3..3f38c498f32 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsExtensions.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsExtensions.qll @@ -1,6 +1,8 @@ /** * Defines extensible predicates for contributing library models from data extensions. */ +overlay[local] +module; /** * Holds if the value at `(type, path)` should be seen as a flow diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll index f0d751ad31b..a6ab3d691b5 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll @@ -41,6 +41,7 @@ class Location = JS::Location; * The model generator must explicitly generate the step between `(package)` and `(package).foo`, for example. */ bindingset[rawType] +overlay[caller] predicate parseTypeString(string rawType, string package, string qualifiedName) { exists(string regexp | regexp = "('[^']+'|[^.]+)(.*)" and @@ -55,6 +56,7 @@ predicate parseTypeString(string rawType, string package, string qualifiedName) /** * Holds if models describing `package` may be relevant for the analysis of this database. */ +overlay[local] predicate isPackageUsed(string package) { package = "global" or @@ -68,6 +70,7 @@ predicate isPackageUsed(string package) { } bindingset[type] +overlay[local] predicate isTypeUsed(string type) { exists(string package | parseTypeString(type, package, _) and @@ -79,8 +82,10 @@ predicate isTypeUsed(string type) { * Holds if `type` can be obtained from an instance of `otherType` due to * language semantics modeled by `getExtraNodeFromType`. */ +overlay[local] predicate hasImplicitTypeModel(string type, string otherType) { none() } +overlay[local] pragma[nomagic] private predicate parseRelevantTypeString(string rawType, string package, string qualifiedName) { isRelevantFullPath(rawType, _) and diff --git a/javascript/ql/lib/semmle/javascript/internal/BasicBlockInternal.qll b/javascript/ql/lib/semmle/javascript/internal/BasicBlockInternal.qll index d8e4a18dfc1..cf34b6bdb16 100644 --- a/javascript/ql/lib/semmle/javascript/internal/BasicBlockInternal.qll +++ b/javascript/ql/lib/semmle/javascript/internal/BasicBlockInternal.qll @@ -2,6 +2,8 @@ * Provides classes for working with basic blocks, and predicates for computing * liveness information for local variables. */ +overlay[local] +module; import javascript private import semmle.javascript.internal.StmtContainers diff --git a/javascript/ql/lib/semmle/javascript/internal/CachedStages.qll b/javascript/ql/lib/semmle/javascript/internal/CachedStages.qll index 98a35692822..ae9fe0bce27 100644 --- a/javascript/ql/lib/semmle/javascript/internal/CachedStages.qll +++ b/javascript/ql/lib/semmle/javascript/internal/CachedStages.qll @@ -40,6 +40,7 @@ module Stages { /** * The `ast` stage. */ + overlay[local] cached module Ast { /** @@ -84,6 +85,7 @@ module Stages { /** * The `basicblocks` stage. */ + overlay[local] cached module BasicBlocks { /** @@ -110,6 +112,7 @@ module Stages { /** * The part of data flow computed before flow summary nodes. */ + overlay[local] cached module EarlyDataFlowStage { /** @@ -134,6 +137,7 @@ module Stages { /** * The `dataflow` stage. */ + overlay[local] cached module DataFlowStage { /** @@ -167,8 +171,8 @@ module Stages { or exists(any(DataFlow::PropRef ref).getBase()) or - exists(any(DataFlow::ClassNode cls)) - or + // exists(any(DataFlow::ClassNode cls)) // Depends on AnalyzedNode + // or exists(any(DataFlow::CallNode node).getArgument(_)) or exists(any(DataFlow::CallNode node).getAnArgument()) @@ -202,8 +206,6 @@ module Stages { or exists(any(Import i).getImportedModule()) or - exists(DataFlow::moduleImport(_)) - or exists(any(ReExportDeclaration d).getReExportedModule()) or exists(any(Module m).getABulkExportedNode()) diff --git a/javascript/ql/lib/semmle/javascript/internal/StmtContainers.qll b/javascript/ql/lib/semmle/javascript/internal/StmtContainers.qll index a1df0504ce8..ab867be307b 100644 --- a/javascript/ql/lib/semmle/javascript/internal/StmtContainers.qll +++ b/javascript/ql/lib/semmle/javascript/internal/StmtContainers.qll @@ -4,6 +4,8 @@ * Provides predicates and classes for relating nodes to their * enclosing `StmtContainer`. */ +overlay[local] +module; private import javascript private import semmle.javascript.internal.CachedStages diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/AmbiguousCoreMethods.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/AmbiguousCoreMethods.qll index 45ad9cf7a9c..4e1c9ee6884 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/AmbiguousCoreMethods.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/AmbiguousCoreMethods.qll @@ -20,6 +20,8 @@ * * (Promise is absent in the table above as there currently are no name clashes with Promise methods) */ +overlay[local?] +module; private import javascript private import semmle.javascript.dataflow.internal.DataFlowNode diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Arrays.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Arrays.qll index 6754d3db307..1196ffdbac9 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Arrays.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Arrays.qll @@ -3,6 +3,8 @@ * * Note that some of Array methods are modeled in `AmbiguousCoreMethods.qll`, and `toString` is special-cased elsewhere. */ +overlay[local?] +module; private import javascript private import semmle.javascript.dataflow.FlowSummary diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/AsyncAwait.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/AsyncAwait.qll index 246ac0f19d0..6a33c9a5c4f 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/AsyncAwait.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/AsyncAwait.qll @@ -1,6 +1,8 @@ /** * Contains flow steps to model flow through `async` functions and the `await` operator. */ +overlay[local?] +module; private import javascript private import semmle.javascript.dataflow.internal.DataFlowNode diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Decoders.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Decoders.qll index 2866c892608..80e43fdfcd8 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Decoders.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Decoders.qll @@ -1,3 +1,6 @@ +overlay[local?] +module; + private import javascript private import semmle.javascript.dataflow.FlowSummary private import semmle.javascript.dataflow.InferredTypes diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/DynamicImportStep.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/DynamicImportStep.qll index 2976b467315..2661802b97e 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/DynamicImportStep.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/DynamicImportStep.qll @@ -1,6 +1,8 @@ /** * Contains flow steps to model flow from a module into a dynamic `import()` expression. */ +overlay[local?] +module; private import javascript private import semmle.javascript.dataflow.internal.DataFlowNode diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/ExceptionFlow.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/ExceptionFlow.qll index 252baab207b..3dff015d9f3 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/ExceptionFlow.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/ExceptionFlow.qll @@ -1,6 +1,8 @@ /** * Contains a summary for propagating exceptions out of callbacks */ +overlay[local?] +module; private import javascript private import FlowSummaryUtil diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/FlowSummaryUtil.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/FlowSummaryUtil.qll index 33f891935f4..290567efbd9 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/FlowSummaryUtil.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/FlowSummaryUtil.qll @@ -1,3 +1,6 @@ +overlay[local?] +module; + private import javascript private import semmle.javascript.dataflow.FlowSummary private import semmle.javascript.dataflow.internal.Contents::Private diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/ForOfLoops.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/ForOfLoops.qll index ecc84170026..68298c3fb55 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/ForOfLoops.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/ForOfLoops.qll @@ -1,6 +1,8 @@ /** * Contains flow steps to model flow through `for..of` loops. */ +overlay[local?] +module; private import javascript private import semmle.javascript.dataflow.internal.DataFlowNode diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Generators.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Generators.qll index 75815d00341..4f0868db519 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Generators.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Generators.qll @@ -1,6 +1,8 @@ /** * Contains flow steps to model flow through generator functions. */ +overlay[local?] +module; private import javascript private import semmle.javascript.dataflow.internal.DataFlowNode diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Iterators.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Iterators.qll index 6b1a182a49b..7f9c13c63df 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Iterators.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Iterators.qll @@ -1,6 +1,8 @@ /** * Contains flow summaries and steps modeling flow through iterators. */ +overlay[local?] +module; private import javascript private import semmle.javascript.dataflow.internal.DataFlowNode diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/JsonStringify.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/JsonStringify.qll index ecd2dcdfc79..4b8ecdeb4f2 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/JsonStringify.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/JsonStringify.qll @@ -1,6 +1,8 @@ /** * Contains implicit read steps at the input to any function that converts a deep object to a string, such as `JSON.stringify`. */ +overlay[local?] +module; private import javascript private import FlowSummaryUtil diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Maps.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Maps.qll index d9649d407c6..645e36941dc 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Maps.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Maps.qll @@ -1,6 +1,8 @@ /** * Contains flow summaries and steps modeling flow through `Map` objects. */ +overlay[local?] +module; private import javascript private import semmle.javascript.dataflow.FlowSummary diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Promises.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Promises.qll index 74048f0e397..10292958df2 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Promises.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Promises.qll @@ -1,6 +1,8 @@ /** * Contains flow summaries and steps modeling flow through `Promise` objects. */ +overlay[local?] +module; private import javascript private import semmle.javascript.dataflow.FlowSummary diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Sets.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Sets.qll index 6b4f089b38e..e4d0951764f 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Sets.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Sets.qll @@ -1,6 +1,8 @@ /** * Contains flow summaries and steps modeling flow through `Set` objects. */ +overlay[local?] +module; private import javascript private import semmle.javascript.dataflow.FlowSummary diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Strings.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Strings.qll index bf9442219a7..b5ecc8ef603 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Strings.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Strings.qll @@ -1,6 +1,8 @@ /** * Contains flow summaries and steps modeling flow through string methods. */ +overlay[local?] +module; private import javascript private import semmle.javascript.dataflow.FlowSummary diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/TypedArrays.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/TypedArrays.qll index 19a28036db4..0ac2307c81a 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/TypedArrays.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/TypedArrays.qll @@ -1,3 +1,6 @@ +overlay[local?] +module; + private import javascript private import semmle.javascript.dataflow.FlowSummary private import semmle.javascript.dataflow.InferredTypes diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/UrlSearchParams.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/UrlSearchParams.qll index 0a47b6fcf9f..3d8d88d8ae4 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/UrlSearchParams.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/UrlSearchParams.qll @@ -3,6 +3,8 @@ * * For now, the `URLSearchParams` object is modeled as a `Map` object. */ +overlay[local?] +module; private import javascript From 2b338fc1d9fe23b8722f98c1c892e695b408056c Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 3 Oct 2025 10:43:49 +0200 Subject: [PATCH 036/127] JS: Fix getRawEnclosingStmt call --- javascript/ql/lib/semmle/javascript/Expr.qll | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/Expr.qll b/javascript/ql/lib/semmle/javascript/Expr.qll index 177ef6991ce..ede0e7094ab 100644 --- a/javascript/ql/lib/semmle/javascript/Expr.qll +++ b/javascript/ql/lib/semmle/javascript/Expr.qll @@ -249,12 +249,6 @@ class Expr extends @expr, ExprOrStmt, ExprOrType, AST::ValueNode { ) } - pragma[inline] - private Stmt getRawEnclosingStmt(Expr e) { - // For performance reasons, we need the enclosing statement without overrides - enclosing_stmt(e, result) - } - /** * Gets the data-flow node where exceptions thrown by this expression will * propagate if this expression causes an exception to be thrown. @@ -262,9 +256,9 @@ class Expr extends @expr, ExprOrStmt, ExprOrType, AST::ValueNode { overlay[caller] pragma[inline] DataFlow::Node getExceptionTarget() { - result = getCatchParameterFromStmt(this.getRawEnclosingStmt(this)) + result = getCatchParameterFromStmt(getRawEnclosingStmt(this)) or - not exists(getCatchParameterFromStmt(this.getRawEnclosingStmt(this))) and + not exists(getCatchParameterFromStmt(getRawEnclosingStmt(this))) and result = any(DataFlow::FunctionNode f | f.getFunction() = this.getContainer()).getExceptionalReturn() } @@ -277,6 +271,13 @@ private DataFlow::Node getCatchParameterFromStmt(Stmt stmt) { DataFlow::parameterNode(stmt.getEnclosingTryCatchStmt().getACatchClause().getAParameter()) } +overlay[caller] +pragma[inline] +private Stmt getRawEnclosingStmt(Expr e) { + // For performance reasons, we need the enclosing statement without overrides + enclosing_stmt(e, result) +} + /** * An identifier. * From b1418e1d700e82d0b5e01f321a2b0ef236616de1 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 10 Oct 2025 13:27:46 +0200 Subject: [PATCH 037/127] JS: Add overlay[local?] to new summaries after rebasing --- javascript/ql/lib/semmle/javascript/frameworks/AsyncPackage.qll | 2 ++ .../ql/lib/semmle/javascript/frameworks/LodashUnderscore.qll | 1 + 2 files changed, 3 insertions(+) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/AsyncPackage.qll b/javascript/ql/lib/semmle/javascript/frameworks/AsyncPackage.qll index db2487ce46a..c95b7a8dc6a 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/AsyncPackage.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/AsyncPackage.qll @@ -172,6 +172,7 @@ module AsyncPackage { DataFlow::FunctionNode getFinalCallback() { result = this.getCallback(finalCallbackIndex) } } + overlay[local?] private class IterationCallFlowSummary extends DataFlow::SummarizedCallable { private int callbackArgIndex; @@ -219,6 +220,7 @@ module AsyncPackage { * * For example: `data -> result` in `async.sortBy(data, orderingFn, (err, result) => {})`. */ + overlay[local?] private class IterationPreserveTaintStepFlowSummary extends DataFlow::SummarizedCallable { IterationPreserveTaintStepFlowSummary() { this = "async.sortBy" } diff --git a/javascript/ql/lib/semmle/javascript/frameworks/LodashUnderscore.qll b/javascript/ql/lib/semmle/javascript/frameworks/LodashUnderscore.qll index c6de3dd7316..3c6c4511f5b 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/LodashUnderscore.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/LodashUnderscore.qll @@ -362,6 +362,7 @@ module LodashUnderscore { } } + overlay[local?] private class LodashGroupBy extends DataFlow::SummarizedCallable { LodashGroupBy() { this = "_.groupBy" } From c09563f7755fc30bb05e5c4dae35dc16ff542a9b Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 10 Oct 2025 09:46:49 +0200 Subject: [PATCH 038/127] JS: Make more general-purpose data flow things local --- javascript/ql/lib/semmle/javascript/Extend.qll | 4 ++++ javascript/ql/lib/semmle/javascript/GlobalAccessPaths.qll | 4 +++- .../semmle/javascript/frameworks/AngularJS/AngularJSCore.qll | 1 + .../ql/lib/semmle/javascript/frameworks/LodashUnderscore.qll | 4 ++++ .../lib/semmle/javascript/frameworks/PropertyProjection.qll | 3 +++ 5 files changed, 15 insertions(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/Extend.qll b/javascript/ql/lib/semmle/javascript/Extend.qll index d0eeade5892..e59c11d225e 100644 --- a/javascript/ql/lib/semmle/javascript/Extend.qll +++ b/javascript/ql/lib/semmle/javascript/Extend.qll @@ -1,6 +1,8 @@ /** * Provides classes for reasoning about `extend`-like functions. */ +overlay[local] +module; import javascript @@ -169,6 +171,7 @@ private class FunctionalExtendCallShallow extends ExtendCall { * * Since all object properties are preserved, we model this as a value-preserving step. */ +overlay[global] private class ExtendCallStep extends PreCallGraphStep { override predicate step(DataFlow::Node pred, DataFlow::Node succ) { exists(ExtendCall extend | @@ -184,6 +187,7 @@ private import semmle.javascript.dataflow.internal.PreCallGraphStep /** * A step through a cloning library, such as `clone` or `fclone`. */ +overlay[global] private class CloneStep extends PreCallGraphStep { override predicate step(DataFlow::Node pred, DataFlow::Node succ) { exists(DataFlow::CallNode call | diff --git a/javascript/ql/lib/semmle/javascript/GlobalAccessPaths.qll b/javascript/ql/lib/semmle/javascript/GlobalAccessPaths.qll index 4a461961f8a..32fe6f709ca 100644 --- a/javascript/ql/lib/semmle/javascript/GlobalAccessPaths.qll +++ b/javascript/ql/lib/semmle/javascript/GlobalAccessPaths.qll @@ -1,6 +1,8 @@ /** * Provides predicates for associating qualified names with data flow nodes. */ +overlay[local] +module; import javascript private import semmle.javascript.dataflow.InferredTypes @@ -657,7 +659,7 @@ module AccessPath { */ cached predicate hasDominatingWrite(DataFlow::PropRead read) { - Stages::TypeTracking::ref() and + Stages::DataFlowStage::ref() and // within the same basic block. exists(ReachableBasicBlock bb, Root root, string path, int ranking | read.asExpr() = rankedAccessPath(bb, root, path, ranking, AccessPathRead()) and diff --git a/javascript/ql/lib/semmle/javascript/frameworks/AngularJS/AngularJSCore.qll b/javascript/ql/lib/semmle/javascript/frameworks/AngularJS/AngularJSCore.qll index 41d14c1e3be..beb601dcfb9 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/AngularJS/AngularJSCore.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/AngularJS/AngularJSCore.qll @@ -15,6 +15,7 @@ private import AngularJS /** * Holds if `nd` is a reference to the `angular` variable. */ +overlay[local] DataFlow::SourceNode angular() { // either as a global result = DataFlow::globalVarRef("angular") diff --git a/javascript/ql/lib/semmle/javascript/frameworks/LodashUnderscore.qll b/javascript/ql/lib/semmle/javascript/frameworks/LodashUnderscore.qll index 3c6c4511f5b..fe07e4f1967 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/LodashUnderscore.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/LodashUnderscore.qll @@ -9,6 +9,7 @@ module LodashUnderscore { /** * A data flow node that accesses a given member of `lodash` or `underscore`. */ + overlay[local] abstract class Member extends DataFlow::SourceNode { /** Gets the name of the accessed member. */ abstract string getName(); @@ -17,6 +18,7 @@ module LodashUnderscore { /** * An import of `lodash` or `underscore` accessing a given member of that package. */ + overlay[local] private class DefaultMember extends Member { string name; @@ -39,12 +41,14 @@ module LodashUnderscore { * In addition to normal imports, this supports per-method imports such as `require("lodash.map")` and `require("lodash/map")`. * In addition, the global variable `_` is assumed to refer to `lodash` or `underscore`. */ + overlay[local] DataFlow::SourceNode member(string name) { result.(Member).getName() = name } /** * Holds if `name` is the name of a member exported from the `lodash` package * which has a corresponding `lodash.xxx` NPM package. */ + overlay[local] private predicate isLodashMember(string name) { // Can be generated using Object.keys(require('lodash')) name = diff --git a/javascript/ql/lib/semmle/javascript/frameworks/PropertyProjection.qll b/javascript/ql/lib/semmle/javascript/frameworks/PropertyProjection.qll index 11fb0f5ceba..c0188361e72 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/PropertyProjection.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/PropertyProjection.qll @@ -4,6 +4,8 @@ * Subclass `PropertyProjection` to refine the behavior of the analysis on existing property projections. * Subclass `CustomPropertyProjection` to introduce new kinds of property projections. */ +overlay[local] +module; import javascript @@ -137,6 +139,7 @@ private class VarArgsPropertyProjection extends PropertyProjection::Range { /** * A taint step for a property projection. */ +overlay[global] private class PropertyProjectionTaintStep extends TaintTracking::SharedTaintStep { override predicate step(DataFlow::Node pred, DataFlow::Node succ) { // reading from a tainted object yields a tainted result From 889209719b6ec844b28f62f6e03a1f3476002d26 Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 10 Oct 2025 15:10:17 +0000 Subject: [PATCH 039/127] JS: Overlay annotations for some failing tests Locally these seem to get rid of the compilation warnings, but of course CI is the true arbiter here. --- javascript/ql/lib/utils/test/InlineSummaries.qll | 1 + javascript/ql/test/library-tests/AMD/tests.ql | 1 + .../CustomAbstractValueDefinitions.ql | 1 + .../CustomAbstractValueDefinitionsFlow.ql | 1 + .../ql/test/library-tests/FlowCustomisation/customValues.ql | 2 ++ .../ql/test/library-tests/ModuleImportNodes/CustomImport.ql | 1 + .../test/library-tests/RecursionPrevention/SourceNodeFlowsTo.ql | 1 + javascript/ql/test/library-tests/frameworks/data/test.ql | 1 + javascript/ql/test/library-tests/frameworks/data/warnings.ql | 1 + 9 files changed, 10 insertions(+) diff --git a/javascript/ql/lib/utils/test/InlineSummaries.qll b/javascript/ql/lib/utils/test/InlineSummaries.qll index 559f1360977..0366736eaf6 100644 --- a/javascript/ql/lib/utils/test/InlineSummaries.qll +++ b/javascript/ql/lib/utils/test/InlineSummaries.qll @@ -1,6 +1,7 @@ import javascript import semmle.javascript.dataflow.FlowSummary +overlay[local] class MkSummary extends SummarizedCallable { private CallExpr mkSummary; diff --git a/javascript/ql/test/library-tests/AMD/tests.ql b/javascript/ql/test/library-tests/AMD/tests.ql index e71ae089f2d..150c5e9a294 100644 --- a/javascript/ql/test/library-tests/AMD/tests.ql +++ b/javascript/ql/test/library-tests/AMD/tests.ql @@ -1,5 +1,6 @@ import javascript +overlay[local] class TestAmdModuleRange extends AmdModuleDefinition::Range { TestAmdModuleRange() { this.getCallee().(PropAccess).getQualifiedName() = "test.amd.range" } } diff --git a/javascript/ql/test/library-tests/CustomAbstractValueDefinitions/CustomAbstractValueDefinitions.ql b/javascript/ql/test/library-tests/CustomAbstractValueDefinitions/CustomAbstractValueDefinitions.ql index a2d69f55ce8..c0571921fba 100644 --- a/javascript/ql/test/library-tests/CustomAbstractValueDefinitions/CustomAbstractValueDefinitions.ql +++ b/javascript/ql/test/library-tests/CustomAbstractValueDefinitions/CustomAbstractValueDefinitions.ql @@ -4,6 +4,7 @@ import semmle.javascript.dataflow.internal.FlowSteps as FlowSteps import semmle.javascript.dataflow.internal.AbstractPropertiesImpl as AbstractPropertiesImpl import semmle.javascript.dataflow.CustomAbstractValueDefinitions +overlay[local] class MyCustomAbstractValueDefinition extends CustomAbstractValueDefinition { DataFlow::ValueNode node; diff --git a/javascript/ql/test/library-tests/CustomAbstractValueDefinitions/CustomAbstractValueDefinitionsFlow.ql b/javascript/ql/test/library-tests/CustomAbstractValueDefinitions/CustomAbstractValueDefinitionsFlow.ql index 0308ad6bf45..0f34b14b48c 100644 --- a/javascript/ql/test/library-tests/CustomAbstractValueDefinitions/CustomAbstractValueDefinitionsFlow.ql +++ b/javascript/ql/test/library-tests/CustomAbstractValueDefinitions/CustomAbstractValueDefinitionsFlow.ql @@ -2,6 +2,7 @@ import javascript import semmle.javascript.dataflow.InferredTypes import semmle.javascript.dataflow.CustomAbstractValueDefinitions +overlay[local] class MyCustomAbstractValueDefinition extends CustomAbstractValueDefinition, AST::ValueNode { MyCustomAbstractValueDefinition() { this.flow() instanceof DataFlow::ObjectLiteralNode and diff --git a/javascript/ql/test/library-tests/FlowCustomisation/customValues.ql b/javascript/ql/test/library-tests/FlowCustomisation/customValues.ql index 0b3f87f1b8d..75c4af21ed7 100644 --- a/javascript/ql/test/library-tests/FlowCustomisation/customValues.ql +++ b/javascript/ql/test/library-tests/FlowCustomisation/customValues.ql @@ -4,6 +4,7 @@ private import semmle.javascript.dataflow.InferredTypes /** * A custom abstract value representing the DOM object `document`. */ +overlay[local] class Document extends CustomAbstractValueTag { Document() { this = "document" } @@ -25,6 +26,7 @@ class Document extends CustomAbstractValueTag { * Note that `getType()` isn't quite right, since `typeof document.all === 'undefined'`, * but that's fine for the purposes of this test. */ +overlay[local] class DocumentAll extends CustomAbstractValueTag { DocumentAll() { this = "document.all" } diff --git a/javascript/ql/test/library-tests/ModuleImportNodes/CustomImport.ql b/javascript/ql/test/library-tests/ModuleImportNodes/CustomImport.ql index abc8c4e1755..c118e36e606 100644 --- a/javascript/ql/test/library-tests/ModuleImportNodes/CustomImport.ql +++ b/javascript/ql/test/library-tests/ModuleImportNodes/CustomImport.ql @@ -1,5 +1,6 @@ import javascript +overlay[local] class CustomImport extends DataFlow::ModuleImportNode::Range, DataFlow::CallNode { CustomImport() { this.getCalleeName() = "customImport" } diff --git a/javascript/ql/test/library-tests/RecursionPrevention/SourceNodeFlowsTo.ql b/javascript/ql/test/library-tests/RecursionPrevention/SourceNodeFlowsTo.ql index 9a5350948fe..a9d27450aee 100644 --- a/javascript/ql/test/library-tests/RecursionPrevention/SourceNodeFlowsTo.ql +++ b/javascript/ql/test/library-tests/RecursionPrevention/SourceNodeFlowsTo.ql @@ -7,6 +7,7 @@ import javascript +overlay[local] class BadSourceNode extends DataFlow::SourceNode { BadSourceNode() { this.(DataFlow::PropRead).getPropertyName() = "foo" } diff --git a/javascript/ql/test/library-tests/frameworks/data/test.ql b/javascript/ql/test/library-tests/frameworks/data/test.ql index 6a1d571351b..6ba504e921f 100644 --- a/javascript/ql/test/library-tests/frameworks/data/test.ql +++ b/javascript/ql/test/library-tests/frameworks/data/test.ql @@ -2,6 +2,7 @@ import javascript deprecated import utils.test.ConsistencyChecking import semmle.javascript.frameworks.data.internal.ApiGraphModels as ApiGraphModels +overlay[local] class TypeModelFromCodeQL extends ModelInput::TypeModel { override predicate isTypeUsed(string type) { type = "danger-constant" } diff --git a/javascript/ql/test/library-tests/frameworks/data/warnings.ql b/javascript/ql/test/library-tests/frameworks/data/warnings.ql index 1ede8e08bcc..2c3c044ef69 100644 --- a/javascript/ql/test/library-tests/frameworks/data/warnings.ql +++ b/javascript/ql/test/library-tests/frameworks/data/warnings.ql @@ -1,6 +1,7 @@ import javascript import semmle.javascript.frameworks.data.internal.ApiGraphModels as ApiGraphModels +overlay[local] class IsTesting extends ApiGraphModels::TestAllModels { IsTesting() { this = this } } From 66febb263da8f499184563b49e4246cd788f089f Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 15 Oct 2025 10:46:42 +0200 Subject: [PATCH 040/127] JS: Add some overlay[caller] and a pragma[nomagic] annotations --- .../ql/lib/semmle/javascript/GlobalAccessPaths.qll | 9 +++++++++ .../javascript/dataflow/internal/DataFlowPrivate.qll | 2 ++ .../semmle/javascript/internal/BasicBlockInternal.qll | 4 ++++ 3 files changed, 15 insertions(+) diff --git a/javascript/ql/lib/semmle/javascript/GlobalAccessPaths.qll b/javascript/ql/lib/semmle/javascript/GlobalAccessPaths.qll index 32fe6f709ca..804542b0dc5 100644 --- a/javascript/ql/lib/semmle/javascript/GlobalAccessPaths.qll +++ b/javascript/ql/lib/semmle/javascript/GlobalAccessPaths.qll @@ -356,6 +356,7 @@ module AccessPath { * Gets a variable that is relevant for the computations in the `GetLaterAccess` module. * This predicate restricts as much as it can, but without depending on `getAVariableRef`. */ + overlay[caller] pragma[inline] private SsaVariable getARelevantVariableSimple() { // The variable might be used where `getLaterBaseAccess()` is called. @@ -407,6 +408,7 @@ module AccessPath { * } * ``` */ + overlay[caller] pragma[inline] DataFlow::Node getAReferenceTo(Root root, string path) { path = fromReference(result, root) and @@ -430,6 +432,7 @@ module AccessPath { * })(NS = NS || {}); * ``` */ + overlay[caller] pragma[inline] DataFlow::Node getAReferenceTo(string path) { path = fromReference(result, DataFlow::globalAccessPathRootPseudoNode()) @@ -451,6 +454,7 @@ module AccessPath { * } * ``` */ + overlay[caller] pragma[inline] DataFlow::Node getAnAssignmentTo(Root root, string path) { path = fromRhs(result, root) and @@ -472,6 +476,7 @@ module AccessPath { * })(foo = foo || {}); * ``` */ + overlay[caller] pragma[inline] DataFlow::Node getAnAssignmentTo(string path) { path = fromRhs(result, DataFlow::globalAccessPathRootPseudoNode()) @@ -482,6 +487,7 @@ module AccessPath { * * See `getAReferenceTo` and `getAnAssignmentTo` for more details. */ + overlay[caller] pragma[inline] DataFlow::Node getAReferenceOrAssignmentTo(string path) { result = getAReferenceTo(path) @@ -494,6 +500,7 @@ module AccessPath { * * See `getAReferenceTo` and `getAnAssignmentTo` for more details. */ + overlay[caller] pragma[inline] DataFlow::Node getAReferenceOrAssignmentTo(Root root, string path) { result = getAReferenceTo(root, path) @@ -504,6 +511,7 @@ module AccessPath { /** * Holds if there is a step from `pred` to `succ` through an assignment to an access path. */ + overlay[caller] pragma[inline] predicate step(DataFlow::Node pred, DataFlow::Node succ) { exists(string name, Root root | @@ -521,6 +529,7 @@ module AccessPath { /** * Gets a `SourceNode` that refers to the same value or access path as the given node. */ + overlay[caller] pragma[inline] DataFlow::SourceNode getAnAliasedSourceNode(DataFlow::Node node) { exists(DataFlow::SourceNode root, string accessPath | diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll index 68cf0aa4287..88217800f48 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll @@ -1493,6 +1493,7 @@ private predicate stringifiedNode(Node node) { } /** Gets the post-update node for which `node` is the corresponding pre-update node. */ +pragma[nomagic] private Node getPostUpdateForStore(Node base) { exists(Expr expr | base = TValueNode(expr) and @@ -1515,6 +1516,7 @@ private Node getPostUpdateForStore(Node base) { } /** Gets node to target with a store to the given `base` object.. */ +overlay[caller] pragma[inline] private Node getStoreTarget(DataFlow::Node base) { result = getPostUpdateForStore(base) diff --git a/javascript/ql/lib/semmle/javascript/internal/BasicBlockInternal.qll b/javascript/ql/lib/semmle/javascript/internal/BasicBlockInternal.qll index cf34b6bdb16..d422c960a8f 100644 --- a/javascript/ql/lib/semmle/javascript/internal/BasicBlockInternal.qll +++ b/javascript/ql/lib/semmle/javascript/internal/BasicBlockInternal.qll @@ -320,6 +320,7 @@ module Public { /** * Holds if this basic block strictly dominates `bb`. */ + overlay[caller] pragma[inline] predicate strictlyDominates(ReachableBasicBlock bb) { this = immediateDominator+(bb) } @@ -328,12 +329,14 @@ module Public { * * This predicate is reflexive: each reachable basic block dominates itself. */ + overlay[caller] pragma[inline] predicate dominates(ReachableBasicBlock bb) { this = immediateDominator*(bb) } /** * Holds if this basic block strictly post-dominates `bb`. */ + overlay[caller] pragma[inline] predicate strictlyPostDominates(ReachableBasicBlock bb) { this = immediatePostDominator+(bb) } @@ -342,6 +345,7 @@ module Public { * * This predicate is reflexive: each reachable basic block post-dominates itself. */ + overlay[caller] pragma[inline] predicate postDominates(ReachableBasicBlock bb) { this = immediatePostDominator*(bb) } } From e72232fd1d3d9d8b2a2fe2c9a4f80d7bd961ccd1 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 15 Oct 2025 11:05:22 +0200 Subject: [PATCH 041/127] JS: Add more overlay[caller?] annotations --- javascript/ql/lib/semmle/javascript/AST.qll | 1 + javascript/ql/lib/semmle/javascript/Locations.qll | 2 ++ javascript/ql/lib/semmle/javascript/Promises.qll | 2 ++ javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll | 1 + .../ql/lib/semmle/javascript/dataflow/internal/Contents.qll | 1 + .../lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll | 1 + .../ql/lib/semmle/javascript/dataflow/internal/FlowSteps.qll | 1 + .../lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll | 1 + .../frameworks/data/internal/ApiGraphModelsSpecific.qll | 2 ++ javascript/ql/lib/semmle/javascript/internal/StmtContainers.qll | 1 + 10 files changed, 13 insertions(+) diff --git a/javascript/ql/lib/semmle/javascript/AST.qll b/javascript/ql/lib/semmle/javascript/AST.qll index 6a0d35abea5..0467847a9a0 100644 --- a/javascript/ql/lib/semmle/javascript/AST.qll +++ b/javascript/ql/lib/semmle/javascript/AST.qll @@ -174,6 +174,7 @@ class AstNode extends @ast_node, NodeInStmtContainer { * The TypeScript compiler emits no code for ambient declarations, but they * can affect name resolution and type checking at compile-time. */ + overlay[caller?] pragma[inline] predicate isAmbient() { this.isAmbientInternal() diff --git a/javascript/ql/lib/semmle/javascript/Locations.qll b/javascript/ql/lib/semmle/javascript/Locations.qll index 87b41c2cb43..1c48a3adbd3 100644 --- a/javascript/ql/lib/semmle/javascript/Locations.qll +++ b/javascript/ql/lib/semmle/javascript/Locations.qll @@ -32,6 +32,7 @@ final class Location extends @location_default { int getNumLines() { result = this.getEndLine() - this.getStartLine() + 1 } /** Holds if this location starts before location `that`. */ + overlay[caller] pragma[inline] predicate startsBefore(Location that) { exists(string f, int sl1, int sc1, int sl2, int sc2 | @@ -45,6 +46,7 @@ final class Location extends @location_default { } /** Holds if this location ends after location `that`. */ + overlay[caller] pragma[inline] predicate endsAfter(Location that) { exists(string f, int el1, int ec1, int el2, int ec2 | diff --git a/javascript/ql/lib/semmle/javascript/Promises.qll b/javascript/ql/lib/semmle/javascript/Promises.qll index dfdcdfd632c..f373ca87d39 100644 --- a/javascript/ql/lib/semmle/javascript/Promises.qll +++ b/javascript/ql/lib/semmle/javascript/Promises.qll @@ -238,6 +238,7 @@ module PromiseTypeTracking { * * These type-tracking steps are already included in the default type-tracking steps (through `PreCallGraphStep`). */ + overlay[caller?] pragma[inline] DataFlow::Node promiseStep(DataFlow::Node pred, StepSummary summary) { exists(string field | field = Promises::valueProp() | @@ -256,6 +257,7 @@ module PromiseTypeTracking { * Gets the result from a single step through a promise, from `pred` with tracker `t2` to `result` with tracker `t`. * This can be loading a resolved value from a promise, storing a value in a promise, or copying a resolved value from one promise to another. */ + overlay[caller?] pragma[inline] DataFlow::SourceNode promiseStep( DataFlow::SourceNode pred, DataFlow::TypeTracker t, DataFlow::TypeTracker t2 diff --git a/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll b/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll index a61b67e643f..9d4bda428b5 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll @@ -1436,6 +1436,7 @@ module DataFlow { /** * Gets the data flow node corresponding to `e`. */ + overlay[caller?] pragma[inline] ExprNode exprNode(Expr e) { result = valueNode(e) } diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/Contents.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/Contents.qll index be9bc2c81a3..d29a450274e 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/Contents.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/Contents.qll @@ -197,6 +197,7 @@ module Public { */ class ContentSet extends TContentSet { /** Gets a content that may be stored into when storing into this set. */ + overlay[caller?] pragma[inline] Content getAStoreContent() { result = this.asSingleton() diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll index 88217800f48..24549e7f1e6 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll @@ -762,6 +762,7 @@ class ContentApprox extends TContentApprox { } } +overlay[global] pragma[inline] ContentApprox getContentApprox(Content c) { c instanceof MkPropertyContent and result = TApproxPropertyContent() diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSteps.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSteps.qll index 9595ef935ce..0f5eff53258 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSteps.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSteps.qll @@ -48,6 +48,7 @@ private predicate legacyPostUpdateStep(DataFlow::Node pred, DataFlow::Node succ) * Holds if data can flow in one step from `pred` to `succ`, taking * additional steps from the configuration into account. */ +overlay[caller?] pragma[inline] deprecated predicate localFlowStep( DataFlow::Node pred, DataFlow::Node succ, DataFlow::Configuration configuration, diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll index 1dd06c23638..edea8ed6c38 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll @@ -96,6 +96,7 @@ module SsaDataflowInput implements DataFlowIntegrationInputSig { } } + overlay[caller?] pragma[inline] predicate guardDirectlyControlsBlock(Guard guard, js::Cfg::BasicBlock bb, GuardValue branch) { exists(js::ConditionGuardNode g | diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll index a6ab3d691b5..2074b18600d 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll @@ -195,6 +195,7 @@ API::Node getExtraSuccessorFromNode(API::Node node, AccessPathTokenBase token) { } bindingset[node] +overlay[caller?] pragma[inline_late] private API::Node getAGuardedRouteHandlerApprox(API::Node node) { // For now just get any routing node with the same root (i.e. the same web app), as @@ -235,6 +236,7 @@ private predicate blockFuzzyCall(DataFlow::CallNode call) { isCommonBuiltinMethodName(call.getCalleeName()) } +overlay[caller?] pragma[inline] API::Node getAFuzzySuccessor(API::Node node) { result = node.getAMember() and diff --git a/javascript/ql/lib/semmle/javascript/internal/StmtContainers.qll b/javascript/ql/lib/semmle/javascript/internal/StmtContainers.qll index ab867be307b..741575c3242 100644 --- a/javascript/ql/lib/semmle/javascript/internal/StmtContainers.qll +++ b/javascript/ql/lib/semmle/javascript/internal/StmtContainers.qll @@ -48,6 +48,7 @@ class NodeInStmtContainer extends Locatable, @node_in_stmt_container { /** * Gets the function or toplevel to which this node belongs. */ + overlay[caller] pragma[inline] final StmtContainer getContainer() { result = getStmtContainer(this) } } From ac3913e7dbef51c6c6b72bdd7e053b033e698268 Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 16 Oct 2025 12:01:57 +0200 Subject: [PATCH 042/127] JS: Fix bad join in DuplicateProperty.ql --- .../ql/src/Expressions/DuplicateProperty.ql | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/javascript/ql/src/Expressions/DuplicateProperty.ql b/javascript/ql/src/Expressions/DuplicateProperty.ql index febdfe5b882..b13f1a93ec0 100644 --- a/javascript/ql/src/Expressions/DuplicateProperty.ql +++ b/javascript/ql/src/Expressions/DuplicateProperty.ql @@ -14,12 +14,26 @@ import Clones +bindingset[init] +pragma[inline_late] +private Property getPropertyFromInitializerStrict(Expr init) { result.getInit() = init } + +pragma[nomagic] +private predicate duplicateProperties( + DuplicatePropertyInitDetector dup, Property prop1, Property prop2 +) { + exists(Expr init2 | + dup.same(init2) and + prop1 = getPropertyFromInitializerStrict(dup) and + prop2 = getPropertyFromInitializerStrict(init2) + ) +} + from ObjectExpr oe, int i, int j, Property p, Property q, DuplicatePropertyInitDetector dpid where + duplicateProperties(dpid, p, q) and p = oe.getProperty(i) and q = oe.getProperty(j) and - dpid = p.getInit() and - dpid.same(q.getInit()) and i < j and // only report the next duplicate not exists(int mid | mid in [i + 1 .. j - 1] | dpid.same(oe.getProperty(mid).getInit())) From 5dd87e379b2d25b9402e689f64c073409dc90222 Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 16 Oct 2025 12:22:18 +0200 Subject: [PATCH 043/127] JS: Add overlay[local] to restore magic in unwrap() predicate In this case we actually want magic to apply, but was prevented by locality. --- javascript/ql/lib/LanguageFeatures/UnusedIndexVariable.qll | 2 ++ 1 file changed, 2 insertions(+) diff --git a/javascript/ql/lib/LanguageFeatures/UnusedIndexVariable.qll b/javascript/ql/lib/LanguageFeatures/UnusedIndexVariable.qll index ed53158d51c..e8b235eca9b 100644 --- a/javascript/ql/lib/LanguageFeatures/UnusedIndexVariable.qll +++ b/javascript/ql/lib/LanguageFeatures/UnusedIndexVariable.qll @@ -1,6 +1,8 @@ /** * Provides a predicate for identifying unused index variables in loops. */ +overlay[local] +module; import javascript From 269489e8172ef9a1b1ebc524e712243665e9bd54 Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 16 Oct 2025 12:22:45 +0200 Subject: [PATCH 044/127] JS: Avoid bad join in shared predicate induced by 'forex'. Use manual recursion instead. --- javascript/ql/lib/semmle/javascript/Expr.qll | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/Expr.qll b/javascript/ql/lib/semmle/javascript/Expr.qll index ede0e7094ab..b46faf7e2b7 100644 --- a/javascript/ql/lib/semmle/javascript/Expr.qll +++ b/javascript/ql/lib/semmle/javascript/Expr.qll @@ -1648,13 +1648,19 @@ private string getConstantString(Expr e) { result = e.(TemplateElement).getValue() } +pragma[nomagic] +private predicate hasConstantStringValue(Expr e) { + exists(getConstantString(e)) + or + hasAllConstantLeafs(e.getUnderlyingValue()) +} + /** * Holds if `add` is a string-concatenation where all the transitive leafs have a constant string value. */ private predicate hasAllConstantLeafs(AddExpr add) { - forex(Expr leaf | leaf = getAnAddOperand*(add) and not exists(getAnAddOperand(leaf)) | - exists(getConstantString(leaf)) - ) + hasConstantStringValue(add.getLeftOperand()) and + hasConstantStringValue(add.getRightOperand()) } /** From 4645f327a59dce81388798f90364c6a5887618ef Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 20 Oct 2025 11:57:39 +0200 Subject: [PATCH 045/127] JS: Avoid more bad joins due to locality --- javascript/ql/lib/semmle/javascript/AST.qll | 2 ++ javascript/ql/lib/semmle/javascript/Regexp.qll | 16 +++++++++++++--- .../lib/semmle/javascript/dataflow/DataFlow.qll | 1 + .../semmle/javascript/frameworks/LazyCache.qll | 4 ++-- .../internal/flow_summaries/ForOfLoops.qll | 10 ++++++++-- 5 files changed, 26 insertions(+), 7 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/AST.qll b/javascript/ql/lib/semmle/javascript/AST.qll index 0467847a9a0..0e6330605ba 100644 --- a/javascript/ql/lib/semmle/javascript/AST.qll +++ b/javascript/ql/lib/semmle/javascript/AST.qll @@ -477,6 +477,8 @@ module AST { DataFlow::AnalyzedNode analyze() { result = DataFlow::valueNode(this).analyze() } /** Gets the data flow node associated with this program element. */ + overlay[caller] + pragma[inline] DataFlow::ValueNode flow() { result = DataFlow::valueNode(this) } /** diff --git a/javascript/ql/lib/semmle/javascript/Regexp.qll b/javascript/ql/lib/semmle/javascript/Regexp.qll index dba2c853008..db779e600d6 100644 --- a/javascript/ql/lib/semmle/javascript/Regexp.qll +++ b/javascript/ql/lib/semmle/javascript/Regexp.qll @@ -1016,7 +1016,7 @@ overlay[global] pragma[inline] private predicate isUsedAsNumber(DataFlow::LocalSourceNode value) { any(Comparison compare) - .hasOperands(value.getALocalUse().asExpr(), any(Expr e | e.analyze().getAType() = TTNumber())) + .hasOperands(value.getALocalUse().asExpr(), any(Expr e | canBeNumber(e.analyze()))) or value.flowsToExpr(any(ArithmeticExpr e).getAnOperand()) or @@ -1031,6 +1031,16 @@ private predicate isUsedAsNumber(DataFlow::LocalSourceNode value) { ) } +bindingset[node] +overlay[global] +pragma[inline_late] +private predicate canBeString(DataFlow::AnalyzedNode node) { node.getAType() = TTString() } + +bindingset[node] +overlay[global] +pragma[inline_late] +private predicate canBeNumber(DataFlow::AnalyzedNode node) { node.getAType() = TTNumber() } + /** * Holds if `source` may be interpreted as a regular expression. */ @@ -1038,14 +1048,14 @@ overlay[global] cached predicate isInterpretedAsRegExp(DataFlow::Node source) { Stages::Taint::ref() and - source.analyze().getAType() = TTString() and + canBeString(source) and ( // The first argument to an invocation of `RegExp` (with or without `new`). source = DataFlow::globalVarRef("RegExp").getAnInvocation().getArgument(0) or // The argument of a call that coerces the argument to a regular expression. exists(DataFlow::MethodCallNode mce, string methodName | - mce.getReceiver().analyze().getAType() = TTString() and + canBeString(mce.getReceiver()) and mce.getMethodName() = methodName and not exists(Function func | func = mce.getACallee() | not isNativeStringMethod(func, methodName) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll b/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll index 9d4bda428b5..a5fb31df57e 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll @@ -1431,6 +1431,7 @@ module DataFlow { * This predicate is only defined for expressions, properties, and for statements that declare * a function, a class, or a TypeScript namespace or enum. */ + pragma[nomagic] ValueNode valueNode(AstNode nd) { result.getAstNode() = nd } /** diff --git a/javascript/ql/lib/semmle/javascript/frameworks/LazyCache.qll b/javascript/ql/lib/semmle/javascript/frameworks/LazyCache.qll index aec8c82247f..e8b389e91ad 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/LazyCache.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/LazyCache.qll @@ -45,7 +45,7 @@ module LazyCache { pragma[noopt] override DataFlow::Node getImportedModuleNode() { this instanceof LazyCacheImport and - result = this.flow() + result = DataFlow::valueNode(this) or exists(LazyCacheVariable variable, Expr base, PropAccess access, string localName | // To avoid recursion, this should not depend on `SourceNode`. @@ -54,7 +54,7 @@ module LazyCache { access.getBase() = base and localName = this.getLocalAlias() and access.getPropertyName() = localName and - result = access.flow() + result = DataFlow::valueNode(access) ) } } diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/ForOfLoops.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/ForOfLoops.qll index 68298c3fb55..d8460f7d729 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/ForOfLoops.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/ForOfLoops.qll @@ -50,12 +50,18 @@ class ForOfLoopStep extends AdditionalFlowInternal { ) { exists(ForOfStmt stmt | pred = getSynthesizedNode(stmt, "for-of-map-key") and - contents.asSingleton().asArrayIndex() = 0 + contents = arrayIndex0() or pred = getSynthesizedNode(stmt, "for-of-map-value") and - contents.asSingleton().asArrayIndex() = 1 + contents = arrayIndex1() | succ = DataFlow::lvalueNode(stmt.getLValue()) ) } } + +pragma[nomagic] +private DataFlow::ContentSet arrayIndex0() { result.asSingleton().asArrayIndex() = 0 } + +pragma[nomagic] +private DataFlow::ContentSet arrayIndex1() { result.asSingleton().asArrayIndex() = 1 } From 0594f84dfc31b9d8d7b8fcc4d8975d3e421a086b Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 22 Oct 2025 12:24:23 +0200 Subject: [PATCH 046/127] JS: Improve join orders related to getABooleanValue() --- .../ql/lib/semmle/javascript/dataflow/AbstractValues.qll | 1 + .../ql/lib/semmle/javascript/dataflow/TypeInference.qll | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/AbstractValues.qll b/javascript/ql/lib/semmle/javascript/dataflow/AbstractValues.qll index 17908c0b67f..c5d9993dbb7 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/AbstractValues.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/AbstractValues.qll @@ -59,6 +59,7 @@ class AbstractValue extends TAbstractValue { * Gets the Boolean value some concrete value represented by this * abstract value coerces to. */ + pragma[nomagic] abstract boolean getBooleanValue(); /** diff --git a/javascript/ql/lib/semmle/javascript/dataflow/TypeInference.qll b/javascript/ql/lib/semmle/javascript/dataflow/TypeInference.qll index 32ad78eb2c6..a5e686a90c2 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/TypeInference.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/TypeInference.qll @@ -92,10 +92,15 @@ class AnalyzedNode extends DataFlow::Node { PrimitiveType getAPrimitiveType() { result = this.getAValue().toPrimitive().getType() } /** Gets a Boolean value that this node evaluates to. */ + bindingset[this] + overlay[caller?] + pragma[inline_late] boolean getABooleanValue() { result = this.getAValue().getBooleanValue() } /** Gets the unique Boolean value that this node evaluates to, if any. */ - boolean getTheBooleanValue() { forex(boolean bv | bv = this.getABooleanValue() | result = bv) } + overlay[caller?] + pragma[inline] + boolean getTheBooleanValue() { result = unique( | | this.getABooleanValue()) } /** Gets the unique type inferred for this node, if any. */ InferredType getTheType() { result = unique(InferredType t | t = this.getAType()) } From 6498cd1b0725e74aecaa008f4dc9eb62db013886 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 31 Oct 2025 09:35:40 +0100 Subject: [PATCH 047/127] JS: Remove obsolete overlay[global] annotations --- javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll | 1 - javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll | 1 - 2 files changed, 2 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll b/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll index a5fb31df57e..d7fa6ba2762 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll @@ -102,7 +102,6 @@ module DataFlow { * Holds if this data flow node accesses the global variable `g`, either directly * or through the `window` object. */ - overlay[global] predicate accessesGlobal(string g) { globalVarRef(g).flowsTo(this) } /** Holds if this node may evaluate to the string `s`, possibly through local data flow. */ diff --git a/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll b/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll index c4c7b1d7d18..d4244ec3cbc 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll @@ -791,7 +791,6 @@ ModuleImportNode dependencyModuleImport(Dependency dep) { * the given `path`, or accesses `m` as a member on a default or * namespace import from `path`. */ -overlay[global] DataFlow::SourceNode moduleMember(string path, string m) { result = moduleImport(path).getAPropertyRead(m) } From 46b13878469d806c9d9d23030ad870123b08ef75 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 3 Nov 2025 10:05:39 +0100 Subject: [PATCH 048/127] JS: Make isAssignedInUniqueFile global, as it should be --- javascript/ql/lib/semmle/javascript/GlobalAccessPaths.qll | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/GlobalAccessPaths.qll b/javascript/ql/lib/semmle/javascript/GlobalAccessPaths.qll index 804542b0dc5..53e5a779a9b 100644 --- a/javascript/ql/lib/semmle/javascript/GlobalAccessPaths.qll +++ b/javascript/ql/lib/semmle/javascript/GlobalAccessPaths.qll @@ -206,6 +206,7 @@ module AccessPath { * Holds if the global `accessPath` is only assigned to from one file, not counting * self-assignments. */ + overlay[global] predicate isAssignedInUniqueFile(string accessPath) { strictcount(File f | isAssignedInFile(accessPath, f)) = 1 } @@ -511,7 +512,7 @@ module AccessPath { /** * Holds if there is a step from `pred` to `succ` through an assignment to an access path. */ - overlay[caller] + overlay[caller?] pragma[inline] predicate step(DataFlow::Node pred, DataFlow::Node succ) { exists(string name, Root root | From 16e7dc1b8ab078b01ef750670338fb70077b7ed9 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 3 Nov 2025 11:42:52 +0100 Subject: [PATCH 049/127] Sync ApiGraphModelsExtensions.qll --- .../frameworks/data/internal/ApiGraphModelsExtensions.qll | 2 ++ .../ruby/frameworks/data/internal/ApiGraphModelsExtensions.qll | 2 ++ 2 files changed, 4 insertions(+) diff --git a/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModelsExtensions.qll b/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModelsExtensions.qll index 4969da43be3..3f38c498f32 100644 --- a/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModelsExtensions.qll +++ b/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModelsExtensions.qll @@ -1,6 +1,8 @@ /** * Defines extensible predicates for contributing library models from data extensions. */ +overlay[local] +module; /** * Holds if the value at `(type, path)` should be seen as a flow diff --git a/ruby/ql/lib/codeql/ruby/frameworks/data/internal/ApiGraphModelsExtensions.qll b/ruby/ql/lib/codeql/ruby/frameworks/data/internal/ApiGraphModelsExtensions.qll index 4969da43be3..3f38c498f32 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/data/internal/ApiGraphModelsExtensions.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/data/internal/ApiGraphModelsExtensions.qll @@ -1,6 +1,8 @@ /** * Defines extensible predicates for contributing library models from data extensions. */ +overlay[local] +module; /** * Holds if the value at `(type, path)` should be seen as a flow From ecfa94600f34100f687230aece19c2b6af05a94e Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 3 Nov 2025 11:43:16 +0100 Subject: [PATCH 050/127] Sync ApiGraphModels.qll --- .../semmle/python/frameworks/data/internal/ApiGraphModels.qll | 2 ++ .../lib/codeql/ruby/frameworks/data/internal/ApiGraphModels.qll | 2 ++ 2 files changed, 4 insertions(+) diff --git a/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModels.qll b/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModels.qll index c04a85487ac..80ec45a3cf1 100644 --- a/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModels.qll +++ b/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModels.qll @@ -62,6 +62,8 @@ * should be prefixed with a tilde character (`~`). For example, `~Bar` can be used to indicate that * the type is not intended to match a static type. */ +overlay[local?] +module; private import codeql.util.Unit private import ApiGraphModelsSpecific as Specific diff --git a/ruby/ql/lib/codeql/ruby/frameworks/data/internal/ApiGraphModels.qll b/ruby/ql/lib/codeql/ruby/frameworks/data/internal/ApiGraphModels.qll index c04a85487ac..80ec45a3cf1 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/data/internal/ApiGraphModels.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/data/internal/ApiGraphModels.qll @@ -62,6 +62,8 @@ * should be prefixed with a tilde character (`~`). For example, `~Bar` can be used to indicate that * the type is not intended to match a static type. */ +overlay[local?] +module; private import codeql.util.Unit private import ApiGraphModelsSpecific as Specific From 578355ac27965e3a730e75d2813b5320a8591d5c Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 11 Nov 2025 14:47:09 +0100 Subject: [PATCH 051/127] JS: Fix bad join in CallGraphs.qll --- .../javascript/dataflow/internal/CallGraphs.qll | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/CallGraphs.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/CallGraphs.qll index cc4c883381e..67f4e55a5bb 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/CallGraphs.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/CallGraphs.qll @@ -97,9 +97,14 @@ module CallGraph { not exists(read.getPropertyName()) and result = read and // there exists only local reads of the object, nothing else. - forex(DataFlow::Node ref | ref = obj.getALocalUse() and exists(ref.asExpr()) | - ref = [obj, any(DataFlow::PropRead r).getBase()] - ) + objectOnlyUsedForPropRead(obj) + ) + } + + pragma[nomagic] + private predicate objectOnlyUsedForPropRead(DataFlow::ObjectLiteralNode obj) { + forex(DataFlow::Node ref | ref = obj.getALocalUse() and exists(ref.asExpr()) | + ref = [obj, any(DataFlow::PropRead r).getBase()] ) } From c7341f295dc19abfa4531d2b99de9ce180ae41c8 Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 11 Nov 2025 14:47:20 +0100 Subject: [PATCH 052/127] JS: Fix bad join in BarrierGuards.qll --- .../dataflow/internal/BarrierGuards.qll | 33 +++++-------------- 1 file changed, 9 insertions(+), 24 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/BarrierGuards.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/BarrierGuards.qll index 6dd0ebf0bb1..371fbce77a9 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/BarrierGuards.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/BarrierGuards.qll @@ -358,25 +358,18 @@ module MakeStateBarrierGuard< } /** - * Gets a logical `and` expression, or parenthesized expression, that contains `guard`. + * Gets any of the ancestors of `guard` that preserves the value of `possibleOutcome`. Includes the guard itself. */ - private Expr getALogicalAndParent(BarrierGuard guard) { - barrierGuardIsRelevant(guard) and result = guard.asExpr() + private Expr getALogicalOperatorParent(BarrierGuard guard, boolean possibleOutcome) { + barrierGuardIsRelevant(guard) and result = guard.asExpr() and possibleOutcome = [true, false] or - result.(LogAndExpr).getAnOperand() = getALogicalAndParent(guard) + result.(LogOrExpr).getAnOperand() = getALogicalOperatorParent(guard, possibleOutcome) and + possibleOutcome = false or - result.getUnderlyingValue() = getALogicalAndParent(guard) - } - - /** - * Gets a logical `or` expression, or parenthesized expression, that contains `guard`. - */ - private Expr getALogicalOrParent(BarrierGuard guard) { - barrierGuardIsRelevant(guard) and result = guard.asExpr() + result.(LogAndExpr).getAnOperand() = getALogicalOperatorParent(guard, possibleOutcome) and + possibleOutcome = true or - result.(LogOrExpr).getAnOperand() = getALogicalOrParent(guard) - or - result.getUnderlyingValue() = getALogicalOrParent(guard) + result.getUnderlyingValue() = getALogicalOperatorParent(guard, possibleOutcome) } final private class FinalFunction = Function; @@ -394,15 +387,7 @@ module MakeStateBarrierGuard< exists(BarrierGuard guard | barrierGuardIsRelevant(guard) and exists(Expr e | - exists(Expr returnExpr | - returnExpr = guard.asExpr() - or - // ad hoc support for conjunctions: - getALogicalAndParent(guard) = returnExpr and guardOutcome = true - or - // ad hoc support for disjunctions: - getALogicalOrParent(guard) = returnExpr and guardOutcome = false - | + exists(Expr returnExpr | returnExpr = getALogicalOperatorParent(guard, guardOutcome) | exists(SsaExplicitDefinition ssa | ssa.getDef().getSource() = returnExpr and ssa.getVariable().getAUse() = this.getAReturnedExpr() From 19ff5c09d233c1ade20cc56b3d4d40a74f742b05 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 17 Nov 2025 09:30:20 +0100 Subject: [PATCH 053/127] Rust: Cache `inferCertainType` Ideally, this shouldn't be needed, as we already cache `inferType`. However, since we have consistency checks that directly call `inferCertainType`, we need to cache it as well to avoid recomputation. --- rust/ql/lib/codeql/rust/internal/TypeInference.qll | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index 804fc017194..080bac5d1b7 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -9,6 +9,7 @@ private import TypeMention private import typeinference.FunctionType private import typeinference.FunctionOverloading as FunctionOverloading private import typeinference.BlanketImplementation as BlanketImplementation +private import codeql.rust.internal.CachedStages private import codeql.typeinference.internal.TypeInference private import codeql.rust.frameworks.stdlib.Stdlib private import codeql.rust.frameworks.stdlib.Builtins as Builtins @@ -437,9 +438,10 @@ module CertainTypeInference { * Holds if `n` has complete and certain type information and if `n` has the * resulting type at `path`. */ - pragma[nomagic] + cached Type inferCertainType(AstNode n, TypePath path) { - result = inferAnnotatedType(n, path) + result = inferAnnotatedType(n, path) and + Stages::TypeInferenceStage::ref() or result = inferCertainCallExprType(n, path) or @@ -3454,8 +3456,6 @@ private Type inferCastExprType(CastExpr ce, TypePath path) { cached private module Cached { - private import codeql.rust.internal.CachedStages - /** Holds if `receiver` is the receiver of a method call with an implicit dereference. */ cached predicate receiverHasImplicitDeref(AstNode receiver) { From 089bffff944cc7040ce826a6bc64abdd8df449ed Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Thu, 30 Oct 2025 15:50:03 +0100 Subject: [PATCH 054/127] Rust: Make impl blocks only give rise to direct trait implementation --- .../codeql/rust/internal/TypeInference.qll | 76 ++++++++++--------- .../internal/typeinference/FunctionType.qll | 67 ++++++++-------- .../test/library-tests/type-inference/main.rs | 6 +- .../type-inference/type-inference.expected | 3 - .../typeinference/internal/TypeInference.qll | 12 +-- 5 files changed, 84 insertions(+), 80 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index 804fc017194..0ff39fdde78 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -179,48 +179,52 @@ private module Input2 implements InputSig2 { * inference module for more information. */ predicate conditionSatisfiesConstraint( - TypeAbstraction abs, TypeMention condition, TypeMention constraint + TypeAbstraction abs, TypeMention condition, TypeMention constraint, boolean transitive ) { // `impl` blocks implementing traits + transitive = false and exists(Impl impl | abs = impl and condition = impl.getSelfTy() and constraint = impl.getTrait() ) or - // supertraits - exists(Trait trait | - abs = trait and - condition = trait and - constraint = trait.getATypeBound().getTypeRepr() - ) - or - // trait bounds on type parameters - exists(TypeParam param | - abs = param.getATypeBound() and - condition = param and - constraint = abs.(TypeBound).getTypeRepr() - ) - or - // the implicit `Self` type parameter satisfies the trait - exists(SelfTypeParameterMention self | - abs = self and - condition = self and - constraint = self.getTrait() - ) - or - exists(ImplTraitTypeRepr impl | - abs = impl and - condition = impl and - constraint = impl.getTypeBoundList().getABound().getTypeRepr() - ) - or - // a `dyn Trait` type implements `Trait`. See the comment on - // `DynTypeBoundListMention` for further details. - exists(DynTraitTypeRepr object | - abs = object and - condition = object.getTypeBoundList() and - constraint = object.getTrait() + transitive = true and + ( + // supertraits + exists(Trait trait | + abs = trait and + condition = trait and + constraint = trait.getATypeBound().getTypeRepr() + ) + or + // trait bounds on type parameters + exists(TypeParam param | + abs = param.getATypeBound() and + condition = param and + constraint = abs.(TypeBound).getTypeRepr() + ) + or + // the implicit `Self` type parameter satisfies the trait + exists(SelfTypeParameterMention self | + abs = self and + condition = self and + constraint = self.getTrait() + ) + or + exists(ImplTraitTypeRepr impl | + abs = impl and + condition = impl and + constraint = impl.getTypeBoundList().getABound().getTypeRepr() + ) + or + // a `dyn Trait` type implements `Trait`. See the comment on + // `DynTypeBoundListMention` for further details. + exists(DynTraitTypeRepr object | + abs = object and + condition = object.getTypeBoundList() and + constraint = object.getTrait() + ) ) } } @@ -3616,10 +3620,10 @@ private module Debug { } predicate debugConditionSatisfiesConstraint( - TypeAbstraction abs, TypeMention condition, TypeMention constraint + TypeAbstraction abs, TypeMention condition, TypeMention constraint, boolean transitive ) { abs = getRelevantLocatable() and - Input2::conditionSatisfiesConstraint(abs, condition, constraint) + Input2::conditionSatisfiesConstraint(abs, condition, constraint, transitive) } predicate debugInferShorthandSelfType(ShorthandSelfParameterMention self, TypePath path, Type t) { diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll index 727c99fa810..35ba7562658 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll @@ -72,16 +72,24 @@ module FunctionPositionMatchingInput { } private newtype TAssocFunctionType = - /** An associated function `f` that should be specialized for `i` at `pos`. */ - MkAssocFunctionType(Function f, ImplOrTraitItemNode i, FunctionPosition pos) { - f = i.getASuccessor(_) and exists(pos.getTypeMention(f)) + /** An associated function `f` in `parent` should be specialized for `i` at `pos`. */ + MkAssocFunctionType( + ImplOrTraitItemNode parent, Function f, ImplOrTraitItemNode i, FunctionPosition pos + ) { + parent.getAnAssocItem() = f and + i.getASuccessor(_) = f and + // When `f` is not directly in `i`, the `parent` should be satisfiable + // through `i`. This ensures that `parent` is either a supertrait of `i` or + // `i` in an `impl` block implementing `parent`. + (parent = i or BaseTypes::rootTypesSatisfaction(_, TTrait(parent), i, _, _)) and + exists(pos.getTypeMention(f)) } -bindingset[condition, constraint, tp] +bindingset[abs, constraint, tp] private Type getTraitConstraintTypeAt( - TypeMention condition, TypeMention constraint, TypeParameter tp, TypePath path + TypeAbstraction abs, TypeMention constraint, TypeParameter tp, TypePath path ) { - BaseTypes::conditionSatisfiesConstraintTypeAt(_, condition, constraint, + BaseTypes::conditionSatisfiesConstraintTypeAt(abs, _, constraint, TypePath::singleton(tp).appendInverse(path), result) } @@ -91,28 +99,19 @@ private Type getTraitConstraintTypeAt( */ pragma[nomagic] Type getAssocFunctionTypeAt(Function f, ImplOrTraitItemNode i, FunctionPosition pos, TypePath path) { - exists(MkAssocFunctionType(f, i, pos)) and - ( + exists(ImplOrTraitItemNode parent | exists(MkAssocFunctionType(parent, f, i, pos)) | // No specialization needed when the function is directly in the trait or // impl block or the declared type is not a type parameter - (i.getAnAssocItem() = f or not result instanceof TypeParameter) and + (parent = i or not result instanceof TypeParameter) and result = pos.getTypeMention(f).resolveTypeAt(path) or - not i.getAnAssocItem() = f and - exists(TypePath prefix, TypePath suffix, TypeParameter tp | + exists(TypePath prefix, TypePath suffix, TypeParameter tp, TypeMention constraint | + BaseTypes::rootTypesSatisfaction(_, TTrait(parent), i, _, constraint) and path = prefix.append(suffix) and - tp = pos.getTypeMention(f).resolveTypeAt(prefix) - | + tp = pos.getTypeMention(f).resolveTypeAt(prefix) and if tp = TSelfTypeParameter(_) then result = resolveImplOrTraitType(i, suffix) - else - exists(TraitItemNode trait, TypeMention condition, TypeMention constraint | - trait.getAnAssocItem() = f and - BaseTypes::rootTypesSatisfaction(_, TTrait(trait), _, condition, constraint) and - result = getTraitConstraintTypeAt(condition, constraint, tp, suffix) - | - condition = i.(Trait) or condition = i.(Impl).getSelfTy() - ) + else result = getTraitConstraintTypeAt(i, constraint, tp, suffix) ) ) } @@ -134,23 +133,25 @@ Type getAssocFunctionTypeAt(Function f, ImplOrTraitItemNode i, FunctionPosition * fn m3(self); // self3 * } * - * impl T2 for X { + * impl T1 for X { * fn m1(self) { ... } // self4 + * } * + * impl T2 for X { * fn m3(self) { ... } // self5 * } * ``` * - * param | `impl` or trait | type - * ------- | --------------- | ---- - * `self1` | `trait T1` | `T1` - * `self1` | `trait T2` | `T2` - * `self2` | `trait T1` | `T1` - * `self2` | `trait T2` | `T2` - * `self2` | `impl T2 for X` | `X` - * `self3` | `trait T2` | `T2` - * `self4` | `impl T2 for X` | `X` - * `self5` | `impl T2 for X` | `X` + * f | `impl` or trait | pos | type + * ---- | --------------- | ------ | ---- + * `m1` | `trait T1` | `self` | `T1` + * `m1` | `trait T2` | `self` | `T2` + * `m2` | `trait T1` | `self` | `T1` + * `m2` | `trait T2` | `self` | `T2` + * `m2` | `impl T1 for X` | `self` | `X` + * `m3` | `trait T2` | `self` | `T2` + * `m4` | `impl T2 for X` | `self` | `X` + * `m5` | `impl T2 for X` | `self` | `X` */ class AssocFunctionType extends MkAssocFunctionType { /** @@ -158,7 +159,7 @@ class AssocFunctionType extends MkAssocFunctionType { * when viewed as a member of the `impl` or trait item `i`. */ predicate appliesTo(Function f, ImplOrTraitItemNode i, FunctionPosition pos) { - this = MkAssocFunctionType(f, i, pos) + this = MkAssocFunctionType(_, f, i, pos) } /** diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index 1cac4e2d3e2..d3209ccbfdf 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -586,10 +586,10 @@ mod impl_overlap { println!("{:?}", w.m(x)); // $ target=S3::m println!("{:?}", S3::m(&w, x)); // $ target=S3::m - S4.m(); // $ target=::m $ SPURIOUS: target=MyTrait1::m + S4.m(); // $ target=::m S4::m(&S4); // $ target=::m $ SPURIOUS: target=MyTrait1::m - S5(0i32).m(); // $ target=_as_MyTrait1>::m $ SPURIOUS: target=MyTrait1::m - S5::m(&S5(0i32)); // $ target=_as_MyTrait1>::m $ SPURIOUS: target=MyTrait1::m + S5(0i32).m(); // $ target=_as_MyTrait1>::m + S5::m(&S5(0i32)); // $ target=_as_MyTrait1>::m S5(true).m(); // $ target=MyTrait1::m S5::m(&S5(true)); // $ target=MyTrait1::m } 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 99ab4b1e770..1e69c775a8c 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -5443,7 +5443,6 @@ inferType | main.rs:2595:42:2595:42 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:2596:9:2596:26 | for ... in ... { ... } | | file://:0:0:0:0 | () | | main.rs:2596:13:2596:13 | u | | {EXTERNAL LOCATION} | u16 | -| main.rs:2596:13:2596:13 | u | | file://:0:0:0:0 | & | | main.rs:2596:18:2596:23 | vals4a | | {EXTERNAL LOCATION} | Vec | | main.rs:2596:18:2596:23 | vals4a | A | {EXTERNAL LOCATION} | Global | | main.rs:2596:18:2596:23 | vals4a | T | {EXTERNAL LOCATION} | u16 | @@ -5473,7 +5472,6 @@ inferType | main.rs:2602:9:2602:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | | main.rs:2602:13:2602:13 | u | | {EXTERNAL LOCATION} | i32 | | main.rs:2602:13:2602:13 | u | | {EXTERNAL LOCATION} | u32 | -| main.rs:2602:13:2602:13 | u | | file://:0:0:0:0 | & | | main.rs:2602:18:2602:22 | vals5 | | {EXTERNAL LOCATION} | Vec | | main.rs:2602:18:2602:22 | vals5 | A | {EXTERNAL LOCATION} | Global | | main.rs:2602:18:2602:22 | vals5 | T | {EXTERNAL LOCATION} | i32 | @@ -5514,7 +5512,6 @@ inferType | main.rs:2608:20:2608:22 | 1u8 | | {EXTERNAL LOCATION} | u8 | | main.rs:2609:9:2609:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | | main.rs:2609:13:2609:13 | u | | {EXTERNAL LOCATION} | u8 | -| main.rs:2609:13:2609:13 | u | | file://:0:0:0:0 | & | | main.rs:2609:18:2609:22 | vals7 | | {EXTERNAL LOCATION} | Vec | | main.rs:2609:18:2609:22 | vals7 | A | {EXTERNAL LOCATION} | Global | | main.rs:2609:18:2609:22 | vals7 | T | {EXTERNAL LOCATION} | u8 | diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index a827ef3cd79..260f78344ed 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -450,6 +450,8 @@ module Make1 Input1> { * free in `condition` and `constraint`, * - and for every instantiation of the type parameters from `abs` the * resulting `condition` satisifies the constraint given by `constraint`. + * - `transitive` corresponds to wether any further constraints satisifed + * through `constraint` also applies to `condition`. * * Example in C#: * ```csharp @@ -487,7 +489,7 @@ module Make1 Input1> { * should be empty. */ predicate conditionSatisfiesConstraint( - TypeAbstraction abs, TypeMention condition, TypeMention constraint + TypeAbstraction abs, TypeMention condition, TypeMention constraint, boolean transitive ); } @@ -754,13 +756,13 @@ module Make1 Input1> { private predicate typeCondition( Type type, TypeAbstraction abs, TypeMentionTypeTree condition ) { - conditionSatisfiesConstraint(abs, condition, _) and + conditionSatisfiesConstraint(abs, condition, _, _) and type = resolveTypeMentionRoot(condition) } pragma[nomagic] private predicate typeConstraint(Type type, TypeMentionTypeTree constraint) { - conditionSatisfiesConstraint(_, _, constraint) and + conditionSatisfiesConstraint(_, _, constraint, _) and type = resolveTypeMentionRoot(constraint) } @@ -781,12 +783,12 @@ module Make1 Input1> { TypeAbstraction abs, TypeMention condition, TypeMention constraint, TypePath path, Type t ) { // base case - conditionSatisfiesConstraint(abs, condition, constraint) and + conditionSatisfiesConstraint(abs, condition, constraint, _) and constraint.resolveTypeAt(path) = t or // recursive case exists(TypeAbstraction midAbs, TypeMention midConstraint, TypeMention midCondition | - conditionSatisfiesConstraint(abs, condition, midConstraint) and + conditionSatisfiesConstraint(abs, condition, midConstraint, true) and // NOTE: `midAbs` describe the free type variables in `midCondition`, hence // we use that for instantiation check. IsInstantiationOf::isInstantiationOf(midConstraint, From a405b7b3e05969795428cada93d119560d919b37 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 17 Nov 2025 10:47:37 +0100 Subject: [PATCH 055/127] JS: Add discard predicates for locations --- .../semmle/javascript/internal/Overlay.qll | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/javascript/ql/lib/semmle/javascript/internal/Overlay.qll b/javascript/ql/lib/semmle/javascript/internal/Overlay.qll index a20ac1868e6..43a4a07df47 100644 --- a/javascript/ql/lib/semmle/javascript/internal/Overlay.qll +++ b/javascript/ql/lib/semmle/javascript/internal/Overlay.qll @@ -28,3 +28,23 @@ overlay[discard_entity] private predicate discardEntity(@locatable node) { exists(string file | discardableEntity(file, node) and discardFile(file)) } + +overlay[local] +private string getFileFromLocation(@location loc) { + exists(@file file | + locations_default(loc, file, _, _, _, _) and + files(file, result) + ) +} + +/** Holds if `loc` is in the `file` and is part of the overlay base database. */ +overlay[local] +private predicate discardableLocation(string file, @location node) { + not isOverlay() and file = getFileFromLocation(node) +} + +/** Holds if `loc` should be discarded, because it is part of the overlay base and is in a file that was also extracted as part of the overlay database. */ +overlay[discard_entity] +private predicate discardLocation(@location loc) { + exists(string file | discardableLocation(file, loc) and discardFile(file)) +} From 4b57b4418fbc1b87db2201257cdd0744ac230b61 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 17 Nov 2025 10:48:15 +0100 Subject: [PATCH 056/127] JS: Factor out some code --- javascript/ql/lib/semmle/javascript/internal/Overlay.qll | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/internal/Overlay.qll b/javascript/ql/lib/semmle/javascript/internal/Overlay.qll index 43a4a07df47..f3eed619f0d 100644 --- a/javascript/ql/lib/semmle/javascript/internal/Overlay.qll +++ b/javascript/ql/lib/semmle/javascript/internal/Overlay.qll @@ -6,10 +6,9 @@ private predicate isOverlay() { databaseMetadata("isOverlay", "true") } overlay[local] private string getFileFromEntity(@locatable node) { - exists(@location loc, @file file | + exists(@location loc | hasLocation(node, loc) and - locations_default(loc, file, _, _, _, _) and - files(file, result) + result = getFileFromLocation(loc) ) } From 861c236daef3ba9ce36f723381e5888b8fe527ff Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 12 Nov 2025 11:44:12 +0100 Subject: [PATCH 057/127] C++: Add table for expanded compilation arguments --- cpp/ql/lib/semmlecode.cpp.dbscheme | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme b/cpp/ql/lib/semmlecode.cpp.dbscheme index 2121ffec11f..1a6854060d5 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme @@ -47,6 +47,19 @@ compilation_args( string arg : string ref ); +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + /** * Optionally, record the build mode for each compilation. */ From ee97d6f46189b21fb81d12f0bebdc20b5ef22e02 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 12 Nov 2025 11:47:29 +0100 Subject: [PATCH 058/127] C++: Expose the expanded compilation arguments --- cpp/ql/lib/semmle/code/cpp/Compilation.qll | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/Compilation.qll b/cpp/ql/lib/semmle/code/cpp/Compilation.qll index 407dc31e05f..716156acb44 100644 --- a/cpp/ql/lib/semmle/code/cpp/Compilation.qll +++ b/cpp/ql/lib/semmle/code/cpp/Compilation.qll @@ -94,6 +94,19 @@ class Compilation extends @compilation { */ string getArgument(int i) { compilation_args(this, i, result) } + /** + * Gets an expanded argument passed to the extractor on this invocation. + */ + string getAnExpandedArgument() { result = this.getArgument(_) } + + /** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `getArgument`, but + * for a `@someFile` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ + string getExpandedArgument(int i) { compilation_expanded_args(this, i, result) } + /** * Gets the total amount of CPU time spent processing all the files in the * front-end and extractor. From a8d488fa29688404400422e8dd02166bd494eacf Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 12 Nov 2025 15:32:20 +0100 Subject: [PATCH 059/127] C++: Add upgrade and downgrade scripts --- .../old.dbscheme | 2450 +++++++++++++++++ .../semmlecode.cpp.dbscheme | 2437 ++++++++++++++++ .../upgrade.properties | 3 + .../old.dbscheme | 2437 ++++++++++++++++ .../semmlecode.cpp.dbscheme | 2450 +++++++++++++++++ .../upgrade.properties | 2 + 6 files changed, 9779 insertions(+) create mode 100644 cpp/downgrades/1a6854060d5d3ada16c580a29f8c5ce21f3367f8/old.dbscheme create mode 100644 cpp/downgrades/1a6854060d5d3ada16c580a29f8c5ce21f3367f8/semmlecode.cpp.dbscheme create mode 100644 cpp/downgrades/1a6854060d5d3ada16c580a29f8c5ce21f3367f8/upgrade.properties create mode 100644 cpp/ql/lib/upgrades/2121ffec11fac265524955fee1775217364d4ca4/old.dbscheme create mode 100644 cpp/ql/lib/upgrades/2121ffec11fac265524955fee1775217364d4ca4/semmlecode.cpp.dbscheme create mode 100644 cpp/ql/lib/upgrades/2121ffec11fac265524955fee1775217364d4ca4/upgrade.properties diff --git a/cpp/downgrades/1a6854060d5d3ada16c580a29f8c5ce21f3367f8/old.dbscheme b/cpp/downgrades/1a6854060d5d3ada16c580a29f8c5ce21f3367f8/old.dbscheme new file mode 100644 index 00000000000..1a6854060d5 --- /dev/null +++ b/cpp/downgrades/1a6854060d5d3ada16c580a29f8c5ce21f3367f8/old.dbscheme @@ -0,0 +1,2450 @@ +/*- Compilations -*/ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- C++ dbscheme -*/ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +pch_uses( + int pch: @pch ref, + int compilation: @compilation ref, + int id: @file ref +) + +#keyset[pch, compilation] +pch_creations( + int pch: @pch, + int compilation: @compilation ref, + int from: @file ref +) + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location_default ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +case @function.kind of + 0 = @unknown_function +| 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +// ... 6 = @builtin_function deprecated // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +builtin_functions( + int id: @function ref +) + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +| 62 = @mfp8 // __mfp8 +| 63 = @scalable_vector_count // __SVCount_t +| 64 = @complex_fp16 // _Complex __fp16 +| 65 = @complex_std_bfloat16 // _Complex __bf16 +| 66 = @complex_std_float16 // _Complex std::float16_t +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +| 11 = @scalable_vector // Arm SVE +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +tupleelements( + unique int id: @derivedtype ref, + int num_elements: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +case @type_operator.kind of + 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +case @usertype.kind of + 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location_default ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +namespaceattributes( + int namespace_id: @namespace ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype + | @decltype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_default ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_default ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref, + boolean is_designated: boolean ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref, + boolean is_designated: boolean ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref, + boolean has_explicit_parameter_list: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_default ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +| 40 = @stmt_leave +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +type_is_vla(unique int type_id: @derivedtype ref) + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue | @stmt_leave; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; diff --git a/cpp/downgrades/1a6854060d5d3ada16c580a29f8c5ce21f3367f8/semmlecode.cpp.dbscheme b/cpp/downgrades/1a6854060d5d3ada16c580a29f8c5ce21f3367f8/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..2121ffec11f --- /dev/null +++ b/cpp/downgrades/1a6854060d5d3ada16c580a29f8c5ce21f3367f8/semmlecode.cpp.dbscheme @@ -0,0 +1,2437 @@ +/*- Compilations -*/ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- C++ dbscheme -*/ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +pch_uses( + int pch: @pch ref, + int compilation: @compilation ref, + int id: @file ref +) + +#keyset[pch, compilation] +pch_creations( + int pch: @pch, + int compilation: @compilation ref, + int from: @file ref +) + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location_default ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +case @function.kind of + 0 = @unknown_function +| 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +// ... 6 = @builtin_function deprecated // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +builtin_functions( + int id: @function ref +) + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +| 62 = @mfp8 // __mfp8 +| 63 = @scalable_vector_count // __SVCount_t +| 64 = @complex_fp16 // _Complex __fp16 +| 65 = @complex_std_bfloat16 // _Complex __bf16 +| 66 = @complex_std_float16 // _Complex std::float16_t +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +| 11 = @scalable_vector // Arm SVE +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +tupleelements( + unique int id: @derivedtype ref, + int num_elements: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +case @type_operator.kind of + 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +case @usertype.kind of + 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location_default ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +namespaceattributes( + int namespace_id: @namespace ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype + | @decltype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_default ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_default ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref, + boolean is_designated: boolean ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref, + boolean is_designated: boolean ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref, + boolean has_explicit_parameter_list: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_default ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +| 40 = @stmt_leave +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +type_is_vla(unique int type_id: @derivedtype ref) + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue | @stmt_leave; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; diff --git a/cpp/downgrades/1a6854060d5d3ada16c580a29f8c5ce21f3367f8/upgrade.properties b/cpp/downgrades/1a6854060d5d3ada16c580a29f8c5ce21f3367f8/upgrade.properties new file mode 100644 index 00000000000..6fa192fc000 --- /dev/null +++ b/cpp/downgrades/1a6854060d5d3ada16c580a29f8c5ce21f3367f8/upgrade.properties @@ -0,0 +1,3 @@ +description: Support expanded compilation argument lists +compatibility: full +compilation_expanded_args.rel: delete diff --git a/cpp/ql/lib/upgrades/2121ffec11fac265524955fee1775217364d4ca4/old.dbscheme b/cpp/ql/lib/upgrades/2121ffec11fac265524955fee1775217364d4ca4/old.dbscheme new file mode 100644 index 00000000000..2121ffec11f --- /dev/null +++ b/cpp/ql/lib/upgrades/2121ffec11fac265524955fee1775217364d4ca4/old.dbscheme @@ -0,0 +1,2437 @@ +/*- Compilations -*/ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- C++ dbscheme -*/ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +pch_uses( + int pch: @pch ref, + int compilation: @compilation ref, + int id: @file ref +) + +#keyset[pch, compilation] +pch_creations( + int pch: @pch, + int compilation: @compilation ref, + int from: @file ref +) + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location_default ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +case @function.kind of + 0 = @unknown_function +| 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +// ... 6 = @builtin_function deprecated // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +builtin_functions( + int id: @function ref +) + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +| 62 = @mfp8 // __mfp8 +| 63 = @scalable_vector_count // __SVCount_t +| 64 = @complex_fp16 // _Complex __fp16 +| 65 = @complex_std_bfloat16 // _Complex __bf16 +| 66 = @complex_std_float16 // _Complex std::float16_t +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +| 11 = @scalable_vector // Arm SVE +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +tupleelements( + unique int id: @derivedtype ref, + int num_elements: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +case @type_operator.kind of + 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +case @usertype.kind of + 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location_default ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +namespaceattributes( + int namespace_id: @namespace ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype + | @decltype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_default ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_default ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref, + boolean is_designated: boolean ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref, + boolean is_designated: boolean ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref, + boolean has_explicit_parameter_list: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_default ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +| 40 = @stmt_leave +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +type_is_vla(unique int type_id: @derivedtype ref) + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue | @stmt_leave; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/2121ffec11fac265524955fee1775217364d4ca4/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/2121ffec11fac265524955fee1775217364d4ca4/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..1a6854060d5 --- /dev/null +++ b/cpp/ql/lib/upgrades/2121ffec11fac265524955fee1775217364d4ca4/semmlecode.cpp.dbscheme @@ -0,0 +1,2450 @@ +/*- Compilations -*/ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- C++ dbscheme -*/ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +pch_uses( + int pch: @pch ref, + int compilation: @compilation ref, + int id: @file ref +) + +#keyset[pch, compilation] +pch_creations( + int pch: @pch, + int compilation: @compilation ref, + int from: @file ref +) + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location_default ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +case @function.kind of + 0 = @unknown_function +| 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +// ... 6 = @builtin_function deprecated // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +builtin_functions( + int id: @function ref +) + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +| 62 = @mfp8 // __mfp8 +| 63 = @scalable_vector_count // __SVCount_t +| 64 = @complex_fp16 // _Complex __fp16 +| 65 = @complex_std_bfloat16 // _Complex __bf16 +| 66 = @complex_std_float16 // _Complex std::float16_t +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +| 11 = @scalable_vector // Arm SVE +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +tupleelements( + unique int id: @derivedtype ref, + int num_elements: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +case @type_operator.kind of + 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +case @usertype.kind of + 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location_default ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +namespaceattributes( + int namespace_id: @namespace ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype + | @decltype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_default ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_default ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref, + boolean is_designated: boolean ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref, + boolean is_designated: boolean ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref, + boolean has_explicit_parameter_list: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_default ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +| 40 = @stmt_leave +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +type_is_vla(unique int type_id: @derivedtype ref) + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue | @stmt_leave; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/2121ffec11fac265524955fee1775217364d4ca4/upgrade.properties b/cpp/ql/lib/upgrades/2121ffec11fac265524955fee1775217364d4ca4/upgrade.properties new file mode 100644 index 00000000000..046b67dcbf3 --- /dev/null +++ b/cpp/ql/lib/upgrades/2121ffec11fac265524955fee1775217364d4ca4/upgrade.properties @@ -0,0 +1,2 @@ +description: Support expanded compilation argument lists +compatibility: backwards From 61b7eb3d5c87b387129faa427246850edfe8ff7f Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Thu, 13 Nov 2025 10:41:18 +0100 Subject: [PATCH 060/127] C++: Update dbscheme stats file --- cpp/ql/lib/semmlecode.cpp.dbscheme.stats | 5866 ++++++++++++---------- 1 file changed, 3191 insertions(+), 2675 deletions(-) diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats index 42cff5d8d16..1d796c9aa9a 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats @@ -2,7 +2,7 @@ @compilation - 12643 + 12640 @externalDataElement @@ -10,19 +10,19 @@ @file - 65212 + 65198 @folder - 12389 + 12387 @diagnostic - 1484 + 359 @location_default - 46945087 + 46943795 @pch @@ -30,15 +30,15 @@ @macro_expansion - 40256583 + 40272403 @other_macro_reference - 300694 + 300697 @normal_function - 2738022 + 2737947 @unknown_function @@ -46,11 +46,11 @@ @constructor - 698728 + 698677 @destructor - 86202 + 86200 @conversion_function @@ -58,11 +58,11 @@ @operator - 652444 + 652426 @user_defined_literal - 998 + 997 @deduction_guide @@ -70,27 +70,27 @@ @fun_decl - 4202967 + 4202851 @var_decl - 9383104 + 9383095 @type_decl - 1633482 + 1633437 @namespace_decl - 407775 + 407917 @using_declaration - 267822 + 267880 @using_directive - 6473 + 6472 @using_enum_declaration @@ -98,27 +98,27 @@ @static_assert - 173262 + 172982 @parameter - 7019832 + 7019638 @membervariable - 1497674 + 1499493 @globalvariable - 488148 + 488384 @localvariable - 726300 + 725806 @enumconstant - 347816 + 347930 @errortype @@ -366,23 +366,23 @@ @pointer - 452469 + 452457 @type_with_specifiers - 693238 + 693219 @array - 90319 + 90316 @routineptr - 684112 + 684266 @reference - 967314 + 967288 @gnu_vector @@ -394,7 +394,7 @@ @rvalue_reference - 291042 + 291034 @block @@ -404,10 +404,6 @@ @scalable_vector 1 - - @decltype - 102349 - @typeof 816 @@ -458,7 +454,7 @@ @remove_cv - 2065 + 2062 @remove_cvref @@ -486,27 +482,31 @@ @remove_reference - 5723 + 5715 + + + @decltype + 102350 @struct - 979892 + 979711 @union - 20958 + 20957 @enum - 41550 + 41551 @template_parameter - 867095 + 866907 @alias - 1762360 + 1762011 @unknown_usertype @@ -514,15 +514,15 @@ @class - 324974 + 324965 @template_template_parameter - 6115 + 6114 @proxy_class - 48439 + 48429 @scoped_enum @@ -530,11 +530,11 @@ @template_struct - 212084 + 212038 @template_class - 29316 + 29315 @template_union @@ -542,23 +542,23 @@ @mangledname - 6364268 + 6364342 @type_mention - 5903894 + 5907627 @concept_template - 3614 + 3610 @routinetype - 604322 + 604482 @ptrtomember - 9728 + 9725 @specifier @@ -570,11 +570,11 @@ @stdattribute - 352794 + 352784 @declspec - 330281 + 330286 @msattribute @@ -582,15 +582,15 @@ @alignas - 2164 + 2163 @attribute_arg_token - 16693 + 16692 @attribute_arg_constant_expr - 71856 + 71883 @attribute_arg_expr @@ -606,23 +606,23 @@ @attribute_arg_type - 460 + 459 @derivation - 476902 + 476867 @frienddecl - 700465 + 699835 @comment - 11233402 + 11233093 @namespace - 8650 + 8648 @specialnamequalifyingelement @@ -630,15 +630,15 @@ @namequalifier - 3041979 + 3037999 @value - 13474601 + 13474763 @initialiser - 2251321 + 2247635 @address_of @@ -646,43 +646,43 @@ @indirect - 404153 + 404158 @array_to_pointer - 1953750 + 1953766 @parexpr - 4915206 + 4915246 @arithnegexpr - 586534 + 586538 @unaryplusexpr - 4069 + 4067 @complementexpr - 38199 + 38200 @notexpr - 355764 + 355767 @postincrexpr - 84571 + 84572 @postdecrexpr - 57394 + 57395 @preincrexpr - 96714 + 96715 @predecrexpr @@ -690,87 +690,87 @@ @conditionalexpr - 897879 + 897887 @addexpr - 571552 + 571559 @subexpr - 466799 + 466802 @mulexpr - 435793 + 435798 @divexpr - 52387 + 52388 @remexpr - 16012 + 16011 @paddexpr - 118669 + 118671 @psubexpr - 68016 + 68017 @pdiffexpr - 43912 + 43910 @lshiftexpr - 551696 + 551703 @rshiftexpr - 200554 + 200557 @andexpr - 481218 + 481223 @orexpr - 194055 + 194057 @xorexpr - 73952 + 73953 @eqexpr - 643372 + 643379 @neexpr - 411870 + 411873 @gtexpr - 111149 + 111150 @ltexpr - 139429 + 139430 @geexpr - 81358 + 81359 @leexpr - 292036 + 292039 @assignexpr - 1281144 + 1281159 @assignaddexpr @@ -782,7 +782,7 @@ @assignmulexpr - 11185 + 11183 @assigndivexpr @@ -806,11 +806,11 @@ @assignorexpr - 19606 + 19607 @assignxorexpr - 29909 + 29910 @assignpaddexpr @@ -822,27 +822,27 @@ @andlogicalexpr - 346589 + 346593 @orlogicalexpr - 1103522 + 1103536 @commaexpr - 168288 + 168283 @subscriptexpr - 435142 + 435148 @callexpr - 239780 + 239762 @vastartexpr - 4979 + 4970 @vaargexpr @@ -858,63 +858,63 @@ @varaccess - 8254629 + 8254728 @runtime_sizeof - 402047 + 402052 @runtime_alignof - 49877 + 49873 @expr_stmt - 148364 + 148366 @routineexpr - 5732444 + 5730574 @type_operand - 1405362 + 1405379 @offsetofexpr - 149024 + 149026 @typescompexpr - 701934 + 701942 @literal - 7966299 + 7966636 @aggregateliteral - 1397521 + 1397522 @c_style_cast - 6026987 + 6026984 @temp_init - 992173 + 991871 @errorexpr - 45686 + 45479 @reference_to - 1903138 + 1902179 @ref_indirect - 2107325 + 2107171 @vacuous_destructor_call @@ -922,7 +922,7 @@ @assume - 4151 + 4143 @conjugation @@ -974,23 +974,23 @@ @thisaccess - 1558277 + 1555763 @new_expr - 46198 + 46194 @delete_expr - 11481 + 11480 @throw_expr - 24178 + 24145 @condition_decl - 408920 + 408385 @braced_init_list @@ -998,7 +998,7 @@ @type_id - 47901 + 47898 @sizeof_pack @@ -1050,11 +1050,11 @@ @isbaseofexpr - 258 + 257 @isclassexpr - 2388 + 2384 @isconvtoexpr @@ -1066,7 +1066,7 @@ @isenumexpr - 2994 + 2993 @ispodexpr @@ -1090,7 +1090,7 @@ @uuidof - 26677 + 26695 @delete_array_expr @@ -1098,23 +1098,23 @@ @new_array_expr - 6653 + 6641 @foldexpr - 1247 + 1246 @ctordirectinit - 112837 + 112829 @ctorvirtualinit - 4020 + 4019 @ctorfieldinit - 206212 + 206206 @ctordelegatinginit @@ -1122,27 +1122,27 @@ @dtordirectdestruct - 39452 + 39449 @dtorvirtualdestruct - 3986 + 3985 @dtorfielddestruct - 39827 + 39824 @static_cast - 348053 + 348044 @reinterpret_cast - 40088 + 40018 @const_cast - 24461 + 24460 @dynamic_cast @@ -1150,15 +1150,15 @@ @lambdaexpr - 19057 + 19023 @param_ref - 164066 + 163939 @noopexpr - 48 + 64 @istriviallyconstructibleexpr @@ -1174,7 +1174,7 @@ @istriviallydestructibleexpr - 998 + 997 @istriviallyassignableexpr @@ -1254,11 +1254,11 @@ @isfinalexpr - 9403 + 9402 @noexceptexpr - 28465 + 28343 @builtinshufflevector @@ -1270,7 +1270,7 @@ @builtinaddressof - 15469 + 15468 @vec_fill @@ -1286,7 +1286,7 @@ @spaceshipexpr - 1312 + 1310 @co_await @@ -1306,7 +1306,7 @@ @hasuniqueobjectrepresentations - 43 + 42 @builtinbitcast @@ -1322,7 +1322,7 @@ @issame - 4539 + 4534 @isfunction @@ -1430,7 +1430,7 @@ @reuseexpr - 847039 + 845931 @istriviallycopyassignable @@ -1486,7 +1486,7 @@ @referenceconstructsfromtemporary - 43 + 42 @referenceconvertsfromtemporary @@ -1494,7 +1494,7 @@ @isconvertible - 129 + 128 @isvalidwinrttype @@ -1530,67 +1530,67 @@ @requires_expr - 16503 + 16481 @nested_requirement - 688 + 687 @compound_requirement - 10951 + 10937 @concept_id - 90433 + 90315 @lambdacapture - 31965 + 31909 @stmt_expr - 2031613 + 2031638 @stmt_if - 990214 + 990226 @stmt_while - 39647 + 39648 @stmt_goto - 157909 + 157874 @stmt_label - 78025 + 78008 @stmt_return - 1241788 + 1241721 @stmt_block - 1728666 + 1728619 @stmt_end_test_while - 233641 + 233643 @stmt_for - 84389 + 84390 @stmt_switch_case - 836152 + 835058 @stmt_switch - 411868 + 411329 @stmt_asm @@ -1598,11 +1598,11 @@ @stmt_decl - 772425 + 771065 @stmt_empty - 429404 + 428842 @stmt_continue @@ -1610,15 +1610,15 @@ @stmt_break - 137934 + 137691 @stmt_try_block - 26740 + 26736 @stmt_microsoft_try - 211 + 210 @stmt_set_vla_size @@ -1630,7 +1630,7 @@ @stmt_assigned_goto - 12426 + 12427 @stmt_range_based_for @@ -1638,11 +1638,11 @@ @stmt_handler - 43781 + 43770 @stmt_constexpr_if - 106037 + 106034 @stmt_co_return @@ -1662,43 +1662,43 @@ @ppd_if - 590942 + 590926 @ppd_ifdef - 214363 + 214366 @ppd_ifndef - 158633 + 160377 @ppd_elif - 21917 + 21912 @ppd_else - 234905 + 234898 @ppd_endif - 888971 + 888947 @ppd_plain_include - 318564 + 318495 @ppd_define - 2750123 + 2750047 @ppd_undef - 100424 + 100421 @ppd_pragma - 406187 + 406176 @ppd_include_next @@ -1706,7 +1706,7 @@ @ppd_line - 18812 + 18799 @ppd_error @@ -1764,11 +1764,11 @@ compilations - 12643 + 12640 id - 12643 + 12640 cwd @@ -1786,7 +1786,7 @@ 1 2 - 12643 + 12640 @@ -1812,19 +1812,19 @@ compilation_args - 1012213 + 1011994 id - 12643 + 12640 num - 1468 + 1467 arg - 29268 + 29262 @@ -1893,7 +1893,7 @@ 103 104 - 1996 + 1995 104 @@ -1944,7 +1944,7 @@ 42 53 - 602 + 601 53 @@ -1984,7 +1984,7 @@ 79 89 - 1130 + 1129 89 @@ -2152,12 +2152,12 @@ 1 2 - 13403 + 13400 2 3 - 12685 + 12682 3 @@ -2183,12 +2183,403 @@ 1 2 - 19382 + 19377 2 3 - 8724 + 8722 + + + 3 + 62 + 1161 + + + + + + + + + compilation_expanded_args + 1011994 + + + id + 12640 + + + num + 1467 + + + arg + 29262 + + + + + id + num + + + 12 + + + 36 + 42 + 1003 + + + 42 + 43 + 1098 + + + 43 + 44 + 718 + + + 44 + 45 + 506 + + + 45 + 51 + 950 + + + 51 + 70 + 485 + + + 71 + 72 + 707 + + + 72 + 90 + 897 + + + 94 + 96 + 390 + + + 98 + 99 + 1341 + + + 100 + 102 + 95 + + + 103 + 104 + 1995 + + + 104 + 119 + 1066 + + + 120 + 138 + 929 + + + 139 + 140 + 454 + + + + + + + id + arg + + + 12 + + + 34 + 38 + 591 + + + 38 + 39 + 1499 + + + 39 + 40 + 982 + + + 40 + 42 + 1087 + + + 42 + 53 + 601 + + + 53 + 54 + 707 + + + 54 + 63 + 897 + + + 64 + 67 + 401 + + + 67 + 68 + 1404 + + + 68 + 70 + 971 + + + 70 + 71 + 1404 + + + 73 + 79 + 950 + + + 79 + 89 + 1129 + + + 89 + 90 + 10 + + + + + + + num + id + + + 12 + + + 43 + 90 + 63 + + + 90 + 108 + 116 + + + 108 + 183 + 105 + + + 198 + 422 + 116 + + + 422 + 595 + 126 + + + 595 + 605 + 126 + + + 605 + 749 + 116 + + + 750 + 778 + 116 + + + 781 + 883 + 116 + + + 930 + 1190 + 84 + + + 1197 + 1198 + 380 + + + + + + + num + arg + + + 12 + + + 1 + 5 + 126 + + + 5 + 7 + 116 + + + 9 + 12 + 73 + + + 12 + 15 + 116 + + + 15 + 18 + 95 + + + 18 + 22 + 116 + + + 22 + 27 + 126 + + + 27 + 29 + 84 + + + 29 + 34 + 116 + + + 34 + 44 + 126 + + + 45 + 63 + 116 + + + 67 + 94 + 116 + + + 94 + 164 + 116 + + + 171 + 199 + 21 + + + + + + + arg + id + + + 12 + + + 1 + 2 + 13400 + + + 2 + 3 + 12682 + + + 3 + 103 + 2196 + + + 104 + 1198 + 982 + + + + + + + arg + num + + + 12 + + + 1 + 2 + 19377 + + + 2 + 3 + 8722 3 @@ -2497,7 +2888,7 @@ compilation_time - 62952 + 62953 id @@ -2513,7 +2904,7 @@ seconds - 13396 + 14485 @@ -2594,12 +2985,12 @@ 3 4 - 816 + 544 4 5 - 544 + 816 6 @@ -2608,33 +2999,33 @@ 8 - 9 - 163 + 10 + 217 10 11 - 217 + 108 11 - 15 + 12 217 - 15 - 19 + 13 + 18 217 - 19 - 26 + 18 + 22 217 - 42 - 92 - 163 + 25 + 98 + 217 @@ -2707,46 +3098,46 @@ 3 4 - 1361 + 1089 4 5 - 980 + 1306 5 6 - 272 + 163 6 7 - 544 + 599 7 8 - 163 + 217 8 9 - 272 + 217 9 - 14 + 13 381 17 - 44 + 46 381 - 49 - 87 + 50 + 90 108 @@ -2792,24 +3183,19 @@ 12 - - 3 - 4 - 54 - 4 5 + 108 + + + 154 + 155 54 - 144 - 145 - 54 - - - 149 - 150 + 171 + 172 54 @@ -2826,7 +3212,7 @@ 1 2 - 6807 + 7732 2 @@ -2836,18 +3222,13 @@ 3 4 - 1633 + 2341 4 - 5 + 46 1034 - - 5 - 45 - 544 - @@ -2862,32 +3243,27 @@ 1 2 - 6208 + 7242 2 3 - 2668 + 3158 3 4 - 2069 + 1960 4 - 5 - 925 + 6 + 1306 - 5 - 8 - 1198 - - - 8 - 74 - 326 + 6 + 77 + 816 @@ -2903,17 +3279,12 @@ 1 2 - 10510 + 10837 2 3 - 2831 - - - 3 - 4 - 54 + 3648 @@ -2923,23 +3294,23 @@ diagnostic_for - 4152 + 506 diagnostic - 1484 + 359 compilation - 1355 + 190 file_number - 21 + 10 file_number_diagnostic_number - 107 + 52 @@ -2953,12 +3324,12 @@ 1 2 - 1441 + 211 - 63 - 64 - 43 + 2 + 3 + 147 @@ -2974,7 +3345,7 @@ 1 2 - 1484 + 359 @@ -2990,7 +3361,7 @@ 1 2 - 1484 + 359 @@ -3003,15 +3374,20 @@ 12 + + 2 + 3 + 105 + 3 4 - 1312 + 63 5 6 - 43 + 21 @@ -3027,7 +3403,7 @@ 1 2 - 1355 + 190 @@ -3040,15 +3416,20 @@ 12 + + 2 + 3 + 105 + 3 4 - 1312 + 63 5 6 - 43 + 21 @@ -3062,9 +3443,9 @@ 12 - 69 - 70 - 21 + 34 + 35 + 10 @@ -3078,9 +3459,9 @@ 12 - 63 - 64 - 21 + 18 + 19 + 10 @@ -3096,7 +3477,7 @@ 5 6 - 21 + 10 @@ -3112,18 +3493,23 @@ 1 2 - 43 - - - 2 - 3 - 43 - - - 63 - 64 21 + + 4 + 5 + 10 + + + 10 + 11 + 10 + + + 18 + 19 + 10 + @@ -3138,12 +3524,17 @@ 2 3 - 43 + 21 - 63 - 64 - 64 + 8 + 9 + 10 + + + 18 + 19 + 21 @@ -3159,7 +3550,7 @@ 1 2 - 107 + 52 @@ -3169,19 +3560,19 @@ compilation_finished - 12643 + 12640 id - 12643 + 12640 cpu_seconds - 9379 + 9630 elapsed_seconds - 232 + 221 @@ -3195,7 +3586,7 @@ 1 2 - 12643 + 12640 @@ -3211,7 +3602,7 @@ 1 2 - 12643 + 12640 @@ -3227,17 +3618,17 @@ 1 2 - 7763 + 8268 2 3 - 1172 + 1013 3 - 29 - 443 + 37 + 348 @@ -3253,12 +3644,12 @@ 1 2 - 8735 + 8923 2 3 - 644 + 707 @@ -3277,43 +3668,68 @@ 63 - 2 - 3 + 3 + 4 21 - 3 + 4 5 - 21 + 10 8 9 - 31 + 10 + + + 11 + 12 + 21 12 - 15 - 21 + 13 + 10 - 15 - 37 - 21 + 13 + 14 + 10 - 51 - 177 - 21 + 20 + 21 + 10 - 241 - 286 - 21 + 29 + 30 + 10 - 326 - 327 + 59 + 60 + 10 + + + 150 + 151 + 10 + + + 247 + 248 + 10 + + + 302 + 303 + 10 + + + 319 + 320 10 @@ -3333,45 +3749,70 @@ 63 - 2 - 3 + 3 + 4 21 - 3 + 4 5 - 21 + 10 8 9 - 31 + 10 + + + 11 + 12 + 21 12 - 15 - 21 + 13 + 10 - 15 - 37 - 21 + 13 + 14 + 10 - 48 - 162 - 21 + 20 + 21 + 10 - 165 - 221 - 21 + 29 + 30 + 10 + + + 59 + 60 + 10 + + + 148 + 149 + 10 + + + 159 + 160 + 10 237 238 10 + + 256 + 257 + 10 + @@ -3607,31 +4048,31 @@ locations_default - 46945087 + 46943795 id - 46945087 + 46943795 file - 40918 + 40917 beginLine - 7500620 + 7500413 beginColumn - 21956 + 21955 endLine - 7501742 + 7501536 endColumn - 53393 + 53391 @@ -3645,7 +4086,7 @@ 1 2 - 46945087 + 46943795 @@ -3661,7 +4102,7 @@ 1 2 - 46945087 + 46943795 @@ -3677,7 +4118,7 @@ 1 2 - 46945087 + 46943795 @@ -3693,7 +4134,7 @@ 1 2 - 46945087 + 46943795 @@ -3709,7 +4150,7 @@ 1 2 - 46945087 + 46943795 @@ -3942,7 +4383,7 @@ 112 156 - 1996 + 1995 @@ -4039,7 +4480,7 @@ 13 26 - 3493 + 3492 26 @@ -4069,7 +4510,7 @@ 67 76 - 3493 + 3492 76 @@ -4084,7 +4525,7 @@ 102 116 - 3493 + 3492 116 @@ -4094,7 +4535,7 @@ 136 363 - 1497 + 1496 @@ -4110,32 +4551,32 @@ 1 2 - 4957457 + 4957321 2 3 - 779066 + 779045 3 4 - 543911 + 543896 4 12 - 570359 + 570343 12 97 - 563372 + 563357 97 637 - 86452 + 86449 @@ -4151,27 +4592,27 @@ 1 2 - 5019458 + 5019320 2 3 - 1221306 + 1221273 3 6 - 639969 + 639952 6 57 - 563248 + 563232 57 329 - 56636 + 56635 @@ -4187,27 +4628,27 @@ 1 2 - 5641339 + 5641184 2 3 - 483158 + 483145 3 7 - 582085 + 582069 7 25 - 565244 + 565228 25 94 - 228792 + 228786 @@ -4223,12 +4664,12 @@ 1 2 - 7034552 + 7034358 2 85 - 466067 + 466054 @@ -4244,32 +4685,32 @@ 1 2 - 5026444 + 5026306 2 3 - 739395 + 739375 3 4 - 539795 + 539780 4 12 - 586950 + 586934 12 72 - 564121 + 564105 72 250 - 43912 + 43910 @@ -4290,7 +4731,7 @@ 2 6 - 1996 + 1995 6 @@ -4361,7 +4802,7 @@ 1 2 - 1996 + 1995 2 @@ -4421,7 +4862,7 @@ 243 329 - 499 + 498 @@ -4594,7 +5035,7 @@ 2 5 - 1497 + 1496 5 @@ -4609,7 +5050,7 @@ 13 23 - 1996 + 1995 23 @@ -4629,7 +5070,7 @@ 58 73 - 1497 + 1496 73 @@ -4665,32 +5106,32 @@ 1 2 - 4955336 + 4955200 2 3 - 781561 + 781539 3 4 - 544785 + 544770 4 12 - 567864 + 567848 12 95 - 563497 + 563482 95 620 - 88697 + 88695 @@ -4706,27 +5147,27 @@ 1 2 - 5016589 + 5016451 2 3 - 1223801 + 1223768 3 6 - 633357 + 633340 6 52 - 564121 + 564105 52 329 - 63872 + 63870 @@ -4742,12 +5183,12 @@ 1 2 - 7051643 + 7051449 2 15 - 450099 + 450087 @@ -4763,27 +5204,27 @@ 1 2 - 5640466 + 5640311 2 3 - 480538 + 480525 3 7 - 587075 + 587059 7 25 - 568862 + 568846 25 89 - 224800 + 224794 @@ -4799,32 +5240,32 @@ 1 2 - 5025072 + 5024934 2 3 - 743762 + 743741 3 4 - 539545 + 539530 4 12 - 587574 + 587558 12 72 - 562749 + 562733 72 250 - 43038 + 43037 @@ -4962,12 +5403,12 @@ 1 2 - 15968 + 15967 2 3 - 5988 + 5987 3 @@ -5048,7 +5489,7 @@ 14 28 - 4491 + 4490 28 @@ -5084,12 +5525,12 @@ 1 2 - 15968 + 15967 2 3 - 5988 + 5987 3 @@ -5139,15 +5580,15 @@ files - 65212 + 65198 id - 65212 + 65198 name - 65212 + 65198 @@ -5161,7 +5602,7 @@ 1 2 - 65212 + 65198 @@ -5177,7 +5618,7 @@ 1 2 - 65212 + 65198 @@ -5187,15 +5628,15 @@ folders - 12389 + 12387 id - 12389 + 12387 name - 12389 + 12387 @@ -5209,7 +5650,7 @@ 1 2 - 12389 + 12387 @@ -5225,7 +5666,7 @@ 1 2 - 12389 + 12387 @@ -5235,15 +5676,15 @@ containerparent - 77581 + 77564 parent - 12389 + 12387 child - 77581 + 77564 @@ -5257,7 +5698,7 @@ 1 2 - 6031 + 6029 2 @@ -5308,7 +5749,7 @@ 1 2 - 77581 + 77564 @@ -5318,23 +5759,23 @@ numlines - 807883 + 807861 element_id - 806761 + 806738 num_lines - 39421 + 39420 num_code - 34056 + 34055 num_comment - 18338 + 18337 @@ -5348,7 +5789,7 @@ 1 2 - 805638 + 805616 2 @@ -5369,7 +5810,7 @@ 1 2 - 805638 + 805616 2 @@ -5390,7 +5831,7 @@ 1 2 - 806511 + 806489 2 @@ -5411,7 +5852,7 @@ 1 2 - 26696 + 26695 2 @@ -5426,7 +5867,7 @@ 5 35 - 2994 + 2993 39 @@ -5447,7 +5888,7 @@ 1 2 - 27195 + 27194 2 @@ -5457,12 +5898,12 @@ 3 4 - 2495 + 2494 4 7 - 3493 + 3492 7 @@ -5483,7 +5924,7 @@ 1 2 - 26821 + 26820 2 @@ -5519,7 +5960,7 @@ 1 2 - 21831 + 21830 2 @@ -5560,7 +6001,7 @@ 1 2 - 22205 + 22204 2 @@ -5585,7 +6026,7 @@ 9 13 - 1497 + 1496 @@ -5601,7 +6042,7 @@ 1 2 - 21956 + 21955 2 @@ -5637,12 +6078,12 @@ 1 2 - 11352 + 11351 2 3 - 1996 + 1995 3 @@ -5652,12 +6093,12 @@ 4 7 - 1497 + 1496 8 22 - 1497 + 1496 42 @@ -5678,12 +6119,12 @@ 1 2 - 11352 + 11351 2 3 - 1996 + 1995 3 @@ -5698,7 +6139,7 @@ 8 27 - 1497 + 1496 30 @@ -5719,12 +6160,12 @@ 1 2 - 11352 + 11351 2 3 - 1996 + 1995 3 @@ -5734,12 +6175,12 @@ 4 8 - 1497 + 1496 8 31 - 1497 + 1496 35 @@ -5754,11 +6195,11 @@ diagnostics - 1484 + 359 id - 1484 + 359 severity @@ -5766,19 +6207,19 @@ error_tag - 43 + 73 error_message - 150 + 147 full_error_message - 150 + 179 location - 64 + 179 @@ -5792,7 +6233,7 @@ 1 2 - 1484 + 359 @@ -5808,7 +6249,7 @@ 1 2 - 1484 + 359 @@ -5824,7 +6265,7 @@ 1 2 - 1484 + 359 @@ -5840,7 +6281,7 @@ 1 2 - 1484 + 359 @@ -5856,7 +6297,7 @@ 1 2 - 1484 + 359 @@ -5870,9 +6311,14 @@ 12 - 69 - 70 - 21 + 3 + 4 + 10 + + + 31 + 32 + 10 @@ -5881,6 +6327,27 @@ severity error_tag + + + 12 + + + 1 + 2 + 10 + + + 6 + 7 + 10 + + + + + + + severity + error_message 12 @@ -5888,23 +6355,12 @@ 2 3 - 21 + 10 - - - - - - severity - error_message - - - 12 - - 7 - 8 - 21 + 12 + 13 + 10 @@ -5918,9 +6374,14 @@ 12 - 7 - 8 - 21 + 3 + 4 + 10 + + + 14 + 15 + 10 @@ -5936,7 +6397,12 @@ 3 4 - 21 + 10 + + + 14 + 15 + 10 @@ -5950,14 +6416,24 @@ 12 - 6 - 7 - 21 + 1 + 2 + 42 - 63 - 64 - 21 + 3 + 4 + 10 + + + 9 + 10 + 10 + + + 18 + 19 + 10 @@ -5973,7 +6449,7 @@ 1 2 - 43 + 73 @@ -5989,54 +6465,69 @@ 1 2 - 21 - - - 6 - 7 - 21 - - - - - - - error_tag - full_error_message - - - 12 - - - 1 - 2 - 21 - - - 6 - 7 - 21 - - - - - - - error_tag - location - - - 12 - - - 1 - 2 - 21 + 52 2 3 - 21 + 10 + + + 7 + 8 + 10 + + + + + + + error_tag + full_error_message + + + 12 + + + 1 + 2 + 52 + + + 3 + 4 + 10 + + + 9 + 10 + 10 + + + + + + + error_tag + location + + + 12 + + + 1 + 2 + 52 + + + 3 + 4 + 10 + + + 9 + 10 + 10 @@ -6052,12 +6543,17 @@ 1 2 - 129 + 105 - 63 - 64 - 21 + 2 + 3 + 31 + + + 18 + 19 + 10 @@ -6073,7 +6569,7 @@ 1 2 - 150 + 147 @@ -6089,7 +6585,7 @@ 1 2 - 150 + 147 @@ -6105,7 +6601,12 @@ 1 2 - 150 + 116 + + + 2 + 3 + 31 @@ -6121,7 +6622,12 @@ 1 2 - 150 + 116 + + + 2 + 3 + 31 @@ -6137,12 +6643,12 @@ 1 2 - 129 + 168 - 63 - 64 - 21 + 18 + 19 + 10 @@ -6158,7 +6664,7 @@ 1 2 - 150 + 179 @@ -6174,7 +6680,7 @@ 1 2 - 150 + 179 @@ -6190,7 +6696,7 @@ 1 2 - 150 + 179 @@ -6206,7 +6712,7 @@ 1 2 - 150 + 179 @@ -6220,14 +6726,14 @@ 12 - 3 - 4 - 43 + 1 + 2 + 168 - 63 - 64 - 21 + 18 + 19 + 10 @@ -6243,7 +6749,7 @@ 1 2 - 64 + 179 @@ -6259,7 +6765,7 @@ 1 2 - 64 + 179 @@ -6275,12 +6781,7 @@ 1 2 - 21 - - - 3 - 4 - 43 + 179 @@ -6296,12 +6797,7 @@ 1 2 - 21 - - - 3 - 4 - 43 + 179 @@ -6359,7 +6855,7 @@ pch_uses - 4134 + 4127 pch @@ -6367,11 +6863,11 @@ compilation - 4134 + 4127 id - 4134 + 4127 @@ -6567,7 +7063,7 @@ 1 2 - 4134 + 4127 @@ -6583,7 +7079,7 @@ 1 2 - 4134 + 4127 @@ -6599,7 +7095,7 @@ 1 2 - 4134 + 4127 @@ -6615,7 +7111,7 @@ 1 2 - 4134 + 4127 @@ -6741,11 +7237,11 @@ fileannotations - 4200551 + 4199643 id - 5767 + 5765 kind @@ -6753,11 +7249,11 @@ name - 58716 + 58704 value - 39514 + 39505 @@ -6776,7 +7272,7 @@ 2 3 - 5566 + 5565 @@ -6792,12 +7288,12 @@ 1 86 - 433 + 432 88 206 - 433 + 432 212 @@ -6807,17 +7303,17 @@ 291 359 - 433 + 432 362 401 - 433 + 432 402 479 - 433 + 432 480 @@ -6832,7 +7328,7 @@ 553 628 - 433 + 432 631 @@ -6863,17 +7359,17 @@ 1 98 - 433 + 432 102 244 - 433 + 432 244 351 - 433 + 432 352 @@ -6888,7 +7384,7 @@ 490 628 - 433 + 432 632 @@ -6903,22 +7399,22 @@ 710 939 - 433 + 432 939 1038 - 433 + 432 1066 1853 - 433 + 432 1853 3292 - 433 + 432 3423 @@ -7002,62 +7498,62 @@ 1 2 - 11027 + 11024 2 3 - 4362 + 4361 3 5 - 5059 + 5058 5 7 - 4098 + 4097 7 9 - 4594 + 4593 9 16 - 4330 + 4329 16 19 - 4890 + 4889 19 27 - 4256 + 4255 27 47 - 4837 + 4836 47 128 - 4922 + 4921 128 459 - 4626 + 4625 459 546 - 1711 + 1710 @@ -7073,7 +7569,7 @@ 1 2 - 58716 + 58704 @@ -7089,52 +7585,52 @@ 1 2 - 11587 + 11584 2 3 - 7689 + 7687 3 4 - 4098 + 4097 4 6 - 4066 + 4065 6 8 - 3422 + 3421 8 11 - 4742 + 4741 11 17 - 5397 + 5396 17 23 - 4700 + 4699 23 41 - 4679 + 4678 41 95 - 4467 + 4466 95 @@ -7160,7 +7656,7 @@ 2 4 - 1637 + 1636 4 @@ -7170,12 +7666,12 @@ 5 8 - 2461 + 2460 8 14 - 2968 + 2967 14 @@ -7190,27 +7686,27 @@ 24 51 - 3538 + 3537 51 58 - 3031 + 3030 58 80 - 2978 + 2977 81 151 - 3084 + 3083 151 334 - 2978 + 2977 334 @@ -7220,7 +7716,7 @@ 473 547 - 2313 + 2312 @@ -7236,7 +7732,7 @@ 1 2 - 39503 + 39495 2 @@ -7257,7 +7753,7 @@ 1 2 - 3401 + 3400 2 @@ -7267,17 +7763,17 @@ 4 5 - 3052 + 3051 5 8 - 2482 + 2481 8 14 - 3485 + 3484 14 @@ -7287,22 +7783,22 @@ 18 28 - 3200 + 3199 28 34 - 3147 + 3146 34 41 - 3200 + 3199 41 66 - 2989 + 2988 66 @@ -7312,12 +7808,12 @@ 92 113 - 2989 + 2988 113 145 - 3031 + 3030 145 @@ -7332,15 +7828,15 @@ inmacroexpansion - 149995903 + 149997201 id - 24670868 + 24671160 inv - 3705270 + 3705370 @@ -7354,37 +7850,37 @@ 1 3 - 2209399 + 2209511 3 5 - 1474977 + 1474989 5 6 - 1620368 + 1620381 6 7 - 6582542 + 6582595 7 8 - 8718997 + 8719067 8 9 - 3557047 + 3557076 9 22 - 507534 + 507538 @@ -7400,32 +7896,32 @@ 1 2 - 531661 + 531711 2 3 - 743208 + 743238 3 4 - 481512 + 481516 4 7 - 275303 + 275305 7 8 - 282152 + 282155 8 9 - 330246 + 330249 9 @@ -7435,22 +7931,22 @@ 10 11 - 444650 + 444653 11 337 - 307798 + 307800 339 423 - 281755 + 281757 423 7616 - 23934 + 23935 @@ -7460,15 +7956,15 @@ affectedbymacroexpansion - 48735823 + 48736214 id - 7044739 + 7044796 inv - 3803120 + 3803150 @@ -7482,37 +7978,37 @@ 1 2 - 3846709 + 3846740 2 3 - 766304 + 766310 3 4 - 361841 + 361844 4 5 - 772736 + 772742 5 12 - 535160 + 535164 12 50 - 556267 + 556271 50 9900 - 205719 + 205721 @@ -7528,62 +8024,62 @@ 1 4 - 313248 + 313251 4 7 - 316607 + 316610 7 9 - 301087 + 301090 9 12 - 342938 + 342941 12 13 - 456004 + 456008 13 14 - 226099 + 226101 14 15 - 408038 + 408041 15 16 - 166429 + 166430 16 17 - 377677 + 377680 17 18 - 200636 + 200638 18 20 - 344255 + 344258 20 25 - 285393 + 285395 25 @@ -7598,19 +8094,19 @@ macroinvocations - 40337724 + 40354035 id - 40337724 + 40354035 macro_id - 182049 + 182487 location - 5912934 + 5919825 kind @@ -7628,7 +8124,7 @@ 1 2 - 40337724 + 40354035 @@ -7644,7 +8140,7 @@ 1 2 - 40337724 + 40354035 @@ -7660,7 +8156,7 @@ 1 2 - 40337724 + 40354035 @@ -7676,17 +8172,17 @@ 1 2 - 60773 + 61156 2 3 - 27555 + 27610 3 4 - 17970 + 17971 4 @@ -7710,13 +8206,13 @@ 33 - 180 - 13668 + 182 + 13723 - 181 + 185 72152 - 9802 + 9747 @@ -7732,12 +8228,12 @@ 1 2 - 77274 + 77656 2 3 - 30550 + 30605 3 @@ -7757,17 +8253,17 @@ 8 18 - 14158 + 14213 18 - 88 - 13668 + 90 + 13723 - 89 + 90 12187 - 7678 + 7569 @@ -7783,12 +8279,12 @@ 1 2 - 177475 + 177858 2 3 - 4574 + 4628 @@ -7804,17 +8300,17 @@ 1 2 - 5256183 + 5256857 2 4 - 422313 + 428527 4 72152 - 234437 + 234440 @@ -7830,12 +8326,12 @@ 1 2 - 5890770 + 5897661 2 37 - 22163 + 22164 @@ -7851,7 +8347,7 @@ 1 2 - 5912934 + 5919825 @@ -7865,13 +8361,13 @@ 12 - 1490 - 1491 + 1499 + 1500 54 - 739237 - 739238 + 739517 + 739518 54 @@ -7886,8 +8382,8 @@ 12 - 282 - 283 + 291 + 292 54 @@ -7907,13 +8403,13 @@ 12 - 1069 - 1070 + 1078 + 1079 54 - 107511 - 107512 + 107627 + 107628 54 @@ -7924,15 +8420,15 @@ macroparent - 33655149 + 33658296 id - 33655149 + 33658296 parent_id - 15926203 + 15929098 @@ -7946,7 +8442,7 @@ 1 2 - 33655149 + 33658296 @@ -7962,27 +8458,27 @@ 1 2 - 7806456 + 7809235 2 3 - 1595479 + 1595502 3 4 - 4702955 + 4703022 4 5 - 1295312 + 1295331 5 205 - 525999 + 526007 @@ -7992,15 +8488,15 @@ macrolocationbind - 6040022 + 6032778 id - 4221190 + 4216419 location - 2279306 + 2276207 @@ -8014,27 +8510,27 @@ 1 2 - 3294948 + 3291436 2 3 - 491264 + 490596 3 4 - 7896 + 7885 4 5 - 413891 + 413328 5 17 - 13189 + 13171 @@ -8050,27 +8546,27 @@ 1 2 - 1337013 + 1335195 2 3 - 482141 + 481486 3 4 - 7810 + 7799 4 5 - 428221 + 427639 5 522 - 24119 + 24087 @@ -8080,19 +8576,19 @@ macro_argument_unexpanded - 82495572 + 82481176 invocation - 26282637 + 26280397 argument_index - 697 + 696 text - 343270 + 343195 @@ -8106,22 +8602,22 @@ 1 2 - 9679766 + 9681115 2 3 - 9770635 + 9768522 3 4 - 5002265 + 5001183 4 67 - 1829971 + 1829575 @@ -8137,22 +8633,22 @@ 1 2 - 9862401 + 9863712 2 3 - 9788179 + 9786062 3 4 - 4845602 + 4844554 4 67 - 1786453 + 1786067 @@ -8177,7 +8673,7 @@ 646840 - 2488302 + 2488628 31 @@ -8220,57 +8716,57 @@ 1 2 - 39704 + 39695 2 3 - 62329 + 62315 3 4 - 21029 + 21025 4 5 - 34581 + 34574 5 6 - 39250 + 39241 6 9 - 30874 + 30867 9 15 - 28983 + 28977 15 26 - 25888 + 25883 26 57 - 27145 + 27139 57 517 - 25994 + 25988 518 486610 - 7488 + 7487 @@ -8286,17 +8782,17 @@ 1 2 - 243180 + 243127 2 3 - 89876 + 89856 3 9 - 10213 + 10211 @@ -8306,19 +8802,19 @@ macro_argument_expanded - 82495572 + 82481176 invocation - 26282637 + 26280397 argument_index - 697 + 696 text - 207933 + 207888 @@ -8332,22 +8828,22 @@ 1 2 - 9679766 + 9681115 2 3 - 9770635 + 9768522 3 4 - 5002265 + 5001183 4 67 - 1829971 + 1829575 @@ -8363,22 +8859,22 @@ 1 2 - 12638444 + 12639154 2 3 - 8428470 + 8426648 3 4 - 4225331 + 4224417 4 9 - 990391 + 990177 @@ -8403,7 +8899,7 @@ 646840 - 2488302 + 2488628 31 @@ -8420,7 +8916,7 @@ 1 2 - 602 + 601 2 @@ -8446,22 +8942,22 @@ 1 2 - 21832 + 21827 2 3 - 26860 + 26854 3 4 - 43496 + 43486 4 5 - 15907 + 15903 5 @@ -8471,32 +8967,32 @@ 6 7 - 18399 + 18395 7 10 - 18970 + 18966 10 19 - 18325 + 18321 19 51 - 15780 + 15776 51 252 - 15600 + 15597 252 - 1169205 - 9495 + 1169531 + 9493 @@ -8512,17 +9008,17 @@ 1 2 - 105086 + 105063 2 3 - 88914 + 88895 3 66 - 13931 + 13928 @@ -8532,15 +9028,15 @@ functions - 4049399 + 4049287 id - 4049399 + 4049287 name - 1693362 + 1693315 kind @@ -8558,7 +9054,7 @@ 1 2 - 4049399 + 4049287 @@ -8574,7 +9070,7 @@ 1 2 - 4049399 + 4049287 @@ -8590,17 +9086,17 @@ 1 2 - 1447229 + 1447190 2 4 - 138971 + 138968 4 3162 - 107160 + 107157 @@ -8616,7 +9112,7 @@ 1 2 - 1690493 + 1690446 2 @@ -8723,26 +9219,26 @@ builtin_functions - 30926 + 30920 id - 30926 + 30920 function_entry_point - 1141561 + 1141750 id - 1137813 + 1138003 entry_point - 1141561 + 1141750 @@ -8756,7 +9252,7 @@ 1 2 - 1134611 + 1134801 2 @@ -8777,7 +9273,7 @@ 1 2 - 1141561 + 1141750 @@ -8787,15 +9283,15 @@ function_return_type - 4066864 + 4066752 id - 4049399 + 4049287 return_type - 619261 + 619244 @@ -8809,12 +9305,12 @@ 1 2 - 4031934 + 4031823 2 3 - 17465 + 17464 @@ -8830,22 +9326,22 @@ 1 2 - 309880 + 309871 2 3 - 213697 + 213691 3 5 - 48028 + 48027 5 365 - 46531 + 46530 432 @@ -9130,44 +9626,44 @@ purefunctions - 131703 + 131626 id - 131703 + 131626 function_deleted - 88088 + 87973 id - 88088 + 87973 function_defaulted - 51682 + 51614 id - 51682 + 51614 function_prototyped - 4047902 + 4047790 id - 4047902 + 4047790 @@ -9247,15 +9743,15 @@ member_function_this_type - 674151 + 674132 id - 674151 + 674132 this_type - 176022 + 176018 @@ -9269,7 +9765,7 @@ 1 2 - 674151 + 674132 @@ -9285,17 +9781,17 @@ 1 2 - 47155 + 47154 2 3 - 36926 + 36925 3 4 - 32684 + 32683 4 @@ -9305,17 +9801,17 @@ 5 6 - 12849 + 12848 6 10 - 14471 + 14470 10 65 - 11851 + 11850 @@ -9325,27 +9821,27 @@ fun_decls - 4208955 + 4208839 id - 4202967 + 4202851 function - 4024823 + 4024712 type_id - 611277 + 611260 name - 1691865 + 1691818 location - 2813247 + 2813169 @@ -9359,7 +9855,7 @@ 1 2 - 4202967 + 4202851 @@ -9375,12 +9871,12 @@ 1 2 - 4196979 + 4196863 2 3 - 5988 + 5987 @@ -9396,7 +9892,7 @@ 1 2 - 4202967 + 4202851 @@ -9412,7 +9908,7 @@ 1 2 - 4202967 + 4202851 @@ -9428,12 +9924,12 @@ 1 2 - 3861275 + 3861169 2 5 - 163547 + 163543 @@ -9449,12 +9945,12 @@ 1 2 - 4006360 + 4006250 2 3 - 18463 + 18462 @@ -9470,7 +9966,7 @@ 1 2 - 4024823 + 4024712 @@ -9486,12 +9982,12 @@ 1 2 - 3881734 + 3881627 2 4 - 143088 + 143084 @@ -9507,22 +10003,22 @@ 1 2 - 295159 + 295151 2 3 - 220558 + 220552 3 5 - 48403 + 48401 5 364 - 45908 + 45906 364 @@ -9543,22 +10039,22 @@ 1 2 - 305264 + 305255 2 3 - 211826 + 211820 3 5 - 48028 + 48027 5 1163 - 45908 + 45906 1483 @@ -9579,17 +10075,17 @@ 1 2 - 491516 + 491503 2 3 - 52894 + 52892 3 7 - 50149 + 50148 7 @@ -9610,22 +10106,22 @@ 1 2 - 454964 + 454952 2 3 - 69485 + 69484 3 6 - 56012 + 56011 6 4756 - 30813 + 30812 @@ -9641,22 +10137,22 @@ 1 2 - 1331336 + 1331300 2 3 - 194485 + 194480 3 11 - 129490 + 129487 11 3169 - 36551 + 36550 @@ -9672,17 +10168,17 @@ 1 2 - 1446730 + 1446691 2 4 - 139470 + 139467 4 3162 - 105663 + 105660 @@ -9698,12 +10194,12 @@ 1 2 - 1602045 + 1602001 2 1596 - 89820 + 89817 @@ -9719,17 +10215,17 @@ 1 2 - 1367264 + 1367227 2 3 - 208333 + 208327 3 1592 - 116267 + 116264 @@ -9745,17 +10241,17 @@ 1 2 - 2420283 + 2420216 2 3 - 251496 + 251489 3 211 - 141466 + 141463 @@ -9771,17 +10267,17 @@ 1 2 - 2438995 + 2438928 2 3 - 233283 + 233276 3 211 - 140967 + 140964 @@ -9797,12 +10293,12 @@ 1 2 - 2698851 + 2698776 2 211 - 114396 + 114393 @@ -9818,12 +10314,12 @@ 1 2 - 2774075 + 2773999 2 8 - 39171 + 39170 @@ -9833,22 +10329,22 @@ fun_def - 1422279 + 1422240 id - 1422279 + 1422240 fun_specialized - 7936 + 7922 id - 7936 + 7922 @@ -9866,11 +10362,11 @@ fun_decl_specifiers - 4279688 + 4279570 id - 1748252 + 1748204 name @@ -9888,22 +10384,22 @@ 1 2 - 362899 + 362889 2 3 - 262225 + 262218 3 4 - 1100174 + 1100143 4 5 - 22954 + 22953 @@ -10100,26 +10596,26 @@ fun_decl_empty_throws - 420911 + 421168 fun_decl - 420911 + 421168 fun_decl_noexcept - 141830 + 141820 fun_decl - 141830 + 141820 constant - 141353 + 141343 @@ -10133,7 +10629,7 @@ 1 2 - 141830 + 141820 @@ -10149,7 +10645,7 @@ 1 2 - 140910 + 140900 2 @@ -10164,26 +10660,26 @@ fun_decl_empty_noexcept - 1163672 + 1163640 fun_decl - 1163672 + 1163640 fun_decl_typedef_type - 2761 + 2759 fun_decl - 2761 + 2759 typedeftype_id - 124 + 123 @@ -10197,7 +10693,7 @@ 1 2 - 2761 + 2759 @@ -10213,57 +10709,57 @@ 1 2 - 40 + 39 2 3 - 12 + 11 3 4 - 12 + 11 5 13 - 8 + 7 16 17 - 12 + 11 17 18 - 4 + 3 21 22 - 8 + 7 25 43 - 8 + 7 46 55 - 8 + 7 89 128 - 8 + 7 158 159 - 4 + 3 @@ -10273,19 +10769,19 @@ fun_requires - 29111 + 29073 id - 10112 + 10099 kind - 43 + 42 constraint - 28875 + 28837 @@ -10299,7 +10795,7 @@ 1 2 - 10048 + 10035 2 @@ -10320,7 +10816,7 @@ 1 2 - 7272 + 7263 2 @@ -10330,7 +10826,7 @@ 3 6 - 860 + 859 6 @@ -10340,7 +10836,7 @@ 13 14 - 1140 + 1138 19 @@ -10403,7 +10899,7 @@ 1 2 - 28638 + 28600 2 @@ -10424,7 +10920,7 @@ 1 2 - 28875 + 28837 @@ -10434,19 +10930,19 @@ param_decl_bind - 7310375 + 7310174 id - 7310375 + 7310174 index - 7984 + 7983 fun_decl - 3531684 + 3531587 @@ -10460,7 +10956,7 @@ 1 2 - 7310375 + 7310174 @@ -10476,7 +10972,7 @@ 1 2 - 7310375 + 7310174 @@ -10492,12 +10988,12 @@ 2 3 - 3992 + 3991 6 7 - 1996 + 1995 16 @@ -10533,12 +11029,12 @@ 2 3 - 3992 + 3991 6 7 - 1996 + 1995 16 @@ -10574,27 +11070,27 @@ 1 2 - 1508981 + 1508939 2 3 - 976296 + 976270 3 4 - 602045 + 602029 4 5 - 290668 + 290660 5 65 - 153692 + 153688 @@ -10610,27 +11106,27 @@ 1 2 - 1508981 + 1508939 2 3 - 976296 + 976270 3 4 - 602045 + 602029 4 5 - 290668 + 290660 5 65 - 153692 + 153688 @@ -10640,27 +11136,27 @@ var_decls - 9389965 + 9389956 id - 9383104 + 9383095 variable - 9034676 + 9034677 type_id - 1456461 + 1456421 name - 852544 + 852521 location - 6274572 + 6274400 @@ -10674,7 +11170,7 @@ 1 2 - 9383104 + 9383095 @@ -10690,7 +11186,7 @@ 1 2 - 9376243 + 9376234 2 @@ -10711,7 +11207,7 @@ 1 2 - 9383104 + 9383095 @@ -10727,7 +11223,7 @@ 1 2 - 9383104 + 9383095 @@ -10743,12 +11239,12 @@ 1 2 - 8703713 + 8703723 2 5 - 330962 + 330953 @@ -10764,12 +11260,12 @@ 1 2 - 8981158 + 8981160 2 3 - 53517 + 53516 @@ -10785,12 +11281,12 @@ 1 2 - 8929262 + 8929265 2 4 - 105414 + 105411 @@ -10806,12 +11302,12 @@ 1 2 - 8783054 + 8783062 2 4 - 251621 + 251614 @@ -10827,27 +11323,27 @@ 1 2 - 849924 + 849901 2 3 - 284056 + 284048 3 5 - 127370 + 127366 5 11 - 113148 + 113145 11 2944 - 81961 + 81958 @@ -10863,27 +11359,27 @@ 1 2 - 870758 + 870734 2 3 - 269086 + 269079 3 5 - 122754 + 122751 5 11 - 113023 + 113020 11 2860 - 80838 + 80836 @@ -10899,17 +11395,17 @@ 1 2 - 1119510 + 1119479 2 3 - 192614 + 192609 3 7 - 115269 + 115266 7 @@ -10930,22 +11426,22 @@ 1 2 - 985403 + 985376 2 3 - 219061 + 219055 3 6 - 133607 + 133604 6 95 - 109281 + 109278 97 @@ -10966,32 +11462,32 @@ 1 2 - 465942 + 465930 2 3 - 165793 + 165788 3 4 - 59630 + 59629 4 7 - 65868 + 65866 7 25 - 64121 + 64119 25 27139 - 31187 + 31186 @@ -11007,27 +11503,27 @@ 1 2 - 478916 + 478903 2 3 - 165044 + 165040 3 4 - 54640 + 54639 4 8 - 71606 + 71604 8 45 - 64246 + 64244 45 @@ -11048,17 +11544,17 @@ 1 2 - 654690 + 654672 2 3 - 110778 + 110775 3 11 - 65493 + 65492 11 @@ -11079,27 +11575,27 @@ 1 2 - 493762 + 493748 2 3 - 183258 + 183253 3 4 - 51646 + 51645 4 8 - 64994 + 64993 8 22619 - 58882 + 58880 @@ -11115,17 +11611,17 @@ 1 2 - 5774822 + 5774663 2 21 - 472305 + 472292 21 2943 - 27445 + 27444 @@ -11141,12 +11637,12 @@ 1 2 - 5855660 + 5855499 2 2935 - 418911 + 418900 @@ -11162,12 +11658,12 @@ 1 2 - 5976045 + 5975880 2 2555 - 298527 + 298519 @@ -11183,12 +11679,12 @@ 1 2 - 6262222 + 6262050 2 5 - 12350 + 12349 @@ -11198,37 +11694,37 @@ var_def - 3766964 + 3766860 id - 3766964 + 3766860 var_specialized - 645 + 644 id - 645 + 644 var_decl_specifiers - 489894 + 489881 id - 489894 + 489881 name - 499 + 498 @@ -11242,7 +11738,7 @@ 1 2 - 489894 + 489881 @@ -11283,18 +11779,18 @@ is_structured_binding - 946 + 945 id - 946 + 945 var_requires - 387 + 386 id @@ -11302,7 +11798,7 @@ constraint - 387 + 386 @@ -11342,7 +11838,7 @@ 1 2 - 387 + 386 @@ -11352,19 +11848,19 @@ type_decls - 1633482 + 1633437 id - 1633482 + 1633437 type_id - 1614520 + 1614475 location - 1547404 + 1547361 @@ -11378,7 +11874,7 @@ 1 2 - 1633482 + 1633437 @@ -11394,7 +11890,7 @@ 1 2 - 1633482 + 1633437 @@ -11410,12 +11906,12 @@ 1 2 - 1598177 + 1598133 2 10 - 16342 + 16341 @@ -11431,7 +11927,7 @@ 1 2 - 1598302 + 1598258 2 @@ -11452,7 +11948,7 @@ 1 2 - 1525323 + 1525281 2 @@ -11473,12 +11969,12 @@ 1 2 - 1525448 + 1525406 2 64 - 21956 + 21955 @@ -11488,37 +11984,37 @@ type_def - 1095558 + 1095528 id - 1095558 + 1095528 type_decl_top - 673959 + 675275 type_decl - 673959 + 675275 type_requires - 7681 + 7671 id - 2044 + 2041 constraint - 7659 + 7649 @@ -11532,7 +12028,7 @@ 1 2 - 1011 + 1009 2 @@ -11542,12 +12038,12 @@ 5 6 - 602 + 601 6 13 - 172 + 171 13 @@ -11568,7 +12064,7 @@ 1 2 - 7638 + 7628 2 @@ -11583,23 +12079,23 @@ namespace_decls - 407775 + 407917 id - 407775 + 407917 namespace_id - 1844 + 1840 location - 407775 + 407917 bodylocation - 407775 + 407917 @@ -11613,7 +12109,7 @@ 1 2 - 407775 + 407917 @@ -11629,7 +12125,7 @@ 1 2 - 407775 + 407917 @@ -11645,7 +12141,7 @@ 1 2 - 407775 + 407917 @@ -11666,7 +12162,7 @@ 2 3 - 203 + 202 3 @@ -11681,36 +12177,36 @@ 15 34 - 146 + 145 35 62 - 154 + 145 63 - 87 - 146 + 81 + 145 - 90 + 86 144 - 154 + 162 - 146 + 151 264 - 146 + 145 270 1870 - 146 + 145 2205 - 12461 + 12488 32 @@ -11732,7 +12228,7 @@ 2 3 - 203 + 202 3 @@ -11747,36 +12243,36 @@ 15 34 - 146 + 145 35 62 - 154 + 145 63 - 87 - 146 + 81 + 145 - 90 + 86 144 - 154 + 162 - 146 + 151 264 - 146 + 145 270 1870 - 146 + 145 2205 - 12461 + 12488 32 @@ -11798,7 +12294,7 @@ 2 3 - 203 + 202 3 @@ -11813,36 +12309,36 @@ 15 34 - 146 + 145 35 62 - 154 + 145 63 - 87 - 146 + 81 + 145 - 90 + 86 144 - 154 + 162 - 146 + 151 264 - 146 + 145 270 1870 - 146 + 145 2205 - 12461 + 12488 32 @@ -11859,7 +12355,7 @@ 1 2 - 407775 + 407917 @@ -11875,7 +12371,7 @@ 1 2 - 407775 + 407917 @@ -11891,7 +12387,7 @@ 1 2 - 407775 + 407917 @@ -11907,7 +12403,7 @@ 1 2 - 407775 + 407917 @@ -11923,7 +12419,7 @@ 1 2 - 407775 + 407917 @@ -11939,7 +12435,7 @@ 1 2 - 407775 + 407917 @@ -11949,19 +12445,19 @@ usings - 271973 + 272030 id - 271973 + 272030 element_id - 58938 + 59042 location - 26849 + 26844 kind @@ -11979,7 +12475,7 @@ 1 2 - 271973 + 272030 @@ -11995,7 +12491,7 @@ 1 2 - 271973 + 272030 @@ -12011,7 +12507,7 @@ 1 2 - 271973 + 272030 @@ -12027,12 +12523,12 @@ 1 2 - 51206 + 51312 2 5 - 5386 + 5385 5 @@ -12053,12 +12549,12 @@ 1 2 - 51206 + 51312 2 5 - 5386 + 5385 5 @@ -12079,7 +12575,7 @@ 1 2 - 58938 + 59042 @@ -12095,17 +12591,17 @@ 1 2 - 21177 + 21173 2 4 - 2292 + 2302 4 132 - 1954 + 1943 145 @@ -12126,17 +12622,17 @@ 1 2 - 21177 + 21173 2 4 - 2292 + 2302 4 132 - 1954 + 1943 145 @@ -12157,7 +12653,7 @@ 1 2 - 26849 + 26844 @@ -12176,8 +12672,8 @@ 10 - 25356 - 25357 + 25367 + 25368 10 @@ -12197,8 +12693,8 @@ 10 - 5366 - 5367 + 5377 + 5378 10 @@ -12230,15 +12726,15 @@ using_container - 580049 + 580040 parent - 21874 + 21891 child - 271973 + 272030 @@ -12252,12 +12748,12 @@ 1 2 - 10372 + 10370 2 3 - 1616 + 1615 3 @@ -12267,7 +12763,7 @@ 6 7 - 2270 + 2291 7 @@ -12282,7 +12778,7 @@ 145 146 - 2619 + 2618 146 @@ -12303,27 +12799,27 @@ 1 2 - 96488 + 96583 2 3 - 120285 + 120259 3 4 - 20100 + 20096 4 5 - 26712 + 26706 5 65 - 8386 + 8384 @@ -12333,27 +12829,27 @@ static_asserts - 173262 + 172982 id - 173262 + 172982 condition - 173262 + 172982 message - 38764 + 38704 location - 22647 + 22616 enclosing - 6807 + 6819 @@ -12367,7 +12863,7 @@ 1 2 - 173262 + 172982 @@ -12383,7 +12879,7 @@ 1 2 - 173262 + 172982 @@ -12399,7 +12895,7 @@ 1 2 - 173262 + 172982 @@ -12415,7 +12911,7 @@ 1 2 - 173262 + 172982 @@ -12431,7 +12927,7 @@ 1 2 - 173262 + 172982 @@ -12447,7 +12943,7 @@ 1 2 - 173262 + 172982 @@ -12463,7 +12959,7 @@ 1 2 - 173262 + 172982 @@ -12479,7 +12975,7 @@ 1 2 - 173262 + 172982 @@ -12495,32 +12991,32 @@ 1 2 - 28504 + 28454 2 3 - 641 + 640 3 4 - 3623 + 3624 4 12 - 2087 + 2084 12 17 - 3135 + 3130 17 513 - 771 + 770 @@ -12536,32 +13032,32 @@ 1 2 - 28504 + 28454 2 3 - 641 + 640 3 4 - 3623 + 3624 4 12 - 2087 + 2084 12 17 - 3135 + 3130 17 513 - 771 + 770 @@ -12577,12 +13073,12 @@ 1 2 - 35921 + 35866 2 33 - 2843 + 2838 @@ -12598,27 +13094,27 @@ 1 2 - 30316 + 30262 2 3 - 349 + 348 3 4 - 3387 + 3389 4 12 - 1908 + 1905 12 43 - 2802 + 2797 @@ -12634,17 +13130,17 @@ 1 2 - 4281 + 4273 2 3 - 3728 + 3722 3 4 - 1738 + 1743 4 @@ -12654,17 +13150,17 @@ 5 6 - 4735 + 4727 6 13 - 430 + 429 14 15 - 2648 + 2643 16 @@ -12674,12 +13170,12 @@ 17 18 - 4394 + 4386 19 52 - 503 + 502 @@ -12695,17 +13191,17 @@ 1 2 - 4281 + 4273 2 3 - 3728 + 3722 3 4 - 1738 + 1743 4 @@ -12715,17 +13211,17 @@ 5 6 - 4735 + 4727 6 13 - 430 + 429 14 15 - 2648 + 2643 16 @@ -12735,12 +13231,12 @@ 17 18 - 4394 + 4386 19 52 - 503 + 502 @@ -12756,17 +13252,17 @@ 1 2 - 6953 + 6949 2 3 - 7676 + 7663 3 4 - 7782 + 7768 4 @@ -12787,32 +13283,32 @@ 1 2 - 5068 + 5060 2 3 - 8098 + 8084 3 4 - 1478 + 1483 4 5 - 4760 + 4751 5 13 - 495 + 494 13 14 - 2648 + 2643 16 @@ -12833,17 +13329,17 @@ 1 2 - 5702 + 5716 2 3 - 528 + 527 3 228 - 528 + 527 229 @@ -12864,17 +13360,17 @@ 1 2 - 5702 + 5716 2 3 - 528 + 527 3 228 - 528 + 527 229 @@ -12895,17 +13391,17 @@ 1 2 - 5856 + 5870 2 3 - 519 + 518 3 2936 - 430 + 429 @@ -12921,17 +13417,17 @@ 1 2 - 5840 + 5854 2 3 - 536 + 535 3 1929 - 430 + 429 @@ -12941,23 +13437,23 @@ params - 7060750 + 7060555 id - 7019832 + 7019638 function - 3404938 + 3404844 index - 7984 + 7983 type_id - 1220308 + 1220275 @@ -12971,7 +13467,7 @@ 1 2 - 7019832 + 7019638 @@ -12987,7 +13483,7 @@ 1 2 - 7019832 + 7019638 @@ -13003,12 +13499,12 @@ 1 2 - 6978913 + 6978721 2 3 - 40918 + 40917 @@ -13024,27 +13520,27 @@ 1 2 - 1473177 + 1473137 2 3 - 926272 + 926246 3 4 - 578717 + 578701 4 5 - 280813 + 280805 5 65 - 145958 + 145953 @@ -13060,27 +13556,27 @@ 1 2 - 1473177 + 1473137 2 3 - 926272 + 926246 3 4 - 578717 + 578701 4 5 - 280813 + 280805 5 65 - 145958 + 145953 @@ -13096,22 +13592,22 @@ 1 2 - 1781685 + 1781636 2 3 - 1030688 + 1030659 3 4 - 437499 + 437487 4 11 - 155064 + 155060 @@ -13127,12 +13623,12 @@ 2 3 - 3992 + 3991 6 7 - 1996 + 1995 14 @@ -13168,12 +13664,12 @@ 2 3 - 3992 + 3991 6 7 - 1996 + 1995 14 @@ -13209,12 +13705,12 @@ 1 2 - 3992 + 3991 2 3 - 1996 + 1995 4 @@ -13250,27 +13746,27 @@ 1 2 - 737524 + 737504 2 3 - 240394 + 240387 3 5 - 93188 + 93186 5 13 - 93812 + 93809 13 2574 - 55389 + 55387 @@ -13286,27 +13782,27 @@ 1 2 - 819610 + 819587 2 3 - 179640 + 179635 3 6 - 106162 + 106159 6 27 - 92190 + 92188 27 2562 - 22704 + 22703 @@ -13322,17 +13818,17 @@ 1 2 - 995134 + 995106 2 3 - 166791 + 166786 3 65 - 58383 + 58381 @@ -13342,15 +13838,15 @@ overrides - 159778 + 159497 new - 151069 + 150804 old - 17993 + 17961 @@ -13364,12 +13860,12 @@ 1 2 - 142369 + 142119 2 4 - 8700 + 8684 @@ -13385,32 +13881,32 @@ 1 2 - 9845 + 9828 2 3 - 2437 + 2432 3 4 - 1632 + 1629 4 6 - 1486 + 1483 6 18 - 1356 + 1354 18 230 - 1234 + 1232 @@ -13420,19 +13916,19 @@ membervariables - 1500125 + 1501943 id - 1497674 + 1499493 type_id - 456185 + 457553 name - 642156 + 642219 @@ -13446,7 +13942,7 @@ 1 2 - 1495333 + 1497151 2 @@ -13467,7 +13963,7 @@ 1 2 - 1497674 + 1499493 @@ -13483,12 +13979,12 @@ 1 2 - 338449 + 339380 2 3 - 72155 + 72592 3 @@ -13498,7 +13994,7 @@ 10 4445 - 10128 + 10129 @@ -13514,22 +14010,22 @@ 1 2 - 356039 + 356970 2 3 - 64313 + 64750 3 - 49 - 34253 + 57 + 34362 - 49 + 60 2186 - 1579 + 1470 @@ -13545,12 +14041,12 @@ 1 2 - 421496 + 421557 2 3 - 122419 + 122420 3 @@ -13559,7 +14055,7 @@ 5 - 656 + 664 40189 @@ -13576,17 +14072,17 @@ 1 2 - 524420 + 524482 2 3 - 73190 + 73191 3 - 660 - 44545 + 668 + 44546 @@ -13596,11 +14092,11 @@ globalvariables - 488148 + 488384 id - 488148 + 488384 type_id @@ -13608,7 +14104,7 @@ name - 112524 + 112521 @@ -13622,7 +14118,7 @@ 1 2 - 488148 + 488384 @@ -13638,7 +14134,7 @@ 1 2 - 488148 + 488384 @@ -13654,7 +14150,7 @@ 1 2 - 6986 + 6985 2 @@ -13679,7 +14175,7 @@ 152 2216 - 499 + 498 @@ -13720,7 +14216,7 @@ 125 228 - 499 + 498 @@ -13736,7 +14232,7 @@ 1 2 - 95309 + 95306 2 @@ -13762,12 +14258,12 @@ 1 2 - 96931 + 96928 2 3 - 15344 + 15343 3 @@ -13782,19 +14278,19 @@ localvariables - 726300 + 725806 id - 726300 + 725806 type_id - 53440 + 53403 name - 101634 + 101564 @@ -13808,7 +14304,7 @@ 1 2 - 726300 + 725806 @@ -13824,7 +14320,7 @@ 1 2 - 726300 + 725806 @@ -13840,37 +14336,37 @@ 1 2 - 28865 + 28845 2 3 - 7843 + 7838 3 4 - 4029 + 4027 4 6 - 4065 + 4063 6 12 - 4133 + 4131 12 162 - 4009 + 4007 162 19347 - 492 + 491 @@ -13886,22 +14382,22 @@ 1 2 - 38369 + 38343 2 3 - 6707 + 6702 3 5 - 4478 + 4474 5 3509 - 3885 + 3883 @@ -13917,32 +14413,32 @@ 1 2 - 62540 + 62497 2 3 - 16039 + 16028 3 4 - 6530 + 6526 4 8 - 8147 + 8142 8 134 - 7623 + 7618 134 7549 - 752 + 751 @@ -13958,22 +14454,22 @@ 1 2 - 84586 + 84528 2 3 - 8411 + 8406 3 15 - 7683 + 7678 15 1509 - 952 + 951 @@ -13983,11 +14479,11 @@ autoderivation - 229166 + 229160 var - 229166 + 229160 derivation_type @@ -14005,7 +14501,7 @@ 1 2 - 229166 + 229160 @@ -14051,15 +14547,15 @@ orphaned_variables - 44324 + 44320 var - 44324 + 44320 function - 41053 + 41050 @@ -14073,7 +14569,7 @@ 1 2 - 44324 + 44320 @@ -14089,7 +14585,7 @@ 1 2 - 40201 + 40198 2 @@ -14104,19 +14600,19 @@ enumconstants - 347816 + 347930 id - 347816 + 347930 parent - 41550 + 41551 index - 13940 + 13941 type_id @@ -14124,11 +14620,11 @@ name - 347435 + 347549 location - 320424 + 320538 @@ -14142,7 +14638,7 @@ 1 2 - 347816 + 347930 @@ -14158,7 +14654,7 @@ 1 2 - 347816 + 347930 @@ -14174,7 +14670,7 @@ 1 2 - 347816 + 347930 @@ -14190,7 +14686,7 @@ 1 2 - 347816 + 347930 @@ -14206,7 +14702,7 @@ 1 2 - 347816 + 347930 @@ -14354,7 +14850,7 @@ 1 2 - 41550 + 41551 @@ -14471,12 +14967,12 @@ 8 11 - 3811 + 3812 11 17 - 3212 + 3213 17 @@ -14614,7 +15110,7 @@ 1 2 - 13940 + 13941 @@ -14740,8 +15236,8 @@ 12 - 6387 - 6388 + 6389 + 6390 54 @@ -14788,8 +15284,8 @@ 12 - 6380 - 6381 + 6382 + 6383 54 @@ -14804,8 +15300,8 @@ 12 - 5884 - 5885 + 5886 + 5887 54 @@ -14822,7 +15318,7 @@ 1 2 - 347054 + 347167 2 @@ -14843,7 +15339,7 @@ 1 2 - 347054 + 347167 2 @@ -14864,7 +15360,7 @@ 1 2 - 347435 + 347549 @@ -14880,7 +15376,7 @@ 1 2 - 347435 + 347549 @@ -14896,7 +15392,7 @@ 1 2 - 347054 + 347167 2 @@ -14917,7 +15413,7 @@ 1 2 - 319389 + 319503 2 @@ -14938,7 +15434,7 @@ 1 2 - 320424 + 320538 @@ -14954,7 +15450,7 @@ 1 2 - 319389 + 319503 2 @@ -14975,7 +15471,7 @@ 1 2 - 320424 + 320538 @@ -14991,7 +15487,7 @@ 1 2 - 319389 + 319503 2 @@ -15428,7 +15924,7 @@ 1 2 - 499 + 498 2 @@ -15683,15 +16179,15 @@ derivedtypes - 3030936 + 3030853 id - 3030936 + 3030853 name - 1460578 + 1460537 kind @@ -15699,7 +16195,7 @@ type_id - 1946730 + 1946677 @@ -15713,7 +16209,7 @@ 1 2 - 3030936 + 3030853 @@ -15729,7 +16225,7 @@ 1 2 - 3030936 + 3030853 @@ -15745,7 +16241,7 @@ 1 2 - 3030936 + 3030853 @@ -15761,12 +16257,12 @@ 1 2 - 1344061 + 1344024 2 28 - 109905 + 109902 29 @@ -15787,7 +16283,7 @@ 1 2 - 1460578 + 1460537 @@ -15803,12 +16299,12 @@ 1 2 - 1344185 + 1344148 2 28 - 109780 + 109777 29 @@ -15952,22 +16448,22 @@ 1 2 - 1317489 + 1317453 2 3 - 375873 + 375862 3 4 - 123253 + 123250 4 137 - 130114 + 130111 @@ -15983,22 +16479,22 @@ 1 2 - 1318986 + 1318950 2 3 - 375873 + 375862 3 4 - 121756 + 121753 4 137 - 130114 + 130111 @@ -16014,22 +16510,22 @@ 1 2 - 1319360 + 1319324 2 3 - 376496 + 376486 3 4 - 123502 + 123499 4 6 - 127370 + 127366 @@ -16039,11 +16535,11 @@ pointerishsize - 2247379 + 2247317 id - 2247379 + 2247317 size @@ -16065,7 +16561,7 @@ 1 2 - 2247379 + 2247317 @@ -16081,7 +16577,7 @@ 1 2 - 2247379 + 2247317 @@ -16165,15 +16661,15 @@ arraysizes - 80588 + 80586 id - 80588 + 80586 num_elements - 17839 + 17838 bytesize @@ -16195,7 +16691,7 @@ 1 2 - 80588 + 80586 @@ -16211,7 +16707,7 @@ 1 2 - 80588 + 80586 @@ -16227,7 +16723,7 @@ 1 2 - 80588 + 80586 @@ -16248,7 +16744,7 @@ 2 3 - 10853 + 10852 3 @@ -16258,12 +16754,12 @@ 4 5 - 3493 + 3492 5 9 - 1497 + 1496 9 @@ -16294,12 +16790,12 @@ 2 3 - 3992 + 3991 3 5 - 998 + 997 5 @@ -16325,7 +16821,7 @@ 2 3 - 3992 + 3991 3 @@ -16361,7 +16857,7 @@ 3 4 - 499 + 498 4 @@ -16371,7 +16867,7 @@ 5 7 - 1497 + 1496 7 @@ -16381,7 +16877,7 @@ 24 45 - 499 + 498 @@ -16428,7 +16924,7 @@ 1 2 - 14845 + 14844 2 @@ -16604,15 +17100,15 @@ typedefbase - 1762360 + 1762011 id - 1762360 + 1762011 type_id - 838037 + 837877 @@ -16626,7 +17122,7 @@ 1 2 - 1762360 + 1762011 @@ -16642,22 +17138,22 @@ 1 2 - 662552 + 662420 2 3 - 80940 + 80933 3 6 - 64177 + 64163 6 4526 - 30367 + 30360 @@ -16667,15 +17163,15 @@ decltypes - 814475 + 814485 id - 27563 + 27564 expr - 814475 + 814485 kind @@ -16757,7 +17253,7 @@ 1 2 - 27563 + 27564 @@ -16773,7 +17269,7 @@ 1 2 - 27563 + 27564 @@ -16789,7 +17285,7 @@ 1 2 - 27563 + 27564 @@ -16805,7 +17301,7 @@ 1 2 - 814475 + 814485 @@ -16821,7 +17317,7 @@ 1 2 - 814475 + 814485 @@ -16837,7 +17333,7 @@ 1 2 - 814475 + 814485 @@ -16853,7 +17349,7 @@ 1 2 - 814475 + 814485 @@ -17115,23 +17611,23 @@ type_operators - 7961 + 7950 id - 7961 + 7950 arg_type - 7186 + 7177 kind - 86 + 85 base_type - 5250 + 5243 @@ -17145,7 +17641,7 @@ 1 2 - 7961 + 7950 @@ -17161,7 +17657,7 @@ 1 2 - 7961 + 7950 @@ -17177,7 +17673,7 @@ 1 2 - 7961 + 7950 @@ -17193,12 +17689,12 @@ 1 2 - 6411 + 6403 2 3 - 774 + 773 @@ -17214,12 +17710,12 @@ 1 2 - 6411 + 6403 2 3 - 774 + 773 @@ -17235,7 +17731,7 @@ 1 2 - 7164 + 7155 2 @@ -17349,17 +17845,17 @@ 1 2 - 3636 + 3631 2 3 - 903 + 902 3 4 - 344 + 343 4 @@ -17380,12 +17876,12 @@ 1 2 - 3786 + 3781 2 3 - 989 + 988 3 @@ -17411,12 +17907,12 @@ 1 2 - 4088 + 4082 2 3 - 1140 + 1138 3 @@ -17431,15 +17927,15 @@ usertypes - 4151710 + 4150876 id - 4151710 + 4150876 name - 918534 + 918367 kind @@ -17457,7 +17953,7 @@ 1 2 - 4151710 + 4150876 @@ -17473,7 +17969,7 @@ 1 2 - 4151710 + 4150876 @@ -17489,22 +17985,22 @@ 1 2 - 654261 + 654151 2 3 - 158669 + 158635 3 8 - 70567 + 70552 8 - 32669 - 35035 + 32672 + 35028 @@ -17520,12 +18016,12 @@ 1 2 - 866789 + 866633 2 10 - 51745 + 51734 @@ -17589,13 +18085,13 @@ 10 - 92771 - 92772 + 92774 + 92775 10 - 166851 - 166852 + 166854 + 166855 10 @@ -17665,8 +18161,8 @@ 10 - 57608 - 57609 + 57611 + 57612 10 @@ -17677,11 +18173,11 @@ usertypesize - 1363817 + 1363554 id - 1363817 + 1363554 size @@ -17703,7 +18199,7 @@ 1 2 - 1363817 + 1363554 @@ -17719,7 +18215,7 @@ 1 2 - 1363817 + 1363554 @@ -17779,7 +18275,7 @@ 1839 - 99774 + 99777 52 @@ -17796,7 +18292,7 @@ 1 2 - 1204 + 1203 2 @@ -17855,8 +18351,8 @@ 10 - 114969 - 114970 + 114972 + 114973 10 @@ -17913,26 +18409,26 @@ usertype_final - 11477 + 11476 id - 11477 + 11476 usertype_uuid - 47716 + 47827 id - 47716 + 47827 uuid - 47237 + 47283 @@ -17946,7 +18442,7 @@ 1 2 - 47716 + 47827 @@ -17962,12 +18458,12 @@ 1 2 - 46758 + 46740 2 3 - 479 + 543 @@ -17977,11 +18473,11 @@ usertype_alias_kind - 1762360 + 1762011 id - 1762360 + 1762011 alias_kind @@ -17999,7 +18495,7 @@ 1 2 - 1762360 + 1762011 @@ -18018,8 +18514,8 @@ 10 - 129944 - 129945 + 129947 + 129948 10 @@ -18030,26 +18526,26 @@ nontype_template_parameters - 766287 + 766231 id - 766287 + 766231 type_template_type_constraint - 27153 + 27118 id - 13383 + 13365 constraint - 26013 + 25979 @@ -18063,22 +18559,22 @@ 1 2 - 10220 + 10206 2 3 - 903 + 902 3 5 - 1032 + 1031 5 14 - 1118 + 1117 14 @@ -18099,12 +18595,12 @@ 1 2 - 24873 + 24840 2 3 - 1140 + 1138 @@ -18114,15 +18610,15 @@ mangled_name - 7852416 + 7853946 id - 7852416 + 7853946 mangled_name - 6364268 + 6364342 is_complete @@ -18140,7 +18636,7 @@ 1 2 - 7852416 + 7853946 @@ -18156,7 +18652,7 @@ 1 2 - 7852416 + 7853946 @@ -18172,12 +18668,12 @@ 1 2 - 6036174 + 6036258 2 1120 - 328093 + 328084 @@ -18193,7 +18689,7 @@ 1 2 - 6364268 + 6364342 @@ -18212,8 +18708,8 @@ 124 - 62939 - 62940 + 62953 + 62954 124 @@ -18233,8 +18729,8 @@ 124 - 51010 - 51011 + 51012 + 51013 124 @@ -18245,59 +18741,59 @@ is_pod_class - 593760 + 593785 id - 593760 + 593785 is_standard_layout_class - 1124418 + 1124207 id - 1124418 + 1124207 is_complete - 1346294 + 1346034 id - 1346294 + 1346034 is_class_template - 232173 + 232123 id - 232173 + 232123 class_instantiation - 1126076 + 1125875 to - 1123034 + 1122823 from - 71803 + 71788 @@ -18311,12 +18807,12 @@ 1 2 - 1120901 + 1120680 2 8 - 2133 + 2143 @@ -18332,47 +18828,47 @@ 1 2 - 20501 + 20497 2 3 - 12886 + 12883 3 4 - 7108 + 7107 4 5 - 4658 + 4657 5 7 - 6073 + 6061 7 10 - 5714 + 5723 10 17 - 5904 + 5913 17 51 - 5397 + 5385 51 4223 - 3559 + 3558 @@ -18382,11 +18878,11 @@ class_template_argument - 2898672 + 2898088 type_id - 1367112 + 1366848 index @@ -18394,7 +18890,7 @@ arg_type - 822099 + 821942 @@ -18408,27 +18904,27 @@ 1 2 - 579362 + 579258 2 3 - 410289 + 410210 3 4 - 251049 + 250994 4 7 - 103100 + 103078 7 113 - 23311 + 23306 @@ -18444,22 +18940,22 @@ 1 2 - 607902 + 607792 2 3 - 424294 + 424213 3 4 - 251883 + 251829 4 113 - 83031 + 83013 @@ -18504,7 +19000,7 @@ 11968 - 129429 + 129432 42 @@ -18550,7 +19046,7 @@ 10413 - 44533 + 44535 31 @@ -18567,27 +19063,27 @@ 1 2 - 513716 + 513626 2 3 - 167647 + 167611 3 5 - 75088 + 75072 5 47 - 61737 + 61724 47 - 12618 - 3908 + 12619 + 3907 @@ -18603,17 +19099,17 @@ 1 2 - 723815 + 723679 2 3 - 79915 + 79898 3 22 - 18368 + 18364 @@ -18623,11 +19119,11 @@ class_template_argument_value - 510086 + 510048 type_id - 205812 + 205797 index @@ -18635,7 +19131,7 @@ arg_value - 509949 + 509912 @@ -18649,12 +19145,12 @@ 1 2 - 155799 + 155787 2 3 - 43370 + 43367 3 @@ -18675,17 +19171,17 @@ 1 2 - 147929 + 147918 2 3 - 40474 + 40471 3 45 - 15535 + 15534 45 @@ -18818,7 +19314,7 @@ 1 2 - 509813 + 509776 2 @@ -18839,7 +19335,7 @@ 1 2 - 509949 + 509912 @@ -18849,15 +19345,15 @@ is_proxy_class_for - 48439 + 48429 id - 48439 + 48429 templ_param_id - 45767 + 45757 @@ -18871,7 +19367,7 @@ 1 2 - 48439 + 48429 @@ -18887,7 +19383,7 @@ 1 2 - 45048 + 45039 2 @@ -18902,19 +19398,19 @@ type_mentions - 5903894 + 5907627 id - 5903894 + 5907627 type_id - 276913 + 277788 location - 5847585 + 5851317 kind @@ -18932,7 +19428,7 @@ 1 2 - 5903894 + 5907627 @@ -18948,7 +19444,7 @@ 1 2 - 5903894 + 5907627 @@ -18964,7 +19460,7 @@ 1 2 - 5903894 + 5907627 @@ -18980,22 +19476,22 @@ 1 2 - 136795 + 137233 2 3 - 31203 + 31204 3 4 - 11272 + 11653 4 5 - 14921 + 14975 5 @@ -19010,12 +19506,12 @@ 12 28 - 21074 + 21075 28 8941 - 19876 + 19877 @@ -19031,22 +19527,22 @@ 1 2 - 136795 + 137233 2 3 - 31203 + 31204 3 4 - 11272 + 11653 4 5 - 14921 + 14975 5 @@ -19061,12 +19557,12 @@ 12 28 - 21074 + 21075 28 8941 - 19876 + 19877 @@ -19082,7 +19578,7 @@ 1 2 - 276913 + 277788 @@ -19098,12 +19594,12 @@ 1 2 - 5801896 + 5805627 2 4 - 45689 + 45690 @@ -19119,12 +19615,12 @@ 1 2 - 5801896 + 5805627 2 4 - 45689 + 45690 @@ -19140,7 +19636,7 @@ 1 2 - 5847585 + 5851317 @@ -19154,8 +19650,8 @@ 12 - 108414 - 108415 + 108481 + 108482 54 @@ -19170,8 +19666,8 @@ 12 - 5085 - 5086 + 5101 + 5102 54 @@ -19186,8 +19682,8 @@ 12 - 107380 - 107381 + 107447 + 107448 54 @@ -19198,26 +19694,26 @@ is_function_template - 1331336 + 1331300 id - 1331336 + 1331300 function_instantiation - 973633 + 973767 to - 973633 + 973767 from - 182645 + 182700 @@ -19231,7 +19727,7 @@ 1 2 - 973633 + 973767 @@ -19247,22 +19743,22 @@ 1 2 - 110589 + 110581 2 3 - 42791 + 42787 3 9 - 14377 + 14444 9 104 - 13729 + 13728 119 @@ -19277,11 +19773,11 @@ function_template_argument - 2484813 + 2484632 function_id - 1453296 + 1453189 index @@ -19289,7 +19785,7 @@ arg_type - 298004 + 297982 @@ -19303,22 +19799,22 @@ 1 2 - 783015 + 782958 2 3 - 413158 + 413128 3 4 - 171811 + 171799 4 15 - 85309 + 85303 @@ -19334,22 +19830,22 @@ 1 2 - 802162 + 802104 2 3 - 411251 + 411221 3 4 - 169631 + 169618 4 9 - 70250 + 70245 @@ -19487,37 +19983,37 @@ 1 2 - 174775 + 174762 2 3 - 26335 + 26333 3 4 - 19998 + 19997 4 6 - 22656 + 22654 6 11 - 23235 + 23233 11 76 - 23371 + 23369 79 2452 - 7631 + 7630 @@ -19533,17 +20029,17 @@ 1 2 - 256814 + 256795 2 3 - 32127 + 32125 3 15 - 9062 + 9061 @@ -19553,11 +20049,11 @@ function_template_argument_value - 452781 + 452748 function_id - 196784 + 196770 index @@ -19565,7 +20061,7 @@ arg_value - 450090 + 450057 @@ -19579,17 +20075,17 @@ 1 2 - 151404 + 151393 2 3 - 42893 + 42890 3 8 - 2487 + 2486 @@ -19605,17 +20101,17 @@ 1 2 - 144488 + 144477 2 3 - 36692 + 36690 3 54 - 14854 + 14853 54 @@ -19758,7 +20254,7 @@ 1 2 - 447398 + 447365 2 @@ -19779,7 +20275,7 @@ 1 2 - 450090 + 450057 @@ -19789,26 +20285,26 @@ is_variable_template - 58632 + 58631 id - 58632 + 58631 variable_instantiation - 422779 + 423017 to - 422779 + 423017 from - 35304 + 35303 @@ -19822,7 +20318,7 @@ 1 2 - 422779 + 423017 @@ -19853,7 +20349,7 @@ 4 6 - 2994 + 2993 6 @@ -19883,19 +20379,19 @@ variable_template_argument - 768462 + 768940 variable_id - 400947 + 401186 index - 1996 + 1995 arg_type - 256112 + 256355 @@ -19909,17 +20405,17 @@ 1 2 - 156561 + 156557 2 3 - 189745 + 189989 3 4 - 36427 + 36426 4 @@ -19940,22 +20436,22 @@ 1 2 - 171407 + 171402 2 3 - 180014 + 180259 3 4 - 33682 + 33681 4 17 - 15843 + 15842 @@ -19999,13 +20495,13 @@ 124 - 1959 - 1960 + 1961 + 1962 124 - 3214 - 3215 + 3216 + 3217 124 @@ -20050,8 +20546,8 @@ 124 - 745 - 746 + 747 + 748 124 @@ -20073,12 +20569,12 @@ 1 2 - 175399 + 175519 2 3 - 44660 + 44784 3 @@ -20088,7 +20584,7 @@ 6 206 - 14471 + 14470 @@ -20104,12 +20600,12 @@ 1 2 - 227794 + 228037 2 3 - 24700 + 24699 3 @@ -20124,19 +20620,19 @@ variable_template_argument_value - 19960 + 19959 variable_id - 14845 + 14844 index - 499 + 498 arg_value - 19960 + 19959 @@ -20150,12 +20646,12 @@ 1 2 - 13348 + 13347 2 3 - 1497 + 1496 @@ -20171,12 +20667,12 @@ 1 2 - 10479 + 10478 2 3 - 3992 + 3991 4 @@ -20259,7 +20755,7 @@ 1 2 - 19960 + 19959 @@ -20275,7 +20771,7 @@ 1 2 - 19960 + 19959 @@ -20289,7 +20785,7 @@ to - 4990 + 4989 from @@ -20353,11 +20849,11 @@ template_template_argument - 9675 + 9673 type_id - 6115 + 6114 index @@ -20365,7 +20861,7 @@ arg_type - 9083 + 9081 @@ -20379,7 +20875,7 @@ 1 2 - 5017 + 5016 2 @@ -20410,7 +20906,7 @@ 1 2 - 5038 + 5037 2 @@ -20563,7 +21059,7 @@ 1 2 - 9052 + 9050 3 @@ -20584,7 +21080,7 @@ 1 2 - 9062 + 9060 2 @@ -20735,19 +21231,19 @@ concept_templates - 3614 + 3610 concept_id - 3614 + 3610 name - 3614 + 3610 location - 3614 + 3610 @@ -20761,7 +21257,7 @@ 1 2 - 3614 + 3610 @@ -20777,7 +21273,7 @@ 1 2 - 3614 + 3610 @@ -20793,7 +21289,7 @@ 1 2 - 3614 + 3610 @@ -20809,7 +21305,7 @@ 1 2 - 3614 + 3610 @@ -20825,7 +21321,7 @@ 1 2 - 3614 + 3610 @@ -20841,7 +21337,7 @@ 1 2 - 3614 + 3610 @@ -20851,15 +21347,15 @@ concept_instantiation - 90433 + 90315 to - 90433 + 90315 from - 3442 + 3438 @@ -20873,7 +21369,7 @@ 1 2 - 90433 + 90315 @@ -20904,12 +21400,12 @@ 4 5 - 129 + 128 5 6 - 301 + 300 6 @@ -20929,37 +21425,37 @@ 12 15 - 215 + 214 15 19 - 215 + 214 19 25 - 258 + 257 25 37 - 258 + 257 38 49 - 258 + 257 50 72 - 258 + 257 78 387 - 215 + 214 @@ -20969,30 +21465,30 @@ is_type_constraint - 36900 + 36852 concept_id - 36900 + 36852 concept_template_argument - 113047 + 112899 concept_id - 76383 + 76283 index - 129 + 128 arg_type - 21430 + 21402 @@ -21006,17 +21502,17 @@ 1 2 - 46475 + 46414 2 3 - 24679 + 24647 3 7 - 5228 + 5221 @@ -21032,17 +21528,17 @@ 1 2 - 50090 + 50024 2 3 - 22377 + 22347 3 7 - 3916 + 3910 @@ -21140,42 +21636,42 @@ 1 2 - 10392 + 10378 2 3 - 2969 + 2965 3 4 - 1054 + 1052 4 5 - 1355 + 1353 5 6 - 1161 + 1160 6 9 - 1613 + 1611 9 14 - 1979 + 1976 14 259 - 903 + 902 @@ -21191,17 +21687,17 @@ 1 2 - 18030 + 18007 2 3 - 3270 + 3266 3 4 - 129 + 128 @@ -21342,15 +21838,15 @@ routinetypes - 604322 + 604482 id - 604322 + 604482 return_type - 283865 + 283845 @@ -21364,7 +21860,7 @@ 1 2 - 604322 + 604482 @@ -21380,17 +21876,17 @@ 1 2 - 234226 + 234073 2 3 - 35091 + 35225 3 - 4676 - 14547 + 4677 + 14546 @@ -21400,11 +21896,11 @@ routinetypeargs - 1176651 + 1178519 routine - 415070 + 416002 index @@ -21412,7 +21908,7 @@ type_id - 111582 + 112073 @@ -21426,22 +21922,22 @@ 1 2 - 82502 + 82939 2 3 - 126013 + 126069 3 4 - 107443 + 107880 4 5 - 49283 + 49284 5 @@ -21451,7 +21947,7 @@ 7 19 - 16663 + 16664 @@ -21467,27 +21963,27 @@ 1 2 - 88492 + 88929 2 3 - 138647 + 138703 3 4 - 114196 + 114633 4 5 - 40733 + 40734 5 10 - 32891 + 32892 10 @@ -21571,18 +22067,18 @@ 54 - 3793 - 3794 + 3801 + 3802 54 - 6107 - 6108 + 6116 + 6117 54 - 7622 - 7623 + 7639 + 7640 54 @@ -21662,13 +22158,13 @@ 54 - 787 - 788 + 788 + 789 54 - 1174 - 1175 + 1182 + 1183 54 @@ -21685,17 +22181,17 @@ 1 2 - 33218 + 33273 2 3 - 15193 + 15574 3 4 - 13233 + 13287 4 @@ -21715,7 +22211,7 @@ 8 13 - 9529 + 9530 13 @@ -21724,7 +22220,7 @@ 26 - 918 + 926 6099 @@ -21741,7 +22237,7 @@ 1 2 - 78908 + 79399 2 @@ -21766,19 +22262,19 @@ ptrtomembers - 9728 + 9725 id - 9728 + 9725 type_id - 7974 + 7972 class_id - 4869 + 4868 @@ -21792,7 +22288,7 @@ 1 2 - 9728 + 9725 @@ -21808,7 +22304,7 @@ 1 2 - 9728 + 9725 @@ -21824,7 +22320,7 @@ 1 2 - 7752 + 7751 2 @@ -21845,7 +22341,7 @@ 1 2 - 7752 + 7751 2 @@ -21866,7 +22362,7 @@ 1 2 - 3897 + 3896 2 @@ -21897,7 +22393,7 @@ 1 2 - 3897 + 3896 2 @@ -21970,15 +22466,15 @@ typespecifiers - 854272 + 854142 type_id - 849128 + 846657 spec_id - 95 + 1621 @@ -21992,12 +22488,12 @@ 1 2 - 843984 + 839173 2 3 - 5143 + 7484 @@ -22011,49 +22507,69 @@ 12 - 168 - 169 - 10 + 1 + 2 + 124 - 215 - 216 - 10 + 2 + 3 + 124 - 225 - 226 - 10 + 16 + 17 + 124 - 533 - 534 - 10 + 17 + 18 + 124 - 821 - 822 - 10 + 24 + 25 + 124 - 1568 - 1569 - 10 + 44 + 45 + 124 - 4195 - 4196 - 10 + 49 + 50 + 124 - 18295 - 18296 - 10 + 51 + 52 + 124 - 54858 - 54859 - 10 + 112 + 113 + 124 + + + 199 + 200 + 124 + + + 325 + 326 + 124 + + + 545 + 546 + 124 + + + 5462 + 5463 + 124 @@ -22063,11 +22579,11 @@ funspecifiers - 9714441 + 9714174 func_id - 4008855 + 4008745 spec_id @@ -22085,27 +22601,27 @@ 1 2 - 1527070 + 1527028 2 3 - 506237 + 506223 3 4 - 1036925 + 1036897 4 5 - 692863 + 692844 5 8 - 245758 + 245751 @@ -22221,11 +22737,11 @@ varspecifiers - 3075347 + 3075512 var_id - 2314869 + 2315054 spec_id @@ -22243,17 +22759,17 @@ 1 2 - 1658058 + 1658261 2 3 - 553642 + 553627 3 5 - 103168 + 103165 @@ -22282,8 +22798,8 @@ 124 - 1332 - 1333 + 1334 + 1335 124 @@ -22319,15 +22835,15 @@ explicit_specifier_exprs - 41292 + 41291 func_id - 41292 + 41291 constant - 41292 + 41291 @@ -22341,7 +22857,7 @@ 1 2 - 41292 + 41291 @@ -22357,7 +22873,7 @@ 1 2 - 41292 + 41291 @@ -22367,11 +22883,11 @@ attributes - 653817 + 653799 id - 653817 + 653799 kind @@ -22387,7 +22903,7 @@ location - 647704 + 647686 @@ -22401,7 +22917,7 @@ 1 2 - 653817 + 653799 @@ -22417,7 +22933,7 @@ 1 2 - 653817 + 653799 @@ -22433,7 +22949,7 @@ 1 2 - 653817 + 653799 @@ -22449,7 +22965,7 @@ 1 2 - 653817 + 653799 @@ -22852,7 +23368,7 @@ 1 2 - 641841 + 641823 2 @@ -22873,7 +23389,7 @@ 1 2 - 647704 + 647686 @@ -22889,7 +23405,7 @@ 1 2 - 642589 + 642571 2 @@ -22910,7 +23426,7 @@ 1 2 - 647704 + 647686 @@ -22920,11 +23436,11 @@ attribute_args - 82562 + 82563 id - 82562 + 82563 kind @@ -22932,7 +23448,7 @@ attribute - 71259 + 71260 index @@ -22940,7 +23456,7 @@ location - 57184 + 57185 @@ -22954,7 +23470,7 @@ 1 2 - 82562 + 82563 @@ -22970,7 +23486,7 @@ 1 2 - 82562 + 82563 @@ -22986,7 +23502,7 @@ 1 2 - 82562 + 82563 @@ -23002,7 +23518,7 @@ 1 2 - 82562 + 82563 @@ -23122,7 +23638,7 @@ 1 2 - 65790 + 65791 2 @@ -23148,7 +23664,7 @@ 1 2 - 69743 + 69744 2 @@ -23169,7 +23685,7 @@ 1 2 - 68215 + 68216 2 @@ -23190,7 +23706,7 @@ 1 2 - 68747 + 68748 2 @@ -23375,7 +23891,7 @@ 1 2 - 41506 + 41507 2 @@ -23448,7 +23964,7 @@ 1 2 - 56935 + 56936 2 @@ -23463,11 +23979,11 @@ attribute_arg_value - 16693 + 16692 arg - 16693 + 16692 value @@ -23485,7 +24001,7 @@ 1 2 - 16693 + 16692 @@ -23556,15 +24072,15 @@ attribute_arg_type - 460 + 459 arg - 460 + 459 type_id - 84 + 83 @@ -23578,7 +24094,7 @@ 1 2 - 460 + 459 @@ -23594,22 +24110,22 @@ 1 2 - 72 + 71 2 3 - 4 + 3 35 36 - 4 + 3 60 61 - 4 + 3 @@ -23619,15 +24135,15 @@ attribute_arg_constant - 71856 + 71883 arg - 71856 + 71883 constant - 71856 + 71883 @@ -23641,7 +24157,7 @@ 1 2 - 71856 + 71883 @@ -23657,7 +24173,7 @@ 1 2 - 71856 + 71883 @@ -23768,15 +24284,15 @@ typeattributes - 96307 + 96304 type_id - 94560 + 94558 spec_id - 32435 + 32434 @@ -23790,7 +24306,7 @@ 1 2 - 92814 + 92811 2 @@ -23811,17 +24327,17 @@ 1 2 - 27944 + 27943 2 9 - 2495 + 2494 11 58 - 1996 + 1995 @@ -23831,15 +24347,15 @@ funcattributes - 843562 + 843539 func_id - 799026 + 799004 spec_id - 616766 + 616749 @@ -23853,12 +24369,12 @@ 1 2 - 758981 + 758960 2 7 - 40044 + 40043 @@ -23874,12 +24390,12 @@ 1 2 - 571731 + 571715 2 213 - 45034 + 45033 @@ -23952,7 +24468,7 @@ namespaceattributes - 5996 + 5995 namespace_id @@ -23960,7 +24476,7 @@ spec_id - 5996 + 5995 @@ -24000,7 +24516,7 @@ 1 2 - 5996 + 5995 @@ -24010,15 +24526,15 @@ stmtattributes - 2216 + 2213 stmt_id - 2216 + 2213 spec_id - 559 + 558 @@ -24032,7 +24548,7 @@ 1 2 - 2216 + 2213 @@ -24048,7 +24564,7 @@ 1 2 - 215 + 214 2 @@ -24058,7 +24574,7 @@ 3 4 - 43 + 42 9 @@ -24068,7 +24584,7 @@ 13 16 - 43 + 42 @@ -24078,15 +24594,15 @@ unspecifiedtype - 7172900 + 7174200 type_id - 7172900 + 7174200 unspecified_type_id - 3962323 + 3962838 @@ -24100,7 +24616,7 @@ 1 2 - 7172900 + 7174200 @@ -24116,22 +24632,22 @@ 1 2 - 2480537 + 2481093 2 3 - 1116765 + 1116610 3 7 - 302644 + 302636 7 537 - 62375 + 62498 @@ -24141,19 +24657,19 @@ member - 4189618 + 4189503 parent - 543288 + 543273 index - 29690 + 29689 child - 4185003 + 4184887 @@ -24167,52 +24683,52 @@ 1 2 - 128991 + 128988 2 3 - 83333 + 83331 3 4 - 32435 + 32434 4 5 - 44910 + 44908 5 6 - 42415 + 42413 6 7 - 33932 + 33931 7 9 - 42290 + 42289 9 13 - 41167 + 41166 13 18 - 41292 + 41291 18 42 - 40793 + 40792 42 @@ -24233,57 +24749,57 @@ 1 2 - 128742 + 128738 2 3 - 83458 + 83455 3 4 - 32185 + 32184 4 5 - 45034 + 45033 5 6 - 42539 + 42538 6 7 - 32809 + 32808 7 9 - 42664 + 42663 9 13 - 41541 + 41540 13 18 - 41417 + 41416 18 42 - 40918 + 40917 42 265 - 11976 + 11975 @@ -24299,7 +24815,7 @@ 1 2 - 6487 + 6486 2 @@ -24329,7 +24845,7 @@ 26 36 - 2495 + 2494 36 @@ -24365,7 +24881,7 @@ 1 2 - 5489 + 5488 2 @@ -24431,7 +24947,7 @@ 1 2 - 4185003 + 4184887 @@ -24447,7 +24963,7 @@ 1 2 - 4180387 + 4180272 2 @@ -24462,15 +24978,15 @@ enclosingfunction - 114813 + 114805 child - 114813 + 114805 parent - 71341 + 71335 @@ -24484,7 +25000,7 @@ 1 2 - 114813 + 114805 @@ -24500,7 +25016,7 @@ 1 2 - 49332 + 49328 2 @@ -24510,12 +25026,12 @@ 3 4 - 15365 + 15364 4 37 - 2010 + 2009 @@ -24525,15 +25041,15 @@ derivations - 476902 + 476867 derivation - 476902 + 476867 sub - 455166 + 455133 index @@ -24541,11 +25057,11 @@ super - 235555 + 235538 location - 35398 + 35395 @@ -24559,7 +25075,7 @@ 1 2 - 476902 + 476867 @@ -24575,7 +25091,7 @@ 1 2 - 476902 + 476867 @@ -24591,7 +25107,7 @@ 1 2 - 476902 + 476867 @@ -24607,7 +25123,7 @@ 1 2 - 476902 + 476867 @@ -24623,12 +25139,12 @@ 1 2 - 438642 + 438610 2 9 - 16523 + 16522 @@ -24644,12 +25160,12 @@ 1 2 - 438642 + 438610 2 8 - 16523 + 16522 @@ -24665,12 +25181,12 @@ 1 2 - 438642 + 438610 2 9 - 16523 + 16522 @@ -24686,12 +25202,12 @@ 1 2 - 438642 + 438610 2 8 - 16523 + 16522 @@ -24846,7 +25362,7 @@ 1 2 - 225743 + 225726 2 @@ -24867,7 +25383,7 @@ 1 2 - 225743 + 225726 2 @@ -24888,7 +25404,7 @@ 1 2 - 235112 + 235095 2 @@ -24909,7 +25425,7 @@ 1 2 - 230206 + 230189 2 @@ -24930,7 +25446,7 @@ 1 2 - 26505 + 26504 2 @@ -24966,7 +25482,7 @@ 1 2 - 26505 + 26504 2 @@ -25002,7 +25518,7 @@ 1 2 - 35398 + 35395 @@ -25018,7 +25534,7 @@ 1 2 - 28720 + 28718 2 @@ -25043,11 +25559,11 @@ derspecifiers - 478674 + 478639 der_id - 476459 + 476424 spec_id @@ -25065,7 +25581,7 @@ 1 2 - 474245 + 474210 2 @@ -25111,11 +25627,11 @@ direct_base_offsets - 449987 + 449955 der_id - 449987 + 449955 offset @@ -25133,7 +25649,7 @@ 1 2 - 449987 + 449955 @@ -25330,23 +25846,23 @@ frienddecls - 700465 + 699835 id - 700465 + 699835 type_id - 42416 + 42413 decl_id - 77848 + 77876 location - 6098 + 6097 @@ -25360,7 +25876,7 @@ 1 2 - 700465 + 699835 @@ -25376,7 +25892,7 @@ 1 2 - 700465 + 699835 @@ -25392,7 +25908,7 @@ 1 2 - 700465 + 699835 @@ -25408,12 +25924,12 @@ 1 2 - 6166 + 6200 2 3 - 13968 + 14001 3 @@ -25423,12 +25939,12 @@ 7 12 - 3441 + 3440 12 20 - 3645 + 3577 20 @@ -25464,12 +25980,12 @@ 1 2 - 6166 + 6200 2 3 - 13968 + 14001 3 @@ -25479,12 +25995,12 @@ 7 12 - 3441 + 3440 12 20 - 3645 + 3577 20 @@ -25520,7 +26036,7 @@ 1 2 - 41053 + 41050 2 @@ -25541,32 +26057,32 @@ 1 2 - 48071 + 48170 2 3 - 5962 + 5893 3 8 - 5996 + 5995 8 15 - 6064 + 5995 15 40 - 6064 + 6097 40 164 - 5689 + 5723 @@ -25582,32 +26098,32 @@ 1 2 - 48071 + 48170 2 3 - 5962 + 5893 3 8 - 5996 + 5995 8 15 - 6064 + 5995 15 40 - 6064 + 6097 40 164 - 5689 + 5723 @@ -25623,7 +26139,7 @@ 1 2 - 77167 + 77195 2 @@ -25648,7 +26164,7 @@ 2 - 20371 + 20354 374 @@ -25665,7 +26181,7 @@ 1 2 - 5962 + 5961 2 @@ -25690,7 +26206,7 @@ 2 - 2132 + 2133 340 @@ -25701,19 +26217,19 @@ comments - 11233402 + 11233093 id - 11233402 + 11233093 contents - 4303640 + 4303522 location - 11233402 + 11233093 @@ -25727,7 +26243,7 @@ 1 2 - 11233402 + 11233093 @@ -25743,7 +26259,7 @@ 1 2 - 11233402 + 11233093 @@ -25759,17 +26275,17 @@ 1 2 - 3928890 + 3928782 2 6 - 322978 + 322969 6 34447 - 51771 + 51770 @@ -25785,17 +26301,17 @@ 1 2 - 3928890 + 3928782 2 6 - 322978 + 322969 6 34447 - 51771 + 51770 @@ -25811,7 +26327,7 @@ 1 2 - 11233402 + 11233093 @@ -25827,7 +26343,7 @@ 1 2 - 11233402 + 11233093 @@ -25837,15 +26353,15 @@ commentbinding - 3914793 + 3914685 id - 3350796 + 3350704 element - 3749249 + 3749146 @@ -25859,12 +26375,12 @@ 1 2 - 3289170 + 3289079 2 1706 - 61626 + 61625 @@ -25880,12 +26396,12 @@ 1 2 - 3583705 + 3583607 2 3 - 165543 + 165539 @@ -25895,15 +26411,15 @@ exprconv - 9633084 + 9633161 converted - 9632979 + 9633056 conversion - 9633084 + 9633161 @@ -25917,7 +26433,7 @@ 1 2 - 9632873 + 9632950 2 @@ -25938,7 +26454,7 @@ 1 2 - 9633084 + 9633161 @@ -25948,30 +26464,30 @@ compgenerated - 9892394 + 9893081 id - 9892394 + 9893081 synthetic_destructor_call - 1671701 + 1669514 element - 1244965 + 1243336 i - 387 + 386 destructor_call - 1671701 + 1669514 @@ -25985,17 +26501,17 @@ 1 2 - 828685 + 827601 2 3 - 409480 + 408944 3 19 - 6799 + 6790 @@ -26011,17 +26527,17 @@ 1 2 - 828685 + 827601 2 3 - 409480 + 408944 3 19 - 6799 + 6790 @@ -26037,17 +26553,17 @@ 1 2 - 43 + 42 2 3 - 86 + 85 3 4 - 86 + 85 13 @@ -26103,17 +26619,17 @@ 1 2 - 43 + 42 2 3 - 86 + 85 3 4 - 86 + 85 13 @@ -26169,7 +26685,7 @@ 1 2 - 1671701 + 1669514 @@ -26185,7 +26701,7 @@ 1 2 - 1671701 + 1669514 @@ -26195,15 +26711,15 @@ namespaces - 8650 + 8648 id - 8650 + 8648 name - 4573 + 4572 @@ -26217,7 +26733,7 @@ 1 2 - 8650 + 8648 @@ -26233,7 +26749,7 @@ 1 2 - 3739 + 3738 2 @@ -26253,26 +26769,26 @@ namespace_inline - 499 + 498 id - 499 + 498 namespacembrs - 2037673 + 2038490 parentid - 3992 + 3991 memberid - 2037673 + 2038490 @@ -26286,7 +26802,7 @@ 1 2 - 499 + 498 2 @@ -26296,7 +26812,7 @@ 3 4 - 499 + 498 4 @@ -26344,8 +26860,8 @@ 249 - 15606 - 15607 + 15613 + 15614 124 @@ -26362,7 +26878,7 @@ 1 2 - 2037673 + 2038490 @@ -26372,11 +26888,11 @@ exprparents - 19454210 + 19454445 expr_id - 19454210 + 19454445 child_index @@ -26384,7 +26900,7 @@ parent_id - 12939983 + 12940139 @@ -26398,7 +26914,7 @@ 1 2 - 19454210 + 19454445 @@ -26414,7 +26930,7 @@ 1 2 - 19454210 + 19454445 @@ -26532,17 +27048,17 @@ 1 2 - 7394754 + 7394844 2 3 - 5082678 + 5082739 3 712 - 462550 + 462555 @@ -26558,17 +27074,17 @@ 1 2 - 7394754 + 7394844 2 3 - 5082678 + 5082739 3 712 - 462550 + 462555 @@ -26578,22 +27094,22 @@ expr_isload - 6909332 + 6899307 expr_id - 6909332 + 6899307 conversionkinds - 6050443 + 6050440 expr_id - 6050443 + 6050440 kind @@ -26611,7 +27127,7 @@ 1 2 - 6050443 + 6050440 @@ -26655,8 +27171,8 @@ 1 - 5831535 - 5831536 + 5831532 + 5831533 1 @@ -26667,11 +27183,11 @@ iscall - 5802824 + 5800862 caller - 5802824 + 5800862 kind @@ -26689,7 +27205,7 @@ 1 2 - 5802824 + 5800862 @@ -26713,8 +27229,8 @@ 21 - 268054 - 268055 + 268316 + 268317 21 @@ -26725,11 +27241,11 @@ numtemplatearguments - 627369 + 627726 expr_id - 627369 + 627726 num @@ -26747,7 +27263,7 @@ 1 2 - 627369 + 627726 @@ -26766,8 +27282,8 @@ 124 - 1263 - 1264 + 1266 + 1267 124 @@ -26831,23 +27347,23 @@ namequalifiers - 3041979 + 3037999 id - 3041979 + 3037999 qualifiableelement - 3041979 + 3037999 qualifyingelement - 47486 + 47424 location - 552457 + 551734 @@ -26861,7 +27377,7 @@ 1 2 - 3041979 + 3037999 @@ -26877,7 +27393,7 @@ 1 2 - 3041979 + 3037999 @@ -26893,7 +27409,7 @@ 1 2 - 3041979 + 3037999 @@ -26909,7 +27425,7 @@ 1 2 - 3041979 + 3037999 @@ -26925,7 +27441,7 @@ 1 2 - 3041979 + 3037999 @@ -26941,7 +27457,7 @@ 1 2 - 3041979 + 3037999 @@ -26957,27 +27473,27 @@ 1 2 - 31543 + 31501 2 3 - 8176 + 8165 3 5 - 4109 + 4104 5 6811 - 3571 + 3567 19018 41956 - 86 + 85 @@ -26993,27 +27509,27 @@ 1 2 - 31543 + 31501 2 3 - 8176 + 8165 3 5 - 4109 + 4104 5 6811 - 3571 + 3567 19018 41956 - 86 + 85 @@ -27029,22 +27545,22 @@ 1 2 - 34404 + 34359 2 3 - 7358 + 7349 3 6 - 3571 + 3567 6 20057 - 2151 + 2148 @@ -27060,22 +27576,22 @@ 1 2 - 79137 + 79034 2 6 - 38105 + 38055 6 7 - 399001 + 398479 7 192 - 36212 + 36164 @@ -27091,22 +27607,22 @@ 1 2 - 79137 + 79034 2 6 - 38105 + 38055 6 7 - 399001 + 398479 7 192 - 36212 + 36164 @@ -27122,22 +27638,22 @@ 1 2 - 111541 + 111395 2 4 - 13297 + 13279 4 5 - 415311 + 414767 5 33 - 12307 + 12291 @@ -27147,15 +27663,15 @@ varbind - 8254629 + 8254728 expr - 8254629 + 8254728 var - 1050375 + 1050388 @@ -27169,7 +27685,7 @@ 1 2 - 8254629 + 8254728 @@ -27185,52 +27701,52 @@ 1 2 - 171535 + 171537 2 3 - 188700 + 188702 3 4 - 145647 + 145649 4 5 - 116636 + 116637 5 6 - 83150 + 83152 6 7 - 65817 + 65818 7 9 - 80815 + 80816 9 13 - 81575 + 81576 13 27 - 79127 + 79128 27 5137 - 37368 + 37369 @@ -27240,15 +27756,15 @@ funbind - 5812528 + 5810554 expr - 5810054 + 5808083 fun - 275948 + 275716 @@ -27262,12 +27778,12 @@ 1 2 - 5807579 + 5805611 2 3 - 2474 + 2471 @@ -27283,27 +27799,27 @@ 1 2 - 181448 + 181318 2 3 - 38837 + 38786 3 4 - 17191 + 17169 4 8 - 22742 + 22713 8 37798 - 15728 + 15729 @@ -27313,11 +27829,11 @@ expr_allocator - 45244 + 45240 expr - 45244 + 45240 func @@ -27339,7 +27855,7 @@ 1 2 - 45244 + 45240 @@ -27355,7 +27871,7 @@ 1 2 - 45244 + 45240 @@ -27439,11 +27955,11 @@ expr_deallocator - 53829 + 53825 expr - 53829 + 53825 func @@ -27465,7 +27981,7 @@ 1 2 - 53829 + 53825 @@ -27481,7 +27997,7 @@ 1 2 - 53829 + 53825 @@ -27586,15 +28102,15 @@ expr_cond_guard - 897879 + 897887 cond - 897879 + 897887 guard - 897879 + 897887 @@ -27608,7 +28124,7 @@ 1 2 - 897879 + 897887 @@ -27624,7 +28140,7 @@ 1 2 - 897879 + 897887 @@ -27634,15 +28150,15 @@ expr_cond_true - 897876 + 897883 cond - 897876 + 897883 true - 897876 + 897883 @@ -27656,7 +28172,7 @@ 1 2 - 897876 + 897883 @@ -27672,7 +28188,7 @@ 1 2 - 897876 + 897883 @@ -27682,15 +28198,15 @@ expr_cond_false - 897879 + 897887 cond - 897879 + 897887 false - 897879 + 897887 @@ -27704,7 +28220,7 @@ 1 2 - 897879 + 897887 @@ -27720,7 +28236,7 @@ 1 2 - 897879 + 897887 @@ -27730,15 +28246,15 @@ values - 13474601 + 13474763 id - 13474601 + 13474763 str - 114566 + 114567 @@ -27752,7 +28268,7 @@ 1 2 - 13474601 + 13474763 @@ -27768,7 +28284,7 @@ 1 2 - 78302 + 78303 2 @@ -27783,7 +28299,7 @@ 6 52 - 8628 + 8629 52 @@ -27798,11 +28314,11 @@ valuetext - 6647456 + 6647515 id - 6647456 + 6647515 text @@ -27820,7 +28336,7 @@ 1 2 - 6647456 + 6647515 @@ -27861,15 +28377,15 @@ valuebind - 13583183 + 13583347 val - 13474601 + 13474763 expr - 13583183 + 13583347 @@ -27883,12 +28399,12 @@ 1 2 - 13384046 + 13384208 2 6 - 90554 + 90555 @@ -27904,7 +28420,7 @@ 1 2 - 13583183 + 13583347 @@ -27914,11 +28430,11 @@ fieldoffsets - 1497674 + 1499493 id - 1497674 + 1499493 byteoffset @@ -27940,7 +28456,7 @@ 1 2 - 1497674 + 1499493 @@ -27956,7 +28472,7 @@ 1 2 - 1497674 + 1499493 @@ -28001,7 +28517,7 @@ 250 - 5950 + 5966 1089 @@ -28018,7 +28534,7 @@ 1 2 - 30386 + 30387 2 @@ -28072,8 +28588,8 @@ 54 - 27146 - 27147 + 27179 + 27180 54 @@ -28115,19 +28631,19 @@ bitfield - 30314 + 30313 id - 30314 + 30313 bits - 3493 + 3492 declared_bits - 3493 + 3492 @@ -28141,7 +28657,7 @@ 1 2 - 30314 + 30313 @@ -28157,7 +28673,7 @@ 1 2 - 30314 + 30313 @@ -28173,7 +28689,7 @@ 1 2 - 998 + 997 2 @@ -28188,7 +28704,7 @@ 4 5 - 499 + 498 5 @@ -28224,7 +28740,7 @@ 1 2 - 3493 + 3492 @@ -28240,7 +28756,7 @@ 1 2 - 998 + 997 2 @@ -28255,7 +28771,7 @@ 4 5 - 499 + 498 5 @@ -28291,7 +28807,7 @@ 1 2 - 3493 + 3492 @@ -28301,23 +28817,23 @@ initialisers - 2251321 + 2247635 init - 2251321 + 2247635 var - 981178 + 979695 expr - 2251321 + 2247635 location - 516961 + 516295 @@ -28331,7 +28847,7 @@ 1 2 - 2251321 + 2247635 @@ -28347,7 +28863,7 @@ 1 2 - 2251321 + 2247635 @@ -28363,7 +28879,7 @@ 1 2 - 2251321 + 2247635 @@ -28379,17 +28895,17 @@ 1 2 - 870758 + 869453 2 15 - 37448 + 37398 16 25 - 72972 + 72843 @@ -28405,17 +28921,17 @@ 1 2 - 870758 + 869453 2 15 - 37448 + 37398 16 25 - 72972 + 72843 @@ -28431,7 +28947,7 @@ 1 2 - 981170 + 979687 2 @@ -28452,7 +28968,7 @@ 1 2 - 2251321 + 2247635 @@ -28468,7 +28984,7 @@ 1 2 - 2251321 + 2247635 @@ -28484,7 +29000,7 @@ 1 2 - 2251321 + 2247635 @@ -28500,22 +29016,22 @@ 1 2 - 415111 + 414607 2 3 - 33614 + 33555 3 13 - 42070 + 42013 13 111925 - 26165 + 26119 @@ -28531,17 +29047,17 @@ 1 2 - 444412 + 443873 2 3 - 34524 + 34463 3 12238 - 38025 + 37958 @@ -28557,22 +29073,22 @@ 1 2 - 415111 + 414607 2 3 - 33614 + 33555 3 13 - 42070 + 42013 13 111925 - 26165 + 26119 @@ -28582,26 +29098,26 @@ braced_initialisers - 68438 + 68436 init - 68438 + 68436 expr_ancestor - 1677683 + 1675488 exp - 1677683 + 1675488 ancestor - 839659 + 838560 @@ -28615,7 +29131,7 @@ 1 2 - 1677683 + 1675488 @@ -28631,17 +29147,17 @@ 1 2 - 17084 + 17061 2 3 - 812505 + 811442 3 19 - 10069 + 10056 @@ -28651,11 +29167,11 @@ exprs - 25210567 + 25210871 id - 25210567 + 25210871 kind @@ -28663,7 +29179,7 @@ location - 10585854 + 10585982 @@ -28677,7 +29193,7 @@ 1 2 - 25210567 + 25210871 @@ -28693,7 +29209,7 @@ 1 2 - 25210567 + 25210871 @@ -28871,22 +29387,22 @@ 1 2 - 8903885 + 8903992 2 3 - 820608 + 820618 3 16 - 797198 + 797208 16 71733 - 64161 + 64162 @@ -28902,17 +29418,17 @@ 1 2 - 9043287 + 9043396 2 3 - 774272 + 774282 3 32 - 768294 + 768303 @@ -28922,19 +29438,19 @@ expr_reuse - 847039 + 845931 reuse - 847039 + 845931 original - 847039 + 845931 value_category - 43 + 42 @@ -28948,7 +29464,7 @@ 1 2 - 847039 + 845931 @@ -28964,7 +29480,7 @@ 1 2 - 847039 + 845931 @@ -28980,7 +29496,7 @@ 1 2 - 847039 + 845931 @@ -28996,7 +29512,7 @@ 1 2 - 847039 + 845931 @@ -29048,15 +29564,15 @@ expr_types - 25210567 + 25210871 id - 25210567 + 25210871 typeid - 214202 + 214205 value_category @@ -29074,7 +29590,7 @@ 1 2 - 25210567 + 25210871 @@ -29090,7 +29606,7 @@ 1 2 - 25210567 + 25210871 @@ -29131,7 +29647,7 @@ 8 14 - 17386 + 17387 14 @@ -29141,17 +29657,17 @@ 24 49 - 16067 + 16068 49 134 - 16177 + 16178 134 441505 - 13825 + 13826 @@ -29167,7 +29683,7 @@ 1 2 - 185913 + 185915 2 @@ -29235,15 +29751,15 @@ new_allocated_type - 46198 + 46194 expr - 46198 + 46194 type_id - 27391 + 27389 @@ -29257,7 +29773,7 @@ 1 2 - 46198 + 46194 @@ -29273,12 +29789,12 @@ 1 2 - 11515 + 11514 2 3 - 14479 + 14478 3 @@ -29293,15 +29809,15 @@ new_array_allocated_type - 6653 + 6641 expr - 6653 + 6641 type_id - 2843 + 2838 @@ -29315,7 +29831,7 @@ 1 2 - 6653 + 6641 @@ -29336,17 +29852,17 @@ 2 3 - 2510 + 2505 3 5 - 219 + 218 6 15 - 73 + 72 @@ -29356,19 +29872,19 @@ aggregate_field_init - 5717380 + 5717381 aggregate - 1243068 + 1243069 initializer - 5717202 + 5717203 field - 3227 + 3228 position @@ -29390,7 +29906,7 @@ 1 2 - 19690 + 19691 2 @@ -29441,7 +29957,7 @@ 1 2 - 19686 + 19687 2 @@ -29492,7 +30008,7 @@ 1 2 - 19690 + 19691 2 @@ -29543,7 +30059,7 @@ 1 2 - 1242986 + 1242987 2 @@ -29564,7 +30080,7 @@ 1 2 - 5717202 + 5717203 @@ -29580,7 +30096,7 @@ 1 2 - 5717024 + 5717025 2 @@ -29601,7 +30117,7 @@ 1 2 - 5717202 + 5717203 @@ -29617,7 +30133,7 @@ 1 2 - 5717202 + 5717203 @@ -29633,7 +30149,7 @@ 1 2 - 1433 + 1434 2 @@ -29689,7 +30205,7 @@ 1 2 - 1433 + 1434 2 @@ -29745,7 +30261,7 @@ 1 2 - 3213 + 3214 2 @@ -29766,7 +30282,7 @@ 1 2 - 3201 + 3202 2 @@ -29840,8 +30356,8 @@ 2 - 1243068 - 1243069 + 1243069 + 1243070 1 @@ -29911,8 +30427,8 @@ 2 - 1243068 - 1243069 + 1243069 + 1243070 1 @@ -29982,8 +30498,8 @@ 2 - 1283 - 1284 + 1284 + 1285 1 @@ -30024,8 +30540,8 @@ 1 - 1242670 - 1242671 + 1242671 + 1242672 1 @@ -30045,8 +30561,8 @@ 1 - 5716492 - 5716493 + 5716493 + 5716494 1 @@ -30066,8 +30582,8 @@ 1 - 3035 - 3036 + 3036 + 3037 1 @@ -30099,15 +30615,15 @@ aggregate_array_init - 1349246 + 1349502 aggregate - 152356 + 152357 initializer - 1349246 + 1349502 element_index @@ -30168,7 +30684,7 @@ 58 62923 - 1762 + 1763 @@ -30219,7 +30735,7 @@ 58 62923 - 1762 + 1763 @@ -30270,7 +30786,7 @@ 58 62923 - 1762 + 1763 @@ -30286,7 +30802,7 @@ 1 2 - 152356 + 152357 @@ -30302,7 +30818,7 @@ 1 2 - 1349246 + 1349502 @@ -30318,7 +30834,7 @@ 1 2 - 1349246 + 1349502 @@ -30334,7 +30850,7 @@ 1 2 - 1349246 + 1349502 @@ -30350,7 +30866,7 @@ 1 2 - 1349246 + 1349502 @@ -30390,7 +30906,7 @@ 37 - 152356 + 152357 2151 @@ -30431,7 +30947,7 @@ 37 - 152356 + 152357 2151 @@ -30514,7 +31030,7 @@ 37 - 152357 + 152358 2151 @@ -30555,7 +31071,7 @@ 37 - 152357 + 152358 2151 @@ -30617,8 +31133,8 @@ 1 - 152353 - 152354 + 152354 + 152355 1 @@ -30638,8 +31154,8 @@ 1 - 1349230 - 1349231 + 1349486 + 1349487 1 @@ -30692,15 +31208,15 @@ condition_decl_bind - 408920 + 408385 expr - 408920 + 408385 decl - 408920 + 408385 @@ -30714,7 +31230,7 @@ 1 2 - 408920 + 408385 @@ -30730,7 +31246,7 @@ 1 2 - 408920 + 408385 @@ -30740,15 +31256,15 @@ typeid_bind - 47901 + 47898 expr - 47901 + 47898 type_id - 15944 + 15943 @@ -30762,7 +31278,7 @@ 1 2 - 47901 + 47898 @@ -30778,12 +31294,12 @@ 1 2 - 2964 + 2963 2 3 - 12571 + 12570 3 @@ -30798,15 +31314,15 @@ uuidof_bind - 26677 + 26695 expr - 26677 + 26695 type_id - 26425 + 26443 @@ -30820,7 +31336,7 @@ 1 2 - 26677 + 26695 @@ -30836,12 +31352,12 @@ 1 2 - 26214 + 26232 2 4 - 211 + 210 @@ -30851,11 +31367,11 @@ sizeof_bind - 242026 + 242029 expr - 242026 + 242029 type_id @@ -30873,7 +31389,7 @@ 1 2 - 242026 + 242029 @@ -30982,11 +31498,11 @@ lambdas - 19057 + 19023 expr - 19057 + 19023 default_capture @@ -31012,7 +31528,7 @@ 1 2 - 19057 + 19023 @@ -31028,7 +31544,7 @@ 1 2 - 19057 + 19023 @@ -31044,7 +31560,7 @@ 1 2 - 19057 + 19023 @@ -31228,23 +31744,23 @@ lambda_capture - 31965 + 31909 id - 31965 + 31909 lambda - 15491 + 15463 index - 138 + 137 field - 31965 + 31909 captured_by_reference @@ -31256,7 +31772,7 @@ location - 17944 + 17912 @@ -31270,7 +31786,7 @@ 1 2 - 31965 + 31909 @@ -31286,7 +31802,7 @@ 1 2 - 31965 + 31909 @@ -31302,7 +31818,7 @@ 1 2 - 31965 + 31909 @@ -31318,7 +31834,7 @@ 1 2 - 31965 + 31909 @@ -31334,7 +31850,7 @@ 1 2 - 31965 + 31909 @@ -31350,7 +31866,7 @@ 1 2 - 31965 + 31909 @@ -31366,27 +31882,27 @@ 1 2 - 8212 + 8198 2 3 - 3541 + 3535 3 4 - 1657 + 1654 4 6 - 1259 + 1256 6 18 - 820 + 819 @@ -31402,27 +31918,27 @@ 1 2 - 8212 + 8198 2 3 - 3541 + 3535 3 4 - 1657 + 1654 4 6 - 1259 + 1256 6 18 - 820 + 819 @@ -31438,27 +31954,27 @@ 1 2 - 8212 + 8198 2 3 - 3541 + 3535 3 4 - 1657 + 1654 4 6 - 1259 + 1256 6 18 - 820 + 819 @@ -31474,12 +31990,12 @@ 1 2 - 14248 + 14223 2 3 - 1242 + 1240 @@ -31495,7 +32011,7 @@ 1 2 - 15369 + 15342 2 @@ -31516,22 +32032,22 @@ 1 2 - 8805 + 8790 2 3 - 3696 + 3689 3 4 - 1389 + 1386 4 7 - 1291 + 1289 7 @@ -31978,7 +32494,7 @@ 1 2 - 31965 + 31909 @@ -31994,7 +32510,7 @@ 1 2 - 31965 + 31909 @@ -32010,7 +32526,7 @@ 1 2 - 31965 + 31909 @@ -32026,7 +32542,7 @@ 1 2 - 31965 + 31909 @@ -32042,7 +32558,7 @@ 1 2 - 31965 + 31909 @@ -32058,7 +32574,7 @@ 1 2 - 31965 + 31909 @@ -32316,17 +32832,17 @@ 1 2 - 15694 + 15666 2 6 - 1437 + 1435 6 68 - 812 + 810 @@ -32342,17 +32858,17 @@ 1 2 - 16271 + 16242 2 13 - 1470 + 1467 13 68 - 203 + 202 @@ -32368,12 +32884,12 @@ 1 2 - 17253 + 17223 2 8 - 690 + 689 @@ -32389,17 +32905,17 @@ 1 2 - 15694 + 15666 2 6 - 1437 + 1435 6 68 - 812 + 810 @@ -32415,7 +32931,7 @@ 1 2 - 17920 + 17888 2 @@ -32436,7 +32952,7 @@ 1 2 - 17944 + 17912 @@ -32446,15 +32962,15 @@ fold - 1247 + 1246 expr - 1247 + 1246 operator - 86 + 85 is_left_fold @@ -32472,7 +32988,7 @@ 1 2 - 1247 + 1246 @@ -32488,7 +33004,7 @@ 1 2 - 1247 + 1246 @@ -32504,7 +33020,7 @@ 1 2 - 43 + 42 2 @@ -32530,7 +33046,7 @@ 1 2 - 86 + 85 @@ -32572,11 +33088,11 @@ stmts - 6368836 + 6358197 id - 6368836 + 6358197 kind @@ -32584,7 +33100,7 @@ location - 2684483 + 2679767 @@ -32598,7 +33114,7 @@ 1 2 - 6368836 + 6358197 @@ -32614,7 +33130,7 @@ 1 2 - 6368836 + 6358197 @@ -32713,13 +33229,13 @@ 8 - 119871 - 119872 + 119906 + 119907 8 - 200105 - 200106 + 200140 + 200141 8 @@ -32824,13 +33340,13 @@ 8 - 49039 - 49040 + 49040 + 49041 8 - 86405 - 86406 + 86406 + 86407 8 @@ -32852,22 +33368,22 @@ 1 2 - 2224993 + 2221078 2 3 - 182231 + 181910 3 10 - 202173 + 201818 10 1789 - 75084 + 74960 @@ -32883,12 +33399,12 @@ 1 2 - 2601527 + 2596949 2 10 - 82955 + 82817 @@ -32898,15 +33414,15 @@ type_vla - 1 + 3 type_id - 1 + 3 decl - 1 + 3 @@ -32920,7 +33436,7 @@ 1 2 - 1 + 3 @@ -32936,7 +33452,7 @@ 1 2 - 1 + 3 @@ -33053,15 +33569,15 @@ if_then - 990214 + 990226 if_stmt - 990214 + 990226 then_id - 990214 + 990226 @@ -33075,7 +33591,7 @@ 1 2 - 990214 + 990226 @@ -33091,7 +33607,7 @@ 1 2 - 990214 + 990226 @@ -33101,15 +33617,15 @@ if_else - 437107 + 436535 if_stmt - 437107 + 436535 else_id - 437107 + 436535 @@ -33123,7 +33639,7 @@ 1 2 - 437107 + 436535 @@ -33139,7 +33655,7 @@ 1 2 - 437107 + 436535 @@ -33197,15 +33713,15 @@ constexpr_if_then - 106037 + 106034 constexpr_if_stmt - 106037 + 106034 then_id - 106037 + 106034 @@ -33219,7 +33735,7 @@ 1 2 - 106037 + 106034 @@ -33235,7 +33751,7 @@ 1 2 - 106037 + 106034 @@ -33245,15 +33761,15 @@ constexpr_if_else - 76097 + 76095 constexpr_if_stmt - 76097 + 76095 else_id - 76097 + 76095 @@ -33267,7 +33783,7 @@ 1 2 - 76097 + 76095 @@ -33283,7 +33799,7 @@ 1 2 - 76097 + 76095 @@ -33389,15 +33905,15 @@ while_body - 39647 + 39648 while_stmt - 39647 + 39648 body_id - 39647 + 39648 @@ -33411,7 +33927,7 @@ 1 2 - 39647 + 39648 @@ -33427,7 +33943,7 @@ 1 2 - 39647 + 39648 @@ -33437,15 +33953,15 @@ do_body - 233641 + 233643 do_stmt - 233641 + 233643 body_id - 233641 + 233643 @@ -33459,7 +33975,7 @@ 1 2 - 233641 + 233643 @@ -33475,7 +33991,7 @@ 1 2 - 233641 + 233643 @@ -33533,19 +34049,19 @@ switch_case - 836152 + 835058 switch_stmt - 411868 + 411329 index - 387 + 386 case_id - 836152 + 835058 @@ -33564,12 +34080,12 @@ 2 3 - 408985 + 408450 3 19 - 2861 + 2857 @@ -33590,12 +34106,12 @@ 2 3 - 408985 + 408450 3 19 - 2861 + 2857 @@ -33753,7 +34269,7 @@ 1 2 - 836152 + 835058 @@ -33769,7 +34285,7 @@ 1 2 - 836152 + 835058 @@ -33779,15 +34295,15 @@ switch_body - 411868 + 411329 switch_stmt - 411868 + 411329 body_id - 411868 + 411329 @@ -33801,7 +34317,7 @@ 1 2 - 411868 + 411329 @@ -33817,7 +34333,7 @@ 1 2 - 411868 + 411329 @@ -33875,15 +34391,15 @@ for_condition - 76341 + 76342 for_stmt - 76341 + 76342 condition_id - 76341 + 76342 @@ -33897,7 +34413,7 @@ 1 2 - 76341 + 76342 @@ -33913,7 +34429,7 @@ 1 2 - 76341 + 76342 @@ -33923,15 +34439,15 @@ for_update - 73386 + 73387 for_stmt - 73386 + 73387 update_id - 73386 + 73387 @@ -33945,7 +34461,7 @@ 1 2 - 73386 + 73387 @@ -33961,7 +34477,7 @@ 1 2 - 73386 + 73387 @@ -33971,15 +34487,15 @@ for_body - 84389 + 84390 for_stmt - 84389 + 84390 body_id - 84389 + 84390 @@ -33993,7 +34509,7 @@ 1 2 - 84389 + 84390 @@ -34009,7 +34525,7 @@ 1 2 - 84389 + 84390 @@ -34019,19 +34535,19 @@ stmtparents - 5628263 + 5618643 id - 5628263 + 5618643 index - 15775 + 15747 parent - 2381441 + 2377534 @@ -34045,7 +34561,7 @@ 1 2 - 5628263 + 5618643 @@ -34061,7 +34577,7 @@ 1 2 - 5628263 + 5618643 @@ -34077,52 +34593,52 @@ 1 2 - 5182 + 5173 2 3 - 1291 + 1289 3 4 - 284 + 283 4 5 - 2006 + 2002 7 8 - 1315 + 1313 8 12 - 1023 + 1021 12 29 - 1389 + 1386 29 39 - 1186 + 1183 42 78 - 1194 + 1192 78 - 209668 - 901 + 209703 + 900 @@ -34138,52 +34654,52 @@ 1 2 - 5182 + 5173 2 3 - 1291 + 1289 3 4 - 284 + 283 4 5 - 2006 + 2002 7 8 - 1315 + 1313 8 12 - 1023 + 1021 12 29 - 1389 + 1386 29 39 - 1186 + 1183 42 78 - 1194 + 1192 78 - 209668 - 901 + 209703 + 900 @@ -34199,32 +34715,32 @@ 1 2 - 1358987 + 1356880 2 3 - 517368 + 516457 3 4 - 151516 + 151250 4 6 - 155724 + 155450 6 16 - 178868 + 178553 16 1943 - 18976 + 18942 @@ -34240,32 +34756,32 @@ 1 2 - 1358987 + 1356880 2 3 - 517368 + 516457 3 4 - 151516 + 151250 4 6 - 155724 + 155450 6 16 - 178868 + 178553 16 1943 - 18976 + 18942 @@ -34275,30 +34791,30 @@ ishandler - 43781 + 43770 block - 43781 + 43770 stmt_decl_bind - 725870 + 724592 stmt - 715301 + 714042 num - 73 + 72 decl - 725870 + 724592 @@ -34312,12 +34828,12 @@ 1 2 - 707836 + 706590 2 10 - 7465 + 7452 @@ -34333,12 +34849,12 @@ 1 2 - 707836 + 706590 2 10 - 7465 + 7452 @@ -34466,7 +34982,7 @@ 1 2 - 725870 + 724592 @@ -34482,7 +34998,7 @@ 1 2 - 725870 + 724592 @@ -34492,19 +35008,19 @@ stmt_decl_entry_bind - 725870 + 724592 stmt - 715301 + 714042 num - 73 + 72 decl_entry - 725870 + 724592 @@ -34518,12 +35034,12 @@ 1 2 - 707836 + 706590 2 10 - 7465 + 7452 @@ -34539,12 +35055,12 @@ 1 2 - 707836 + 706590 2 10 - 7465 + 7452 @@ -34672,7 +35188,7 @@ 1 2 - 725870 + 724592 @@ -34688,7 +35204,7 @@ 1 2 - 725870 + 724592 @@ -34698,15 +35214,15 @@ blockscope - 1644335 + 1644290 block - 1644335 + 1644290 enclosing - 1427145 + 1427105 @@ -34720,7 +35236,7 @@ 1 2 - 1644335 + 1644290 @@ -34736,17 +35252,17 @@ 1 2 - 1294535 + 1294499 2 4 - 117265 + 117262 4 29 - 15344 + 15343 @@ -34756,15 +35272,15 @@ jumpinfo - 348320 + 348324 id - 348320 + 348324 str - 28948 + 28949 target @@ -34782,7 +35298,7 @@ 1 2 - 348320 + 348324 @@ -34798,7 +35314,7 @@ 1 2 - 348320 + 348324 @@ -34814,7 +35330,7 @@ 2 3 - 13596 + 13597 3 @@ -34860,7 +35376,7 @@ 1 2 - 23190 + 23191 2 @@ -34891,7 +35407,7 @@ 2 3 - 36210 + 36211 3 @@ -34937,11 +35453,11 @@ preprocdirects - 5408430 + 5408281 id - 5408430 + 5408281 kind @@ -34949,7 +35465,7 @@ location - 5405187 + 5405038 @@ -34963,7 +35479,7 @@ 1 2 - 5408430 + 5408281 @@ -34979,7 +35495,7 @@ 1 2 - 5408430 + 5408281 @@ -35127,7 +35643,7 @@ 1 2 - 5405062 + 5404913 27 @@ -35148,7 +35664,7 @@ 1 2 - 5405187 + 5405038 @@ -35158,15 +35674,15 @@ preprocpair - 1141217 + 1141185 begin - 888971 + 888947 elseelifend - 1141217 + 1141185 @@ -35180,17 +35696,17 @@ 1 2 - 649575 + 649557 2 3 - 230414 + 230407 3 9 - 8982 + 8981 @@ -35206,7 +35722,7 @@ 1 2 - 1141217 + 1141185 @@ -35216,41 +35732,41 @@ preproctrue - 439371 + 439358 branch - 439371 + 439358 preprocfalse - 285304 + 285296 branch - 285304 + 285296 preproctext - 4352418 + 4352298 id - 4352418 + 4352298 head - 2955088 + 2955007 body - 1683382 + 1683336 @@ -35264,7 +35780,7 @@ 1 2 - 4352418 + 4352298 @@ -35280,7 +35796,7 @@ 1 2 - 4352418 + 4352298 @@ -35296,12 +35812,12 @@ 1 2 - 2756485 + 2756409 2 798 - 198602 + 198597 @@ -35317,12 +35833,12 @@ 1 2 - 2873875 + 2873796 2 5 - 81212 + 81210 @@ -35338,17 +35854,17 @@ 1 2 - 1535178 + 1535136 2 10 - 127245 + 127241 10 13606 - 20958 + 20957 @@ -35364,12 +35880,12 @@ 1 2 - 1539420 + 1539378 2 12 - 126871 + 126867 12 @@ -35384,15 +35900,15 @@ includes - 318638 + 318569 id - 318638 + 318569 included - 58695 + 58683 @@ -35406,7 +35922,7 @@ 1 2 - 318638 + 318569 @@ -35422,32 +35938,32 @@ 1 2 - 29046 + 29040 2 3 - 9442 + 9440 3 4 - 4953 + 4952 4 6 - 5355 + 5354 6 11 - 4520 + 4519 11 47 - 4404 + 4403 47 @@ -35510,11 +36026,11 @@ link_parent - 30398238 + 30400377 element - 3866121 + 3866383 link_target @@ -35532,17 +36048,17 @@ 1 2 - 530459 + 530489 2 9 - 26948 + 26946 9 10 - 3308712 + 3308947 @@ -35561,48 +36077,48 @@ 34 - 97375 - 97376 + 97389 + 97390 34 - 97494 - 97495 + 97508 + 97509 34 - 97547 - 97548 + 97561 + 97562 34 - 97574 - 97575 + 97588 + 97589 34 - 97596 - 97597 + 97610 + 97611 34 - 97628 - 97629 + 97642 + 97643 34 - 99635 - 99636 + 99649 + 99650 34 - 103015 - 103016 + 103029 + 103030 34 - 104379 - 104380 + 104395 + 104396 34 From 15393ae62135eadff82963c9a4d4ad02c246c666 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Thu, 13 Nov 2025 13:15:03 +0100 Subject: [PATCH 061/127] C++: Add change note --- cpp/ql/lib/change-notes/2025-11-13-expanded.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cpp/ql/lib/change-notes/2025-11-13-expanded.md diff --git a/cpp/ql/lib/change-notes/2025-11-13-expanded.md b/cpp/ql/lib/change-notes/2025-11-13-expanded.md new file mode 100644 index 00000000000..82d0a1f5105 --- /dev/null +++ b/cpp/ql/lib/change-notes/2025-11-13-expanded.md @@ -0,0 +1,4 @@ +--- +category: feature +--- +* New predicates `getAnExpandedArgument` and `getExpandedArgument` were added to the `Compilation` class, yielding compilation arguments after expansion of response files. From 1df47cc747cce7eee04cae90c7e1b2790496f24f Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Thu, 13 Nov 2025 13:32:06 +0100 Subject: [PATCH 062/127] C++: Fix QL-for-QL warning --- cpp/ql/lib/semmle/code/cpp/Compilation.qll | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/Compilation.qll b/cpp/ql/lib/semmle/code/cpp/Compilation.qll index 716156acb44..c4b3796dec8 100644 --- a/cpp/ql/lib/semmle/code/cpp/Compilation.qll +++ b/cpp/ql/lib/semmle/code/cpp/Compilation.qll @@ -100,10 +100,12 @@ class Compilation extends @compilation { string getAnExpandedArgument() { result = this.getArgument(_) } /** - * The expanded arguments that were passed to the extractor for a - * compiler invocation. This is similar to `getArgument`, but - * for a `@someFile` argument, it includes the arguments from that - * file, rather than just taking the argument literally. + * Gets the `i`th expanded argument passed to the extractor on this + * invocation. + * + * This is similar to `getArgument`, but for a `@someFile` argument, it + * includes the arguments from that file, rather than just taking the + * argument literally. */ string getExpandedArgument(int i) { compilation_expanded_args(this, i, result) } From a07f015d01aef602c726566c899ff01036370893 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Mon, 3 Nov 2025 09:55:34 +0100 Subject: [PATCH 063/127] Rust: Accept changes to expected files --- .../models/CONSISTENCY/PathResolutionConsistency.expected | 2 -- .../stdin/CONSISTENCY/PathResolutionConsistency.expected | 2 -- .../CONSISTENCY/PathResolutionConsistency.expected | 3 --- 3 files changed, 7 deletions(-) delete mode 100644 rust/ql/test/library-tests/dataflow/models/CONSISTENCY/PathResolutionConsistency.expected delete mode 100644 rust/ql/test/library-tests/dataflow/sources/stdin/CONSISTENCY/PathResolutionConsistency.expected diff --git a/rust/ql/test/library-tests/dataflow/models/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/models/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index 7db15783781..00000000000 --- a/rust/ql/test/library-tests/dataflow/models/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,2 +0,0 @@ -multipleCallTargets -| main.rs:389:14:389:30 | ... .lt(...) | diff --git a/rust/ql/test/library-tests/dataflow/sources/stdin/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/sources/stdin/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index 535b3f339b4..00000000000 --- a/rust/ql/test/library-tests/dataflow/sources/stdin/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,2 +0,0 @@ -multipleCallTargets -| test.rs:31:22:31:72 | ... .read_to_string(...) | diff --git a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected index 11ad8e8069d..076e4066f4f 100644 --- a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected @@ -5,10 +5,7 @@ multipleCallTargets | dereference.rs:184:17:184:30 | ... .foo() | | dereference.rs:186:17:186:25 | S.bar(...) | | dereference.rs:187:17:187:29 | S.bar(...) | -| main.rs:589:9:589:14 | S4.m() | | main.rs:590:9:590:18 | ...::m(...) | -| main.rs:591:9:591:20 | ... .m() | -| main.rs:592:9:592:24 | ...::m(...) | | main.rs:2553:13:2553:31 | ...::from(...) | | main.rs:2554:13:2554:31 | ...::from(...) | | main.rs:2555:13:2555:31 | ...::from(...) | From 9971936036dd67cc633e05cc0da767867a8aa773 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Mon, 3 Nov 2025 10:21:19 +0100 Subject: [PATCH 064/127] Rust: Improvements to docs from review comments --- .../internal/typeinference/FunctionType.qll | 30 +++++++++---------- .../typeinference/internal/TypeInference.qll | 4 +-- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll index 35ba7562658..53420cc7be6 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll @@ -124,34 +124,34 @@ Type getAssocFunctionTypeAt(Function f, ImplOrTraitItemNode i, FunctionPosition * * ```rust * trait T1 { - * fn m1(self); // self1 + * fn m1(self); // T1::m1 * - * fn m2(self) { ... } // self2 + * fn m2(self) { ... } // T1::m2 * } * * trait T2 : T1 { - * fn m3(self); // self3 + * fn m3(self); // T2::m3 * } * * impl T1 for X { - * fn m1(self) { ... } // self4 + * fn m1(self) { ... } // X::m1 * } * * impl T2 for X { - * fn m3(self) { ... } // self5 + * fn m3(self) { ... } // X::m3 * } * ``` * - * f | `impl` or trait | pos | type - * ---- | --------------- | ------ | ---- - * `m1` | `trait T1` | `self` | `T1` - * `m1` | `trait T2` | `self` | `T2` - * `m2` | `trait T1` | `self` | `T1` - * `m2` | `trait T2` | `self` | `T2` - * `m2` | `impl T1 for X` | `self` | `X` - * `m3` | `trait T2` | `self` | `T2` - * `m4` | `impl T2 for X` | `self` | `X` - * `m5` | `impl T2 for X` | `self` | `X` + * f | `impl` or trait | pos | type + * -------- | --------------- | ------ | ---- + * `T1::m1` | `trait T1` | `self` | `T1` + * `T1::m1` | `trait T2` | `self` | `T2` + * `T1::m2` | `trait T1` | `self` | `T1` + * `T1::m2` | `trait T2` | `self` | `T2` + * `T1::m2` | `impl T1 for X` | `self` | `X` + * `T2::m3` | `trait T2` | `self` | `T2` + * `X::m1` | `impl T1 for X` | `self` | `X` + * `X::m3` | `impl T2 for X` | `self` | `X` */ class AssocFunctionType extends MkAssocFunctionType { /** diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index 260f78344ed..9b9d60abb67 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -449,8 +449,8 @@ module Make1 Input1> { * - `abs` is a type abstraction that introduces type variables that are * free in `condition` and `constraint`, * - and for every instantiation of the type parameters from `abs` the - * resulting `condition` satisifies the constraint given by `constraint`. - * - `transitive` corresponds to wether any further constraints satisifed + * resulting `condition` satisfies the constraint given by `constraint`. + * - `transitive` corresponds to whether any further constraints satisfied * through `constraint` also applies to `condition`. * * Example in C#: From 4eb22a7e5524547979c16ed91a1c68d0d66643de Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Mon, 17 Nov 2025 10:29:48 +0100 Subject: [PATCH 065/127] Rust: Fix grammar --- .../codeql/typeinference/internal/TypeInference.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index 9b9d60abb67..a03af8f4ffe 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -451,7 +451,7 @@ module Make1 Input1> { * - and for every instantiation of the type parameters from `abs` the * resulting `condition` satisfies the constraint given by `constraint`. * - `transitive` corresponds to whether any further constraints satisfied - * through `constraint` also applies to `condition`. + * through `constraint` should also apply to `condition`. * * Example in C#: * ```csharp From 39720a17efb31d6d226178a6eafdc1209f84daf9 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 13 Nov 2025 13:00:31 +0100 Subject: [PATCH 066/127] Rust: More type inference tests --- .../PathResolutionConsistency.expected | 12 +- .../test/library-tests/type-inference/main.rs | 81 + .../type-inference/type-inference.expected | 5055 +++++++++-------- 3 files changed, 2713 insertions(+), 2435 deletions(-) diff --git a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected index 076e4066f4f..7ee176a136f 100644 --- a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected @@ -6,9 +6,9 @@ multipleCallTargets | dereference.rs:186:17:186:25 | S.bar(...) | | dereference.rs:187:17:187:29 | S.bar(...) | | main.rs:590:9:590:18 | ...::m(...) | -| main.rs:2553:13:2553:31 | ...::from(...) | -| main.rs:2554:13:2554:31 | ...::from(...) | -| main.rs:2555:13:2555:31 | ...::from(...) | -| main.rs:2561:13:2561:31 | ...::from(...) | -| main.rs:2562:13:2562:31 | ...::from(...) | -| main.rs:2563:13:2563:31 | ...::from(...) | +| main.rs:2634:13:2634:31 | ...::from(...) | +| main.rs:2635:13:2635:31 | ...::from(...) | +| main.rs:2636:13:2636:31 | ...::from(...) | +| main.rs:2642:13:2642:31 | ...::from(...) | +| main.rs:2643:13:2643:31 | ...::from(...) | +| main.rs:2644:13:2644:31 | ...::from(...) | diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index d3209ccbfdf..a8568116afb 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -1736,6 +1736,87 @@ mod builtins { let f = 123.0f64; // $ certainType=f:f64 let t = true; // $ certainType=t:bool let f = false; // $ certainType=f:bool + + trait MyTrait { + fn my_method(&self) -> &T; + + fn my_func() -> T; + } + + impl MyTrait for [T; N] { + fn my_method(&self) -> &T { + self.get(0).unwrap() // $ MISSING: target=get target=unwrap + } + + fn my_func() -> T { + T::default() // $ target=default + } + } + + let x = [1, 2, 3].my_method(); // $ target=my_method type=x:&T.i32 + let x = <[_; 3]>::my_method(&[1, 2, 3]); // $ target=my_method type=x:&T.i32 + let x = <[i32; 3]>::my_func(); // $ MISSING: target=my_func type=x:i32 + + impl MyTrait for [T] { + fn my_method(&self) -> &T { + self.get(0).unwrap() // $ target=get target=unwrap + } + + fn my_func() -> T { + T::default() // $ target=default + } + } + + let s: &[i32] = &[1, 2, 3]; + let x = s.my_method(); // $ target=my_method type=x:&T.i32 + let x = <[_]>::my_method(s); // $ target=my_method type=x:&T.i32 + let x = <[i32]>::my_func(); // $ MISSING: target=my_func type=x:i32 + + impl MyTrait for (T, i32) { + fn my_method(&self) -> &T { + &self.0 + } + + fn my_func() -> T { + T::default() // $ target=default + } + } + + let p = (42, 7); + let x = p.my_method(); // $ target=my_method type=x:&T.i32 + let x = <(_, _)>::my_method(&p); // $ target=my_method type=x:&T.i32 + let x = <(i32, i32)>::my_func(); // $ MISSING: target=my_func type=x:i32 + + impl MyTrait for &T { + fn my_method(&self) -> &T { + *self // $ target=deref + } + + fn my_func() -> T { + T::default() // $ target=default + } + } + + let r = &42; + let x = r.my_method(); // $ target=my_method type=x:&T.i32 + let x = <&_>::my_method(&r); // $ target=my_method type=x:&T.i32 + let x = <&i32>::my_func(); // $ MISSING: target=my_func type=x:i32 + + impl MyTrait for *mut T { + fn my_method(&self) -> &T { + unsafe { &**self } // $ target=deref target=deref + } + + fn my_func() -> T { + T::default() // $ target=default + } + } + + let mut v = 42; + let p: *mut i32 = &mut v; + let x = unsafe { p.my_method() }; // $ target=my_method type=x:&T.i32 + let x = unsafe { <*mut _>::my_method(&p) }; // $ target=my_method type=x:&T.i32 + let x = <*mut i32>::my_func(); // $ MISSING: target=my_func type=x:i32 } } 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 1e69c775a8c..8e8465ae5f6 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -3906,7 +3906,7 @@ inferType | main.rs:1723:22:1723:35 | ...::_print(...) | | file://:0:0:0:0 | () | | main.rs:1723:22:1723:35 | { ... } | | file://:0:0:0:0 | () | | main.rs:1723:30:1723:35 | result | | main.rs:1667:5:1668:14 | S1 | -| main.rs:1729:16:1739:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1729:16:1820:5 | { ... } | | file://:0:0:0:0 | () | | main.rs:1730:13:1730:13 | x | | {EXTERNAL LOCATION} | i32 | | main.rs:1730:22:1730:22 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:1731:13:1731:13 | y | | {EXTERNAL LOCATION} | i32 | @@ -3930,2435 +3930,2632 @@ inferType | main.rs:1737:17:1737:20 | true | | {EXTERNAL LOCATION} | bool | | main.rs:1738:13:1738:13 | f | | {EXTERNAL LOCATION} | bool | | main.rs:1738:17:1738:21 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1744:16:1756:5 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1745:13:1745:13 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:1745:17:1745:20 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1745:17:1745:29 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1745:25:1745:29 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1746:13:1746:13 | y | | {EXTERNAL LOCATION} | bool | -| main.rs:1746:17:1746:20 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1746:17:1746:29 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1746:25:1746:29 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1748:17:1748:17 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1749:13:1749:16 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:1749:20:1749:21 | 34 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1749:20:1749:27 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1749:26:1749:27 | 33 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1750:9:1754:9 | if cond {...} else {...} | | file://:0:0:0:0 | () | -| main.rs:1750:12:1750:15 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:1750:17:1752:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1751:17:1751:17 | z | | file://:0:0:0:0 | () | -| main.rs:1751:21:1751:27 | (...) | | file://:0:0:0:0 | () | -| main.rs:1751:22:1751:22 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1751:22:1751:26 | ... = ... | | file://:0:0:0:0 | () | -| main.rs:1751:26:1751:26 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1752:16:1754:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1753:13:1753:13 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1753:13:1753:17 | ... = ... | | file://:0:0:0:0 | () | -| main.rs:1753:17:1753:17 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1755:9:1755:9 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1769:30:1771:9 | { ... } | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1770:13:1770:31 | Vec2 {...} | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1770:23:1770:23 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1770:29:1770:29 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1777:16:1777:19 | SelfParam | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1777:22:1777:24 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1777:41:1782:9 | { ... } | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1778:13:1781:13 | Vec2 {...} | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1779:20:1779:23 | self | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1779:20:1779:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1779:20:1779:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1779:29:1779:31 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1779:29:1779:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1780:20:1780:23 | self | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1780:20:1780:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1780:20:1780:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1780:29:1780:31 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1780:29:1780:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1787:23:1787:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1787:23:1787:31 | SelfParam | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1787:34:1787:36 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1787:45:1790:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1788:13:1788:16 | self | | file://:0:0:0:0 | & | -| main.rs:1788:13:1788:16 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1788:13:1788:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1788:13:1788:27 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:1788:23:1788:25 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1788:23:1788:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1789:13:1789:16 | self | | file://:0:0:0:0 | & | -| main.rs:1789:13:1789:16 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1789:13:1789:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1789:13:1789:27 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:1789:23:1789:25 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1789:23:1789:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1795:16:1795:19 | SelfParam | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1795:22:1795:24 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1795:41:1800:9 | { ... } | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1796:13:1799:13 | Vec2 {...} | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1797:20:1797:23 | self | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1797:20:1797:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1797:20:1797:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1797:29:1797:31 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1797:29:1797:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1798:20:1798:23 | self | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1798:20:1798:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1798:20:1798:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1798:29:1798:31 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1798:29:1798:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1805:23:1805:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1805:23:1805:31 | SelfParam | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1805:34:1805:36 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1805:45:1808:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1806:13:1806:16 | self | | file://:0:0:0:0 | & | -| main.rs:1806:13:1806:16 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1806:13:1806:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1806:13:1806:27 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:1806:23:1806:25 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1806:23:1806:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1807:13:1807:16 | self | | file://:0:0:0:0 | & | -| main.rs:1807:13:1807:16 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1807:13:1807:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1807:13:1807:27 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:1807:23:1807:25 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1807:23:1807:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1813:16:1813:19 | SelfParam | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1813:22:1813:24 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1813:41:1818:9 | { ... } | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1814:13:1817:13 | Vec2 {...} | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1815:20:1815:23 | self | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1815:20:1815:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1815:20:1815:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1815:29:1815:31 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1815:29:1815:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1816:20:1816:23 | self | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1816:20:1816:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1816:20:1816:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1816:29:1816:31 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1816:29:1816:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1822:23:1822:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1822:23:1822:31 | SelfParam | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1822:34:1822:36 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1822:45:1825:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1823:13:1823:16 | self | | file://:0:0:0:0 | & | -| main.rs:1823:13:1823:16 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1823:13:1823:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1823:13:1823:27 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:1823:23:1823:25 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1823:23:1823:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1824:13:1824:16 | self | | file://:0:0:0:0 | & | -| main.rs:1824:13:1824:16 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1824:13:1824:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1824:13:1824:27 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:1824:23:1824:25 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1824:23:1824:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1830:16:1830:19 | SelfParam | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1830:22:1830:24 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1830:41:1835:9 | { ... } | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1831:13:1834:13 | Vec2 {...} | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1832:20:1832:23 | self | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1832:20:1832:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1832:20:1832:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1832:29:1832:31 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1832:29:1832:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1833:20:1833:23 | self | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1833:20:1833:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1833:20:1833:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1833:29:1833:31 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1833:29:1833:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1839:23:1839:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1839:23:1839:31 | SelfParam | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1839:34:1839:36 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1839:45:1842:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1840:13:1840:16 | self | | file://:0:0:0:0 | & | -| main.rs:1840:13:1840:16 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1840:13:1840:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1840:13:1840:27 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:1840:23:1840:25 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1840:23:1840:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1841:13:1841:16 | self | | file://:0:0:0:0 | & | -| main.rs:1841:13:1841:16 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1841:13:1841:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1841:13:1841:27 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:1841:23:1841:25 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1841:23:1841:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1847:16:1847:19 | SelfParam | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1847:22:1847:24 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1847:41:1852:9 | { ... } | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1848:13:1851:13 | Vec2 {...} | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1849:20:1849:23 | self | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1849:20:1849:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1849:20:1849:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1849:29:1849:31 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1849:29:1849:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1850:20:1850:23 | self | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1850:20:1850:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1850:20:1850:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1850:29:1850:31 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1850:29:1850:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1856:23:1856:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1856:23:1856:31 | SelfParam | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1856:34:1856:36 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1856:45:1859:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1857:13:1857:16 | self | | file://:0:0:0:0 | & | -| main.rs:1857:13:1857:16 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1857:13:1857:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1857:13:1857:27 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:1857:23:1857:25 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1857:23:1857:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1858:13:1858:16 | self | | file://:0:0:0:0 | & | -| main.rs:1858:13:1858:16 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1858:13:1858:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1858:13:1858:27 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:1858:23:1858:25 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1858:23:1858:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1864:19:1864:22 | SelfParam | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1864:25:1864:27 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1864:44:1869:9 | { ... } | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1865:13:1868:13 | Vec2 {...} | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1866:20:1866:23 | self | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1866:20:1866:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1866:20:1866:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1866:29:1866:31 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1866:29:1866:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1867:20:1867:23 | self | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1867:20:1867:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1867:20:1867:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1867:29:1867:31 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1867:29:1867:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1873:26:1873:34 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1873:26:1873:34 | SelfParam | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1873:37:1873:39 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1873:48:1876:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1874:13:1874:16 | self | | file://:0:0:0:0 | & | -| main.rs:1874:13:1874:16 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1874:13:1874:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1874:13:1874:27 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:1874:23:1874:25 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1874:23:1874:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1875:13:1875:16 | self | | file://:0:0:0:0 | & | -| main.rs:1875:13:1875:16 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1875:13:1875:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1875:13:1875:27 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:1875:23:1875:25 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1875:23:1875:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1881:18:1881:21 | SelfParam | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1881:24:1881:26 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1881:43:1886:9 | { ... } | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1882:13:1885:13 | Vec2 {...} | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1883:20:1883:23 | self | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1883:20:1883:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1883:20:1883:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1883:29:1883:31 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1883:29:1883:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1884:20:1884:23 | self | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1884:20:1884:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1884:20:1884:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1884:29:1884:31 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1884:29:1884:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1890:25:1890:33 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1890:25:1890:33 | SelfParam | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1890:36:1890:38 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1890:47:1893:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1891:13:1891:16 | self | | file://:0:0:0:0 | & | -| main.rs:1891:13:1891:16 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1891:13:1891:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1891:13:1891:27 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:1891:23:1891:25 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1891:23:1891:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1892:13:1892:16 | self | | file://:0:0:0:0 | & | -| main.rs:1892:13:1892:16 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1892:13:1892:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1892:13:1892:27 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:1892:23:1892:25 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1892:23:1892:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1898:19:1898:22 | SelfParam | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1898:25:1898:27 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1898:44:1903:9 | { ... } | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1899:13:1902:13 | Vec2 {...} | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1900:20:1900:23 | self | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1900:20:1900:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1900:20:1900:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1900:29:1900:31 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1900:29:1900:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1901:20:1901:23 | self | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1901:20:1901:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1901:20:1901:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1901:29:1901:31 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1901:29:1901:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1907:26:1907:34 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1907:26:1907:34 | SelfParam | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1907:37:1907:39 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1907:48:1910:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1908:13:1908:16 | self | | file://:0:0:0:0 | & | -| main.rs:1908:13:1908:16 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1908:13:1908:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1908:13:1908:27 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:1908:23:1908:25 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1908:23:1908:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1909:13:1909:16 | self | | file://:0:0:0:0 | & | -| main.rs:1909:13:1909:16 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1909:13:1909:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1909:13:1909:27 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:1909:23:1909:25 | rhs | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1909:23:1909:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1915:16:1915:19 | SelfParam | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1915:22:1915:24 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1915:40:1920:9 | { ... } | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1916:13:1919:13 | Vec2 {...} | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1917:20:1917:23 | self | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1917:20:1917:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1917:20:1917:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1917:30:1917:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1918:20:1918:23 | self | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1918:20:1918:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1918:20:1918:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1918:30:1918:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1924:23:1924:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1924:23:1924:31 | SelfParam | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1924:34:1924:36 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1924:44:1927:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1925:13:1925:16 | self | | file://:0:0:0:0 | & | -| main.rs:1925:13:1925:16 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1925:13:1925:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1925:13:1925:26 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1925:24:1925:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1926:13:1926:16 | self | | file://:0:0:0:0 | & | -| main.rs:1926:13:1926:16 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1926:13:1926:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1926:13:1926:26 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1926:24:1926:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1932:16:1932:19 | SelfParam | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1932:22:1932:24 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1932:40:1937:9 | { ... } | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1933:13:1936:13 | Vec2 {...} | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1934:20:1934:23 | self | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1934:20:1934:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1934:20:1934:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1934:30:1934:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1935:20:1935:23 | self | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1935:20:1935:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1935:20:1935:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1935:30:1935:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1941:23:1941:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1941:23:1941:31 | SelfParam | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1941:34:1941:36 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1941:44:1944:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1942:13:1942:16 | self | | file://:0:0:0:0 | & | -| main.rs:1942:13:1942:16 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1942:13:1942:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1942:13:1942:26 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1942:24:1942:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1943:13:1943:16 | self | | file://:0:0:0:0 | & | -| main.rs:1943:13:1943:16 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1943:13:1943:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1943:13:1943:26 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1943:24:1943:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1949:16:1949:19 | SelfParam | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1949:30:1954:9 | { ... } | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1950:13:1953:13 | Vec2 {...} | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1951:20:1951:26 | - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1951:21:1951:24 | self | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1951:21:1951:26 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1952:20:1952:26 | - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1952:21:1952:24 | self | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1952:21:1952:26 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1959:16:1959:19 | SelfParam | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1959:30:1964:9 | { ... } | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1960:13:1963:13 | Vec2 {...} | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1961:20:1961:26 | ! ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1961:21:1961:24 | self | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1961:21:1961:26 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1962:20:1962:26 | ! ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1962:21:1962:24 | self | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1962:21:1962:26 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1968:15:1968:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1968:15:1968:19 | SelfParam | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1968:22:1968:26 | other | | file://:0:0:0:0 | & | -| main.rs:1968:22:1968:26 | other | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1968:44:1970:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1969:13:1969:16 | self | | file://:0:0:0:0 | & | -| main.rs:1969:13:1969:16 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1969:13:1969:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1969:13:1969:29 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1969:13:1969:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1969:23:1969:27 | other | | file://:0:0:0:0 | & | -| main.rs:1969:23:1969:27 | other | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1969:23:1969:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1969:34:1969:37 | self | | file://:0:0:0:0 | & | -| main.rs:1969:34:1969:37 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1969:34:1969:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1969:34:1969:50 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1969:44:1969:48 | other | | file://:0:0:0:0 | & | -| main.rs:1969:44:1969:48 | other | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1969:44:1969:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1972:15:1972:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1972:15:1972:19 | SelfParam | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1972:22:1972:26 | other | | file://:0:0:0:0 | & | -| main.rs:1972:22:1972:26 | other | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1972:44:1974:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1741:26:1741:30 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1741:26:1741:30 | SelfParam | &T | main.rs:1740:9:1744:9 | Self [trait MyTrait] | +| main.rs:1747:26:1747:30 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1747:26:1747:30 | SelfParam | &T | file://:0:0:0:0 | [] | +| main.rs:1747:26:1747:30 | SelfParam | &T.[T;...] | main.rs:1746:14:1746:23 | T | +| main.rs:1747:39:1749:13 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1747:39:1749:13 | { ... } | &T | main.rs:1746:14:1746:23 | T | +| main.rs:1748:17:1748:20 | self | | file://:0:0:0:0 | & | +| main.rs:1748:17:1748:20 | self | &T | file://:0:0:0:0 | [] | +| main.rs:1748:17:1748:20 | self | &T.[T;...] | main.rs:1746:14:1746:23 | T | +| main.rs:1748:17:1748:36 | ... .unwrap() | | file://:0:0:0:0 | & | +| main.rs:1748:17:1748:36 | ... .unwrap() | &T | main.rs:1746:14:1746:23 | T | +| main.rs:1748:26:1748:26 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1751:31:1753:13 | { ... } | | main.rs:1746:14:1746:23 | T | +| main.rs:1752:17:1752:28 | ...::default(...) | | main.rs:1746:14:1746:23 | T | +| main.rs:1756:13:1756:13 | x | | file://:0:0:0:0 | & | +| main.rs:1756:13:1756:13 | x | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1756:17:1756:25 | [...] | | file://:0:0:0:0 | [] | +| main.rs:1756:17:1756:25 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:1756:17:1756:37 | ... .my_method() | | file://:0:0:0:0 | & | +| main.rs:1756:17:1756:37 | ... .my_method() | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1756:18:1756:18 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1756:21:1756:21 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1756:24:1756:24 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1757:13:1757:13 | x | | file://:0:0:0:0 | & | +| main.rs:1757:13:1757:13 | x | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1757:17:1757:47 | ...::my_method(...) | | file://:0:0:0:0 | & | +| main.rs:1757:17:1757:47 | ...::my_method(...) | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1757:22:1757:22 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1757:37:1757:46 | &... | | file://:0:0:0:0 | & | +| main.rs:1757:37:1757:46 | &... | &T | file://:0:0:0:0 | [] | +| main.rs:1757:37:1757:46 | &... | &T.[T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:1757:38:1757:46 | [...] | | file://:0:0:0:0 | [] | +| main.rs:1757:38:1757:46 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:1757:39:1757:39 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1757:42:1757:42 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1757:45:1757:45 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1758:24:1758:24 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1761:26:1761:30 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1761:26:1761:30 | SelfParam | &T | file://:0:0:0:0 | [] | +| main.rs:1761:26:1761:30 | SelfParam | &T.[T] | main.rs:1760:14:1760:23 | T | +| main.rs:1761:39:1763:13 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1761:39:1763:13 | { ... } | &T | main.rs:1760:14:1760:23 | T | +| main.rs:1762:17:1762:20 | self | | file://:0:0:0:0 | & | +| main.rs:1762:17:1762:20 | self | &T | file://:0:0:0:0 | [] | +| main.rs:1762:17:1762:20 | self | &T.[T] | main.rs:1760:14:1760:23 | T | +| main.rs:1762:17:1762:27 | self.get(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:1762:17:1762:27 | self.get(...) | T | file://:0:0:0:0 | & | +| main.rs:1762:17:1762:27 | self.get(...) | T.&T | main.rs:1760:14:1760:23 | T | +| main.rs:1762:17:1762:36 | ... .unwrap() | | file://:0:0:0:0 | & | +| main.rs:1762:17:1762:36 | ... .unwrap() | &T | main.rs:1760:14:1760:23 | T | +| main.rs:1762:26:1762:26 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1765:31:1767:13 | { ... } | | main.rs:1760:14:1760:23 | T | +| main.rs:1766:17:1766:28 | ...::default(...) | | main.rs:1760:14:1760:23 | T | +| main.rs:1770:13:1770:13 | s | | file://:0:0:0:0 | & | +| main.rs:1770:13:1770:13 | s | &T | file://:0:0:0:0 | [] | +| main.rs:1770:13:1770:13 | s | &T.[T] | {EXTERNAL LOCATION} | i32 | +| main.rs:1770:25:1770:34 | &... | | file://:0:0:0:0 | & | +| main.rs:1770:25:1770:34 | &... | &T | file://:0:0:0:0 | [] | +| main.rs:1770:25:1770:34 | &... | &T | file://:0:0:0:0 | [] | +| main.rs:1770:25:1770:34 | &... | &T.[T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:1770:25:1770:34 | &... | &T.[T] | {EXTERNAL LOCATION} | i32 | +| main.rs:1770:26:1770:34 | [...] | | file://:0:0:0:0 | [] | +| main.rs:1770:26:1770:34 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:1770:27:1770:27 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1770:30:1770:30 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1770:33:1770:33 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1771:13:1771:13 | x | | file://:0:0:0:0 | & | +| main.rs:1771:13:1771:13 | x | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1771:17:1771:17 | s | | file://:0:0:0:0 | & | +| main.rs:1771:17:1771:17 | s | &T | file://:0:0:0:0 | [] | +| main.rs:1771:17:1771:17 | s | &T.[T] | {EXTERNAL LOCATION} | i32 | +| main.rs:1771:17:1771:29 | s.my_method() | | file://:0:0:0:0 | & | +| main.rs:1771:17:1771:29 | s.my_method() | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1772:13:1772:13 | x | | file://:0:0:0:0 | & | +| main.rs:1772:13:1772:13 | x | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1772:17:1772:35 | ...::my_method(...) | | file://:0:0:0:0 | & | +| main.rs:1772:17:1772:35 | ...::my_method(...) | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1772:34:1772:34 | s | | file://:0:0:0:0 | & | +| main.rs:1772:34:1772:34 | s | &T | file://:0:0:0:0 | [] | +| main.rs:1772:34:1772:34 | s | &T.[T] | {EXTERNAL LOCATION} | i32 | +| main.rs:1776:26:1776:30 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1776:26:1776:30 | SelfParam | &T | file://:0:0:0:0 | (T_2) | +| main.rs:1776:26:1776:30 | SelfParam | &T.0(2) | main.rs:1775:14:1775:23 | T | +| main.rs:1776:26:1776:30 | SelfParam | &T.1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:1776:39:1778:13 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1776:39:1778:13 | { ... } | &T | main.rs:1775:14:1775:23 | T | +| main.rs:1777:17:1777:23 | &... | | file://:0:0:0:0 | & | +| main.rs:1777:17:1777:23 | &... | &T | main.rs:1775:14:1775:23 | T | +| main.rs:1777:18:1777:21 | self | | file://:0:0:0:0 | & | +| main.rs:1777:18:1777:21 | self | &T | file://:0:0:0:0 | (T_2) | +| main.rs:1777:18:1777:21 | self | &T.0(2) | main.rs:1775:14:1775:23 | T | +| main.rs:1777:18:1777:21 | self | &T.1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:1777:18:1777:23 | self.0 | | main.rs:1775:14:1775:23 | T | +| main.rs:1780:31:1782:13 | { ... } | | main.rs:1775:14:1775:23 | T | +| main.rs:1781:17:1781:28 | ...::default(...) | | main.rs:1775:14:1775:23 | T | +| main.rs:1785:13:1785:13 | p | | file://:0:0:0:0 | (T_2) | +| main.rs:1785:13:1785:13 | p | 0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:1785:13:1785:13 | p | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:1785:17:1785:23 | TupleExpr | | file://:0:0:0:0 | (T_2) | +| main.rs:1785:17:1785:23 | TupleExpr | 0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:1785:17:1785:23 | TupleExpr | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:1785:18:1785:19 | 42 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1785:22:1785:22 | 7 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1786:13:1786:13 | x | | file://:0:0:0:0 | & | +| main.rs:1786:13:1786:13 | x | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1786:17:1786:17 | p | | file://:0:0:0:0 | (T_2) | +| main.rs:1786:17:1786:17 | p | 0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:1786:17:1786:17 | p | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:1786:17:1786:29 | p.my_method() | | file://:0:0:0:0 | & | +| main.rs:1786:17:1786:29 | p.my_method() | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1787:13:1787:13 | x | | file://:0:0:0:0 | & | +| main.rs:1787:13:1787:13 | x | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1787:17:1787:39 | ...::my_method(...) | | file://:0:0:0:0 | & | +| main.rs:1787:17:1787:39 | ...::my_method(...) | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1787:37:1787:38 | &p | | file://:0:0:0:0 | & | +| main.rs:1787:37:1787:38 | &p | &T | file://:0:0:0:0 | (T_2) | +| main.rs:1787:37:1787:38 | &p | &T.0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:1787:37:1787:38 | &p | &T.1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:1787:38:1787:38 | p | | file://:0:0:0:0 | (T_2) | +| main.rs:1787:38:1787:38 | p | 0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:1787:38:1787:38 | p | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:1791:26:1791:30 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1791:26:1791:30 | SelfParam | &T | file://:0:0:0:0 | & | +| main.rs:1791:26:1791:30 | SelfParam | &T.&T | main.rs:1790:14:1790:23 | T | +| main.rs:1791:39:1793:13 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1791:39:1793:13 | { ... } | &T | main.rs:1790:14:1790:23 | T | +| main.rs:1792:17:1792:21 | * ... | | file://:0:0:0:0 | & | +| main.rs:1792:17:1792:21 | * ... | &T | main.rs:1790:14:1790:23 | T | +| main.rs:1792:18:1792:21 | self | | file://:0:0:0:0 | & | +| main.rs:1792:18:1792:21 | self | &T | file://:0:0:0:0 | & | +| main.rs:1792:18:1792:21 | self | &T.&T | main.rs:1790:14:1790:23 | T | +| main.rs:1795:31:1797:13 | { ... } | | main.rs:1790:14:1790:23 | T | +| main.rs:1796:17:1796:28 | ...::default(...) | | main.rs:1790:14:1790:23 | T | +| main.rs:1800:13:1800:13 | r | | file://:0:0:0:0 | & | +| main.rs:1800:13:1800:13 | r | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1800:17:1800:19 | &42 | | file://:0:0:0:0 | & | +| main.rs:1800:17:1800:19 | &42 | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1800:18:1800:19 | 42 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1801:13:1801:13 | x | | file://:0:0:0:0 | & | +| main.rs:1801:13:1801:13 | x | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1801:17:1801:17 | r | | file://:0:0:0:0 | & | +| main.rs:1801:17:1801:17 | r | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1801:17:1801:29 | r.my_method() | | file://:0:0:0:0 | & | +| main.rs:1801:17:1801:29 | r.my_method() | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1802:13:1802:13 | x | | file://:0:0:0:0 | & | +| main.rs:1802:13:1802:13 | x | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1802:17:1802:35 | ...::my_method(...) | | file://:0:0:0:0 | & | +| main.rs:1802:17:1802:35 | ...::my_method(...) | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1802:33:1802:34 | &r | | file://:0:0:0:0 | & | +| main.rs:1802:33:1802:34 | &r | &T | file://:0:0:0:0 | & | +| main.rs:1802:33:1802:34 | &r | &T.&T | {EXTERNAL LOCATION} | i32 | +| main.rs:1802:34:1802:34 | r | | file://:0:0:0:0 | & | +| main.rs:1802:34:1802:34 | r | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1806:26:1806:30 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1806:26:1806:30 | SelfParam | &T | file://:0:0:0:0 | * | +| main.rs:1806:26:1806:30 | SelfParam | &T.*T | main.rs:1805:14:1805:23 | T | +| main.rs:1806:39:1808:13 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1806:39:1808:13 | { ... } | &T | main.rs:1805:14:1805:23 | T | +| main.rs:1807:17:1807:34 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1807:17:1807:34 | { ... } | &T | main.rs:1805:14:1805:23 | T | +| main.rs:1807:26:1807:32 | &... | | file://:0:0:0:0 | & | +| main.rs:1807:26:1807:32 | &... | &T | main.rs:1805:14:1805:23 | T | +| main.rs:1807:27:1807:32 | * ... | | main.rs:1805:14:1805:23 | T | +| main.rs:1807:28:1807:32 | * ... | | file://:0:0:0:0 | * | +| main.rs:1807:28:1807:32 | * ... | *T | main.rs:1805:14:1805:23 | T | +| main.rs:1807:29:1807:32 | self | | file://:0:0:0:0 | & | +| main.rs:1807:29:1807:32 | self | &T | file://:0:0:0:0 | * | +| main.rs:1807:29:1807:32 | self | &T.*T | main.rs:1805:14:1805:23 | T | +| main.rs:1810:31:1812:13 | { ... } | | main.rs:1805:14:1805:23 | T | +| main.rs:1811:17:1811:28 | ...::default(...) | | main.rs:1805:14:1805:23 | T | +| main.rs:1815:17:1815:17 | v | | {EXTERNAL LOCATION} | i32 | +| main.rs:1815:21:1815:22 | 42 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1816:13:1816:13 | p | | file://:0:0:0:0 | * | +| main.rs:1816:13:1816:13 | p | *T | {EXTERNAL LOCATION} | i32 | +| main.rs:1816:27:1816:32 | &mut v | | file://:0:0:0:0 | & | +| main.rs:1816:27:1816:32 | &mut v | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1816:32:1816:32 | v | | {EXTERNAL LOCATION} | i32 | +| main.rs:1817:13:1817:13 | x | | file://:0:0:0:0 | & | +| main.rs:1817:13:1817:13 | x | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1817:17:1817:40 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1817:17:1817:40 | { ... } | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1817:26:1817:26 | p | | file://:0:0:0:0 | * | +| main.rs:1817:26:1817:26 | p | *T | {EXTERNAL LOCATION} | i32 | +| main.rs:1817:26:1817:38 | p.my_method() | | file://:0:0:0:0 | & | +| main.rs:1817:26:1817:38 | p.my_method() | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1818:13:1818:13 | x | | file://:0:0:0:0 | & | +| main.rs:1818:13:1818:13 | x | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1818:17:1818:50 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1818:17:1818:50 | { ... } | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1818:26:1818:48 | ...::my_method(...) | | file://:0:0:0:0 | & | +| main.rs:1818:26:1818:48 | ...::my_method(...) | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1818:46:1818:47 | &p | | file://:0:0:0:0 | & | +| main.rs:1818:46:1818:47 | &p | &T | file://:0:0:0:0 | * | +| main.rs:1818:46:1818:47 | &p | &T.*T | {EXTERNAL LOCATION} | i32 | +| main.rs:1818:47:1818:47 | p | | file://:0:0:0:0 | * | +| main.rs:1818:47:1818:47 | p | *T | {EXTERNAL LOCATION} | i32 | +| main.rs:1825:16:1837:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1826:13:1826:13 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:1826:17:1826:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1826:17:1826:29 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1826:25:1826:29 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1827:13:1827:13 | y | | {EXTERNAL LOCATION} | bool | +| main.rs:1827:17:1827:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1827:17:1827:29 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1827:25:1827:29 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1829:17:1829:17 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1830:13:1830:16 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:1830:20:1830:21 | 34 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1830:20:1830:27 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1830:26:1830:27 | 33 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1831:9:1835:9 | if cond {...} else {...} | | file://:0:0:0:0 | () | +| main.rs:1831:12:1831:15 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:1831:17:1833:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1832:17:1832:17 | z | | file://:0:0:0:0 | () | +| main.rs:1832:21:1832:27 | (...) | | file://:0:0:0:0 | () | +| main.rs:1832:22:1832:22 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1832:22:1832:26 | ... = ... | | file://:0:0:0:0 | () | +| main.rs:1832:26:1832:26 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1833:16:1835:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1834:13:1834:13 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1834:13:1834:17 | ... = ... | | file://:0:0:0:0 | () | +| main.rs:1834:17:1834:17 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1836:9:1836:9 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1850:30:1852:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1851:13:1851:31 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1851:23:1851:23 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1851:29:1851:29 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1858:16:1858:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1858:22:1858:24 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1858:41:1863:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1859:13:1862:13 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1860:20:1860:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1860:20:1860:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1860:20:1860:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1860:29:1860:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1860:29:1860:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1861:20:1861:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1861:20:1861:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1861:20:1861:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1861:29:1861:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1861:29:1861:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1868:23:1868:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1868:23:1868:31 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1868:34:1868:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1868:45:1871:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1869:13:1869:16 | self | | file://:0:0:0:0 | & | +| main.rs:1869:13:1869:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1869:13:1869:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1869:13:1869:27 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:1869:23:1869:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1869:23:1869:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1870:13:1870:16 | self | | file://:0:0:0:0 | & | +| main.rs:1870:13:1870:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1870:13:1870:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1870:13:1870:27 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:1870:23:1870:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1870:23:1870:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1876:16:1876:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1876:22:1876:24 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1876:41:1881:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1877:13:1880:13 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1878:20:1878:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1878:20:1878:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1878:20:1878:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1878:29:1878:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1878:29:1878:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1879:20:1879:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1879:20:1879:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1879:20:1879:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1879:29:1879:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1879:29:1879:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1886:23:1886:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1886:23:1886:31 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1886:34:1886:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1886:45:1889:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1887:13:1887:16 | self | | file://:0:0:0:0 | & | +| main.rs:1887:13:1887:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1887:13:1887:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1887:13:1887:27 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:1887:23:1887:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1887:23:1887:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1888:13:1888:16 | self | | file://:0:0:0:0 | & | +| main.rs:1888:13:1888:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1888:13:1888:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1888:13:1888:27 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:1888:23:1888:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1888:23:1888:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1894:16:1894:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1894:22:1894:24 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1894:41:1899:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1895:13:1898:13 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1896:20:1896:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1896:20:1896:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1896:20:1896:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1896:29:1896:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1896:29:1896:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1897:20:1897:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1897:20:1897:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1897:20:1897:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1897:29:1897:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1897:29:1897:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1903:23:1903:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1903:23:1903:31 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1903:34:1903:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1903:45:1906:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1904:13:1904:16 | self | | file://:0:0:0:0 | & | +| main.rs:1904:13:1904:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1904:13:1904:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1904:13:1904:27 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:1904:23:1904:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1904:23:1904:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1905:13:1905:16 | self | | file://:0:0:0:0 | & | +| main.rs:1905:13:1905:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1905:13:1905:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1905:13:1905:27 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:1905:23:1905:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1905:23:1905:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1911:16:1911:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1911:22:1911:24 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1911:41:1916:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1912:13:1915:13 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1913:20:1913:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1913:20:1913:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1913:20:1913:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1913:29:1913:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1913:29:1913:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1914:20:1914:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1914:20:1914:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1914:20:1914:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1914:29:1914:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1914:29:1914:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1920:23:1920:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1920:23:1920:31 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1920:34:1920:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1920:45:1923:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1921:13:1921:16 | self | | file://:0:0:0:0 | & | +| main.rs:1921:13:1921:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1921:13:1921:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1921:13:1921:27 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:1921:23:1921:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1921:23:1921:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1922:13:1922:16 | self | | file://:0:0:0:0 | & | +| main.rs:1922:13:1922:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1922:13:1922:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1922:13:1922:27 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:1922:23:1922:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1922:23:1922:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1928:16:1928:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1928:22:1928:24 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1928:41:1933:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1929:13:1932:13 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1930:20:1930:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1930:20:1930:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1930:20:1930:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1930:29:1930:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1930:29:1930:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1931:20:1931:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1931:20:1931:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1931:20:1931:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1931:29:1931:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1931:29:1931:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1937:23:1937:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1937:23:1937:31 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1937:34:1937:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1937:45:1940:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1938:13:1938:16 | self | | file://:0:0:0:0 | & | +| main.rs:1938:13:1938:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1938:13:1938:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1938:13:1938:27 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:1938:23:1938:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1938:23:1938:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1939:13:1939:16 | self | | file://:0:0:0:0 | & | +| main.rs:1939:13:1939:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1939:13:1939:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1939:13:1939:27 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:1939:23:1939:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1939:23:1939:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1945:19:1945:22 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1945:25:1945:27 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1945:44:1950:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1946:13:1949:13 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1947:20:1947:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1947:20:1947:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1947:20:1947:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1947:29:1947:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1947:29:1947:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1948:20:1948:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1948:20:1948:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1948:20:1948:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1948:29:1948:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1948:29:1948:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1954:26:1954:34 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1954:26:1954:34 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1954:37:1954:39 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1954:48:1957:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1955:13:1955:16 | self | | file://:0:0:0:0 | & | +| main.rs:1955:13:1955:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1955:13:1955:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1955:13:1955:27 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:1955:23:1955:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1955:23:1955:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1956:13:1956:16 | self | | file://:0:0:0:0 | & | +| main.rs:1956:13:1956:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1956:13:1956:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1956:13:1956:27 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:1956:23:1956:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1956:23:1956:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1962:18:1962:21 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1962:24:1962:26 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1962:43:1967:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1963:13:1966:13 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1964:20:1964:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1964:20:1964:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1964:20:1964:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1964:29:1964:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1964:29:1964:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1965:20:1965:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1965:20:1965:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1965:20:1965:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1965:29:1965:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1965:29:1965:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1971:25:1971:33 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1971:25:1971:33 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1971:36:1971:38 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1971:47:1974:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1972:13:1972:16 | self | | file://:0:0:0:0 | & | +| main.rs:1972:13:1972:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1972:13:1972:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1972:13:1972:27 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:1972:23:1972:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1972:23:1972:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1973:13:1973:16 | self | | file://:0:0:0:0 | & | -| main.rs:1973:13:1973:16 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1973:13:1973:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1973:13:1973:29 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1973:13:1973:50 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1973:23:1973:27 | other | | file://:0:0:0:0 | & | -| main.rs:1973:23:1973:27 | other | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1973:23:1973:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1973:34:1973:37 | self | | file://:0:0:0:0 | & | -| main.rs:1973:34:1973:37 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1973:34:1973:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1973:34:1973:50 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1973:44:1973:48 | other | | file://:0:0:0:0 | & | -| main.rs:1973:44:1973:48 | other | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1973:44:1973:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1978:24:1978:28 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1978:24:1978:28 | SelfParam | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1978:31:1978:35 | other | | file://:0:0:0:0 | & | -| main.rs:1978:31:1978:35 | other | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1978:75:1980:9 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:1978:75:1980:9 | { ... } | T | {EXTERNAL LOCATION} | Ordering | -| main.rs:1979:13:1979:29 | (...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:1979:13:1979:63 | ... .partial_cmp(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:1979:13:1979:63 | ... .partial_cmp(...) | T | {EXTERNAL LOCATION} | Ordering | -| main.rs:1979:14:1979:17 | self | | file://:0:0:0:0 | & | -| main.rs:1979:14:1979:17 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1979:14:1979:19 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1979:14:1979:28 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1979:23:1979:26 | self | | file://:0:0:0:0 | & | -| main.rs:1979:23:1979:26 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1979:23:1979:28 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1979:43:1979:62 | &... | | file://:0:0:0:0 | & | -| main.rs:1979:43:1979:62 | &... | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:1979:44:1979:62 | (...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:1979:45:1979:49 | other | | file://:0:0:0:0 | & | -| main.rs:1979:45:1979:49 | other | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1979:45:1979:51 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1979:45:1979:61 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1979:55:1979:59 | other | | file://:0:0:0:0 | & | -| main.rs:1979:55:1979:59 | other | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1979:55:1979:61 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1982:15:1982:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1982:15:1982:19 | SelfParam | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1982:22:1982:26 | other | | file://:0:0:0:0 | & | -| main.rs:1982:22:1982:26 | other | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1982:44:1984:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1983:13:1983:16 | self | | file://:0:0:0:0 | & | -| main.rs:1983:13:1983:16 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1983:13:1983:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1983:13:1983:28 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1983:13:1983:48 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1983:22:1983:26 | other | | file://:0:0:0:0 | & | -| main.rs:1983:22:1983:26 | other | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1983:22:1983:28 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1983:33:1983:36 | self | | file://:0:0:0:0 | & | -| main.rs:1983:33:1983:36 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1983:33:1983:38 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1983:33:1983:48 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1983:42:1983:46 | other | | file://:0:0:0:0 | & | -| main.rs:1983:42:1983:46 | other | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1983:42:1983:48 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1986:15:1986:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1986:15:1986:19 | SelfParam | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1986:22:1986:26 | other | | file://:0:0:0:0 | & | -| main.rs:1986:22:1986:26 | other | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1986:44:1988:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1987:13:1987:16 | self | | file://:0:0:0:0 | & | -| main.rs:1987:13:1987:16 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1987:13:1987:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1987:13:1987:29 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1987:13:1987:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1987:23:1987:27 | other | | file://:0:0:0:0 | & | -| main.rs:1987:23:1987:27 | other | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1987:23:1987:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1987:34:1987:37 | self | | file://:0:0:0:0 | & | -| main.rs:1987:34:1987:37 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1987:34:1987:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1987:34:1987:50 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1987:44:1987:48 | other | | file://:0:0:0:0 | & | -| main.rs:1987:44:1987:48 | other | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1987:44:1987:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1990:15:1990:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1990:15:1990:19 | SelfParam | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1990:22:1990:26 | other | | file://:0:0:0:0 | & | -| main.rs:1990:22:1990:26 | other | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1990:44:1992:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1991:13:1991:16 | self | | file://:0:0:0:0 | & | -| main.rs:1991:13:1991:16 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1991:13:1991:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1991:13:1991:28 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1991:13:1991:48 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1991:22:1991:26 | other | | file://:0:0:0:0 | & | -| main.rs:1991:22:1991:26 | other | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1991:22:1991:28 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1991:33:1991:36 | self | | file://:0:0:0:0 | & | -| main.rs:1991:33:1991:36 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1991:33:1991:38 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1991:33:1991:48 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1991:42:1991:46 | other | | file://:0:0:0:0 | & | -| main.rs:1991:42:1991:46 | other | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1991:42:1991:48 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1994:15:1994:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1994:15:1994:19 | SelfParam | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1994:22:1994:26 | other | | file://:0:0:0:0 | & | -| main.rs:1994:22:1994:26 | other | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1994:44:1996:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1995:13:1995:16 | self | | file://:0:0:0:0 | & | -| main.rs:1995:13:1995:16 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1995:13:1995:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1995:13:1995:29 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1995:13:1995:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1995:23:1995:27 | other | | file://:0:0:0:0 | & | -| main.rs:1995:23:1995:27 | other | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1995:23:1995:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1995:34:1995:37 | self | | file://:0:0:0:0 | & | -| main.rs:1995:34:1995:37 | self | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1995:34:1995:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1995:34:1995:50 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1995:44:1995:48 | other | | file://:0:0:0:0 | & | -| main.rs:1995:44:1995:48 | other | &T | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:1995:44:1995:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1999:26:1999:26 | a | | main.rs:1999:18:1999:23 | T | -| main.rs:1999:32:1999:32 | b | | main.rs:1999:18:1999:23 | T | -| main.rs:1999:51:2001:5 | { ... } | | {EXTERNAL LOCATION} | Output | -| main.rs:2000:9:2000:9 | a | | main.rs:1999:18:1999:23 | T | -| main.rs:2000:9:2000:13 | ... + ... | | {EXTERNAL LOCATION} | Output | -| main.rs:2000:13:2000:13 | b | | main.rs:1999:18:1999:23 | T | -| main.rs:2003:16:2134:5 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2007:13:2007:18 | i64_eq | | {EXTERNAL LOCATION} | bool | -| main.rs:2007:22:2007:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2007:23:2007:26 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2007:23:2007:34 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2007:31:2007:34 | 2i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2008:13:2008:18 | i64_ne | | {EXTERNAL LOCATION} | bool | -| main.rs:2008:22:2008:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2008:23:2008:26 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2008:23:2008:34 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2008:31:2008:34 | 4i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2009:13:2009:18 | i64_lt | | {EXTERNAL LOCATION} | bool | -| main.rs:2009:22:2009:34 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2009:23:2009:26 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2009:23:2009:33 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2009:30:2009:33 | 6i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2010:13:2010:18 | i64_le | | {EXTERNAL LOCATION} | bool | -| main.rs:2010:22:2010:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2010:23:2010:26 | 7i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2010:23:2010:34 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2010:31:2010:34 | 8i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2011:13:2011:18 | i64_gt | | {EXTERNAL LOCATION} | bool | -| main.rs:2011:22:2011:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2011:23:2011:26 | 9i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2011:23:2011:34 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2011:30:2011:34 | 10i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2012:13:2012:18 | i64_ge | | {EXTERNAL LOCATION} | bool | -| main.rs:2012:22:2012:37 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2012:23:2012:27 | 11i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2012:23:2012:36 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2012:32:2012:36 | 12i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2015:13:2015:19 | i64_add | | {EXTERNAL LOCATION} | i64 | -| main.rs:2015:23:2015:27 | 13i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2015:23:2015:35 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2015:31:2015:35 | 14i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2016:13:2016:19 | i64_sub | | {EXTERNAL LOCATION} | i64 | -| main.rs:2016:23:2016:27 | 15i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2016:23:2016:35 | ... - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2016:31:2016:35 | 16i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2017:13:2017:19 | i64_mul | | {EXTERNAL LOCATION} | i64 | -| main.rs:2017:23:2017:27 | 17i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2017:23:2017:35 | ... * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2017:31:2017:35 | 18i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2018:13:2018:19 | i64_div | | {EXTERNAL LOCATION} | i64 | -| main.rs:2018:23:2018:27 | 19i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2018:23:2018:35 | ... / ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2018:31:2018:35 | 20i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2019:13:2019:19 | i64_rem | | {EXTERNAL LOCATION} | i64 | -| main.rs:2019:23:2019:27 | 21i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2019:23:2019:35 | ... % ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2019:31:2019:35 | 22i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2020:39:2020:42 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2020:45:2020:48 | 2i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2023:17:2023:30 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2023:34:2023:38 | 23i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2024:9:2024:22 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2024:9:2024:31 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:2024:27:2024:31 | 24i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2026:17:2026:30 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2026:34:2026:38 | 25i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2027:9:2027:22 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2027:9:2027:31 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:2027:27:2027:31 | 26i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2029:17:2029:30 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2029:34:2029:38 | 27i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2030:9:2030:22 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2030:9:2030:31 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:2030:27:2030:31 | 28i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2032:17:2032:30 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2032:34:2032:38 | 29i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2033:9:2033:22 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2033:9:2033:31 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:2033:27:2033:31 | 30i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2035:17:2035:30 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2035:34:2035:38 | 31i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2036:9:2036:22 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2036:9:2036:31 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:2036:27:2036:31 | 32i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2039:13:2039:22 | i64_bitand | | {EXTERNAL LOCATION} | i64 | -| main.rs:2039:26:2039:30 | 33i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2039:26:2039:38 | ... & ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2039:34:2039:38 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2040:13:2040:21 | i64_bitor | | {EXTERNAL LOCATION} | i64 | -| main.rs:2040:25:2040:29 | 35i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2040:25:2040:37 | ... \| ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2040:33:2040:37 | 36i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2041:13:2041:22 | i64_bitxor | | {EXTERNAL LOCATION} | i64 | -| main.rs:2041:26:2041:30 | 37i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2041:26:2041:38 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2041:34:2041:38 | 38i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2042:13:2042:19 | i64_shl | | {EXTERNAL LOCATION} | i64 | -| main.rs:2042:23:2042:27 | 39i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2042:23:2042:36 | ... << ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2042:32:2042:36 | 40i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2043:13:2043:19 | i64_shr | | {EXTERNAL LOCATION} | i64 | -| main.rs:2043:23:2043:27 | 41i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2043:23:2043:36 | ... >> ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2043:32:2043:36 | 42i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2046:17:2046:33 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2046:37:2046:41 | 43i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2047:9:2047:25 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2047:9:2047:34 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:2047:30:2047:34 | 44i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2049:17:2049:32 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2049:36:2049:40 | 45i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2050:9:2050:24 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2050:9:2050:33 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:2050:29:2050:33 | 46i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2052:17:2052:33 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2052:37:2052:41 | 47i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2053:9:2053:25 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2053:9:2053:34 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:2053:30:2053:34 | 48i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2055:17:2055:30 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2055:34:2055:38 | 49i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2056:9:2056:22 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2056:9:2056:32 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:2056:28:2056:32 | 50i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2058:17:2058:30 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2058:34:2058:38 | 51i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2059:9:2059:22 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2059:9:2059:32 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:2059:28:2059:32 | 52i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2061:13:2061:19 | i64_neg | | {EXTERNAL LOCATION} | i64 | -| main.rs:2061:23:2061:28 | - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2061:24:2061:28 | 53i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2062:13:2062:19 | i64_not | | {EXTERNAL LOCATION} | i64 | -| main.rs:2062:23:2062:28 | ! ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2062:24:2062:28 | 54i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2065:13:2065:14 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2065:18:2065:36 | Vec2 {...} | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2065:28:2065:28 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2065:34:2065:34 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2066:13:2066:14 | v2 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2066:18:2066:36 | Vec2 {...} | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2066:28:2066:28 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2066:34:2066:34 | 4 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2069:13:2069:19 | vec2_eq | | {EXTERNAL LOCATION} | bool | -| main.rs:2069:23:2069:24 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2069:23:2069:30 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2069:29:2069:30 | v2 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2070:13:2070:19 | vec2_ne | | {EXTERNAL LOCATION} | bool | -| main.rs:2070:23:2070:24 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2070:23:2070:30 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2070:29:2070:30 | v2 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2071:13:2071:19 | vec2_lt | | {EXTERNAL LOCATION} | bool | -| main.rs:2071:23:2071:24 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2071:23:2071:29 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2071:28:2071:29 | v2 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2072:13:2072:19 | vec2_le | | {EXTERNAL LOCATION} | bool | -| main.rs:2072:23:2072:24 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2072:23:2072:30 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2072:29:2072:30 | v2 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2073:13:2073:19 | vec2_gt | | {EXTERNAL LOCATION} | bool | -| main.rs:2073:23:2073:24 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2073:23:2073:29 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2073:28:2073:29 | v2 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2074:13:2074:19 | vec2_ge | | {EXTERNAL LOCATION} | bool | -| main.rs:2074:23:2074:24 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2074:23:2074:30 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2074:29:2074:30 | v2 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2077:13:2077:20 | vec2_add | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2077:24:2077:25 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2077:24:2077:30 | ... + ... | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2077:29:2077:30 | v2 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2078:13:2078:20 | vec2_sub | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2078:24:2078:25 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2078:24:2078:30 | ... - ... | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2078:29:2078:30 | v2 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2079:13:2079:20 | vec2_mul | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2079:24:2079:25 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2079:24:2079:30 | ... * ... | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2079:29:2079:30 | v2 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2080:13:2080:20 | vec2_div | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2080:24:2080:25 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2080:24:2080:30 | ... / ... | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2080:29:2080:30 | v2 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2081:13:2081:20 | vec2_rem | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2081:24:2081:25 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2081:24:2081:30 | ... % ... | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2081:29:2081:30 | v2 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2084:17:2084:31 | vec2_add_assign | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2084:35:2084:36 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2085:9:2085:23 | vec2_add_assign | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2085:9:2085:29 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:2085:28:2085:29 | v2 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2087:17:2087:31 | vec2_sub_assign | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2087:35:2087:36 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2088:9:2088:23 | vec2_sub_assign | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2088:9:2088:29 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:2088:28:2088:29 | v2 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2090:17:2090:31 | vec2_mul_assign | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2090:35:2090:36 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2091:9:2091:23 | vec2_mul_assign | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2091:9:2091:29 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:2091:28:2091:29 | v2 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2093:17:2093:31 | vec2_div_assign | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2093:35:2093:36 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2094:9:2094:23 | vec2_div_assign | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2094:9:2094:29 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:2094:28:2094:29 | v2 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2096:17:2096:31 | vec2_rem_assign | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2096:35:2096:36 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2097:9:2097:23 | vec2_rem_assign | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2097:9:2097:29 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:2097:28:2097:29 | v2 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2100:13:2100:23 | vec2_bitand | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2100:27:2100:28 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2100:27:2100:33 | ... & ... | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2100:32:2100:33 | v2 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2101:13:2101:22 | vec2_bitor | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2101:26:2101:27 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2101:26:2101:32 | ... \| ... | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2101:31:2101:32 | v2 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2102:13:2102:23 | vec2_bitxor | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2102:27:2102:28 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2102:27:2102:33 | ... ^ ... | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2102:32:2102:33 | v2 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2103:13:2103:20 | vec2_shl | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2103:24:2103:25 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2103:24:2103:33 | ... << ... | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2103:30:2103:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2104:13:2104:20 | vec2_shr | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2104:24:2104:25 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2104:24:2104:33 | ... >> ... | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2104:30:2104:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2107:17:2107:34 | vec2_bitand_assign | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2107:38:2107:39 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2108:9:2108:26 | vec2_bitand_assign | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2108:9:2108:32 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:2108:31:2108:32 | v2 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2110:17:2110:33 | vec2_bitor_assign | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2110:37:2110:38 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2111:9:2111:25 | vec2_bitor_assign | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2111:9:2111:31 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:2111:30:2111:31 | v2 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2113:17:2113:34 | vec2_bitxor_assign | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2113:38:2113:39 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2114:9:2114:26 | vec2_bitxor_assign | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2114:9:2114:32 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:2114:31:2114:32 | v2 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2116:17:2116:31 | vec2_shl_assign | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2116:35:2116:36 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2117:9:2117:23 | vec2_shl_assign | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2117:9:2117:32 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:2117:29:2117:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2119:17:2119:31 | vec2_shr_assign | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2119:35:2119:36 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2120:9:2120:23 | vec2_shr_assign | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2120:9:2120:32 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:2120:29:2120:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2123:13:2123:20 | vec2_neg | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2123:24:2123:26 | - ... | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2123:25:2123:26 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2124:13:2124:20 | vec2_not | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2124:24:2124:26 | ! ... | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2124:25:2124:26 | v1 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2127:13:2127:24 | default_vec2 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2127:28:2127:45 | ...::default(...) | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2128:13:2128:26 | vec2_zero_plus | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2128:30:2128:48 | Vec2 {...} | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2128:30:2128:63 | ... + ... | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2128:40:2128:40 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2128:46:2128:46 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2128:52:2128:63 | default_vec2 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2132:13:2132:24 | default_vec2 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2132:28:2132:45 | ...::default(...) | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2133:13:2133:26 | vec2_zero_plus | | {EXTERNAL LOCATION} | bool | -| main.rs:2133:30:2133:48 | Vec2 {...} | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2133:30:2133:64 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2133:40:2133:40 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2133:46:2133:46 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2133:53:2133:64 | default_vec2 | | main.rs:1762:5:1767:5 | Vec2 | -| main.rs:2143:18:2143:21 | SelfParam | | main.rs:2140:5:2140:14 | S1 | -| main.rs:2143:24:2143:25 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2146:25:2148:5 | { ... } | | main.rs:2140:5:2140:14 | S1 | -| main.rs:2147:9:2147:10 | S1 | | main.rs:2140:5:2140:14 | S1 | -| main.rs:2150:41:2152:5 | { ... } | | main.rs:2150:16:2150:39 | impl ... | -| main.rs:2151:9:2151:20 | { ... } | | {EXTERNAL LOCATION} | trait Future | -| main.rs:2151:9:2151:20 | { ... } | Output | main.rs:2140:5:2140:14 | S1 | -| main.rs:2151:17:2151:18 | S1 | | main.rs:2140:5:2140:14 | S1 | -| main.rs:2154:41:2156:5 | { ... } | | main.rs:2154:16:2154:39 | impl ... | -| main.rs:2155:9:2155:16 | { ... } | | {EXTERNAL LOCATION} | trait Future | -| main.rs:2155:9:2155:16 | { ... } | Output | file://:0:0:0:0 | () | -| main.rs:2164:13:2164:42 | SelfParam | | {EXTERNAL LOCATION} | Pin | -| main.rs:2164:13:2164:42 | SelfParam | Ptr | file://:0:0:0:0 | & | -| main.rs:2164:13:2164:42 | SelfParam | Ptr.&T | main.rs:2158:5:2158:14 | S2 | -| main.rs:2165:13:2165:15 | _cx | | file://:0:0:0:0 | & | -| main.rs:2165:13:2165:15 | _cx | &T | {EXTERNAL LOCATION} | Context | -| main.rs:2166:44:2168:9 | { ... } | | {EXTERNAL LOCATION} | Poll | -| main.rs:2166:44:2168:9 | { ... } | T | main.rs:2140:5:2140:14 | S1 | -| main.rs:2167:13:2167:38 | ...::Ready(...) | | {EXTERNAL LOCATION} | Poll | -| main.rs:2167:13:2167:38 | ...::Ready(...) | T | main.rs:2140:5:2140:14 | S1 | -| main.rs:2167:36:2167:37 | S1 | | main.rs:2140:5:2140:14 | S1 | -| main.rs:2171:41:2173:5 | { ... } | | main.rs:2171:16:2171:39 | impl ... | -| main.rs:2172:9:2172:10 | S2 | | main.rs:2158:5:2158:14 | S2 | -| main.rs:2172:9:2172:10 | S2 | | main.rs:2171:16:2171:39 | impl ... | -| main.rs:2175:22:2183:5 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2176:9:2176:12 | f1(...) | | {EXTERNAL LOCATION} | trait Future | -| main.rs:2176:9:2176:12 | f1(...) | Output | main.rs:2140:5:2140:14 | S1 | -| main.rs:2176:9:2176:18 | await ... | | main.rs:2140:5:2140:14 | S1 | -| main.rs:2176:9:2176:22 | ... .f() | | file://:0:0:0:0 | () | -| main.rs:2177:9:2177:12 | f2(...) | | main.rs:2150:16:2150:39 | impl ... | -| main.rs:2177:9:2177:18 | await ... | | main.rs:2140:5:2140:14 | S1 | -| main.rs:2177:9:2177:22 | ... .f() | | file://:0:0:0:0 | () | -| main.rs:2178:9:2178:12 | f3(...) | | main.rs:2154:16:2154:39 | impl ... | -| main.rs:2178:9:2178:18 | await ... | | file://:0:0:0:0 | () | -| main.rs:2179:9:2179:12 | f4(...) | | main.rs:2171:16:2171:39 | impl ... | -| main.rs:2179:9:2179:18 | await ... | | main.rs:2140:5:2140:14 | S1 | -| main.rs:2179:9:2179:22 | ... .f() | | file://:0:0:0:0 | () | -| main.rs:2180:9:2180:10 | S2 | | main.rs:2158:5:2158:14 | S2 | -| main.rs:2180:9:2180:16 | await S2 | | main.rs:2140:5:2140:14 | S1 | -| main.rs:2180:9:2180:20 | ... .f() | | file://:0:0:0:0 | () | -| main.rs:2181:13:2181:13 | b | | {EXTERNAL LOCATION} | trait Future | -| main.rs:2181:13:2181:13 | b | Output | main.rs:2140:5:2140:14 | S1 | -| main.rs:2181:17:2181:28 | { ... } | | {EXTERNAL LOCATION} | trait Future | -| main.rs:2181:17:2181:28 | { ... } | Output | main.rs:2140:5:2140:14 | S1 | -| main.rs:2181:25:2181:26 | S1 | | main.rs:2140:5:2140:14 | S1 | -| main.rs:2182:9:2182:9 | b | | {EXTERNAL LOCATION} | trait Future | -| main.rs:2182:9:2182:9 | b | Output | main.rs:2140:5:2140:14 | S1 | -| main.rs:2182:9:2182:15 | await b | | main.rs:2140:5:2140:14 | S1 | -| main.rs:2182:9:2182:19 | ... .f() | | file://:0:0:0:0 | () | -| main.rs:2193:15:2193:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2193:15:2193:19 | SelfParam | &T | main.rs:2192:5:2194:5 | Self [trait Trait1] | -| main.rs:2193:22:2193:23 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2197:15:2197:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2197:15:2197:19 | SelfParam | &T | main.rs:2196:5:2198:5 | Self [trait Trait2] | -| main.rs:2197:22:2197:23 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2201:15:2201:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2201:15:2201:19 | SelfParam | &T | main.rs:2187:5:2188:14 | S1 | -| main.rs:2201:22:2201:23 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2205:15:2205:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2205:15:2205:19 | SelfParam | &T | main.rs:2187:5:2188:14 | S1 | -| main.rs:2205:22:2205:23 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2208:37:2210:5 | { ... } | | main.rs:2208:16:2208:35 | impl ... + ... | -| main.rs:2209:9:2209:10 | S1 | | main.rs:2187:5:2188:14 | S1 | -| main.rs:2209:9:2209:10 | S1 | | main.rs:2208:16:2208:35 | impl ... + ... | -| main.rs:2213:18:2213:22 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2213:18:2213:22 | SelfParam | &T | main.rs:2212:5:2214:5 | Self [trait MyTrait] | -| main.rs:2217:18:2217:22 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2217:18:2217:22 | SelfParam | &T | main.rs:2187:5:2188:14 | S1 | -| main.rs:2217:31:2219:9 | { ... } | | main.rs:2189:5:2189:14 | S2 | -| main.rs:2218:13:2218:14 | S2 | | main.rs:2189:5:2189:14 | S2 | -| main.rs:2223:18:2223:22 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2223:18:2223:22 | SelfParam | &T | main.rs:2190:5:2190:22 | S3 | -| main.rs:2223:18:2223:22 | SelfParam | &T.T3 | main.rs:2222:10:2222:17 | T | -| main.rs:2223:30:2226:9 | { ... } | | main.rs:2222:10:2222:17 | T | -| main.rs:2224:17:2224:21 | S3(...) | | file://:0:0:0:0 | & | -| main.rs:2224:17:2224:21 | S3(...) | | main.rs:2190:5:2190:22 | S3 | -| main.rs:2224:17:2224:21 | S3(...) | &T | main.rs:2190:5:2190:22 | S3 | -| main.rs:2224:17:2224:21 | S3(...) | &T.T3 | main.rs:2222:10:2222:17 | T | -| main.rs:2224:25:2224:28 | self | | file://:0:0:0:0 | & | -| main.rs:2224:25:2224:28 | self | &T | main.rs:2190:5:2190:22 | S3 | -| main.rs:2224:25:2224:28 | self | &T.T3 | main.rs:2222:10:2222:17 | T | -| main.rs:2225:13:2225:21 | t.clone() | | main.rs:2222:10:2222:17 | T | -| main.rs:2229:45:2231:5 | { ... } | | main.rs:2229:28:2229:43 | impl ... | -| main.rs:2230:9:2230:10 | S1 | | main.rs:2187:5:2188:14 | S1 | -| main.rs:2230:9:2230:10 | S1 | | main.rs:2229:28:2229:43 | impl ... | -| main.rs:2233:41:2233:41 | t | | main.rs:2233:26:2233:38 | B | -| main.rs:2233:52:2235:5 | { ... } | | main.rs:2233:23:2233:23 | A | -| main.rs:2234:9:2234:9 | t | | main.rs:2233:26:2233:38 | B | -| main.rs:2234:9:2234:17 | t.get_a() | | main.rs:2233:23:2233:23 | A | -| main.rs:2237:34:2237:34 | x | | main.rs:2237:24:2237:31 | T | -| main.rs:2237:59:2239:5 | { ... } | | main.rs:2237:43:2237:57 | impl ... | -| main.rs:2237:59:2239:5 | { ... } | impl(T) | main.rs:2237:24:2237:31 | T | -| main.rs:2238:9:2238:13 | S3(...) | | main.rs:2190:5:2190:22 | S3 | -| main.rs:2238:9:2238:13 | S3(...) | | main.rs:2237:43:2237:57 | impl ... | -| main.rs:2238:9:2238:13 | S3(...) | T3 | main.rs:2237:24:2237:31 | T | -| main.rs:2238:9:2238:13 | S3(...) | impl(T) | main.rs:2237:24:2237:31 | T | -| main.rs:2238:12:2238:12 | x | | main.rs:2237:24:2237:31 | T | -| main.rs:2241:34:2241:34 | x | | main.rs:2241:24:2241:31 | T | -| main.rs:2241:67:2243:5 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:2241:67:2243:5 | { ... } | T | main.rs:2241:50:2241:64 | impl ... | -| main.rs:2241:67:2243:5 | { ... } | T.impl(T) | main.rs:2241:24:2241:31 | T | -| main.rs:2242:9:2242:19 | Some(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2242:9:2242:19 | Some(...) | T | main.rs:2190:5:2190:22 | S3 | -| main.rs:2242:9:2242:19 | Some(...) | T | main.rs:2241:50:2241:64 | impl ... | -| main.rs:2242:9:2242:19 | Some(...) | T.T3 | main.rs:2241:24:2241:31 | T | -| main.rs:2242:9:2242:19 | Some(...) | T.impl(T) | main.rs:2241:24:2241:31 | T | -| main.rs:2242:14:2242:18 | S3(...) | | main.rs:2190:5:2190:22 | S3 | -| main.rs:2242:14:2242:18 | S3(...) | T3 | main.rs:2241:24:2241:31 | T | -| main.rs:2242:17:2242:17 | x | | main.rs:2241:24:2241:31 | T | -| main.rs:2245:34:2245:34 | x | | main.rs:2245:24:2245:31 | T | -| main.rs:2245:78:2247:5 | { ... } | | file://:0:0:0:0 | (T_2) | -| main.rs:2245:78:2247:5 | { ... } | 0(2) | main.rs:2245:44:2245:58 | impl ... | -| main.rs:2245:78:2247:5 | { ... } | 0(2).impl(T) | main.rs:2245:24:2245:31 | T | -| main.rs:2245:78:2247:5 | { ... } | 1(2) | main.rs:2245:61:2245:75 | impl ... | -| main.rs:2245:78:2247:5 | { ... } | 1(2).impl(T) | main.rs:2245:24:2245:31 | T | -| main.rs:2246:9:2246:30 | TupleExpr | | file://:0:0:0:0 | (T_2) | -| main.rs:2246:9:2246:30 | TupleExpr | 0(2) | main.rs:2190:5:2190:22 | S3 | -| main.rs:2246:9:2246:30 | TupleExpr | 0(2) | main.rs:2245:44:2245:58 | impl ... | -| main.rs:2246:9:2246:30 | TupleExpr | 0(2).T3 | main.rs:2245:24:2245:31 | T | -| main.rs:2246:9:2246:30 | TupleExpr | 0(2).impl(T) | main.rs:2245:24:2245:31 | T | -| main.rs:2246:9:2246:30 | TupleExpr | 1(2) | main.rs:2190:5:2190:22 | S3 | -| main.rs:2246:9:2246:30 | TupleExpr | 1(2) | main.rs:2245:61:2245:75 | impl ... | -| main.rs:2246:9:2246:30 | TupleExpr | 1(2).T3 | main.rs:2245:24:2245:31 | T | -| main.rs:2246:9:2246:30 | TupleExpr | 1(2).impl(T) | main.rs:2245:24:2245:31 | T | -| main.rs:2246:10:2246:22 | S3(...) | | main.rs:2190:5:2190:22 | S3 | -| main.rs:2246:10:2246:22 | S3(...) | | main.rs:2245:44:2245:58 | impl ... | -| main.rs:2246:10:2246:22 | S3(...) | T3 | main.rs:2245:24:2245:31 | T | -| main.rs:2246:10:2246:22 | S3(...) | impl(T) | main.rs:2245:24:2245:31 | T | -| main.rs:2246:13:2246:13 | x | | main.rs:2245:24:2245:31 | T | -| main.rs:2246:13:2246:21 | x.clone() | | main.rs:2245:24:2245:31 | T | -| main.rs:2246:25:2246:29 | S3(...) | | main.rs:2190:5:2190:22 | S3 | -| main.rs:2246:25:2246:29 | S3(...) | | main.rs:2245:61:2245:75 | impl ... | -| main.rs:2246:25:2246:29 | S3(...) | T3 | main.rs:2245:24:2245:31 | T | -| main.rs:2246:25:2246:29 | S3(...) | impl(T) | main.rs:2245:24:2245:31 | T | -| main.rs:2246:28:2246:28 | x | | main.rs:2245:24:2245:31 | T | -| main.rs:2249:26:2249:26 | t | | main.rs:2249:29:2249:43 | impl ... | -| main.rs:2249:51:2251:5 | { ... } | | main.rs:2249:23:2249:23 | A | -| main.rs:2250:9:2250:9 | t | | main.rs:2249:29:2249:43 | impl ... | -| main.rs:2250:9:2250:17 | t.get_a() | | main.rs:2249:23:2249:23 | A | -| main.rs:2253:16:2267:5 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2254:13:2254:13 | x | | main.rs:2208:16:2208:35 | impl ... + ... | -| main.rs:2254:17:2254:20 | f1(...) | | main.rs:2208:16:2208:35 | impl ... + ... | -| main.rs:2255:9:2255:9 | x | | main.rs:2208:16:2208:35 | impl ... + ... | -| main.rs:2255:9:2255:14 | x.f1() | | file://:0:0:0:0 | () | -| main.rs:2256:9:2256:9 | x | | main.rs:2208:16:2208:35 | impl ... + ... | -| main.rs:2256:9:2256:14 | x.f2() | | file://:0:0:0:0 | () | -| main.rs:2257:13:2257:13 | a | | main.rs:2229:28:2229:43 | impl ... | -| main.rs:2257:17:2257:32 | get_a_my_trait(...) | | main.rs:2229:28:2229:43 | impl ... | -| main.rs:2258:13:2258:13 | b | | main.rs:2189:5:2189:14 | S2 | -| main.rs:2258:17:2258:33 | uses_my_trait1(...) | | main.rs:2189:5:2189:14 | S2 | -| main.rs:2258:32:2258:32 | a | | main.rs:2229:28:2229:43 | impl ... | -| main.rs:2259:13:2259:13 | a | | main.rs:2229:28:2229:43 | impl ... | -| main.rs:2259:17:2259:32 | get_a_my_trait(...) | | main.rs:2229:28:2229:43 | impl ... | -| main.rs:2260:13:2260:13 | c | | main.rs:2189:5:2189:14 | S2 | -| main.rs:2260:17:2260:33 | uses_my_trait2(...) | | main.rs:2189:5:2189:14 | S2 | -| main.rs:2260:32:2260:32 | a | | main.rs:2229:28:2229:43 | impl ... | -| main.rs:2261:13:2261:13 | d | | main.rs:2189:5:2189:14 | S2 | -| main.rs:2261:17:2261:34 | uses_my_trait2(...) | | main.rs:2189:5:2189:14 | S2 | -| main.rs:2261:32:2261:33 | S1 | | main.rs:2187:5:2188:14 | S1 | -| main.rs:2262:13:2262:13 | e | | main.rs:2187:5:2188:14 | S1 | -| main.rs:2262:17:2262:35 | get_a_my_trait2(...) | | main.rs:2237:43:2237:57 | impl ... | -| main.rs:2262:17:2262:35 | get_a_my_trait2(...) | impl(T) | main.rs:2187:5:2188:14 | S1 | -| main.rs:2262:17:2262:43 | ... .get_a() | | main.rs:2187:5:2188:14 | S1 | -| main.rs:2262:33:2262:34 | S1 | | main.rs:2187:5:2188:14 | S1 | -| main.rs:2265:13:2265:13 | f | | main.rs:2187:5:2188:14 | S1 | -| main.rs:2265:17:2265:35 | get_a_my_trait3(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2265:17:2265:35 | get_a_my_trait3(...) | T | main.rs:2241:50:2241:64 | impl ... | -| main.rs:2265:17:2265:35 | get_a_my_trait3(...) | T.impl(T) | main.rs:2187:5:2188:14 | S1 | -| main.rs:2265:17:2265:44 | ... .unwrap() | | main.rs:2241:50:2241:64 | impl ... | -| main.rs:2265:17:2265:44 | ... .unwrap() | impl(T) | main.rs:2187:5:2188:14 | S1 | -| main.rs:2265:17:2265:52 | ... .get_a() | | main.rs:2187:5:2188:14 | S1 | -| main.rs:2265:33:2265:34 | S1 | | main.rs:2187:5:2188:14 | S1 | -| main.rs:2266:13:2266:13 | g | | main.rs:2187:5:2188:14 | S1 | -| main.rs:2266:17:2266:35 | get_a_my_trait4(...) | | file://:0:0:0:0 | (T_2) | -| main.rs:2266:17:2266:35 | get_a_my_trait4(...) | 0(2) | main.rs:2245:44:2245:58 | impl ... | -| main.rs:2266:17:2266:35 | get_a_my_trait4(...) | 0(2).impl(T) | main.rs:2187:5:2188:14 | S1 | -| main.rs:2266:17:2266:35 | get_a_my_trait4(...) | 1(2) | main.rs:2245:61:2245:75 | impl ... | -| main.rs:2266:17:2266:35 | get_a_my_trait4(...) | 1(2).impl(T) | main.rs:2187:5:2188:14 | S1 | -| main.rs:2266:17:2266:37 | ... .0 | | main.rs:2245:44:2245:58 | impl ... | -| main.rs:2266:17:2266:37 | ... .0 | impl(T) | main.rs:2187:5:2188:14 | S1 | -| main.rs:2266:17:2266:45 | ... .get_a() | | main.rs:2187:5:2188:14 | S1 | -| main.rs:2266:33:2266:34 | S1 | | main.rs:2187:5:2188:14 | S1 | -| main.rs:2277:16:2277:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2277:16:2277:20 | SelfParam | &T | main.rs:2273:5:2274:13 | S | -| main.rs:2277:31:2279:9 | { ... } | | main.rs:2273:5:2274:13 | S | -| main.rs:2278:13:2278:13 | S | | main.rs:2273:5:2274:13 | S | -| main.rs:2288:26:2290:9 | { ... } | | main.rs:2282:5:2285:5 | MyVec | -| main.rs:2288:26:2290:9 | { ... } | T | main.rs:2287:10:2287:10 | T | -| main.rs:2289:13:2289:38 | MyVec {...} | | main.rs:2282:5:2285:5 | MyVec | -| main.rs:2289:13:2289:38 | MyVec {...} | T | main.rs:2287:10:2287:10 | T | -| main.rs:2289:27:2289:36 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2289:27:2289:36 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2289:27:2289:36 | ...::new(...) | T | main.rs:2287:10:2287:10 | T | -| main.rs:2292:17:2292:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2292:17:2292:25 | SelfParam | &T | main.rs:2282:5:2285:5 | MyVec | -| main.rs:2292:17:2292:25 | SelfParam | &T.T | main.rs:2287:10:2287:10 | T | -| main.rs:2292:28:2292:32 | value | | main.rs:2287:10:2287:10 | T | -| main.rs:2292:38:2294:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2293:13:2293:16 | self | | file://:0:0:0:0 | & | -| main.rs:2293:13:2293:16 | self | &T | main.rs:2282:5:2285:5 | MyVec | -| main.rs:2293:13:2293:16 | self | &T.T | main.rs:2287:10:2287:10 | T | -| main.rs:2293:13:2293:21 | self.data | | {EXTERNAL LOCATION} | Vec | -| main.rs:2293:13:2293:21 | self.data | A | {EXTERNAL LOCATION} | Global | -| main.rs:2293:13:2293:21 | self.data | T | main.rs:2287:10:2287:10 | T | -| main.rs:2293:13:2293:33 | ... .push(...) | | file://:0:0:0:0 | () | -| main.rs:2293:28:2293:32 | value | | main.rs:2287:10:2287:10 | T | -| main.rs:2301:18:2301:22 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2301:18:2301:22 | SelfParam | &T | main.rs:2282:5:2285:5 | MyVec | -| main.rs:2301:18:2301:22 | SelfParam | &T.T | main.rs:2297:10:2297:10 | T | -| main.rs:2301:25:2301:29 | index | | {EXTERNAL LOCATION} | usize | -| main.rs:2301:56:2303:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:2301:56:2303:9 | { ... } | &T | main.rs:2297:10:2297:10 | T | -| main.rs:2302:13:2302:29 | &... | | file://:0:0:0:0 | & | -| main.rs:2302:13:2302:29 | &... | &T | main.rs:2297:10:2297:10 | T | -| main.rs:2302:14:2302:17 | self | | file://:0:0:0:0 | & | -| main.rs:2302:14:2302:17 | self | &T | main.rs:2282:5:2285:5 | MyVec | -| main.rs:2302:14:2302:17 | self | &T.T | main.rs:2297:10:2297:10 | T | -| main.rs:2302:14:2302:22 | self.data | | {EXTERNAL LOCATION} | Vec | -| main.rs:2302:14:2302:22 | self.data | A | {EXTERNAL LOCATION} | Global | -| main.rs:2302:14:2302:22 | self.data | T | main.rs:2297:10:2297:10 | T | -| main.rs:2302:14:2302:29 | ...[index] | | main.rs:2297:10:2297:10 | T | -| main.rs:2302:24:2302:28 | index | | {EXTERNAL LOCATION} | usize | -| main.rs:2306:22:2306:26 | slice | | file://:0:0:0:0 | & | -| main.rs:2306:22:2306:26 | slice | &T | file://:0:0:0:0 | [] | -| main.rs:2306:22:2306:26 | slice | &T.[T] | main.rs:2273:5:2274:13 | S | -| main.rs:2306:35:2308:5 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2307:13:2307:13 | x | | main.rs:2273:5:2274:13 | S | -| main.rs:2307:17:2307:21 | slice | | file://:0:0:0:0 | & | -| main.rs:2307:17:2307:21 | slice | &T | file://:0:0:0:0 | [] | -| main.rs:2307:17:2307:21 | slice | &T.[T] | main.rs:2273:5:2274:13 | S | -| main.rs:2307:17:2307:24 | slice[0] | | main.rs:2273:5:2274:13 | S | -| main.rs:2307:17:2307:30 | ... .foo() | | main.rs:2273:5:2274:13 | S | -| main.rs:2307:23:2307:23 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2310:37:2310:37 | a | | main.rs:2310:20:2310:34 | T | -| main.rs:2310:43:2310:43 | b | | {EXTERNAL LOCATION} | usize | -| main.rs:2313:5:2315:5 | { ... } | | {EXTERNAL LOCATION} | Output | -| main.rs:2314:9:2314:9 | a | | main.rs:2310:20:2310:34 | T | -| main.rs:2314:9:2314:12 | a[b] | | {EXTERNAL LOCATION} | Output | -| main.rs:2314:11:2314:11 | b | | {EXTERNAL LOCATION} | usize | -| main.rs:2317:16:2328:5 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2318:17:2318:19 | vec | | main.rs:2282:5:2285:5 | MyVec | -| main.rs:2318:17:2318:19 | vec | T | main.rs:2273:5:2274:13 | S | -| main.rs:2318:23:2318:34 | ...::new(...) | | main.rs:2282:5:2285:5 | MyVec | -| main.rs:2318:23:2318:34 | ...::new(...) | T | main.rs:2273:5:2274:13 | S | -| main.rs:2319:9:2319:11 | vec | | main.rs:2282:5:2285:5 | MyVec | -| main.rs:2319:9:2319:11 | vec | T | main.rs:2273:5:2274:13 | S | -| main.rs:2319:9:2319:19 | vec.push(...) | | file://:0:0:0:0 | () | -| main.rs:2319:18:2319:18 | S | | main.rs:2273:5:2274:13 | S | -| main.rs:2320:9:2320:11 | vec | | main.rs:2282:5:2285:5 | MyVec | -| main.rs:2320:9:2320:11 | vec | T | main.rs:2273:5:2274:13 | S | -| main.rs:2320:9:2320:14 | vec[0] | | main.rs:2273:5:2274:13 | S | -| main.rs:2320:9:2320:20 | ... .foo() | | main.rs:2273:5:2274:13 | S | -| main.rs:2320:13:2320:13 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2322:13:2322:14 | xs | | file://:0:0:0:0 | [] | -| main.rs:2322:13:2322:14 | xs | [T;...] | main.rs:2273:5:2274:13 | S | -| main.rs:2322:21:2322:21 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2322:26:2322:28 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2322:26:2322:28 | [...] | [T;...] | main.rs:2273:5:2274:13 | S | -| main.rs:2322:27:2322:27 | S | | main.rs:2273:5:2274:13 | S | -| main.rs:2323:13:2323:13 | x | | main.rs:2273:5:2274:13 | S | -| main.rs:2323:17:2323:18 | xs | | file://:0:0:0:0 | [] | -| main.rs:2323:17:2323:18 | xs | [T;...] | main.rs:2273:5:2274:13 | S | -| main.rs:2323:17:2323:21 | xs[0] | | main.rs:2273:5:2274:13 | S | -| main.rs:2323:17:2323:27 | ... .foo() | | main.rs:2273:5:2274:13 | S | -| main.rs:2323:20:2323:20 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2325:29:2325:31 | vec | | main.rs:2282:5:2285:5 | MyVec | -| main.rs:2325:29:2325:31 | vec | T | main.rs:2273:5:2274:13 | S | -| main.rs:2325:34:2325:34 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2327:9:2327:26 | analyze_slice(...) | | file://:0:0:0:0 | () | -| main.rs:2327:23:2327:25 | &xs | | file://:0:0:0:0 | & | -| main.rs:2327:23:2327:25 | &xs | &T | file://:0:0:0:0 | [] | -| main.rs:2327:23:2327:25 | &xs | &T.[T;...] | main.rs:2273:5:2274:13 | S | -| main.rs:2327:24:2327:25 | xs | | file://:0:0:0:0 | [] | -| main.rs:2327:24:2327:25 | xs | [T;...] | main.rs:2273:5:2274:13 | S | -| main.rs:2332:16:2334:5 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2333:13:2333:13 | x | | {EXTERNAL LOCATION} | String | -| main.rs:2333:17:2333:46 | MacroExpr | | {EXTERNAL LOCATION} | String | -| main.rs:2333:25:2333:35 | "Hello, {}" | | file://:0:0:0:0 | & | -| main.rs:2333:25:2333:35 | "Hello, {}" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2333:25:2333:45 | ...::format(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2333:25:2333:45 | ...::must_use(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2333:25:2333:45 | { ... } | | {EXTERNAL LOCATION} | String | -| main.rs:2333:38:2333:45 | "World!" | | file://:0:0:0:0 | & | -| main.rs:2333:38:2333:45 | "World!" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2342:19:2342:22 | SelfParam | | main.rs:2338:5:2343:5 | Self [trait MyAdd] | -| main.rs:2342:25:2342:27 | rhs | | main.rs:2338:17:2338:26 | Rhs | -| main.rs:2349:19:2349:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | -| main.rs:2349:25:2349:29 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2349:45:2351:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2350:13:2350:17 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2358:19:2358:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | -| main.rs:2358:25:2358:29 | value | | file://:0:0:0:0 | & | -| main.rs:2358:25:2358:29 | value | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:2358:46:2360:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2359:13:2359:18 | * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2359:14:2359:18 | value | | file://:0:0:0:0 | & | -| main.rs:2359:14:2359:18 | value | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:2367:19:2367:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | -| main.rs:2367:25:2367:29 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2367:46:2373:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2368:13:2372:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | -| main.rs:2368:13:2372:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | -| main.rs:2368:16:2368:20 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2368:22:2370:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2368:22:2370:13 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2369:17:2369:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2369:17:2369:17 | 1 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2370:20:2372:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2370:20:2372:13 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2371:17:2371:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2371:17:2371:17 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2382:19:2382:22 | SelfParam | | main.rs:2376:5:2376:19 | S | -| main.rs:2382:19:2382:22 | SelfParam | T | main.rs:2378:10:2378:17 | T | -| main.rs:2382:25:2382:29 | other | | main.rs:2376:5:2376:19 | S | -| main.rs:2382:25:2382:29 | other | T | main.rs:2378:10:2378:17 | T | -| main.rs:2382:54:2384:9 | { ... } | | main.rs:2376:5:2376:19 | S | -| main.rs:2382:54:2384:9 | { ... } | T | main.rs:2339:9:2339:20 | Output | -| main.rs:2383:13:2383:39 | S(...) | | main.rs:2376:5:2376:19 | S | -| main.rs:2383:13:2383:39 | S(...) | T | main.rs:2339:9:2339:20 | Output | -| main.rs:2383:15:2383:22 | (...) | | main.rs:2378:10:2378:17 | T | -| main.rs:2383:16:2383:19 | self | | main.rs:2376:5:2376:19 | S | -| main.rs:2383:16:2383:19 | self | T | main.rs:2378:10:2378:17 | T | -| main.rs:2383:16:2383:21 | self.0 | | main.rs:2378:10:2378:17 | T | -| main.rs:2383:31:2383:35 | other | | main.rs:2376:5:2376:19 | S | -| main.rs:2383:31:2383:35 | other | T | main.rs:2378:10:2378:17 | T | -| main.rs:2383:31:2383:37 | other.0 | | main.rs:2378:10:2378:17 | T | -| main.rs:2391:19:2391:22 | SelfParam | | main.rs:2376:5:2376:19 | S | -| main.rs:2391:19:2391:22 | SelfParam | T | main.rs:2387:10:2387:17 | T | -| main.rs:2391:25:2391:29 | other | | main.rs:2387:10:2387:17 | T | -| main.rs:2391:51:2393:9 | { ... } | | main.rs:2376:5:2376:19 | S | -| main.rs:2391:51:2393:9 | { ... } | T | main.rs:2339:9:2339:20 | Output | -| main.rs:2392:13:2392:37 | S(...) | | main.rs:2376:5:2376:19 | S | -| main.rs:2392:13:2392:37 | S(...) | T | main.rs:2339:9:2339:20 | Output | -| main.rs:2392:15:2392:22 | (...) | | main.rs:2387:10:2387:17 | T | -| main.rs:2392:16:2392:19 | self | | main.rs:2376:5:2376:19 | S | -| main.rs:2392:16:2392:19 | self | T | main.rs:2387:10:2387:17 | T | -| main.rs:2392:16:2392:21 | self.0 | | main.rs:2387:10:2387:17 | T | -| main.rs:2392:31:2392:35 | other | | main.rs:2387:10:2387:17 | T | -| main.rs:2403:19:2403:22 | SelfParam | | main.rs:2376:5:2376:19 | S | -| main.rs:2403:19:2403:22 | SelfParam | T | main.rs:2396:14:2396:14 | T | -| main.rs:2403:25:2403:29 | other | | file://:0:0:0:0 | & | -| main.rs:2403:25:2403:29 | other | &T | main.rs:2396:14:2396:14 | T | -| main.rs:2403:55:2405:9 | { ... } | | main.rs:2376:5:2376:19 | S | -| main.rs:2404:13:2404:37 | S(...) | | main.rs:2376:5:2376:19 | S | -| main.rs:2404:15:2404:22 | (...) | | main.rs:2396:14:2396:14 | T | -| main.rs:2404:16:2404:19 | self | | main.rs:2376:5:2376:19 | S | -| main.rs:2404:16:2404:19 | self | T | main.rs:2396:14:2396:14 | T | -| main.rs:2404:16:2404:21 | self.0 | | main.rs:2396:14:2396:14 | T | -| main.rs:2404:31:2404:35 | other | | file://:0:0:0:0 | & | -| main.rs:2404:31:2404:35 | other | &T | main.rs:2396:14:2396:14 | T | -| main.rs:2410:20:2410:24 | value | | main.rs:2408:18:2408:18 | T | -| main.rs:2415:20:2415:24 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2415:40:2417:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2416:13:2416:17 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2422:20:2422:24 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2422:41:2428:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2423:13:2427:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | -| main.rs:2423:13:2427:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | -| main.rs:2423:16:2423:20 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2423:22:2425:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2423:22:2425:13 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2424:17:2424:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2424:17:2424:17 | 1 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2425:20:2427:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2425:20:2427:13 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2426:17:2426:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2426:17:2426:17 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2433:21:2433:25 | value | | main.rs:2431:19:2431:19 | T | -| main.rs:2433:31:2433:31 | x | | main.rs:2431:5:2434:5 | Self [trait MyFrom2] | -| main.rs:2438:21:2438:25 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2438:33:2438:33 | _ | | {EXTERNAL LOCATION} | i64 | -| main.rs:2438:48:2440:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2439:13:2439:17 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2445:21:2445:25 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2445:34:2445:34 | _ | | {EXTERNAL LOCATION} | i64 | -| main.rs:2445:49:2451:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2446:13:2450:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | -| main.rs:2446:16:2446:20 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2446:22:2448:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2447:17:2447:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2448:20:2450:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2449:17:2449:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2456:15:2456:15 | x | | main.rs:2454:5:2460:5 | Self [trait MySelfTrait] | -| main.rs:2459:15:2459:15 | x | | main.rs:2454:5:2460:5 | Self [trait MySelfTrait] | -| main.rs:2464:15:2464:15 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2464:31:2466:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2465:13:2465:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2465:13:2465:17 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2465:17:2465:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2469:15:2469:15 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2469:32:2471:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2470:13:2470:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2470:13:2470:17 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2470:17:2470:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2476:15:2476:15 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:2476:31:2478:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2477:13:2477:13 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2477:13:2477:13 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2481:15:2481:15 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:2481:32:2483:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:2482:13:2482:13 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:2486:16:2511:5 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2487:13:2487:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2487:22:2487:23 | 73 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2487:22:2487:23 | 73 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2488:9:2488:9 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2488:9:2488:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2488:18:2488:21 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2489:9:2489:9 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2489:9:2489:23 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2489:18:2489:22 | &5i64 | | file://:0:0:0:0 | & | -| main.rs:2489:18:2489:22 | &5i64 | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:2489:19:2489:22 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2490:9:2490:9 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2490:9:2490:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2490:18:2490:21 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2492:9:2492:15 | S(...) | | main.rs:2376:5:2376:19 | S | -| main.rs:2492:9:2492:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | -| main.rs:2492:9:2492:31 | ... .my_add(...) | | main.rs:2376:5:2376:19 | S | -| main.rs:2492:11:2492:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2492:24:2492:30 | S(...) | | main.rs:2376:5:2376:19 | S | -| main.rs:2492:24:2492:30 | S(...) | T | {EXTERNAL LOCATION} | i64 | -| main.rs:2492:26:2492:29 | 2i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2493:9:2493:15 | S(...) | | main.rs:2376:5:2376:19 | S | -| main.rs:2493:9:2493:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | -| main.rs:2493:11:2493:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2493:24:2493:27 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2494:9:2494:15 | S(...) | | main.rs:2376:5:2376:19 | S | -| main.rs:2494:9:2494:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | -| main.rs:2494:9:2494:29 | ... .my_add(...) | | main.rs:2376:5:2376:19 | S | -| main.rs:2494:11:2494:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2494:24:2494:28 | &3i64 | | file://:0:0:0:0 | & | -| main.rs:2494:24:2494:28 | &3i64 | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:2494:25:2494:28 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2496:13:2496:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2496:17:2496:35 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2496:30:2496:34 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2497:13:2497:13 | y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2497:17:2497:34 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2497:30:2497:33 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2498:13:2498:13 | z | | {EXTERNAL LOCATION} | i64 | -| main.rs:2498:22:2498:43 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2498:38:2498:42 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2499:9:2499:34 | ...::my_from2(...) | | file://:0:0:0:0 | () | -| main.rs:2499:23:2499:27 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2499:30:2499:33 | 0i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2500:9:2500:33 | ...::my_from2(...) | | file://:0:0:0:0 | () | -| main.rs:2500:23:2500:26 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2500:29:2500:32 | 0i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2501:9:2501:38 | ...::my_from2(...) | | file://:0:0:0:0 | () | -| main.rs:2501:27:2501:31 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2501:34:2501:37 | 0i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2503:9:2503:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2503:17:2503:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2504:9:2504:22 | ...::f2(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2504:17:2504:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2505:9:2505:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2505:18:2505:21 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2506:9:2506:22 | ...::f2(...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2506:18:2506:21 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2507:9:2507:30 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2507:25:2507:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2508:9:2508:30 | ...::f2(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2508:25:2508:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2509:9:2509:29 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2509:25:2509:28 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2510:9:2510:29 | ...::f2(...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2510:25:2510:28 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2518:26:2520:9 | { ... } | | main.rs:2515:5:2515:24 | MyCallable | -| main.rs:2519:13:2519:25 | MyCallable {...} | | main.rs:2515:5:2515:24 | MyCallable | -| main.rs:2522:17:2522:21 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2522:17:2522:21 | SelfParam | &T | main.rs:2515:5:2515:24 | MyCallable | -| main.rs:2522:31:2524:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2523:13:2523:13 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2523:13:2523:13 | 1 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2527:16:2634:5 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2530:9:2530:29 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2530:13:2530:13 | i | | {EXTERNAL LOCATION} | i32 | -| main.rs:2530:18:2530:26 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2530:18:2530:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2530:19:2530:19 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2530:22:2530:22 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2530:25:2530:25 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2530:28:2530:29 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2531:9:2531:44 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2531:18:2531:26 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2531:18:2531:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2531:18:2531:41 | ... .map(...) | | file://:0:0:0:0 | [] | -| main.rs:2531:19:2531:19 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2531:22:2531:22 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2531:25:2531:25 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2531:32:2531:40 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | -| main.rs:2531:32:2531:40 | \|...\| ... | dyn(Args) | file://:0:0:0:0 | (T_1) | -| main.rs:2531:40:2531:40 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2531:43:2531:44 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2532:9:2532:41 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2532:13:2532:13 | i | | {EXTERNAL LOCATION} | Item | -| main.rs:2532:13:2532:13 | i | | {EXTERNAL LOCATION} | i32 | -| main.rs:2532:18:2532:26 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2532:18:2532:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2532:18:2532:38 | ... .into_iter() | | {EXTERNAL LOCATION} | IntoIter | -| main.rs:2532:18:2532:38 | ... .into_iter() | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2532:19:2532:19 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2532:22:2532:22 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2532:25:2532:25 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2532:40:2532:41 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2534:13:2534:17 | vals1 | | file://:0:0:0:0 | [] | -| main.rs:2534:13:2534:17 | vals1 | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2534:13:2534:17 | vals1 | [T;...] | {EXTERNAL LOCATION} | u8 | -| main.rs:2534:21:2534:31 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2534:21:2534:31 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2534:21:2534:31 | [...] | [T;...] | {EXTERNAL LOCATION} | u8 | -| main.rs:2534:22:2534:24 | 1u8 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2534:27:2534:27 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2534:27:2534:27 | 2 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2534:30:2534:30 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2534:30:2534:30 | 3 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2535:9:2535:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2535:13:2535:13 | u | | {EXTERNAL LOCATION} | i32 | -| main.rs:2535:13:2535:13 | u | | {EXTERNAL LOCATION} | u8 | -| main.rs:2535:18:2535:22 | vals1 | | file://:0:0:0:0 | [] | -| main.rs:2535:18:2535:22 | vals1 | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2535:18:2535:22 | vals1 | [T;...] | {EXTERNAL LOCATION} | u8 | -| main.rs:2535:24:2535:25 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2537:13:2537:17 | vals2 | | file://:0:0:0:0 | [] | -| main.rs:2537:13:2537:17 | vals2 | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2537:21:2537:29 | [1u16; 3] | | file://:0:0:0:0 | [] | -| main.rs:2537:21:2537:29 | [1u16; 3] | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2537:22:2537:25 | 1u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2537:28:2537:28 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2538:9:2538:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2538:13:2538:13 | u | | {EXTERNAL LOCATION} | u16 | -| main.rs:2538:18:2538:22 | vals2 | | file://:0:0:0:0 | [] | -| main.rs:2538:18:2538:22 | vals2 | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2538:24:2538:25 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2540:13:2540:17 | vals3 | | file://:0:0:0:0 | [] | -| main.rs:2540:13:2540:17 | vals3 | [T;...] | {EXTERNAL LOCATION} | u32 | -| main.rs:2540:26:2540:26 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2540:31:2540:39 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2540:31:2540:39 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2540:31:2540:39 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | -| main.rs:2540:32:2540:32 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2540:32:2540:32 | 1 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2540:35:2540:35 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2540:35:2540:35 | 2 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2540:38:2540:38 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2540:38:2540:38 | 3 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2541:9:2541:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2541:13:2541:13 | u | | {EXTERNAL LOCATION} | u32 | -| main.rs:2541:18:2541:22 | vals3 | | file://:0:0:0:0 | [] | -| main.rs:2541:18:2541:22 | vals3 | [T;...] | {EXTERNAL LOCATION} | u32 | -| main.rs:2541:24:2541:25 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2543:13:2543:17 | vals4 | | file://:0:0:0:0 | [] | -| main.rs:2543:13:2543:17 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | -| main.rs:2543:26:2543:26 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2543:31:2543:36 | [1; 3] | | file://:0:0:0:0 | [] | -| main.rs:2543:31:2543:36 | [1; 3] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2543:31:2543:36 | [1; 3] | [T;...] | {EXTERNAL LOCATION} | u64 | -| main.rs:2543:32:2543:32 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2543:32:2543:32 | 1 | | {EXTERNAL LOCATION} | u64 | -| main.rs:2543:35:2543:35 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2544:9:2544:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2544:13:2544:13 | u | | {EXTERNAL LOCATION} | u64 | -| main.rs:2544:18:2544:22 | vals4 | | file://:0:0:0:0 | [] | -| main.rs:2544:18:2544:22 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | -| main.rs:2544:24:2544:25 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2546:17:2546:24 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2546:17:2546:24 | strings1 | [T;...] | file://:0:0:0:0 | & | -| main.rs:2546:17:2546:24 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2546:28:2546:48 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2546:28:2546:48 | [...] | [T;...] | file://:0:0:0:0 | & | -| main.rs:2546:28:2546:48 | [...] | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2546:29:2546:33 | "foo" | | file://:0:0:0:0 | & | -| main.rs:2546:29:2546:33 | "foo" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2546:36:2546:40 | "bar" | | file://:0:0:0:0 | & | -| main.rs:2546:36:2546:40 | "bar" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2546:43:2546:47 | "baz" | | file://:0:0:0:0 | & | -| main.rs:2546:43:2546:47 | "baz" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2547:9:2547:29 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2547:13:2547:13 | s | | {EXTERNAL LOCATION} | Item | -| main.rs:2547:13:2547:13 | s | | file://:0:0:0:0 | & | -| main.rs:2547:13:2547:13 | s | &T | file://:0:0:0:0 | & | -| main.rs:2547:13:2547:13 | s | &T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2547:18:2547:26 | &strings1 | | file://:0:0:0:0 | & | -| main.rs:2547:18:2547:26 | &strings1 | &T | file://:0:0:0:0 | [] | -| main.rs:2547:18:2547:26 | &strings1 | &T.[T;...] | file://:0:0:0:0 | & | -| main.rs:2547:18:2547:26 | &strings1 | &T.[T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2547:19:2547:26 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2547:19:2547:26 | strings1 | [T;...] | file://:0:0:0:0 | & | -| main.rs:2547:19:2547:26 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2547:28:2547:29 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2548:9:2548:33 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2548:13:2548:13 | s | | {EXTERNAL LOCATION} | Item | -| main.rs:2548:13:2548:13 | s | | file://:0:0:0:0 | & | -| main.rs:2548:13:2548:13 | s | &T | file://:0:0:0:0 | & | -| main.rs:2548:13:2548:13 | s | &T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2548:18:2548:30 | &mut strings1 | | file://:0:0:0:0 | & | -| main.rs:2548:18:2548:30 | &mut strings1 | &T | file://:0:0:0:0 | [] | -| main.rs:2548:18:2548:30 | &mut strings1 | &T.[T;...] | file://:0:0:0:0 | & | -| main.rs:2548:18:2548:30 | &mut strings1 | &T.[T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2548:23:2548:30 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2548:23:2548:30 | strings1 | [T;...] | file://:0:0:0:0 | & | -| main.rs:2548:23:2548:30 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2548:32:2548:33 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2549:9:2549:28 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2549:13:2549:13 | s | | file://:0:0:0:0 | & | -| main.rs:2549:13:2549:13 | s | &T | {EXTERNAL LOCATION} | str | -| main.rs:2549:18:2549:25 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2549:18:2549:25 | strings1 | [T;...] | file://:0:0:0:0 | & | -| main.rs:2549:18:2549:25 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2549:27:2549:28 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2551:13:2551:20 | strings2 | | file://:0:0:0:0 | [] | -| main.rs:2551:13:2551:20 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2552:9:2556:9 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2552:9:2556:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2553:13:2553:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2553:26:2553:30 | "foo" | | file://:0:0:0:0 | & | -| main.rs:2553:26:2553:30 | "foo" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2554:13:2554:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2554:26:2554:30 | "bar" | | file://:0:0:0:0 | & | -| main.rs:2554:26:2554:30 | "bar" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2555:13:2555:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2555:26:2555:30 | "baz" | | file://:0:0:0:0 | & | -| main.rs:2555:26:2555:30 | "baz" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2557:9:2557:28 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2557:13:2557:13 | s | | {EXTERNAL LOCATION} | String | -| main.rs:2557:18:2557:25 | strings2 | | file://:0:0:0:0 | [] | -| main.rs:2557:18:2557:25 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2557:27:2557:28 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2559:13:2559:20 | strings3 | | file://:0:0:0:0 | & | -| main.rs:2559:13:2559:20 | strings3 | &T | file://:0:0:0:0 | [] | -| main.rs:2559:13:2559:20 | strings3 | &T.[T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2560:9:2564:9 | &... | | file://:0:0:0:0 | & | -| main.rs:2560:9:2564:9 | &... | &T | file://:0:0:0:0 | [] | -| main.rs:2560:9:2564:9 | &... | &T.[T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2560:10:2564:9 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2560:10:2564:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2561:13:2561:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2561:26:2561:30 | "foo" | | file://:0:0:0:0 | & | -| main.rs:2561:26:2561:30 | "foo" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2562:13:2562:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2562:26:2562:30 | "bar" | | file://:0:0:0:0 | & | -| main.rs:2562:26:2562:30 | "bar" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2563:13:2563:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2563:26:2563:30 | "baz" | | file://:0:0:0:0 | & | -| main.rs:2563:26:2563:30 | "baz" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2565:9:2565:28 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2565:13:2565:13 | s | | {EXTERNAL LOCATION} | Item | -| main.rs:2565:13:2565:13 | s | | file://:0:0:0:0 | & | -| main.rs:2565:13:2565:13 | s | &T | {EXTERNAL LOCATION} | String | -| main.rs:2565:18:2565:25 | strings3 | | file://:0:0:0:0 | & | -| main.rs:2565:18:2565:25 | strings3 | &T | file://:0:0:0:0 | [] | -| main.rs:2565:18:2565:25 | strings3 | &T.[T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2565:27:2565:28 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2567:13:2567:21 | callables | | file://:0:0:0:0 | [] | -| main.rs:2567:13:2567:21 | callables | [T;...] | main.rs:2515:5:2515:24 | MyCallable | -| main.rs:2567:25:2567:81 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2567:25:2567:81 | [...] | [T;...] | main.rs:2515:5:2515:24 | MyCallable | -| main.rs:2567:26:2567:42 | ...::new(...) | | main.rs:2515:5:2515:24 | MyCallable | -| main.rs:2567:45:2567:61 | ...::new(...) | | main.rs:2515:5:2515:24 | MyCallable | -| main.rs:2567:64:2567:80 | ...::new(...) | | main.rs:2515:5:2515:24 | MyCallable | -| main.rs:2568:9:2572:9 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2568:13:2568:13 | c | | main.rs:2515:5:2515:24 | MyCallable | -| main.rs:2569:12:2569:20 | callables | | file://:0:0:0:0 | [] | -| main.rs:2569:12:2569:20 | callables | [T;...] | main.rs:2515:5:2515:24 | MyCallable | -| main.rs:2570:9:2572:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2571:17:2571:22 | result | | {EXTERNAL LOCATION} | i64 | -| main.rs:2571:26:2571:26 | c | | main.rs:2515:5:2515:24 | MyCallable | -| main.rs:2571:26:2571:33 | c.call() | | {EXTERNAL LOCATION} | i64 | -| main.rs:2576:9:2576:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2576:13:2576:13 | i | | {EXTERNAL LOCATION} | Item | -| main.rs:2576:13:2576:13 | i | | {EXTERNAL LOCATION} | i32 | -| main.rs:2576:18:2576:18 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2576:18:2576:22 | 0..10 | | {EXTERNAL LOCATION} | Range | -| main.rs:2576:18:2576:22 | 0..10 | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2576:21:2576:22 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2576:24:2576:25 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2577:9:2577:29 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2577:13:2577:13 | u | | {EXTERNAL LOCATION} | Range | -| main.rs:2577:13:2577:13 | u | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2577:13:2577:13 | u | Idx | {EXTERNAL LOCATION} | u8 | -| main.rs:2577:18:2577:26 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2577:18:2577:26 | [...] | [T;...] | {EXTERNAL LOCATION} | Range | -| main.rs:2577:18:2577:26 | [...] | [T;...].Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2577:18:2577:26 | [...] | [T;...].Idx | {EXTERNAL LOCATION} | u8 | -| main.rs:2577:19:2577:21 | 0u8 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2577:19:2577:25 | 0u8..10 | | {EXTERNAL LOCATION} | Range | -| main.rs:2577:19:2577:25 | 0u8..10 | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2577:19:2577:25 | 0u8..10 | Idx | {EXTERNAL LOCATION} | u8 | -| main.rs:2577:24:2577:25 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2577:24:2577:25 | 10 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2577:28:2577:29 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2578:13:2578:17 | range | | {EXTERNAL LOCATION} | Range | -| main.rs:2578:13:2578:17 | range | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2578:21:2578:21 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2578:21:2578:25 | 0..10 | | {EXTERNAL LOCATION} | Range | -| main.rs:2578:21:2578:25 | 0..10 | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2578:24:2578:25 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2579:9:2579:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2579:13:2579:13 | i | | {EXTERNAL LOCATION} | Item | -| main.rs:2579:13:2579:13 | i | | {EXTERNAL LOCATION} | i32 | -| main.rs:2579:18:2579:22 | range | | {EXTERNAL LOCATION} | Range | -| main.rs:2579:18:2579:22 | range | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2579:24:2579:25 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2580:13:2580:22 | range_full | | {EXTERNAL LOCATION} | RangeFull | -| main.rs:2580:26:2580:27 | .. | | {EXTERNAL LOCATION} | RangeFull | -| main.rs:2581:9:2581:51 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2581:13:2581:13 | i | | {EXTERNAL LOCATION} | Item | -| main.rs:2581:18:2581:48 | &... | | file://:0:0:0:0 | & | -| main.rs:2581:19:2581:36 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2581:19:2581:36 | [...] | [T;...] | {EXTERNAL LOCATION} | i64 | -| main.rs:2581:20:2581:23 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2581:26:2581:29 | 2i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2581:32:2581:35 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2581:38:2581:47 | range_full | | {EXTERNAL LOCATION} | RangeFull | -| main.rs:2581:50:2581:51 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2583:13:2583:18 | range1 | | {EXTERNAL LOCATION} | Range | -| main.rs:2583:13:2583:18 | range1 | Idx | {EXTERNAL LOCATION} | u16 | -| main.rs:2584:9:2587:9 | ...::Range {...} | | {EXTERNAL LOCATION} | Range | -| main.rs:2584:9:2587:9 | ...::Range {...} | Idx | {EXTERNAL LOCATION} | u16 | -| main.rs:2585:20:2585:23 | 0u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2586:18:2586:22 | 10u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2588:9:2588:26 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2588:13:2588:13 | u | | {EXTERNAL LOCATION} | Item | -| main.rs:2588:13:2588:13 | u | | {EXTERNAL LOCATION} | u16 | -| main.rs:2588:18:2588:23 | range1 | | {EXTERNAL LOCATION} | Range | -| main.rs:2588:18:2588:23 | range1 | Idx | {EXTERNAL LOCATION} | u16 | -| main.rs:2588:25:2588:26 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2592:26:2592:26 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2592:29:2592:29 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2592:32:2592:32 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2593:9:2593:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2593:24:2593:25 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2595:13:2595:18 | vals4a | | {EXTERNAL LOCATION} | Vec | -| main.rs:2595:13:2595:18 | vals4a | A | {EXTERNAL LOCATION} | Global | -| main.rs:2595:13:2595:18 | vals4a | T | {EXTERNAL LOCATION} | u16 | -| main.rs:2595:32:2595:43 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2595:32:2595:43 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2595:32:2595:43 | [...] | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2595:32:2595:52 | ... .to_vec() | | {EXTERNAL LOCATION} | Vec | -| main.rs:2595:32:2595:52 | ... .to_vec() | A | {EXTERNAL LOCATION} | Global | -| main.rs:2595:32:2595:52 | ... .to_vec() | T | {EXTERNAL LOCATION} | u16 | -| main.rs:2595:33:2595:36 | 1u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2595:39:2595:39 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2595:42:2595:42 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2596:9:2596:26 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2596:13:2596:13 | u | | {EXTERNAL LOCATION} | u16 | -| main.rs:2596:18:2596:23 | vals4a | | {EXTERNAL LOCATION} | Vec | -| main.rs:2596:18:2596:23 | vals4a | A | {EXTERNAL LOCATION} | Global | -| main.rs:2596:18:2596:23 | vals4a | T | {EXTERNAL LOCATION} | u16 | -| main.rs:2596:25:2596:26 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2598:22:2598:33 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2598:22:2598:33 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2598:22:2598:33 | [...] | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2598:23:2598:26 | 1u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2598:29:2598:29 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2598:32:2598:32 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2599:9:2599:26 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2599:25:2599:26 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2601:13:2601:17 | vals5 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2601:13:2601:17 | vals5 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2601:13:2601:17 | vals5 | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2601:13:2601:17 | vals5 | T | {EXTERNAL LOCATION} | u32 | -| main.rs:2601:21:2601:43 | ...::from(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2601:21:2601:43 | ...::from(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2601:21:2601:43 | ...::from(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2601:21:2601:43 | ...::from(...) | T | {EXTERNAL LOCATION} | u32 | -| main.rs:2601:31:2601:42 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2601:31:2601:42 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2601:31:2601:42 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | -| main.rs:2601:32:2601:35 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2601:38:2601:38 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2601:41:2601:41 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2602:9:2602:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2602:13:2602:13 | u | | {EXTERNAL LOCATION} | i32 | -| main.rs:2602:13:2602:13 | u | | {EXTERNAL LOCATION} | u32 | -| main.rs:2602:18:2602:22 | vals5 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2602:18:2602:22 | vals5 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2602:18:2602:22 | vals5 | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2602:18:2602:22 | vals5 | T | {EXTERNAL LOCATION} | u32 | -| main.rs:2602:24:2602:25 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2604:13:2604:17 | vals6 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2604:13:2604:17 | vals6 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2604:13:2604:17 | vals6 | T | file://:0:0:0:0 | & | -| main.rs:2604:13:2604:17 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 | -| main.rs:2604:32:2604:43 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2604:32:2604:43 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2604:32:2604:43 | [...] | [T;...] | {EXTERNAL LOCATION} | u64 | -| main.rs:2604:32:2604:60 | ... .collect() | | {EXTERNAL LOCATION} | Vec | -| main.rs:2604:32:2604:60 | ... .collect() | A | {EXTERNAL LOCATION} | Global | -| main.rs:2604:32:2604:60 | ... .collect() | T | file://:0:0:0:0 | & | -| main.rs:2604:32:2604:60 | ... .collect() | T.&T | {EXTERNAL LOCATION} | u64 | -| main.rs:2604:33:2604:36 | 1u64 | | {EXTERNAL LOCATION} | u64 | -| main.rs:2604:39:2604:39 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2604:42:2604:42 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2605:9:2605:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2605:13:2605:13 | u | | file://:0:0:0:0 | & | -| main.rs:2605:13:2605:13 | u | &T | {EXTERNAL LOCATION} | u64 | -| main.rs:2605:18:2605:22 | vals6 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2605:18:2605:22 | vals6 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2605:18:2605:22 | vals6 | T | file://:0:0:0:0 | & | -| main.rs:2605:18:2605:22 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 | -| main.rs:2605:24:2605:25 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2607:17:2607:21 | vals7 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2607:17:2607:21 | vals7 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2607:17:2607:21 | vals7 | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2607:25:2607:34 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2607:25:2607:34 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2607:25:2607:34 | ...::new(...) | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2608:9:2608:13 | vals7 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2608:9:2608:13 | vals7 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2608:9:2608:13 | vals7 | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2608:9:2608:23 | vals7.push(...) | | file://:0:0:0:0 | () | -| main.rs:2608:20:2608:22 | 1u8 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2609:9:2609:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2609:13:2609:13 | u | | {EXTERNAL LOCATION} | u8 | -| main.rs:2609:18:2609:22 | vals7 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2609:18:2609:22 | vals7 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2609:18:2609:22 | vals7 | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2609:24:2609:25 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2611:33:2611:33 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2611:36:2611:36 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2611:45:2611:45 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2611:48:2611:48 | 4 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2613:13:2613:13 | _ | | file://:0:0:0:0 | () | -| main.rs:2613:17:2616:9 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2613:36:2616:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2614:13:2615:13 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2614:29:2615:13 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2618:17:2618:20 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2618:17:2618:20 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2618:17:2618:20 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2618:17:2618:20 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2618:17:2618:20 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2618:17:2618:20 | map1 | V.T | file://:0:0:0:0 | & | -| main.rs:2618:17:2618:20 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2618:24:2618:55 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2618:24:2618:55 | ...::new(...) | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2618:24:2618:55 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2618:24:2618:55 | ...::new(...) | V | {EXTERNAL LOCATION} | Box | -| main.rs:2618:24:2618:55 | ...::new(...) | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2618:24:2618:55 | ...::new(...) | V.T | file://:0:0:0:0 | & | -| main.rs:2618:24:2618:55 | ...::new(...) | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2619:9:2619:12 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2619:9:2619:12 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2619:9:2619:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2619:9:2619:12 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2619:9:2619:12 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2619:9:2619:12 | map1 | V.T | file://:0:0:0:0 | & | -| main.rs:2619:9:2619:12 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2619:9:2619:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2619:9:2619:39 | map1.insert(...) | T | {EXTERNAL LOCATION} | Box | -| main.rs:2619:9:2619:39 | map1.insert(...) | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2619:9:2619:39 | map1.insert(...) | T.T | file://:0:0:0:0 | & | -| main.rs:2619:9:2619:39 | map1.insert(...) | T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2619:21:2619:21 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2619:24:2619:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2619:24:2619:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2619:24:2619:38 | ...::new(...) | T | file://:0:0:0:0 | & | -| main.rs:2619:24:2619:38 | ...::new(...) | T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2619:33:2619:37 | "one" | | file://:0:0:0:0 | & | -| main.rs:2619:33:2619:37 | "one" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2620:9:2620:12 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2620:9:2620:12 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2620:9:2620:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2620:9:2620:12 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2620:9:2620:12 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2620:9:2620:12 | map1 | V.T | file://:0:0:0:0 | & | -| main.rs:2620:9:2620:12 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2620:9:2620:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2620:9:2620:39 | map1.insert(...) | T | {EXTERNAL LOCATION} | Box | -| main.rs:2620:9:2620:39 | map1.insert(...) | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2620:9:2620:39 | map1.insert(...) | T.T | file://:0:0:0:0 | & | -| main.rs:2620:9:2620:39 | map1.insert(...) | T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2620:21:2620:21 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2620:24:2620:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2620:24:2620:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2620:24:2620:38 | ...::new(...) | T | file://:0:0:0:0 | & | -| main.rs:2620:24:2620:38 | ...::new(...) | T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2620:33:2620:37 | "two" | | file://:0:0:0:0 | & | -| main.rs:2620:33:2620:37 | "two" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2621:9:2621:33 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2621:13:2621:15 | key | | {EXTERNAL LOCATION} | Item | -| main.rs:2621:13:2621:15 | key | | file://:0:0:0:0 | & | -| main.rs:2621:13:2621:15 | key | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:2621:20:2621:23 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2621:20:2621:23 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2621:20:2621:23 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2621:20:2621:23 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2621:20:2621:23 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2621:20:2621:23 | map1 | V.T | file://:0:0:0:0 | & | -| main.rs:2621:20:2621:23 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2621:20:2621:30 | map1.keys() | | {EXTERNAL LOCATION} | Keys | -| main.rs:2621:20:2621:30 | map1.keys() | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2621:20:2621:30 | map1.keys() | V | {EXTERNAL LOCATION} | Box | -| main.rs:2621:20:2621:30 | map1.keys() | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2621:20:2621:30 | map1.keys() | V.T | file://:0:0:0:0 | & | -| main.rs:2621:20:2621:30 | map1.keys() | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2621:32:2621:33 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2622:9:2622:37 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2622:13:2622:17 | value | | {EXTERNAL LOCATION} | Item | -| main.rs:2622:13:2622:17 | value | | file://:0:0:0:0 | & | -| main.rs:2622:13:2622:17 | value | &T | {EXTERNAL LOCATION} | Box | -| main.rs:2622:13:2622:17 | value | &T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2622:13:2622:17 | value | &T.T | file://:0:0:0:0 | & | -| main.rs:2622:13:2622:17 | value | &T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2622:22:2622:25 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2622:22:2622:25 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2622:22:2622:25 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2622:22:2622:25 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2622:22:2622:25 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2622:22:2622:25 | map1 | V.T | file://:0:0:0:0 | & | -| main.rs:2622:22:2622:25 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2622:22:2622:34 | map1.values() | | {EXTERNAL LOCATION} | Values | -| main.rs:2622:22:2622:34 | map1.values() | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2622:22:2622:34 | map1.values() | V | {EXTERNAL LOCATION} | Box | -| main.rs:2622:22:2622:34 | map1.values() | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2622:22:2622:34 | map1.values() | V.T | file://:0:0:0:0 | & | -| main.rs:2622:22:2622:34 | map1.values() | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2622:36:2622:37 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2623:9:2623:42 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2623:13:2623:24 | TuplePat | | file://:0:0:0:0 | (T_2) | -| main.rs:2623:13:2623:24 | TuplePat | 0(2) | file://:0:0:0:0 | & | -| main.rs:2623:13:2623:24 | TuplePat | 0(2).&T | {EXTERNAL LOCATION} | i32 | -| main.rs:2623:13:2623:24 | TuplePat | 1(2) | file://:0:0:0:0 | & | -| main.rs:2623:13:2623:24 | TuplePat | 1(2).&T | {EXTERNAL LOCATION} | Box | -| main.rs:2623:13:2623:24 | TuplePat | 1(2).&T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2623:13:2623:24 | TuplePat | 1(2).&T.T | file://:0:0:0:0 | & | -| main.rs:2623:13:2623:24 | TuplePat | 1(2).&T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2623:14:2623:16 | key | | file://:0:0:0:0 | & | -| main.rs:2623:14:2623:16 | key | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:2623:19:2623:23 | value | | file://:0:0:0:0 | & | -| main.rs:2623:19:2623:23 | value | &T | {EXTERNAL LOCATION} | Box | -| main.rs:2623:19:2623:23 | value | &T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2623:19:2623:23 | value | &T.T | file://:0:0:0:0 | & | -| main.rs:2623:19:2623:23 | value | &T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2623:29:2623:32 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2623:29:2623:32 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2623:29:2623:32 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2623:29:2623:32 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2623:29:2623:32 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2623:29:2623:32 | map1 | V.T | file://:0:0:0:0 | & | -| main.rs:2623:29:2623:32 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2623:29:2623:39 | map1.iter() | | {EXTERNAL LOCATION} | Iter | -| main.rs:2623:29:2623:39 | map1.iter() | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2623:29:2623:39 | map1.iter() | V | {EXTERNAL LOCATION} | Box | -| main.rs:2623:29:2623:39 | map1.iter() | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2623:29:2623:39 | map1.iter() | V.T | file://:0:0:0:0 | & | -| main.rs:2623:29:2623:39 | map1.iter() | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2623:41:2623:42 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2624:9:2624:36 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2624:13:2624:24 | TuplePat | | file://:0:0:0:0 | (T_2) | -| main.rs:2624:13:2624:24 | TuplePat | 0(2) | file://:0:0:0:0 | & | -| main.rs:2624:13:2624:24 | TuplePat | 0(2).&T | {EXTERNAL LOCATION} | i32 | -| main.rs:2624:13:2624:24 | TuplePat | 1(2) | file://:0:0:0:0 | & | -| main.rs:2624:13:2624:24 | TuplePat | 1(2).&T | {EXTERNAL LOCATION} | Box | -| main.rs:2624:13:2624:24 | TuplePat | 1(2).&T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2624:13:2624:24 | TuplePat | 1(2).&T.T | file://:0:0:0:0 | & | -| main.rs:2624:13:2624:24 | TuplePat | 1(2).&T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2624:14:2624:16 | key | | file://:0:0:0:0 | & | -| main.rs:2624:14:2624:16 | key | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:2624:19:2624:23 | value | | file://:0:0:0:0 | & | -| main.rs:2624:19:2624:23 | value | &T | {EXTERNAL LOCATION} | Box | -| main.rs:2624:19:2624:23 | value | &T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2624:19:2624:23 | value | &T.T | file://:0:0:0:0 | & | -| main.rs:2624:19:2624:23 | value | &T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2624:29:2624:33 | &map1 | | file://:0:0:0:0 | & | -| main.rs:2624:29:2624:33 | &map1 | &T | {EXTERNAL LOCATION} | HashMap | -| main.rs:2624:29:2624:33 | &map1 | &T.K | {EXTERNAL LOCATION} | i32 | -| main.rs:2624:29:2624:33 | &map1 | &T.S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2624:29:2624:33 | &map1 | &T.V | {EXTERNAL LOCATION} | Box | -| main.rs:2624:29:2624:33 | &map1 | &T.V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2624:29:2624:33 | &map1 | &T.V.T | file://:0:0:0:0 | & | -| main.rs:2624:29:2624:33 | &map1 | &T.V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2624:30:2624:33 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2624:30:2624:33 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2624:30:2624:33 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2624:30:2624:33 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2624:30:2624:33 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2624:30:2624:33 | map1 | V.T | file://:0:0:0:0 | & | -| main.rs:2624:30:2624:33 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2624:35:2624:36 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2628:17:2628:17 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2628:26:2628:26 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2628:26:2628:26 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2630:13:2630:13 | _ | | file://:0:0:0:0 | () | -| main.rs:2630:17:2633:9 | while ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2630:23:2630:23 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2630:23:2630:28 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2630:27:2630:28 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2631:9:2633:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2632:13:2632:13 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2632:13:2632:18 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:2632:18:2632:18 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2644:40:2646:9 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:2644:40:2646:9 | { ... } | T | main.rs:2638:5:2638:20 | S1 | -| main.rs:2644:40:2646:9 | { ... } | T.T | main.rs:2643:10:2643:19 | T | -| main.rs:2645:13:2645:16 | None | | {EXTERNAL LOCATION} | Option | -| main.rs:2645:13:2645:16 | None | T | main.rs:2638:5:2638:20 | S1 | -| main.rs:2645:13:2645:16 | None | T.T | main.rs:2643:10:2643:19 | T | -| main.rs:2648:30:2650:9 | { ... } | | main.rs:2638:5:2638:20 | S1 | -| main.rs:2648:30:2650:9 | { ... } | T | main.rs:2643:10:2643:19 | T | -| main.rs:2649:13:2649:28 | S1(...) | | main.rs:2638:5:2638:20 | S1 | -| main.rs:2649:13:2649:28 | S1(...) | T | main.rs:2643:10:2643:19 | T | -| main.rs:2649:16:2649:27 | ...::default(...) | | main.rs:2643:10:2643:19 | T | -| main.rs:2652:19:2652:22 | SelfParam | | main.rs:2638:5:2638:20 | S1 | -| main.rs:2652:19:2652:22 | SelfParam | T | main.rs:2643:10:2643:19 | T | -| main.rs:2652:33:2654:9 | { ... } | | main.rs:2638:5:2638:20 | S1 | -| main.rs:2652:33:2654:9 | { ... } | T | main.rs:2643:10:2643:19 | T | -| main.rs:2653:13:2653:16 | self | | main.rs:2638:5:2638:20 | S1 | -| main.rs:2653:13:2653:16 | self | T | main.rs:2643:10:2643:19 | T | -| main.rs:2665:15:2665:15 | x | | main.rs:2665:12:2665:12 | T | -| main.rs:2665:26:2667:5 | { ... } | | main.rs:2665:12:2665:12 | T | -| main.rs:2666:9:2666:9 | x | | main.rs:2665:12:2665:12 | T | -| main.rs:2669:16:2691:5 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2670:13:2670:14 | x1 | | {EXTERNAL LOCATION} | Option | -| main.rs:2670:13:2670:14 | x1 | T | main.rs:2638:5:2638:20 | S1 | -| main.rs:2670:13:2670:14 | x1 | T.T | main.rs:2640:5:2641:14 | S2 | -| main.rs:2670:34:2670:48 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2670:34:2670:48 | ...::assoc_fun(...) | T | main.rs:2638:5:2638:20 | S1 | -| main.rs:2670:34:2670:48 | ...::assoc_fun(...) | T.T | main.rs:2640:5:2641:14 | S2 | -| main.rs:2671:13:2671:14 | x2 | | {EXTERNAL LOCATION} | Option | -| main.rs:2671:13:2671:14 | x2 | T | main.rs:2638:5:2638:20 | S1 | -| main.rs:2671:13:2671:14 | x2 | T.T | main.rs:2640:5:2641:14 | S2 | -| main.rs:2671:18:2671:38 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2671:18:2671:38 | ...::assoc_fun(...) | T | main.rs:2638:5:2638:20 | S1 | -| main.rs:2671:18:2671:38 | ...::assoc_fun(...) | T.T | main.rs:2640:5:2641:14 | S2 | -| main.rs:2672:13:2672:14 | x3 | | {EXTERNAL LOCATION} | Option | -| main.rs:2672:13:2672:14 | x3 | T | main.rs:2638:5:2638:20 | S1 | -| main.rs:2672:13:2672:14 | x3 | T.T | main.rs:2640:5:2641:14 | S2 | -| main.rs:2672:18:2672:32 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2672:18:2672:32 | ...::assoc_fun(...) | T | main.rs:2638:5:2638:20 | S1 | -| main.rs:2672:18:2672:32 | ...::assoc_fun(...) | T.T | main.rs:2640:5:2641:14 | S2 | -| main.rs:2673:13:2673:14 | x4 | | main.rs:2638:5:2638:20 | S1 | -| main.rs:2673:13:2673:14 | x4 | T | main.rs:2640:5:2641:14 | S2 | -| main.rs:2673:18:2673:48 | ...::method(...) | | main.rs:2638:5:2638:20 | S1 | -| main.rs:2673:18:2673:48 | ...::method(...) | T | main.rs:2640:5:2641:14 | S2 | -| main.rs:2673:35:2673:47 | ...::default(...) | | main.rs:2638:5:2638:20 | S1 | -| main.rs:2673:35:2673:47 | ...::default(...) | T | main.rs:2640:5:2641:14 | S2 | -| main.rs:2674:13:2674:14 | x5 | | main.rs:2638:5:2638:20 | S1 | -| main.rs:2674:13:2674:14 | x5 | T | main.rs:2640:5:2641:14 | S2 | -| main.rs:2674:18:2674:42 | ...::method(...) | | main.rs:2638:5:2638:20 | S1 | -| main.rs:2674:18:2674:42 | ...::method(...) | T | main.rs:2640:5:2641:14 | S2 | -| main.rs:2674:29:2674:41 | ...::default(...) | | main.rs:2638:5:2638:20 | S1 | -| main.rs:2674:29:2674:41 | ...::default(...) | T | main.rs:2640:5:2641:14 | S2 | -| main.rs:2675:13:2675:14 | x6 | | main.rs:2659:5:2659:27 | S4 | -| main.rs:2675:13:2675:14 | x6 | T4 | main.rs:2640:5:2641:14 | S2 | -| main.rs:2675:18:2675:45 | S4::<...>(...) | | main.rs:2659:5:2659:27 | S4 | -| main.rs:2675:18:2675:45 | S4::<...>(...) | T4 | main.rs:2640:5:2641:14 | S2 | -| main.rs:2675:27:2675:44 | ...::default(...) | | main.rs:2640:5:2641:14 | S2 | -| main.rs:2676:13:2676:14 | x7 | | main.rs:2659:5:2659:27 | S4 | -| main.rs:2676:13:2676:14 | x7 | T4 | main.rs:2640:5:2641:14 | S2 | -| main.rs:2676:18:2676:23 | S4(...) | | main.rs:2659:5:2659:27 | S4 | -| main.rs:2676:18:2676:23 | S4(...) | T4 | main.rs:2640:5:2641:14 | S2 | -| main.rs:2676:21:2676:22 | S2 | | main.rs:2640:5:2641:14 | S2 | -| main.rs:2677:13:2677:14 | x8 | | main.rs:2659:5:2659:27 | S4 | -| main.rs:2677:13:2677:14 | x8 | T4 | {EXTERNAL LOCATION} | i32 | -| main.rs:2677:18:2677:22 | S4(...) | | main.rs:2659:5:2659:27 | S4 | -| main.rs:2677:18:2677:22 | S4(...) | T4 | {EXTERNAL LOCATION} | i32 | -| main.rs:2677:21:2677:21 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2678:13:2678:14 | x9 | | main.rs:2659:5:2659:27 | S4 | -| main.rs:2678:13:2678:14 | x9 | T4 | main.rs:2640:5:2641:14 | S2 | -| main.rs:2678:18:2678:34 | S4(...) | | main.rs:2659:5:2659:27 | S4 | -| main.rs:2678:18:2678:34 | S4(...) | T4 | main.rs:2640:5:2641:14 | S2 | -| main.rs:2678:21:2678:33 | ...::default(...) | | main.rs:2640:5:2641:14 | S2 | -| main.rs:2679:13:2679:15 | x10 | | main.rs:2661:5:2663:5 | S5 | -| main.rs:2679:13:2679:15 | x10 | T5 | main.rs:2640:5:2641:14 | S2 | -| main.rs:2679:19:2682:9 | S5::<...> {...} | | main.rs:2661:5:2663:5 | S5 | -| main.rs:2679:19:2682:9 | S5::<...> {...} | T5 | main.rs:2640:5:2641:14 | S2 | -| main.rs:2681:20:2681:37 | ...::default(...) | | main.rs:2640:5:2641:14 | S2 | -| main.rs:2683:13:2683:15 | x11 | | main.rs:2661:5:2663:5 | S5 | -| main.rs:2683:13:2683:15 | x11 | T5 | main.rs:2640:5:2641:14 | S2 | -| main.rs:2683:19:2683:34 | S5 {...} | | main.rs:2661:5:2663:5 | S5 | -| main.rs:2683:19:2683:34 | S5 {...} | T5 | main.rs:2640:5:2641:14 | S2 | -| main.rs:2683:31:2683:32 | S2 | | main.rs:2640:5:2641:14 | S2 | -| main.rs:2684:13:2684:15 | x12 | | main.rs:2661:5:2663:5 | S5 | -| main.rs:2684:13:2684:15 | x12 | T5 | {EXTERNAL LOCATION} | i32 | -| main.rs:2684:19:2684:33 | S5 {...} | | main.rs:2661:5:2663:5 | S5 | -| main.rs:2684:19:2684:33 | S5 {...} | T5 | {EXTERNAL LOCATION} | i32 | -| main.rs:2684:31:2684:31 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2685:13:2685:15 | x13 | | main.rs:2661:5:2663:5 | S5 | -| main.rs:2685:13:2685:15 | x13 | T5 | main.rs:2640:5:2641:14 | S2 | -| main.rs:2685:19:2688:9 | S5 {...} | | main.rs:2661:5:2663:5 | S5 | -| main.rs:2685:19:2688:9 | S5 {...} | T5 | main.rs:2640:5:2641:14 | S2 | -| main.rs:2687:20:2687:32 | ...::default(...) | | main.rs:2640:5:2641:14 | S2 | -| main.rs:2689:13:2689:15 | x14 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2689:19:2689:48 | foo::<...>(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:2689:30:2689:47 | ...::default(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:2690:13:2690:15 | x15 | | main.rs:2638:5:2638:20 | S1 | -| main.rs:2690:13:2690:15 | x15 | T | main.rs:2640:5:2641:14 | S2 | -| main.rs:2690:19:2690:37 | ...::default(...) | | main.rs:2638:5:2638:20 | S1 | -| main.rs:2690:19:2690:37 | ...::default(...) | T | main.rs:2640:5:2641:14 | S2 | -| main.rs:2699:35:2701:9 | { ... } | | file://:0:0:0:0 | (T_2) | -| main.rs:2699:35:2701:9 | { ... } | 0(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2699:35:2701:9 | { ... } | 1(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2700:13:2700:26 | TupleExpr | | file://:0:0:0:0 | (T_2) | -| main.rs:2700:13:2700:26 | TupleExpr | 0(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2700:13:2700:26 | TupleExpr | 1(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2700:14:2700:18 | S1 {...} | | main.rs:2695:5:2696:16 | S1 | -| main.rs:2700:21:2700:25 | S1 {...} | | main.rs:2695:5:2696:16 | S1 | -| main.rs:2702:16:2702:19 | SelfParam | | main.rs:2695:5:2696:16 | S1 | -| main.rs:2702:22:2702:23 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2705:16:2739:5 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2706:13:2706:13 | a | | file://:0:0:0:0 | (T_2) | -| main.rs:2706:13:2706:13 | a | 0(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2706:13:2706:13 | a | 1(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2706:17:2706:30 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | -| main.rs:2706:17:2706:30 | ...::get_pair(...) | 0(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2706:17:2706:30 | ...::get_pair(...) | 1(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2707:17:2707:17 | b | | file://:0:0:0:0 | (T_2) | -| main.rs:2707:17:2707:17 | b | 0(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2707:17:2707:17 | b | 1(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2707:21:2707:34 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | -| main.rs:2707:21:2707:34 | ...::get_pair(...) | 0(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2707:21:2707:34 | ...::get_pair(...) | 1(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2708:13:2708:18 | TuplePat | | file://:0:0:0:0 | (T_2) | -| main.rs:2708:13:2708:18 | TuplePat | 0(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2708:13:2708:18 | TuplePat | 1(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2708:14:2708:14 | c | | main.rs:2695:5:2696:16 | S1 | -| main.rs:2708:17:2708:17 | d | | main.rs:2695:5:2696:16 | S1 | -| main.rs:2708:22:2708:35 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | -| main.rs:2708:22:2708:35 | ...::get_pair(...) | 0(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2708:22:2708:35 | ...::get_pair(...) | 1(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2709:13:2709:22 | TuplePat | | file://:0:0:0:0 | (T_2) | -| main.rs:2709:13:2709:22 | TuplePat | 0(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2709:13:2709:22 | TuplePat | 1(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2709:18:2709:18 | e | | main.rs:2695:5:2696:16 | S1 | -| main.rs:2709:21:2709:21 | f | | main.rs:2695:5:2696:16 | S1 | -| main.rs:2709:26:2709:39 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | -| main.rs:2709:26:2709:39 | ...::get_pair(...) | 0(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2709:26:2709:39 | ...::get_pair(...) | 1(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2710:13:2710:26 | TuplePat | | file://:0:0:0:0 | (T_2) | -| main.rs:2710:13:2710:26 | TuplePat | 0(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2710:13:2710:26 | TuplePat | 1(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2710:18:2710:18 | g | | main.rs:2695:5:2696:16 | S1 | -| main.rs:2710:25:2710:25 | h | | main.rs:2695:5:2696:16 | S1 | -| main.rs:2710:30:2710:43 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | -| main.rs:2710:30:2710:43 | ...::get_pair(...) | 0(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2710:30:2710:43 | ...::get_pair(...) | 1(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2712:9:2712:9 | a | | file://:0:0:0:0 | (T_2) | -| main.rs:2712:9:2712:9 | a | 0(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2712:9:2712:9 | a | 1(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2712:9:2712:11 | a.0 | | main.rs:2695:5:2696:16 | S1 | -| main.rs:2712:9:2712:17 | ... .foo() | | file://:0:0:0:0 | () | -| main.rs:2713:9:2713:9 | b | | file://:0:0:0:0 | (T_2) | -| main.rs:2713:9:2713:9 | b | 0(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2713:9:2713:9 | b | 1(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2713:9:2713:11 | b.1 | | main.rs:2695:5:2696:16 | S1 | -| main.rs:2713:9:2713:17 | ... .foo() | | file://:0:0:0:0 | () | -| main.rs:2714:9:2714:9 | c | | main.rs:2695:5:2696:16 | S1 | -| main.rs:2714:9:2714:15 | c.foo() | | file://:0:0:0:0 | () | -| main.rs:2715:9:2715:9 | d | | main.rs:2695:5:2696:16 | S1 | -| main.rs:2715:9:2715:15 | d.foo() | | file://:0:0:0:0 | () | -| main.rs:2716:9:2716:9 | e | | main.rs:2695:5:2696:16 | S1 | -| main.rs:2716:9:2716:15 | e.foo() | | file://:0:0:0:0 | () | -| main.rs:2717:9:2717:9 | f | | main.rs:2695:5:2696:16 | S1 | -| main.rs:2717:9:2717:15 | f.foo() | | file://:0:0:0:0 | () | -| main.rs:2718:9:2718:9 | g | | main.rs:2695:5:2696:16 | S1 | -| main.rs:2718:9:2718:15 | g.foo() | | file://:0:0:0:0 | () | -| main.rs:2719:9:2719:9 | h | | main.rs:2695:5:2696:16 | S1 | -| main.rs:2719:9:2719:15 | h.foo() | | file://:0:0:0:0 | () | -| main.rs:2724:13:2724:13 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2724:17:2724:34 | ...::default(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2725:13:2725:13 | b | | {EXTERNAL LOCATION} | bool | -| main.rs:2725:17:2725:34 | ...::default(...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2726:13:2726:16 | pair | | file://:0:0:0:0 | (T_2) | -| main.rs:2726:13:2726:16 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | -| main.rs:2726:13:2726:16 | pair | 1(2) | {EXTERNAL LOCATION} | bool | -| main.rs:2726:20:2726:25 | TupleExpr | | file://:0:0:0:0 | (T_2) | -| main.rs:2726:20:2726:25 | TupleExpr | 0(2) | {EXTERNAL LOCATION} | i64 | -| main.rs:2726:20:2726:25 | TupleExpr | 1(2) | {EXTERNAL LOCATION} | bool | -| main.rs:2726:21:2726:21 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2726:24:2726:24 | b | | {EXTERNAL LOCATION} | bool | -| main.rs:2727:13:2727:13 | i | | {EXTERNAL LOCATION} | i64 | -| main.rs:2727:22:2727:25 | pair | | file://:0:0:0:0 | (T_2) | -| main.rs:2727:22:2727:25 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | -| main.rs:2727:22:2727:25 | pair | 1(2) | {EXTERNAL LOCATION} | bool | -| main.rs:2727:22:2727:27 | pair.0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2728:13:2728:13 | j | | {EXTERNAL LOCATION} | bool | -| main.rs:2728:23:2728:26 | pair | | file://:0:0:0:0 | (T_2) | -| main.rs:2728:23:2728:26 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | -| main.rs:2728:23:2728:26 | pair | 1(2) | {EXTERNAL LOCATION} | bool | -| main.rs:2728:23:2728:28 | pair.1 | | {EXTERNAL LOCATION} | bool | -| main.rs:2730:13:2730:16 | pair | | file://:0:0:0:0 | (T_2) | -| main.rs:2730:13:2730:16 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2730:13:2730:16 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2730:20:2730:25 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2730:20:2730:25 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2730:20:2730:32 | ... .into() | | file://:0:0:0:0 | (T_2) | -| main.rs:2730:20:2730:32 | ... .into() | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2730:20:2730:32 | ... .into() | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2730:21:2730:21 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2730:24:2730:24 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2731:9:2734:9 | match pair { ... } | | file://:0:0:0:0 | () | -| main.rs:2731:15:2731:18 | pair | | file://:0:0:0:0 | (T_2) | -| main.rs:2731:15:2731:18 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2731:15:2731:18 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2732:13:2732:18 | TuplePat | | file://:0:0:0:0 | (T_2) | -| main.rs:2732:13:2732:18 | TuplePat | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2732:13:2732:18 | TuplePat | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2732:14:2732:14 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2732:17:2732:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2732:23:2732:42 | MacroExpr | | file://:0:0:0:0 | () | -| main.rs:2732:30:2732:41 | "unexpected" | | file://:0:0:0:0 | & | -| main.rs:2732:30:2732:41 | "unexpected" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2732:30:2732:41 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:2732:30:2732:41 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2733:13:2733:13 | _ | | file://:0:0:0:0 | (T_2) | -| main.rs:2733:13:2733:13 | _ | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2733:13:2733:13 | _ | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2733:18:2733:35 | MacroExpr | | file://:0:0:0:0 | () | -| main.rs:2733:25:2733:34 | "expected" | | file://:0:0:0:0 | & | -| main.rs:2733:25:2733:34 | "expected" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2733:25:2733:34 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:2733:25:2733:34 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2735:13:2735:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:17:2735:20 | pair | | file://:0:0:0:0 | (T_2) | -| main.rs:2735:17:2735:20 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:17:2735:20 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:17:2735:22 | pair.0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2737:13:2737:13 | y | | file://:0:0:0:0 | & | -| main.rs:2737:13:2737:13 | y | &T | file://:0:0:0:0 | (T_2) | -| main.rs:2737:13:2737:13 | y | &T.0(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2737:13:2737:13 | y | &T.1(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2737:17:2737:31 | &... | | file://:0:0:0:0 | & | -| main.rs:2737:17:2737:31 | &... | &T | file://:0:0:0:0 | (T_2) | -| main.rs:2737:17:2737:31 | &... | &T.0(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2737:17:2737:31 | &... | &T.1(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2737:18:2737:31 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | -| main.rs:2737:18:2737:31 | ...::get_pair(...) | 0(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2737:18:2737:31 | ...::get_pair(...) | 1(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2738:9:2738:9 | y | | file://:0:0:0:0 | & | -| main.rs:2738:9:2738:9 | y | &T | file://:0:0:0:0 | (T_2) | -| main.rs:2738:9:2738:9 | y | &T.0(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2738:9:2738:9 | y | &T.1(2) | main.rs:2695:5:2696:16 | S1 | -| main.rs:2738:9:2738:11 | y.0 | | main.rs:2695:5:2696:16 | S1 | -| main.rs:2738:9:2738:17 | ... .foo() | | file://:0:0:0:0 | () | -| main.rs:2744:27:2766:5 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2745:13:2745:23 | boxed_value | | {EXTERNAL LOCATION} | Box | -| main.rs:2745:13:2745:23 | boxed_value | A | {EXTERNAL LOCATION} | Global | -| main.rs:2745:13:2745:23 | boxed_value | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2745:27:2745:42 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2745:27:2745:42 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2745:27:2745:42 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2745:36:2745:41 | 100i32 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2748:9:2756:9 | match boxed_value { ... } | | file://:0:0:0:0 | () | -| main.rs:2748:15:2748:25 | boxed_value | | {EXTERNAL LOCATION} | Box | -| main.rs:2748:15:2748:25 | boxed_value | A | {EXTERNAL LOCATION} | Global | -| main.rs:2748:15:2748:25 | boxed_value | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2749:13:2749:19 | box 100 | | {EXTERNAL LOCATION} | Box | -| main.rs:2749:13:2749:19 | box 100 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2749:13:2749:19 | box 100 | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2749:17:2749:19 | 100 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2749:24:2751:13 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2750:26:2750:36 | "Boxed 100\\n" | | file://:0:0:0:0 | & | -| main.rs:2750:26:2750:36 | "Boxed 100\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2750:26:2750:36 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:2750:26:2750:36 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2752:13:2752:17 | box ... | | {EXTERNAL LOCATION} | Box | -| main.rs:2752:13:2752:17 | box ... | A | {EXTERNAL LOCATION} | Global | -| main.rs:2752:13:2752:17 | box ... | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2752:22:2755:13 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2754:26:2754:42 | "Boxed value: {}\\n" | | file://:0:0:0:0 | & | -| main.rs:2754:26:2754:42 | "Boxed value: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2754:26:2754:51 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:2754:26:2754:51 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2759:13:2759:22 | nested_box | | {EXTERNAL LOCATION} | Box | -| main.rs:2759:13:2759:22 | nested_box | A | {EXTERNAL LOCATION} | Global | -| main.rs:2759:13:2759:22 | nested_box | T | {EXTERNAL LOCATION} | Box | -| main.rs:2759:13:2759:22 | nested_box | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2759:13:2759:22 | nested_box | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2759:26:2759:50 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2759:26:2759:50 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2759:26:2759:50 | ...::new(...) | T | {EXTERNAL LOCATION} | Box | -| main.rs:2759:26:2759:50 | ...::new(...) | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2759:26:2759:50 | ...::new(...) | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2759:35:2759:49 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2759:35:2759:49 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2759:35:2759:49 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2759:44:2759:48 | 42i32 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2760:9:2765:9 | match nested_box { ... } | | file://:0:0:0:0 | () | -| main.rs:2760:15:2760:24 | nested_box | | {EXTERNAL LOCATION} | Box | -| main.rs:2760:15:2760:24 | nested_box | A | {EXTERNAL LOCATION} | Global | -| main.rs:2760:15:2760:24 | nested_box | T | {EXTERNAL LOCATION} | Box | -| main.rs:2760:15:2760:24 | nested_box | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2760:15:2760:24 | nested_box | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2761:13:2761:21 | box ... | | {EXTERNAL LOCATION} | Box | -| main.rs:2761:13:2761:21 | box ... | A | {EXTERNAL LOCATION} | Global | -| main.rs:2761:13:2761:21 | box ... | T | {EXTERNAL LOCATION} | Box | -| main.rs:2761:13:2761:21 | box ... | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2761:13:2761:21 | box ... | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2761:26:2764:13 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2763:26:2763:43 | "Nested boxed: {}\\n" | | file://:0:0:0:0 | & | -| main.rs:2763:26:2763:43 | "Nested boxed: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2763:26:2763:59 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:2763:26:2763:59 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2775:36:2777:9 | { ... } | | main.rs:2772:5:2772:22 | Path | -| main.rs:2776:13:2776:19 | Path {...} | | main.rs:2772:5:2772:22 | Path | -| main.rs:2779:29:2779:33 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2779:29:2779:33 | SelfParam | &T | main.rs:2772:5:2772:22 | Path | -| main.rs:2779:59:2781:9 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:2779:59:2781:9 | { ... } | E | file://:0:0:0:0 | () | -| main.rs:2779:59:2781:9 | { ... } | T | main.rs:2784:5:2784:25 | PathBuf | -| main.rs:2780:13:2780:30 | Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:2780:13:2780:30 | Ok(...) | E | file://:0:0:0:0 | () | -| main.rs:2780:13:2780:30 | Ok(...) | T | main.rs:2784:5:2784:25 | PathBuf | -| main.rs:2780:16:2780:29 | ...::new(...) | | main.rs:2784:5:2784:25 | PathBuf | -| main.rs:2787:39:2789:9 | { ... } | | main.rs:2784:5:2784:25 | PathBuf | -| main.rs:2788:13:2788:22 | PathBuf {...} | | main.rs:2784:5:2784:25 | PathBuf | -| main.rs:2797:18:2797:22 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2797:18:2797:22 | SelfParam | &T | main.rs:2784:5:2784:25 | PathBuf | -| main.rs:2797:34:2801:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:2797:34:2801:9 | { ... } | &T | main.rs:2772:5:2772:22 | Path | -| main.rs:2799:33:2799:43 | ...::new(...) | | main.rs:2772:5:2772:22 | Path | -| main.rs:2800:13:2800:17 | &path | | file://:0:0:0:0 | & | -| main.rs:2800:13:2800:17 | &path | &T | main.rs:2772:5:2772:22 | Path | -| main.rs:2800:14:2800:17 | path | | main.rs:2772:5:2772:22 | Path | -| main.rs:2804:16:2812:5 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2805:13:2805:17 | path1 | | main.rs:2772:5:2772:22 | Path | -| main.rs:2805:21:2805:31 | ...::new(...) | | main.rs:2772:5:2772:22 | Path | -| main.rs:2806:13:2806:17 | path2 | | {EXTERNAL LOCATION} | Result | -| main.rs:2806:13:2806:17 | path2 | E | file://:0:0:0:0 | () | -| main.rs:2806:13:2806:17 | path2 | T | main.rs:2784:5:2784:25 | PathBuf | -| main.rs:2806:21:2806:25 | path1 | | main.rs:2772:5:2772:22 | Path | -| main.rs:2806:21:2806:40 | path1.canonicalize() | | {EXTERNAL LOCATION} | Result | -| main.rs:2806:21:2806:40 | path1.canonicalize() | E | file://:0:0:0:0 | () | -| main.rs:2806:21:2806:40 | path1.canonicalize() | T | main.rs:2784:5:2784:25 | PathBuf | -| main.rs:2807:13:2807:17 | path3 | | main.rs:2784:5:2784:25 | PathBuf | -| main.rs:2807:21:2807:25 | path2 | | {EXTERNAL LOCATION} | Result | -| main.rs:2807:21:2807:25 | path2 | E | file://:0:0:0:0 | () | -| main.rs:2807:21:2807:25 | path2 | T | main.rs:2784:5:2784:25 | PathBuf | -| main.rs:2807:21:2807:34 | path2.unwrap() | | main.rs:2784:5:2784:25 | PathBuf | -| main.rs:2809:13:2809:20 | pathbuf1 | | main.rs:2784:5:2784:25 | PathBuf | -| main.rs:2809:24:2809:37 | ...::new(...) | | main.rs:2784:5:2784:25 | PathBuf | -| main.rs:2810:24:2810:31 | pathbuf1 | | main.rs:2784:5:2784:25 | PathBuf | -| main.rs:2817:14:2817:18 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2817:14:2817:18 | SelfParam | &T | main.rs:2816:5:2818:5 | Self [trait MyTrait] | -| main.rs:2824:14:2824:18 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2824:14:2824:18 | SelfParam | &T | main.rs:2820:5:2821:19 | S | -| main.rs:2824:14:2824:18 | SelfParam | &T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2824:28:2826:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2825:13:2825:16 | self | | file://:0:0:0:0 | & | -| main.rs:2825:13:2825:16 | self | &T | main.rs:2820:5:2821:19 | S | -| main.rs:2825:13:2825:16 | self | &T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2825:13:2825:18 | self.0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2830:14:2830:18 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2830:14:2830:18 | SelfParam | &T | main.rs:2820:5:2821:19 | S | -| main.rs:2830:14:2830:18 | SelfParam | &T.T | main.rs:2820:5:2821:19 | S | -| main.rs:2830:14:2830:18 | SelfParam | &T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2830:28:2832:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2831:13:2831:16 | self | | file://:0:0:0:0 | & | -| main.rs:2831:13:2831:16 | self | &T | main.rs:2820:5:2821:19 | S | -| main.rs:2831:13:2831:16 | self | &T.T | main.rs:2820:5:2821:19 | S | -| main.rs:2831:13:2831:16 | self | &T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2831:13:2831:18 | self.0 | | main.rs:2820:5:2821:19 | S | -| main.rs:2831:13:2831:18 | self.0 | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2831:13:2831:21 | ... .0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2836:15:2836:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2836:15:2836:19 | SelfParam | &T | main.rs:2820:5:2821:19 | S | -| main.rs:2836:15:2836:19 | SelfParam | &T.T | main.rs:2835:10:2835:16 | T | -| main.rs:2836:33:2838:9 | { ... } | | main.rs:2820:5:2821:19 | S | -| main.rs:2836:33:2838:9 | { ... } | T | main.rs:2820:5:2821:19 | S | -| main.rs:2836:33:2838:9 | { ... } | T.T | main.rs:2835:10:2835:16 | T | -| main.rs:2837:13:2837:24 | S(...) | | main.rs:2820:5:2821:19 | S | -| main.rs:2837:13:2837:24 | S(...) | T | main.rs:2820:5:2821:19 | S | -| main.rs:2837:13:2837:24 | S(...) | T.T | main.rs:2835:10:2835:16 | T | -| main.rs:2837:15:2837:23 | S(...) | | main.rs:2820:5:2821:19 | S | -| main.rs:2837:15:2837:23 | S(...) | T | main.rs:2835:10:2835:16 | T | -| main.rs:2837:17:2837:20 | self | | file://:0:0:0:0 | & | -| main.rs:2837:17:2837:20 | self | &T | main.rs:2820:5:2821:19 | S | -| main.rs:2837:17:2837:20 | self | &T.T | main.rs:2835:10:2835:16 | T | -| main.rs:2837:17:2837:22 | self.0 | | main.rs:2835:10:2835:16 | T | -| main.rs:2841:14:2841:14 | b | | {EXTERNAL LOCATION} | bool | -| main.rs:2841:48:2858:5 | { ... } | | {EXTERNAL LOCATION} | Box | -| main.rs:2841:48:2858:5 | { ... } | A | {EXTERNAL LOCATION} | Global | -| main.rs:2841:48:2858:5 | { ... } | T | main.rs:2816:5:2818:5 | dyn MyTrait | -| main.rs:2841:48:2858:5 | { ... } | T.dyn(T) | {EXTERNAL LOCATION} | i32 | -| main.rs:2842:13:2842:13 | x | | main.rs:2820:5:2821:19 | S | -| main.rs:2842:13:2842:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2842:17:2847:9 | if b {...} else {...} | | main.rs:2820:5:2821:19 | S | -| main.rs:2842:17:2847:9 | if b {...} else {...} | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2842:20:2842:20 | b | | {EXTERNAL LOCATION} | bool | -| main.rs:2842:22:2845:9 | { ... } | | main.rs:2820:5:2821:19 | S | -| main.rs:2842:22:2845:9 | { ... } | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2843:17:2843:17 | y | | main.rs:2820:5:2821:19 | S | -| main.rs:2843:17:2843:17 | y | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2843:21:2843:38 | ...::default(...) | | main.rs:2820:5:2821:19 | S | -| main.rs:2843:21:2843:38 | ...::default(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2844:13:2844:13 | y | | main.rs:2820:5:2821:19 | S | -| main.rs:2844:13:2844:13 | y | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2845:16:2847:9 | { ... } | | main.rs:2820:5:2821:19 | S | -| main.rs:2845:16:2847:9 | { ... } | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2846:13:2846:16 | S(...) | | main.rs:2820:5:2821:19 | S | -| main.rs:2846:13:2846:16 | S(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2846:15:2846:15 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2851:13:2851:13 | x | | main.rs:2820:5:2821:19 | S | -| main.rs:2851:13:2851:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2851:17:2851:20 | S(...) | | main.rs:2820:5:2821:19 | S | -| main.rs:2851:17:2851:20 | S(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2851:19:2851:19 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2852:9:2857:9 | if b {...} else {...} | | {EXTERNAL LOCATION} | Box | -| main.rs:2852:9:2857:9 | if b {...} else {...} | A | {EXTERNAL LOCATION} | Global | -| main.rs:2852:9:2857:9 | if b {...} else {...} | T | main.rs:2816:5:2818:5 | dyn MyTrait | -| main.rs:2852:9:2857:9 | if b {...} else {...} | T | main.rs:2820:5:2821:19 | S | -| main.rs:2852:9:2857:9 | if b {...} else {...} | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2852:9:2857:9 | if b {...} else {...} | T.T | main.rs:2820:5:2821:19 | S | -| main.rs:2852:9:2857:9 | if b {...} else {...} | T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2852:9:2857:9 | if b {...} else {...} | T.dyn(T) | {EXTERNAL LOCATION} | i32 | -| main.rs:2852:12:2852:12 | b | | {EXTERNAL LOCATION} | bool | -| main.rs:2852:14:2855:9 | { ... } | | {EXTERNAL LOCATION} | Box | -| main.rs:2852:14:2855:9 | { ... } | A | {EXTERNAL LOCATION} | Global | -| main.rs:2852:14:2855:9 | { ... } | T | main.rs:2816:5:2818:5 | dyn MyTrait | -| main.rs:2852:14:2855:9 | { ... } | T | main.rs:2820:5:2821:19 | S | -| main.rs:2852:14:2855:9 | { ... } | T.T | main.rs:2820:5:2821:19 | S | -| main.rs:2852:14:2855:9 | { ... } | T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2852:14:2855:9 | { ... } | T.dyn(T) | {EXTERNAL LOCATION} | i32 | -| main.rs:2853:17:2853:17 | x | | main.rs:2820:5:2821:19 | S | -| main.rs:2853:17:2853:17 | x | T | main.rs:2820:5:2821:19 | S | -| main.rs:2853:17:2853:17 | x | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2853:21:2853:21 | x | | main.rs:2820:5:2821:19 | S | -| main.rs:2853:21:2853:21 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2853:21:2853:26 | x.m2() | | main.rs:2820:5:2821:19 | S | -| main.rs:2853:21:2853:26 | x.m2() | T | main.rs:2820:5:2821:19 | S | -| main.rs:2853:21:2853:26 | x.m2() | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2854:13:2854:23 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2854:13:2854:23 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2854:13:2854:23 | ...::new(...) | T | main.rs:2816:5:2818:5 | dyn MyTrait | -| main.rs:2854:13:2854:23 | ...::new(...) | T | main.rs:2820:5:2821:19 | S | -| main.rs:2854:13:2854:23 | ...::new(...) | T.T | main.rs:2820:5:2821:19 | S | -| main.rs:2854:13:2854:23 | ...::new(...) | T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2854:13:2854:23 | ...::new(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | -| main.rs:2854:22:2854:22 | x | | main.rs:2820:5:2821:19 | S | -| main.rs:2854:22:2854:22 | x | T | main.rs:2820:5:2821:19 | S | -| main.rs:2854:22:2854:22 | x | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2855:16:2857:9 | { ... } | | {EXTERNAL LOCATION} | Box | -| main.rs:2855:16:2857:9 | { ... } | A | {EXTERNAL LOCATION} | Global | -| main.rs:2855:16:2857:9 | { ... } | T | main.rs:2816:5:2818:5 | dyn MyTrait | -| main.rs:2855:16:2857:9 | { ... } | T | main.rs:2820:5:2821:19 | S | -| main.rs:2855:16:2857:9 | { ... } | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2855:16:2857:9 | { ... } | T.dyn(T) | {EXTERNAL LOCATION} | i32 | -| main.rs:2856:13:2856:23 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2856:13:2856:23 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2856:13:2856:23 | ...::new(...) | T | main.rs:2816:5:2818:5 | dyn MyTrait | -| main.rs:2856:13:2856:23 | ...::new(...) | T | main.rs:2820:5:2821:19 | S | -| main.rs:2856:13:2856:23 | ...::new(...) | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2856:13:2856:23 | ...::new(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | -| main.rs:2856:22:2856:22 | x | | main.rs:2820:5:2821:19 | S | -| main.rs:2856:22:2856:22 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2862:22:2866:5 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2863:18:2863:18 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2863:33:2865:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2864:13:2864:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2864:13:2864:17 | ... + ... | | {EXTERNAL LOCATION} | i32 | -| main.rs:2864:17:2864:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2871:11:2871:14 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:2871:30:2879:5 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2873:13:2873:13 | a | | file://:0:0:0:0 | () | -| main.rs:2873:17:2877:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2874:13:2876:13 | if cond {...} | | file://:0:0:0:0 | () | -| main.rs:2874:16:2874:19 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:2874:21:2876:13 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2875:24:2875:25 | 12 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2878:9:2878:9 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2882:20:2889:5 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2885:26:2885:27 | 12 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2887:18:2887:26 | "b: {:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:2887:18:2887:26 | "b: {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2887:18:2887:29 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:2887:18:2887:29 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2888:9:2888:9 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2891:20:2893:5 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2892:16:2892:16 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2896:11:2896:14 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:2896:30:2904:5 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2897:13:2897:13 | a | | file://:0:0:0:0 | () | -| main.rs:2897:17:2901:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2898:13:2900:13 | if cond {...} | | file://:0:0:0:0 | () | -| main.rs:2898:16:2898:19 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:2898:21:2900:13 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2899:24:2899:25 | 12 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2902:18:2902:26 | "a: {:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:2902:18:2902:26 | "a: {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2902:18:2902:29 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:2902:18:2902:29 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2902:29:2902:29 | a | | file://:0:0:0:0 | () | -| main.rs:2903:9:2903:9 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2908:16:2955:5 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2909:13:2909:13 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:2909:13:2909:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2909:17:2909:20 | None | | {EXTERNAL LOCATION} | Option | -| main.rs:2909:17:2909:20 | None | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2910:13:2910:13 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:2910:13:2910:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2910:30:2910:30 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:2910:30:2910:30 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2911:13:2911:13 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:2911:13:2911:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2911:17:2911:35 | ...::None | | {EXTERNAL LOCATION} | Option | -| main.rs:2911:17:2911:35 | ...::None | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2912:13:2912:13 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:2912:13:2912:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2912:17:2912:35 | ...::None::<...> | | {EXTERNAL LOCATION} | Option | -| main.rs:2912:17:2912:35 | ...::None::<...> | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2914:26:2914:28 | opt | | {EXTERNAL LOCATION} | Option | -| main.rs:2914:26:2914:28 | opt | T | main.rs:2914:23:2914:23 | T | -| main.rs:2914:42:2914:42 | x | | main.rs:2914:23:2914:23 | T | -| main.rs:2914:48:2914:49 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2916:13:2916:13 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:2916:13:2916:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2916:17:2916:20 | None | | {EXTERNAL LOCATION} | Option | -| main.rs:2916:17:2916:20 | None | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2917:9:2917:24 | pin_option(...) | | file://:0:0:0:0 | () | -| main.rs:2917:20:2917:20 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:2917:20:2917:20 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2917:23:2917:23 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2924:13:2924:13 | x | | main.rs:2919:9:2922:9 | MyEither | -| main.rs:2924:13:2924:13 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2924:13:2924:13 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2924:17:2924:39 | ...::A {...} | | main.rs:2919:9:2922:9 | MyEither | -| main.rs:2924:17:2924:39 | ...::A {...} | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2924:17:2924:39 | ...::A {...} | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2924:37:2924:37 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2925:13:2925:13 | x | | main.rs:2919:9:2922:9 | MyEither | -| main.rs:2925:13:2925:13 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2925:13:2925:13 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2925:40:2925:40 | x | | main.rs:2919:9:2922:9 | MyEither | -| main.rs:2925:40:2925:40 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2925:40:2925:40 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2926:13:2926:13 | x | | main.rs:2919:9:2922:9 | MyEither | -| main.rs:2926:13:2926:13 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2926:13:2926:13 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2926:17:2926:52 | ...::A {...} | | main.rs:2919:9:2922:9 | MyEither | -| main.rs:2926:17:2926:52 | ...::A {...} | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2926:17:2926:52 | ...::A {...} | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2926:50:2926:50 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2928:13:2928:13 | x | | main.rs:2919:9:2922:9 | MyEither | -| main.rs:2928:13:2928:13 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2928:13:2928:13 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2928:17:2930:9 | ...::B::<...> {...} | | main.rs:2919:9:2922:9 | MyEither | -| main.rs:2928:17:2930:9 | ...::B::<...> {...} | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2928:17:2930:9 | ...::B::<...> {...} | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2929:20:2929:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2932:29:2932:29 | e | | main.rs:2919:9:2922:9 | MyEither | -| main.rs:2932:29:2932:29 | e | T1 | main.rs:2932:26:2932:26 | T | -| main.rs:2932:29:2932:29 | e | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2932:53:2932:53 | x | | main.rs:2932:26:2932:26 | T | -| main.rs:2932:59:2932:60 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2935:13:2935:13 | x | | main.rs:2919:9:2922:9 | MyEither | -| main.rs:2935:13:2935:13 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2935:13:2935:13 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2935:17:2937:9 | ...::B {...} | | main.rs:2919:9:2922:9 | MyEither | -| main.rs:2935:17:2937:9 | ...::B {...} | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2935:17:2937:9 | ...::B {...} | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2936:20:2936:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2938:9:2938:27 | pin_my_either(...) | | file://:0:0:0:0 | () | -| main.rs:2938:23:2938:23 | x | | main.rs:2919:9:2922:9 | MyEither | -| main.rs:2938:23:2938:23 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2938:23:2938:23 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2938:26:2938:26 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2940:13:2940:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:2940:13:2940:13 | x | E | {EXTERNAL LOCATION} | String | -| main.rs:2940:13:2940:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2940:17:2940:29 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:2940:17:2940:29 | ...::Ok(...) | E | {EXTERNAL LOCATION} | String | -| main.rs:2940:17:2940:29 | ...::Ok(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2940:28:2940:28 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2941:13:2941:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:2941:13:2941:13 | x | E | {EXTERNAL LOCATION} | String | -| main.rs:2941:13:2941:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2941:38:2941:38 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:2941:38:2941:38 | x | E | {EXTERNAL LOCATION} | String | -| main.rs:2941:38:2941:38 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2942:13:2942:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:2942:13:2942:13 | x | E | {EXTERNAL LOCATION} | String | -| main.rs:2942:13:2942:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2942:17:2942:44 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:2942:17:2942:44 | ...::Ok(...) | E | {EXTERNAL LOCATION} | String | -| main.rs:2942:17:2942:44 | ...::Ok(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2942:43:2942:43 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2943:13:2943:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:2943:13:2943:13 | x | E | {EXTERNAL LOCATION} | String | -| main.rs:2943:13:2943:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2943:17:2943:44 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:2943:17:2943:44 | ...::Ok::<...>(...) | E | {EXTERNAL LOCATION} | String | -| main.rs:2943:17:2943:44 | ...::Ok::<...>(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2943:43:2943:43 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2945:29:2945:31 | res | | {EXTERNAL LOCATION} | Result | -| main.rs:2945:29:2945:31 | res | E | main.rs:2945:26:2945:26 | E | -| main.rs:2945:29:2945:31 | res | T | main.rs:2945:23:2945:23 | T | -| main.rs:2945:48:2945:48 | x | | main.rs:2945:26:2945:26 | E | -| main.rs:2945:54:2945:55 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2947:13:2947:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:2947:13:2947:13 | x | E | {EXTERNAL LOCATION} | bool | -| main.rs:2947:13:2947:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2947:17:2947:29 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:2947:17:2947:29 | ...::Ok(...) | E | {EXTERNAL LOCATION} | bool | -| main.rs:2947:17:2947:29 | ...::Ok(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2947:28:2947:28 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2948:9:2948:28 | pin_result(...) | | file://:0:0:0:0 | () | -| main.rs:2948:20:2948:20 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:2948:20:2948:20 | x | E | {EXTERNAL LOCATION} | bool | -| main.rs:2948:20:2948:20 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2948:23:2948:27 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:2950:17:2950:17 | x | | {EXTERNAL LOCATION} | Vec | -| main.rs:2950:17:2950:17 | x | A | {EXTERNAL LOCATION} | Global | -| main.rs:2950:17:2950:17 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2950:21:2950:30 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2950:21:2950:30 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2950:21:2950:30 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2951:9:2951:9 | x | | {EXTERNAL LOCATION} | Vec | -| main.rs:2951:9:2951:9 | x | A | {EXTERNAL LOCATION} | Global | -| main.rs:2951:9:2951:9 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2951:9:2951:17 | x.push(...) | | file://:0:0:0:0 | () | -| main.rs:2951:16:2951:16 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2953:13:2953:13 | y | | {EXTERNAL LOCATION} | i32 | -| main.rs:2953:17:2953:34 | ...::default(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:2954:9:2954:9 | x | | {EXTERNAL LOCATION} | Vec | -| main.rs:2954:9:2954:9 | x | A | {EXTERNAL LOCATION} | Global | -| main.rs:2954:9:2954:9 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2954:9:2954:17 | x.push(...) | | file://:0:0:0:0 | () | -| main.rs:2954:16:2954:16 | y | | {EXTERNAL LOCATION} | i32 | -| main.rs:2963:11:2998:1 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2964:5:2964:21 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:2965:5:2965:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2966:5:2966:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2966:20:2966:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2966:41:2966:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2967:5:2967:35 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:2968:5:2968:41 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:2969:5:2969:45 | ...::test(...) | | file://:0:0:0:0 | () | -| main.rs:2970:5:2970:30 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:2971:5:2971:33 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:2972:5:2972:21 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:2973:5:2973:27 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:2974:5:2974:32 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:2975:5:2975:23 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:2976:5:2976:36 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:2977:5:2977:35 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:2978:5:2978:29 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:2979:5:2979:23 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:2980:5:2980:24 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:2981:5:2981:17 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:2982:5:2982:18 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:2983:5:2983:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future | -| main.rs:2983:5:2983:15 | ...::f(...) | Output | file://:0:0:0:0 | () | -| main.rs:2984:5:2984:19 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:2985:5:2985:17 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:2986:5:2986:14 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:2987:5:2987:27 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:2988:5:2988:15 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:2989:5:2989:43 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:2990:5:2990:15 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:2991:5:2991:17 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:2992:5:2992:23 | ...::test(...) | | file://:0:0:0:0 | () | -| main.rs:2993:5:2993:41 | ...::test_all_patterns(...) | | file://:0:0:0:0 | () | -| main.rs:2994:5:2994:49 | ...::box_patterns(...) | | file://:0:0:0:0 | () | -| main.rs:2995:5:2995:20 | ...::test(...) | | file://:0:0:0:0 | () | -| main.rs:2996:5:2996:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2996:5:2996:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2996:5:2996:20 | ...::f(...) | T | main.rs:2816:5:2818:5 | dyn MyTrait | -| main.rs:2996:5:2996:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | -| main.rs:2996:16:2996:19 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2997:5:2997:23 | ...::f(...) | | file://:0:0:0:0 | () | +| main.rs:1973:13:1973:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1973:13:1973:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1973:13:1973:27 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:1973:23:1973:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1973:23:1973:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1979:19:1979:22 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1979:25:1979:27 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1979:44:1984:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1980:13:1983:13 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1981:20:1981:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1981:20:1981:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1981:20:1981:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1981:29:1981:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1981:29:1981:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1982:20:1982:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1982:20:1982:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1982:20:1982:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1982:29:1982:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1982:29:1982:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1988:26:1988:34 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1988:26:1988:34 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1988:37:1988:39 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1988:48:1991:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1989:13:1989:16 | self | | file://:0:0:0:0 | & | +| main.rs:1989:13:1989:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1989:13:1989:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1989:13:1989:27 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:1989:23:1989:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1989:23:1989:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1990:13:1990:16 | self | | file://:0:0:0:0 | & | +| main.rs:1990:13:1990:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1990:13:1990:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1990:13:1990:27 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:1990:23:1990:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1990:23:1990:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1996:16:1996:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1996:22:1996:24 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1996:40:2001:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1997:13:2000:13 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1998:20:1998:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1998:20:1998:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1998:20:1998:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1998:30:1998:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1999:20:1999:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1999:20:1999:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1999:20:1999:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1999:30:1999:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:2005:23:2005:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2005:23:2005:31 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2005:34:2005:36 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:2005:44:2008:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2006:13:2006:16 | self | | file://:0:0:0:0 | & | +| main.rs:2006:13:2006:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2006:13:2006:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2006:13:2006:26 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:2006:24:2006:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:2007:13:2007:16 | self | | file://:0:0:0:0 | & | +| main.rs:2007:13:2007:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2007:13:2007:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:2007:13:2007:26 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:2007:24:2007:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:2013:16:2013:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2013:22:2013:24 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:2013:40:2018:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2014:13:2017:13 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2015:20:2015:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2015:20:2015:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2015:20:2015:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2015:30:2015:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:2016:20:2016:23 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2016:20:2016:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:2016:20:2016:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2016:30:2016:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:2022:23:2022:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2022:23:2022:31 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2022:34:2022:36 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:2022:44:2025:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2023:13:2023:16 | self | | file://:0:0:0:0 | & | +| main.rs:2023:13:2023:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2023:13:2023:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2023:13:2023:26 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:2023:24:2023:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:2024:13:2024:16 | self | | file://:0:0:0:0 | & | +| main.rs:2024:13:2024:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2024:13:2024:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:2024:13:2024:26 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:2024:24:2024:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:2030:16:2030:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2030:30:2035:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2031:13:2034:13 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2032:20:2032:26 | - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2032:21:2032:24 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2032:21:2032:26 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2033:20:2033:26 | - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2033:21:2033:24 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2033:21:2033:26 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:2040:16:2040:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2040:30:2045:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2041:13:2044:13 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2042:20:2042:26 | ! ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2042:21:2042:24 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2042:21:2042:26 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2043:20:2043:26 | ! ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2043:21:2043:24 | self | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2043:21:2043:26 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:2049:15:2049:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2049:15:2049:19 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2049:22:2049:26 | other | | file://:0:0:0:0 | & | +| main.rs:2049:22:2049:26 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2049:44:2051:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:2050:13:2050:16 | self | | file://:0:0:0:0 | & | +| main.rs:2050:13:2050:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2050:13:2050:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2050:13:2050:29 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2050:13:2050:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2050:23:2050:27 | other | | file://:0:0:0:0 | & | +| main.rs:2050:23:2050:27 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2050:23:2050:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2050:34:2050:37 | self | | file://:0:0:0:0 | & | +| main.rs:2050:34:2050:37 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2050:34:2050:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:2050:34:2050:50 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2050:44:2050:48 | other | | file://:0:0:0:0 | & | +| main.rs:2050:44:2050:48 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2050:44:2050:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:2053:15:2053:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2053:15:2053:19 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2053:22:2053:26 | other | | file://:0:0:0:0 | & | +| main.rs:2053:22:2053:26 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2053:44:2055:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:2054:13:2054:16 | self | | file://:0:0:0:0 | & | +| main.rs:2054:13:2054:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2054:13:2054:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2054:13:2054:29 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2054:13:2054:50 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2054:23:2054:27 | other | | file://:0:0:0:0 | & | +| main.rs:2054:23:2054:27 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2054:23:2054:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2054:34:2054:37 | self | | file://:0:0:0:0 | & | +| main.rs:2054:34:2054:37 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2054:34:2054:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:2054:34:2054:50 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2054:44:2054:48 | other | | file://:0:0:0:0 | & | +| main.rs:2054:44:2054:48 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2054:44:2054:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:2059:24:2059:28 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2059:24:2059:28 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2059:31:2059:35 | other | | file://:0:0:0:0 | & | +| main.rs:2059:31:2059:35 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2059:75:2061:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| main.rs:2059:75:2061:9 | { ... } | T | {EXTERNAL LOCATION} | Ordering | +| main.rs:2060:13:2060:29 | (...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2060:13:2060:63 | ... .partial_cmp(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2060:13:2060:63 | ... .partial_cmp(...) | T | {EXTERNAL LOCATION} | Ordering | +| main.rs:2060:14:2060:17 | self | | file://:0:0:0:0 | & | +| main.rs:2060:14:2060:17 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2060:14:2060:19 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2060:14:2060:28 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2060:23:2060:26 | self | | file://:0:0:0:0 | & | +| main.rs:2060:23:2060:26 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2060:23:2060:28 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:2060:43:2060:62 | &... | | file://:0:0:0:0 | & | +| main.rs:2060:43:2060:62 | &... | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:2060:44:2060:62 | (...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2060:45:2060:49 | other | | file://:0:0:0:0 | & | +| main.rs:2060:45:2060:49 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2060:45:2060:51 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2060:45:2060:61 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2060:55:2060:59 | other | | file://:0:0:0:0 | & | +| main.rs:2060:55:2060:59 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2060:55:2060:61 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:2063:15:2063:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2063:15:2063:19 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2063:22:2063:26 | other | | file://:0:0:0:0 | & | +| main.rs:2063:22:2063:26 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2063:44:2065:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:2064:13:2064:16 | self | | file://:0:0:0:0 | & | +| main.rs:2064:13:2064:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2064:13:2064:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2064:13:2064:28 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2064:13:2064:48 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2064:22:2064:26 | other | | file://:0:0:0:0 | & | +| main.rs:2064:22:2064:26 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2064:22:2064:28 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2064:33:2064:36 | self | | file://:0:0:0:0 | & | +| main.rs:2064:33:2064:36 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2064:33:2064:38 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:2064:33:2064:48 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2064:42:2064:46 | other | | file://:0:0:0:0 | & | +| main.rs:2064:42:2064:46 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2064:42:2064:48 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:2067:15:2067:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2067:15:2067:19 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2067:22:2067:26 | other | | file://:0:0:0:0 | & | +| main.rs:2067:22:2067:26 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2067:44:2069:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:2068:13:2068:16 | self | | file://:0:0:0:0 | & | +| main.rs:2068:13:2068:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2068:13:2068:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2068:13:2068:29 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2068:13:2068:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2068:23:2068:27 | other | | file://:0:0:0:0 | & | +| main.rs:2068:23:2068:27 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2068:23:2068:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2068:34:2068:37 | self | | file://:0:0:0:0 | & | +| main.rs:2068:34:2068:37 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2068:34:2068:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:2068:34:2068:50 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2068:44:2068:48 | other | | file://:0:0:0:0 | & | +| main.rs:2068:44:2068:48 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2068:44:2068:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:2071:15:2071:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2071:15:2071:19 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2071:22:2071:26 | other | | file://:0:0:0:0 | & | +| main.rs:2071:22:2071:26 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2071:44:2073:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:2072:13:2072:16 | self | | file://:0:0:0:0 | & | +| main.rs:2072:13:2072:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2072:13:2072:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2072:13:2072:28 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2072:13:2072:48 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2072:22:2072:26 | other | | file://:0:0:0:0 | & | +| main.rs:2072:22:2072:26 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2072:22:2072:28 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2072:33:2072:36 | self | | file://:0:0:0:0 | & | +| main.rs:2072:33:2072:36 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2072:33:2072:38 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:2072:33:2072:48 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2072:42:2072:46 | other | | file://:0:0:0:0 | & | +| main.rs:2072:42:2072:46 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2072:42:2072:48 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:2075:15:2075:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2075:15:2075:19 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2075:22:2075:26 | other | | file://:0:0:0:0 | & | +| main.rs:2075:22:2075:26 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2075:44:2077:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:2076:13:2076:16 | self | | file://:0:0:0:0 | & | +| main.rs:2076:13:2076:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2076:13:2076:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2076:13:2076:29 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2076:13:2076:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2076:23:2076:27 | other | | file://:0:0:0:0 | & | +| main.rs:2076:23:2076:27 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2076:23:2076:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2076:34:2076:37 | self | | file://:0:0:0:0 | & | +| main.rs:2076:34:2076:37 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2076:34:2076:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:2076:34:2076:50 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2076:44:2076:48 | other | | file://:0:0:0:0 | & | +| main.rs:2076:44:2076:48 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2076:44:2076:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:2080:26:2080:26 | a | | main.rs:2080:18:2080:23 | T | +| main.rs:2080:32:2080:32 | b | | main.rs:2080:18:2080:23 | T | +| main.rs:2080:51:2082:5 | { ... } | | {EXTERNAL LOCATION} | Output | +| main.rs:2081:9:2081:9 | a | | main.rs:2080:18:2080:23 | T | +| main.rs:2081:9:2081:13 | ... + ... | | {EXTERNAL LOCATION} | Output | +| main.rs:2081:13:2081:13 | b | | main.rs:2080:18:2080:23 | T | +| main.rs:2084:16:2215:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2088:13:2088:18 | i64_eq | | {EXTERNAL LOCATION} | bool | +| main.rs:2088:22:2088:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:2088:23:2088:26 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2088:23:2088:34 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2088:31:2088:34 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2089:13:2089:18 | i64_ne | | {EXTERNAL LOCATION} | bool | +| main.rs:2089:22:2089:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:2089:23:2089:26 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2089:23:2089:34 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2089:31:2089:34 | 4i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2090:13:2090:18 | i64_lt | | {EXTERNAL LOCATION} | bool | +| main.rs:2090:22:2090:34 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:2090:23:2090:26 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2090:23:2090:33 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2090:30:2090:33 | 6i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2091:13:2091:18 | i64_le | | {EXTERNAL LOCATION} | bool | +| main.rs:2091:22:2091:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:2091:23:2091:26 | 7i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2091:23:2091:34 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2091:31:2091:34 | 8i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2092:13:2092:18 | i64_gt | | {EXTERNAL LOCATION} | bool | +| main.rs:2092:22:2092:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:2092:23:2092:26 | 9i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2092:23:2092:34 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2092:30:2092:34 | 10i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2093:13:2093:18 | i64_ge | | {EXTERNAL LOCATION} | bool | +| main.rs:2093:22:2093:37 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:2093:23:2093:27 | 11i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2093:23:2093:36 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2093:32:2093:36 | 12i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2096:13:2096:19 | i64_add | | {EXTERNAL LOCATION} | i64 | +| main.rs:2096:23:2096:27 | 13i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2096:23:2096:35 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2096:31:2096:35 | 14i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2097:13:2097:19 | i64_sub | | {EXTERNAL LOCATION} | i64 | +| main.rs:2097:23:2097:27 | 15i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2097:23:2097:35 | ... - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2097:31:2097:35 | 16i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2098:13:2098:19 | i64_mul | | {EXTERNAL LOCATION} | i64 | +| main.rs:2098:23:2098:27 | 17i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2098:23:2098:35 | ... * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2098:31:2098:35 | 18i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2099:13:2099:19 | i64_div | | {EXTERNAL LOCATION} | i64 | +| main.rs:2099:23:2099:27 | 19i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2099:23:2099:35 | ... / ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2099:31:2099:35 | 20i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2100:13:2100:19 | i64_rem | | {EXTERNAL LOCATION} | i64 | +| main.rs:2100:23:2100:27 | 21i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2100:23:2100:35 | ... % ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2100:31:2100:35 | 22i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2101:39:2101:42 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2101:45:2101:48 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2104:17:2104:30 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2104:34:2104:38 | 23i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2105:9:2105:22 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2105:9:2105:31 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:2105:27:2105:31 | 24i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2107:17:2107:30 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2107:34:2107:38 | 25i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2108:9:2108:22 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2108:9:2108:31 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:2108:27:2108:31 | 26i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2110:17:2110:30 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2110:34:2110:38 | 27i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2111:9:2111:22 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2111:9:2111:31 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:2111:27:2111:31 | 28i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2113:17:2113:30 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2113:34:2113:38 | 29i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2114:9:2114:22 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2114:9:2114:31 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:2114:27:2114:31 | 30i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2116:17:2116:30 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2116:34:2116:38 | 31i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2117:9:2117:22 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2117:9:2117:31 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:2117:27:2117:31 | 32i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2120:13:2120:22 | i64_bitand | | {EXTERNAL LOCATION} | i64 | +| main.rs:2120:26:2120:30 | 33i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2120:26:2120:38 | ... & ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2120:34:2120:38 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2121:13:2121:21 | i64_bitor | | {EXTERNAL LOCATION} | i64 | +| main.rs:2121:25:2121:29 | 35i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2121:25:2121:37 | ... \| ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2121:33:2121:37 | 36i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2122:13:2122:22 | i64_bitxor | | {EXTERNAL LOCATION} | i64 | +| main.rs:2122:26:2122:30 | 37i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2122:26:2122:38 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2122:34:2122:38 | 38i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2123:13:2123:19 | i64_shl | | {EXTERNAL LOCATION} | i64 | +| main.rs:2123:23:2123:27 | 39i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2123:23:2123:36 | ... << ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2123:32:2123:36 | 40i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2124:13:2124:19 | i64_shr | | {EXTERNAL LOCATION} | i64 | +| main.rs:2124:23:2124:27 | 41i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2124:23:2124:36 | ... >> ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2124:32:2124:36 | 42i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2127:17:2127:33 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2127:37:2127:41 | 43i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2128:9:2128:25 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2128:9:2128:34 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:2128:30:2128:34 | 44i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2130:17:2130:32 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2130:36:2130:40 | 45i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2131:9:2131:24 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2131:9:2131:33 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:2131:29:2131:33 | 46i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2133:17:2133:33 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2133:37:2133:41 | 47i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2134:9:2134:25 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2134:9:2134:34 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:2134:30:2134:34 | 48i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2136:17:2136:30 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2136:34:2136:38 | 49i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2137:9:2137:22 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2137:9:2137:32 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:2137:28:2137:32 | 50i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2139:17:2139:30 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2139:34:2139:38 | 51i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2140:9:2140:22 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:2140:9:2140:32 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:2140:28:2140:32 | 52i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2142:13:2142:19 | i64_neg | | {EXTERNAL LOCATION} | i64 | +| main.rs:2142:23:2142:28 | - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2142:24:2142:28 | 53i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2143:13:2143:19 | i64_not | | {EXTERNAL LOCATION} | i64 | +| main.rs:2143:23:2143:28 | ! ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2143:24:2143:28 | 54i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2146:13:2146:14 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2146:18:2146:36 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2146:28:2146:28 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2146:34:2146:34 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2147:13:2147:14 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2147:18:2147:36 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2147:28:2147:28 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2147:34:2147:34 | 4 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2150:13:2150:19 | vec2_eq | | {EXTERNAL LOCATION} | bool | +| main.rs:2150:23:2150:24 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2150:23:2150:30 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2150:29:2150:30 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2151:13:2151:19 | vec2_ne | | {EXTERNAL LOCATION} | bool | +| main.rs:2151:23:2151:24 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2151:23:2151:30 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2151:29:2151:30 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2152:13:2152:19 | vec2_lt | | {EXTERNAL LOCATION} | bool | +| main.rs:2152:23:2152:24 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2152:23:2152:29 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2152:28:2152:29 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2153:13:2153:19 | vec2_le | | {EXTERNAL LOCATION} | bool | +| main.rs:2153:23:2153:24 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2153:23:2153:30 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2153:29:2153:30 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2154:13:2154:19 | vec2_gt | | {EXTERNAL LOCATION} | bool | +| main.rs:2154:23:2154:24 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2154:23:2154:29 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2154:28:2154:29 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2155:13:2155:19 | vec2_ge | | {EXTERNAL LOCATION} | bool | +| main.rs:2155:23:2155:24 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2155:23:2155:30 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2155:29:2155:30 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2158:13:2158:20 | vec2_add | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2158:24:2158:25 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2158:24:2158:30 | ... + ... | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2158:29:2158:30 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2159:13:2159:20 | vec2_sub | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2159:24:2159:25 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2159:24:2159:30 | ... - ... | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2159:29:2159:30 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2160:13:2160:20 | vec2_mul | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2160:24:2160:25 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2160:24:2160:30 | ... * ... | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2160:29:2160:30 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2161:13:2161:20 | vec2_div | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2161:24:2161:25 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2161:24:2161:30 | ... / ... | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2161:29:2161:30 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2162:13:2162:20 | vec2_rem | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2162:24:2162:25 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2162:24:2162:30 | ... % ... | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2162:29:2162:30 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2165:17:2165:31 | vec2_add_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2165:35:2165:36 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2166:9:2166:23 | vec2_add_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2166:9:2166:29 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:2166:28:2166:29 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2168:17:2168:31 | vec2_sub_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2168:35:2168:36 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2169:9:2169:23 | vec2_sub_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2169:9:2169:29 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:2169:28:2169:29 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2171:17:2171:31 | vec2_mul_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2171:35:2171:36 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2172:9:2172:23 | vec2_mul_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2172:9:2172:29 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:2172:28:2172:29 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2174:17:2174:31 | vec2_div_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2174:35:2174:36 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2175:9:2175:23 | vec2_div_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2175:9:2175:29 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:2175:28:2175:29 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2177:17:2177:31 | vec2_rem_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2177:35:2177:36 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2178:9:2178:23 | vec2_rem_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2178:9:2178:29 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:2178:28:2178:29 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2181:13:2181:23 | vec2_bitand | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2181:27:2181:28 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2181:27:2181:33 | ... & ... | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2181:32:2181:33 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2182:13:2182:22 | vec2_bitor | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2182:26:2182:27 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2182:26:2182:32 | ... \| ... | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2182:31:2182:32 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2183:13:2183:23 | vec2_bitxor | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2183:27:2183:28 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2183:27:2183:33 | ... ^ ... | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2183:32:2183:33 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2184:13:2184:20 | vec2_shl | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2184:24:2184:25 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2184:24:2184:33 | ... << ... | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2184:30:2184:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2185:13:2185:20 | vec2_shr | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2185:24:2185:25 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2185:24:2185:33 | ... >> ... | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2185:30:2185:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2188:17:2188:34 | vec2_bitand_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2188:38:2188:39 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2189:9:2189:26 | vec2_bitand_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2189:9:2189:32 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:2189:31:2189:32 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2191:17:2191:33 | vec2_bitor_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2191:37:2191:38 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2192:9:2192:25 | vec2_bitor_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2192:9:2192:31 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:2192:30:2192:31 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2194:17:2194:34 | vec2_bitxor_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2194:38:2194:39 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2195:9:2195:26 | vec2_bitxor_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2195:9:2195:32 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:2195:31:2195:32 | v2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2197:17:2197:31 | vec2_shl_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2197:35:2197:36 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2198:9:2198:23 | vec2_shl_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2198:9:2198:32 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:2198:29:2198:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2200:17:2200:31 | vec2_shr_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2200:35:2200:36 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2201:9:2201:23 | vec2_shr_assign | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2201:9:2201:32 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:2201:29:2201:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2204:13:2204:20 | vec2_neg | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2204:24:2204:26 | - ... | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2204:25:2204:26 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2205:13:2205:20 | vec2_not | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2205:24:2205:26 | ! ... | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2205:25:2205:26 | v1 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2208:13:2208:24 | default_vec2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2208:28:2208:45 | ...::default(...) | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2209:13:2209:26 | vec2_zero_plus | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2209:30:2209:48 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2209:30:2209:63 | ... + ... | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2209:40:2209:40 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2209:46:2209:46 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2209:52:2209:63 | default_vec2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2213:13:2213:24 | default_vec2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2213:28:2213:45 | ...::default(...) | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2214:13:2214:26 | vec2_zero_plus | | {EXTERNAL LOCATION} | bool | +| main.rs:2214:30:2214:48 | Vec2 {...} | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2214:30:2214:64 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2214:40:2214:40 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2214:46:2214:46 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2214:53:2214:64 | default_vec2 | | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2224:18:2224:21 | SelfParam | | main.rs:2221:5:2221:14 | S1 | +| main.rs:2224:24:2224:25 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2227:25:2229:5 | { ... } | | main.rs:2221:5:2221:14 | S1 | +| main.rs:2228:9:2228:10 | S1 | | main.rs:2221:5:2221:14 | S1 | +| main.rs:2231:41:2233:5 | { ... } | | main.rs:2231:16:2231:39 | impl ... | +| main.rs:2232:9:2232:20 | { ... } | | {EXTERNAL LOCATION} | trait Future | +| main.rs:2232:9:2232:20 | { ... } | Output | main.rs:2221:5:2221:14 | S1 | +| main.rs:2232:17:2232:18 | S1 | | main.rs:2221:5:2221:14 | S1 | +| main.rs:2235:41:2237:5 | { ... } | | main.rs:2235:16:2235:39 | impl ... | +| main.rs:2236:9:2236:16 | { ... } | | {EXTERNAL LOCATION} | trait Future | +| main.rs:2236:9:2236:16 | { ... } | Output | file://:0:0:0:0 | () | +| main.rs:2245:13:2245:42 | SelfParam | | {EXTERNAL LOCATION} | Pin | +| main.rs:2245:13:2245:42 | SelfParam | Ptr | file://:0:0:0:0 | & | +| main.rs:2245:13:2245:42 | SelfParam | Ptr.&T | main.rs:2239:5:2239:14 | S2 | +| main.rs:2246:13:2246:15 | _cx | | file://:0:0:0:0 | & | +| main.rs:2246:13:2246:15 | _cx | &T | {EXTERNAL LOCATION} | Context | +| main.rs:2247:44:2249:9 | { ... } | | {EXTERNAL LOCATION} | Poll | +| main.rs:2247:44:2249:9 | { ... } | T | main.rs:2221:5:2221:14 | S1 | +| main.rs:2248:13:2248:38 | ...::Ready(...) | | {EXTERNAL LOCATION} | Poll | +| main.rs:2248:13:2248:38 | ...::Ready(...) | T | main.rs:2221:5:2221:14 | S1 | +| main.rs:2248:36:2248:37 | S1 | | main.rs:2221:5:2221:14 | S1 | +| main.rs:2252:41:2254:5 | { ... } | | main.rs:2252:16:2252:39 | impl ... | +| main.rs:2253:9:2253:10 | S2 | | main.rs:2239:5:2239:14 | S2 | +| main.rs:2253:9:2253:10 | S2 | | main.rs:2252:16:2252:39 | impl ... | +| main.rs:2256:22:2264:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2257:9:2257:12 | f1(...) | | {EXTERNAL LOCATION} | trait Future | +| main.rs:2257:9:2257:12 | f1(...) | Output | main.rs:2221:5:2221:14 | S1 | +| main.rs:2257:9:2257:18 | await ... | | main.rs:2221:5:2221:14 | S1 | +| main.rs:2257:9:2257:22 | ... .f() | | file://:0:0:0:0 | () | +| main.rs:2258:9:2258:12 | f2(...) | | main.rs:2231:16:2231:39 | impl ... | +| main.rs:2258:9:2258:18 | await ... | | main.rs:2221:5:2221:14 | S1 | +| main.rs:2258:9:2258:22 | ... .f() | | file://:0:0:0:0 | () | +| main.rs:2259:9:2259:12 | f3(...) | | main.rs:2235:16:2235:39 | impl ... | +| main.rs:2259:9:2259:18 | await ... | | file://:0:0:0:0 | () | +| main.rs:2260:9:2260:12 | f4(...) | | main.rs:2252:16:2252:39 | impl ... | +| main.rs:2260:9:2260:18 | await ... | | main.rs:2221:5:2221:14 | S1 | +| main.rs:2260:9:2260:22 | ... .f() | | file://:0:0:0:0 | () | +| main.rs:2261:9:2261:10 | S2 | | main.rs:2239:5:2239:14 | S2 | +| main.rs:2261:9:2261:16 | await S2 | | main.rs:2221:5:2221:14 | S1 | +| main.rs:2261:9:2261:20 | ... .f() | | file://:0:0:0:0 | () | +| main.rs:2262:13:2262:13 | b | | {EXTERNAL LOCATION} | trait Future | +| main.rs:2262:13:2262:13 | b | Output | main.rs:2221:5:2221:14 | S1 | +| main.rs:2262:17:2262:28 | { ... } | | {EXTERNAL LOCATION} | trait Future | +| main.rs:2262:17:2262:28 | { ... } | Output | main.rs:2221:5:2221:14 | S1 | +| main.rs:2262:25:2262:26 | S1 | | main.rs:2221:5:2221:14 | S1 | +| main.rs:2263:9:2263:9 | b | | {EXTERNAL LOCATION} | trait Future | +| main.rs:2263:9:2263:9 | b | Output | main.rs:2221:5:2221:14 | S1 | +| main.rs:2263:9:2263:15 | await b | | main.rs:2221:5:2221:14 | S1 | +| main.rs:2263:9:2263:19 | ... .f() | | file://:0:0:0:0 | () | +| main.rs:2274:15:2274:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2274:15:2274:19 | SelfParam | &T | main.rs:2273:5:2275:5 | Self [trait Trait1] | +| main.rs:2274:22:2274:23 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2278:15:2278:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2278:15:2278:19 | SelfParam | &T | main.rs:2277:5:2279:5 | Self [trait Trait2] | +| main.rs:2278:22:2278:23 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2282:15:2282:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2282:15:2282:19 | SelfParam | &T | main.rs:2268:5:2269:14 | S1 | +| main.rs:2282:22:2282:23 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2286:15:2286:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2286:15:2286:19 | SelfParam | &T | main.rs:2268:5:2269:14 | S1 | +| main.rs:2286:22:2286:23 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2289:37:2291:5 | { ... } | | main.rs:2289:16:2289:35 | impl ... + ... | +| main.rs:2290:9:2290:10 | S1 | | main.rs:2268:5:2269:14 | S1 | +| main.rs:2290:9:2290:10 | S1 | | main.rs:2289:16:2289:35 | impl ... + ... | +| main.rs:2294:18:2294:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2294:18:2294:22 | SelfParam | &T | main.rs:2293:5:2295:5 | Self [trait MyTrait] | +| main.rs:2298:18:2298:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2298:18:2298:22 | SelfParam | &T | main.rs:2268:5:2269:14 | S1 | +| main.rs:2298:31:2300:9 | { ... } | | main.rs:2270:5:2270:14 | S2 | +| main.rs:2299:13:2299:14 | S2 | | main.rs:2270:5:2270:14 | S2 | +| main.rs:2304:18:2304:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2304:18:2304:22 | SelfParam | &T | main.rs:2271:5:2271:22 | S3 | +| main.rs:2304:18:2304:22 | SelfParam | &T.T3 | main.rs:2303:10:2303:17 | T | +| main.rs:2304:30:2307:9 | { ... } | | main.rs:2303:10:2303:17 | T | +| main.rs:2305:17:2305:21 | S3(...) | | file://:0:0:0:0 | & | +| main.rs:2305:17:2305:21 | S3(...) | | main.rs:2271:5:2271:22 | S3 | +| main.rs:2305:17:2305:21 | S3(...) | &T | main.rs:2271:5:2271:22 | S3 | +| main.rs:2305:17:2305:21 | S3(...) | &T.T3 | main.rs:2303:10:2303:17 | T | +| main.rs:2305:25:2305:28 | self | | file://:0:0:0:0 | & | +| main.rs:2305:25:2305:28 | self | &T | main.rs:2271:5:2271:22 | S3 | +| main.rs:2305:25:2305:28 | self | &T.T3 | main.rs:2303:10:2303:17 | T | +| main.rs:2306:13:2306:21 | t.clone() | | main.rs:2303:10:2303:17 | T | +| main.rs:2310:45:2312:5 | { ... } | | main.rs:2310:28:2310:43 | impl ... | +| main.rs:2311:9:2311:10 | S1 | | main.rs:2268:5:2269:14 | S1 | +| main.rs:2311:9:2311:10 | S1 | | main.rs:2310:28:2310:43 | impl ... | +| main.rs:2314:41:2314:41 | t | | main.rs:2314:26:2314:38 | B | +| main.rs:2314:52:2316:5 | { ... } | | main.rs:2314:23:2314:23 | A | +| main.rs:2315:9:2315:9 | t | | main.rs:2314:26:2314:38 | B | +| main.rs:2315:9:2315:17 | t.get_a() | | main.rs:2314:23:2314:23 | A | +| main.rs:2318:34:2318:34 | x | | main.rs:2318:24:2318:31 | T | +| main.rs:2318:59:2320:5 | { ... } | | main.rs:2318:43:2318:57 | impl ... | +| main.rs:2318:59:2320:5 | { ... } | impl(T) | main.rs:2318:24:2318:31 | T | +| main.rs:2319:9:2319:13 | S3(...) | | main.rs:2271:5:2271:22 | S3 | +| main.rs:2319:9:2319:13 | S3(...) | | main.rs:2318:43:2318:57 | impl ... | +| main.rs:2319:9:2319:13 | S3(...) | T3 | main.rs:2318:24:2318:31 | T | +| main.rs:2319:9:2319:13 | S3(...) | impl(T) | main.rs:2318:24:2318:31 | T | +| main.rs:2319:12:2319:12 | x | | main.rs:2318:24:2318:31 | T | +| main.rs:2322:34:2322:34 | x | | main.rs:2322:24:2322:31 | T | +| main.rs:2322:67:2324:5 | { ... } | | {EXTERNAL LOCATION} | Option | +| main.rs:2322:67:2324:5 | { ... } | T | main.rs:2322:50:2322:64 | impl ... | +| main.rs:2322:67:2324:5 | { ... } | T.impl(T) | main.rs:2322:24:2322:31 | T | +| main.rs:2323:9:2323:19 | Some(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2323:9:2323:19 | Some(...) | T | main.rs:2271:5:2271:22 | S3 | +| main.rs:2323:9:2323:19 | Some(...) | T | main.rs:2322:50:2322:64 | impl ... | +| main.rs:2323:9:2323:19 | Some(...) | T.T3 | main.rs:2322:24:2322:31 | T | +| main.rs:2323:9:2323:19 | Some(...) | T.impl(T) | main.rs:2322:24:2322:31 | T | +| main.rs:2323:14:2323:18 | S3(...) | | main.rs:2271:5:2271:22 | S3 | +| main.rs:2323:14:2323:18 | S3(...) | T3 | main.rs:2322:24:2322:31 | T | +| main.rs:2323:17:2323:17 | x | | main.rs:2322:24:2322:31 | T | +| main.rs:2326:34:2326:34 | x | | main.rs:2326:24:2326:31 | T | +| main.rs:2326:78:2328:5 | { ... } | | file://:0:0:0:0 | (T_2) | +| main.rs:2326:78:2328:5 | { ... } | 0(2) | main.rs:2326:44:2326:58 | impl ... | +| main.rs:2326:78:2328:5 | { ... } | 0(2).impl(T) | main.rs:2326:24:2326:31 | T | +| main.rs:2326:78:2328:5 | { ... } | 1(2) | main.rs:2326:61:2326:75 | impl ... | +| main.rs:2326:78:2328:5 | { ... } | 1(2).impl(T) | main.rs:2326:24:2326:31 | T | +| main.rs:2327:9:2327:30 | TupleExpr | | file://:0:0:0:0 | (T_2) | +| main.rs:2327:9:2327:30 | TupleExpr | 0(2) | main.rs:2271:5:2271:22 | S3 | +| main.rs:2327:9:2327:30 | TupleExpr | 0(2) | main.rs:2326:44:2326:58 | impl ... | +| main.rs:2327:9:2327:30 | TupleExpr | 0(2).T3 | main.rs:2326:24:2326:31 | T | +| main.rs:2327:9:2327:30 | TupleExpr | 0(2).impl(T) | main.rs:2326:24:2326:31 | T | +| main.rs:2327:9:2327:30 | TupleExpr | 1(2) | main.rs:2271:5:2271:22 | S3 | +| main.rs:2327:9:2327:30 | TupleExpr | 1(2) | main.rs:2326:61:2326:75 | impl ... | +| main.rs:2327:9:2327:30 | TupleExpr | 1(2).T3 | main.rs:2326:24:2326:31 | T | +| main.rs:2327:9:2327:30 | TupleExpr | 1(2).impl(T) | main.rs:2326:24:2326:31 | T | +| main.rs:2327:10:2327:22 | S3(...) | | main.rs:2271:5:2271:22 | S3 | +| main.rs:2327:10:2327:22 | S3(...) | | main.rs:2326:44:2326:58 | impl ... | +| main.rs:2327:10:2327:22 | S3(...) | T3 | main.rs:2326:24:2326:31 | T | +| main.rs:2327:10:2327:22 | S3(...) | impl(T) | main.rs:2326:24:2326:31 | T | +| main.rs:2327:13:2327:13 | x | | main.rs:2326:24:2326:31 | T | +| main.rs:2327:13:2327:21 | x.clone() | | main.rs:2326:24:2326:31 | T | +| main.rs:2327:25:2327:29 | S3(...) | | main.rs:2271:5:2271:22 | S3 | +| main.rs:2327:25:2327:29 | S3(...) | | main.rs:2326:61:2326:75 | impl ... | +| main.rs:2327:25:2327:29 | S3(...) | T3 | main.rs:2326:24:2326:31 | T | +| main.rs:2327:25:2327:29 | S3(...) | impl(T) | main.rs:2326:24:2326:31 | T | +| main.rs:2327:28:2327:28 | x | | main.rs:2326:24:2326:31 | T | +| main.rs:2330:26:2330:26 | t | | main.rs:2330:29:2330:43 | impl ... | +| main.rs:2330:51:2332:5 | { ... } | | main.rs:2330:23:2330:23 | A | +| main.rs:2331:9:2331:9 | t | | main.rs:2330:29:2330:43 | impl ... | +| main.rs:2331:9:2331:17 | t.get_a() | | main.rs:2330:23:2330:23 | A | +| main.rs:2334:16:2348:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2335:13:2335:13 | x | | main.rs:2289:16:2289:35 | impl ... + ... | +| main.rs:2335:17:2335:20 | f1(...) | | main.rs:2289:16:2289:35 | impl ... + ... | +| main.rs:2336:9:2336:9 | x | | main.rs:2289:16:2289:35 | impl ... + ... | +| main.rs:2336:9:2336:14 | x.f1() | | file://:0:0:0:0 | () | +| main.rs:2337:9:2337:9 | x | | main.rs:2289:16:2289:35 | impl ... + ... | +| main.rs:2337:9:2337:14 | x.f2() | | file://:0:0:0:0 | () | +| main.rs:2338:13:2338:13 | a | | main.rs:2310:28:2310:43 | impl ... | +| main.rs:2338:17:2338:32 | get_a_my_trait(...) | | main.rs:2310:28:2310:43 | impl ... | +| main.rs:2339:13:2339:13 | b | | main.rs:2270:5:2270:14 | S2 | +| main.rs:2339:17:2339:33 | uses_my_trait1(...) | | main.rs:2270:5:2270:14 | S2 | +| main.rs:2339:32:2339:32 | a | | main.rs:2310:28:2310:43 | impl ... | +| main.rs:2340:13:2340:13 | a | | main.rs:2310:28:2310:43 | impl ... | +| main.rs:2340:17:2340:32 | get_a_my_trait(...) | | main.rs:2310:28:2310:43 | impl ... | +| main.rs:2341:13:2341:13 | c | | main.rs:2270:5:2270:14 | S2 | +| main.rs:2341:17:2341:33 | uses_my_trait2(...) | | main.rs:2270:5:2270:14 | S2 | +| main.rs:2341:32:2341:32 | a | | main.rs:2310:28:2310:43 | impl ... | +| main.rs:2342:13:2342:13 | d | | main.rs:2270:5:2270:14 | S2 | +| main.rs:2342:17:2342:34 | uses_my_trait2(...) | | main.rs:2270:5:2270:14 | S2 | +| main.rs:2342:32:2342:33 | S1 | | main.rs:2268:5:2269:14 | S1 | +| main.rs:2343:13:2343:13 | e | | main.rs:2268:5:2269:14 | S1 | +| main.rs:2343:17:2343:35 | get_a_my_trait2(...) | | main.rs:2318:43:2318:57 | impl ... | +| main.rs:2343:17:2343:35 | get_a_my_trait2(...) | impl(T) | main.rs:2268:5:2269:14 | S1 | +| main.rs:2343:17:2343:43 | ... .get_a() | | main.rs:2268:5:2269:14 | S1 | +| main.rs:2343:33:2343:34 | S1 | | main.rs:2268:5:2269:14 | S1 | +| main.rs:2346:13:2346:13 | f | | main.rs:2268:5:2269:14 | S1 | +| main.rs:2346:17:2346:35 | get_a_my_trait3(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2346:17:2346:35 | get_a_my_trait3(...) | T | main.rs:2322:50:2322:64 | impl ... | +| main.rs:2346:17:2346:35 | get_a_my_trait3(...) | T.impl(T) | main.rs:2268:5:2269:14 | S1 | +| main.rs:2346:17:2346:44 | ... .unwrap() | | main.rs:2322:50:2322:64 | impl ... | +| main.rs:2346:17:2346:44 | ... .unwrap() | impl(T) | main.rs:2268:5:2269:14 | S1 | +| main.rs:2346:17:2346:52 | ... .get_a() | | main.rs:2268:5:2269:14 | S1 | +| main.rs:2346:33:2346:34 | S1 | | main.rs:2268:5:2269:14 | S1 | +| main.rs:2347:13:2347:13 | g | | main.rs:2268:5:2269:14 | S1 | +| main.rs:2347:17:2347:35 | get_a_my_trait4(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2347:17:2347:35 | get_a_my_trait4(...) | 0(2) | main.rs:2326:44:2326:58 | impl ... | +| main.rs:2347:17:2347:35 | get_a_my_trait4(...) | 0(2).impl(T) | main.rs:2268:5:2269:14 | S1 | +| main.rs:2347:17:2347:35 | get_a_my_trait4(...) | 1(2) | main.rs:2326:61:2326:75 | impl ... | +| main.rs:2347:17:2347:35 | get_a_my_trait4(...) | 1(2).impl(T) | main.rs:2268:5:2269:14 | S1 | +| main.rs:2347:17:2347:37 | ... .0 | | main.rs:2326:44:2326:58 | impl ... | +| main.rs:2347:17:2347:37 | ... .0 | impl(T) | main.rs:2268:5:2269:14 | S1 | +| main.rs:2347:17:2347:45 | ... .get_a() | | main.rs:2268:5:2269:14 | S1 | +| main.rs:2347:33:2347:34 | S1 | | main.rs:2268:5:2269:14 | S1 | +| main.rs:2358:16:2358:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2358:16:2358:20 | SelfParam | &T | main.rs:2354:5:2355:13 | S | +| main.rs:2358:31:2360:9 | { ... } | | main.rs:2354:5:2355:13 | S | +| main.rs:2359:13:2359:13 | S | | main.rs:2354:5:2355:13 | S | +| main.rs:2369:26:2371:9 | { ... } | | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2369:26:2371:9 | { ... } | T | main.rs:2368:10:2368:10 | T | +| main.rs:2370:13:2370:38 | MyVec {...} | | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2370:13:2370:38 | MyVec {...} | T | main.rs:2368:10:2368:10 | T | +| main.rs:2370:27:2370:36 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2370:27:2370:36 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2370:27:2370:36 | ...::new(...) | T | main.rs:2368:10:2368:10 | T | +| main.rs:2373:17:2373:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2373:17:2373:25 | SelfParam | &T | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2373:17:2373:25 | SelfParam | &T.T | main.rs:2368:10:2368:10 | T | +| main.rs:2373:28:2373:32 | value | | main.rs:2368:10:2368:10 | T | +| main.rs:2373:38:2375:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2374:13:2374:16 | self | | file://:0:0:0:0 | & | +| main.rs:2374:13:2374:16 | self | &T | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2374:13:2374:16 | self | &T.T | main.rs:2368:10:2368:10 | T | +| main.rs:2374:13:2374:21 | self.data | | {EXTERNAL LOCATION} | Vec | +| main.rs:2374:13:2374:21 | self.data | A | {EXTERNAL LOCATION} | Global | +| main.rs:2374:13:2374:21 | self.data | T | main.rs:2368:10:2368:10 | T | +| main.rs:2374:13:2374:33 | ... .push(...) | | file://:0:0:0:0 | () | +| main.rs:2374:28:2374:32 | value | | main.rs:2368:10:2368:10 | T | +| main.rs:2382:18:2382:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2382:18:2382:22 | SelfParam | &T | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2382:18:2382:22 | SelfParam | &T.T | main.rs:2378:10:2378:10 | T | +| main.rs:2382:25:2382:29 | index | | {EXTERNAL LOCATION} | usize | +| main.rs:2382:56:2384:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:2382:56:2384:9 | { ... } | &T | main.rs:2378:10:2378:10 | T | +| main.rs:2383:13:2383:29 | &... | | file://:0:0:0:0 | & | +| main.rs:2383:13:2383:29 | &... | &T | main.rs:2378:10:2378:10 | T | +| main.rs:2383:14:2383:17 | self | | file://:0:0:0:0 | & | +| main.rs:2383:14:2383:17 | self | &T | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2383:14:2383:17 | self | &T.T | main.rs:2378:10:2378:10 | T | +| main.rs:2383:14:2383:22 | self.data | | {EXTERNAL LOCATION} | Vec | +| main.rs:2383:14:2383:22 | self.data | A | {EXTERNAL LOCATION} | Global | +| main.rs:2383:14:2383:22 | self.data | T | main.rs:2378:10:2378:10 | T | +| main.rs:2383:14:2383:29 | ...[index] | | main.rs:2378:10:2378:10 | T | +| main.rs:2383:24:2383:28 | index | | {EXTERNAL LOCATION} | usize | +| main.rs:2387:22:2387:26 | slice | | file://:0:0:0:0 | & | +| main.rs:2387:22:2387:26 | slice | &T | file://:0:0:0:0 | [] | +| main.rs:2387:22:2387:26 | slice | &T.[T] | main.rs:2354:5:2355:13 | S | +| main.rs:2387:35:2389:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2388:13:2388:13 | x | | main.rs:2354:5:2355:13 | S | +| main.rs:2388:17:2388:21 | slice | | file://:0:0:0:0 | & | +| main.rs:2388:17:2388:21 | slice | &T | file://:0:0:0:0 | [] | +| main.rs:2388:17:2388:21 | slice | &T.[T] | main.rs:2354:5:2355:13 | S | +| main.rs:2388:17:2388:24 | slice[0] | | main.rs:2354:5:2355:13 | S | +| main.rs:2388:17:2388:30 | ... .foo() | | main.rs:2354:5:2355:13 | S | +| main.rs:2388:23:2388:23 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2391:37:2391:37 | a | | main.rs:2391:20:2391:34 | T | +| main.rs:2391:43:2391:43 | b | | {EXTERNAL LOCATION} | usize | +| main.rs:2394:5:2396:5 | { ... } | | {EXTERNAL LOCATION} | Output | +| main.rs:2395:9:2395:9 | a | | main.rs:2391:20:2391:34 | T | +| main.rs:2395:9:2395:12 | a[b] | | {EXTERNAL LOCATION} | Output | +| main.rs:2395:11:2395:11 | b | | {EXTERNAL LOCATION} | usize | +| main.rs:2398:16:2409:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2399:17:2399:19 | vec | | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2399:17:2399:19 | vec | T | main.rs:2354:5:2355:13 | S | +| main.rs:2399:23:2399:34 | ...::new(...) | | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2399:23:2399:34 | ...::new(...) | T | main.rs:2354:5:2355:13 | S | +| main.rs:2400:9:2400:11 | vec | | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2400:9:2400:11 | vec | T | main.rs:2354:5:2355:13 | S | +| main.rs:2400:9:2400:19 | vec.push(...) | | file://:0:0:0:0 | () | +| main.rs:2400:18:2400:18 | S | | main.rs:2354:5:2355:13 | S | +| main.rs:2401:9:2401:11 | vec | | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2401:9:2401:11 | vec | T | main.rs:2354:5:2355:13 | S | +| main.rs:2401:9:2401:14 | vec[0] | | main.rs:2354:5:2355:13 | S | +| main.rs:2401:9:2401:20 | ... .foo() | | main.rs:2354:5:2355:13 | S | +| main.rs:2401:13:2401:13 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2403:13:2403:14 | xs | | file://:0:0:0:0 | [] | +| main.rs:2403:13:2403:14 | xs | [T;...] | main.rs:2354:5:2355:13 | S | +| main.rs:2403:21:2403:21 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2403:26:2403:28 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2403:26:2403:28 | [...] | [T;...] | main.rs:2354:5:2355:13 | S | +| main.rs:2403:27:2403:27 | S | | main.rs:2354:5:2355:13 | S | +| main.rs:2404:13:2404:13 | x | | main.rs:2354:5:2355:13 | S | +| main.rs:2404:17:2404:18 | xs | | file://:0:0:0:0 | [] | +| main.rs:2404:17:2404:18 | xs | [T;...] | main.rs:2354:5:2355:13 | S | +| main.rs:2404:17:2404:21 | xs[0] | | main.rs:2354:5:2355:13 | S | +| main.rs:2404:17:2404:27 | ... .foo() | | main.rs:2354:5:2355:13 | S | +| main.rs:2404:20:2404:20 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2406:29:2406:31 | vec | | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2406:29:2406:31 | vec | T | main.rs:2354:5:2355:13 | S | +| main.rs:2406:34:2406:34 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2408:9:2408:26 | analyze_slice(...) | | file://:0:0:0:0 | () | +| main.rs:2408:23:2408:25 | &xs | | file://:0:0:0:0 | & | +| main.rs:2408:23:2408:25 | &xs | &T | file://:0:0:0:0 | [] | +| main.rs:2408:23:2408:25 | &xs | &T.[T;...] | main.rs:2354:5:2355:13 | S | +| main.rs:2408:24:2408:25 | xs | | file://:0:0:0:0 | [] | +| main.rs:2408:24:2408:25 | xs | [T;...] | main.rs:2354:5:2355:13 | S | +| main.rs:2413:16:2415:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2414:13:2414:13 | x | | {EXTERNAL LOCATION} | String | +| main.rs:2414:17:2414:46 | MacroExpr | | {EXTERNAL LOCATION} | String | +| main.rs:2414:25:2414:35 | "Hello, {}" | | file://:0:0:0:0 | & | +| main.rs:2414:25:2414:35 | "Hello, {}" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2414:25:2414:45 | ...::format(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2414:25:2414:45 | ...::must_use(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2414:25:2414:45 | { ... } | | {EXTERNAL LOCATION} | String | +| main.rs:2414:38:2414:45 | "World!" | | file://:0:0:0:0 | & | +| main.rs:2414:38:2414:45 | "World!" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2423:19:2423:22 | SelfParam | | main.rs:2419:5:2424:5 | Self [trait MyAdd] | +| main.rs:2423:25:2423:27 | rhs | | main.rs:2419:17:2419:26 | Rhs | +| main.rs:2430:19:2430:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | +| main.rs:2430:25:2430:29 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2430:45:2432:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2431:13:2431:17 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2439:19:2439:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | +| main.rs:2439:25:2439:29 | value | | file://:0:0:0:0 | & | +| main.rs:2439:25:2439:29 | value | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:2439:46:2441:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2440:13:2440:18 | * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2440:14:2440:18 | value | | file://:0:0:0:0 | & | +| main.rs:2440:14:2440:18 | value | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:2448:19:2448:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | +| main.rs:2448:25:2448:29 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2448:46:2454:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2449:13:2453:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | +| main.rs:2449:13:2453:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | +| main.rs:2449:16:2449:20 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2449:22:2451:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2449:22:2451:13 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2450:17:2450:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2450:17:2450:17 | 1 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2451:20:2453:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2451:20:2453:13 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2452:17:2452:17 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2452:17:2452:17 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2463:19:2463:22 | SelfParam | | main.rs:2457:5:2457:19 | S | +| main.rs:2463:19:2463:22 | SelfParam | T | main.rs:2459:10:2459:17 | T | +| main.rs:2463:25:2463:29 | other | | main.rs:2457:5:2457:19 | S | +| main.rs:2463:25:2463:29 | other | T | main.rs:2459:10:2459:17 | T | +| main.rs:2463:54:2465:9 | { ... } | | main.rs:2457:5:2457:19 | S | +| main.rs:2463:54:2465:9 | { ... } | T | main.rs:2420:9:2420:20 | Output | +| main.rs:2464:13:2464:39 | S(...) | | main.rs:2457:5:2457:19 | S | +| main.rs:2464:13:2464:39 | S(...) | T | main.rs:2420:9:2420:20 | Output | +| main.rs:2464:15:2464:22 | (...) | | main.rs:2459:10:2459:17 | T | +| main.rs:2464:16:2464:19 | self | | main.rs:2457:5:2457:19 | S | +| main.rs:2464:16:2464:19 | self | T | main.rs:2459:10:2459:17 | T | +| main.rs:2464:16:2464:21 | self.0 | | main.rs:2459:10:2459:17 | T | +| main.rs:2464:31:2464:35 | other | | main.rs:2457:5:2457:19 | S | +| main.rs:2464:31:2464:35 | other | T | main.rs:2459:10:2459:17 | T | +| main.rs:2464:31:2464:37 | other.0 | | main.rs:2459:10:2459:17 | T | +| main.rs:2472:19:2472:22 | SelfParam | | main.rs:2457:5:2457:19 | S | +| main.rs:2472:19:2472:22 | SelfParam | T | main.rs:2468:10:2468:17 | T | +| main.rs:2472:25:2472:29 | other | | main.rs:2468:10:2468:17 | T | +| main.rs:2472:51:2474:9 | { ... } | | main.rs:2457:5:2457:19 | S | +| main.rs:2472:51:2474:9 | { ... } | T | main.rs:2420:9:2420:20 | Output | +| main.rs:2473:13:2473:37 | S(...) | | main.rs:2457:5:2457:19 | S | +| main.rs:2473:13:2473:37 | S(...) | T | main.rs:2420:9:2420:20 | Output | +| main.rs:2473:15:2473:22 | (...) | | main.rs:2468:10:2468:17 | T | +| main.rs:2473:16:2473:19 | self | | main.rs:2457:5:2457:19 | S | +| main.rs:2473:16:2473:19 | self | T | main.rs:2468:10:2468:17 | T | +| main.rs:2473:16:2473:21 | self.0 | | main.rs:2468:10:2468:17 | T | +| main.rs:2473:31:2473:35 | other | | main.rs:2468:10:2468:17 | T | +| main.rs:2484:19:2484:22 | SelfParam | | main.rs:2457:5:2457:19 | S | +| main.rs:2484:19:2484:22 | SelfParam | T | main.rs:2477:14:2477:14 | T | +| main.rs:2484:25:2484:29 | other | | file://:0:0:0:0 | & | +| main.rs:2484:25:2484:29 | other | &T | main.rs:2477:14:2477:14 | T | +| main.rs:2484:55:2486:9 | { ... } | | main.rs:2457:5:2457:19 | S | +| main.rs:2485:13:2485:37 | S(...) | | main.rs:2457:5:2457:19 | S | +| main.rs:2485:15:2485:22 | (...) | | main.rs:2477:14:2477:14 | T | +| main.rs:2485:16:2485:19 | self | | main.rs:2457:5:2457:19 | S | +| main.rs:2485:16:2485:19 | self | T | main.rs:2477:14:2477:14 | T | +| main.rs:2485:16:2485:21 | self.0 | | main.rs:2477:14:2477:14 | T | +| main.rs:2485:31:2485:35 | other | | file://:0:0:0:0 | & | +| main.rs:2485:31:2485:35 | other | &T | main.rs:2477:14:2477:14 | T | +| main.rs:2491:20:2491:24 | value | | main.rs:2489:18:2489:18 | T | +| main.rs:2496:20:2496:24 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2496:40:2498:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2497:13:2497:17 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2503:20:2503:24 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2503:41:2509:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2504:13:2508:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | +| main.rs:2504:13:2508:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | +| main.rs:2504:16:2504:20 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2504:22:2506:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2504:22:2506:13 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2505:17:2505:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2505:17:2505:17 | 1 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2506:20:2508:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2506:20:2508:13 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2507:17:2507:17 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2507:17:2507:17 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2514:21:2514:25 | value | | main.rs:2512:19:2512:19 | T | +| main.rs:2514:31:2514:31 | x | | main.rs:2512:5:2515:5 | Self [trait MyFrom2] | +| main.rs:2519:21:2519:25 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2519:33:2519:33 | _ | | {EXTERNAL LOCATION} | i64 | +| main.rs:2519:48:2521:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2520:13:2520:17 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2526:21:2526:25 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2526:34:2526:34 | _ | | {EXTERNAL LOCATION} | i64 | +| main.rs:2526:49:2532:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2527:13:2531:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | +| main.rs:2527:16:2527:20 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2527:22:2529:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2528:17:2528:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2529:20:2531:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2530:17:2530:17 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2537:15:2537:15 | x | | main.rs:2535:5:2541:5 | Self [trait MySelfTrait] | +| main.rs:2540:15:2540:15 | x | | main.rs:2535:5:2541:5 | Self [trait MySelfTrait] | +| main.rs:2545:15:2545:15 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2545:31:2547:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2546:13:2546:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2546:13:2546:17 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2546:17:2546:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2550:15:2550:15 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2550:32:2552:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2551:13:2551:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2551:13:2551:17 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2551:17:2551:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2557:15:2557:15 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:2557:31:2559:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2558:13:2558:13 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2558:13:2558:13 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2562:15:2562:15 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:2562:32:2564:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:2563:13:2563:13 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:2567:16:2592:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2568:13:2568:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2568:22:2568:23 | 73 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2568:22:2568:23 | 73 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2569:9:2569:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2569:9:2569:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2569:18:2569:21 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2570:9:2570:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2570:9:2570:23 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2570:18:2570:22 | &5i64 | | file://:0:0:0:0 | & | +| main.rs:2570:18:2570:22 | &5i64 | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:2570:19:2570:22 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2571:9:2571:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2571:9:2571:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2571:18:2571:21 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2573:9:2573:15 | S(...) | | main.rs:2457:5:2457:19 | S | +| main.rs:2573:9:2573:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | +| main.rs:2573:9:2573:31 | ... .my_add(...) | | main.rs:2457:5:2457:19 | S | +| main.rs:2573:11:2573:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2573:24:2573:30 | S(...) | | main.rs:2457:5:2457:19 | S | +| main.rs:2573:24:2573:30 | S(...) | T | {EXTERNAL LOCATION} | i64 | +| main.rs:2573:26:2573:29 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2574:9:2574:15 | S(...) | | main.rs:2457:5:2457:19 | S | +| main.rs:2574:9:2574:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | +| main.rs:2574:11:2574:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2574:24:2574:27 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2575:9:2575:15 | S(...) | | main.rs:2457:5:2457:19 | S | +| main.rs:2575:9:2575:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | +| main.rs:2575:9:2575:29 | ... .my_add(...) | | main.rs:2457:5:2457:19 | S | +| main.rs:2575:11:2575:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2575:24:2575:28 | &3i64 | | file://:0:0:0:0 | & | +| main.rs:2575:24:2575:28 | &3i64 | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:2575:25:2575:28 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2577:13:2577:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2577:17:2577:35 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2577:30:2577:34 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2578:13:2578:13 | y | | {EXTERNAL LOCATION} | i64 | +| main.rs:2578:17:2578:34 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2578:30:2578:33 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2579:13:2579:13 | z | | {EXTERNAL LOCATION} | i64 | +| main.rs:2579:22:2579:43 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2579:38:2579:42 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2580:9:2580:34 | ...::my_from2(...) | | file://:0:0:0:0 | () | +| main.rs:2580:23:2580:27 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2580:30:2580:33 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2581:9:2581:33 | ...::my_from2(...) | | file://:0:0:0:0 | () | +| main.rs:2581:23:2581:26 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2581:29:2581:32 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2582:9:2582:38 | ...::my_from2(...) | | file://:0:0:0:0 | () | +| main.rs:2582:27:2582:31 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2582:34:2582:37 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2584:9:2584:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2584:17:2584:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2585:9:2585:22 | ...::f2(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2585:17:2585:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2586:9:2586:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2586:18:2586:21 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2587:9:2587:22 | ...::f2(...) | | {EXTERNAL LOCATION} | bool | +| main.rs:2587:18:2587:21 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2588:9:2588:30 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2588:25:2588:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2589:9:2589:30 | ...::f2(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2589:25:2589:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2590:9:2590:29 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2590:25:2590:28 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2591:9:2591:29 | ...::f2(...) | | {EXTERNAL LOCATION} | bool | +| main.rs:2591:25:2591:28 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2599:26:2601:9 | { ... } | | main.rs:2596:5:2596:24 | MyCallable | +| main.rs:2600:13:2600:25 | MyCallable {...} | | main.rs:2596:5:2596:24 | MyCallable | +| main.rs:2603:17:2603:21 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2603:17:2603:21 | SelfParam | &T | main.rs:2596:5:2596:24 | MyCallable | +| main.rs:2603:31:2605:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2604:13:2604:13 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2604:13:2604:13 | 1 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2608:16:2715:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2611:9:2611:29 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2611:13:2611:13 | i | | {EXTERNAL LOCATION} | i32 | +| main.rs:2611:18:2611:26 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2611:18:2611:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2611:19:2611:19 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2611:22:2611:22 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2611:25:2611:25 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2611:28:2611:29 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2612:9:2612:44 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2612:18:2612:26 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2612:18:2612:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2612:18:2612:41 | ... .map(...) | | file://:0:0:0:0 | [] | +| main.rs:2612:19:2612:19 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2612:22:2612:22 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2612:25:2612:25 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2612:32:2612:40 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | +| main.rs:2612:32:2612:40 | \|...\| ... | dyn(Args) | file://:0:0:0:0 | (T_1) | +| main.rs:2612:40:2612:40 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2612:43:2612:44 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2613:9:2613:41 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2613:13:2613:13 | i | | {EXTERNAL LOCATION} | Item | +| main.rs:2613:13:2613:13 | i | | {EXTERNAL LOCATION} | i32 | +| main.rs:2613:18:2613:26 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2613:18:2613:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2613:18:2613:38 | ... .into_iter() | | {EXTERNAL LOCATION} | IntoIter | +| main.rs:2613:18:2613:38 | ... .into_iter() | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2613:19:2613:19 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2613:22:2613:22 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2613:25:2613:25 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2613:40:2613:41 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2615:13:2615:17 | vals1 | | file://:0:0:0:0 | [] | +| main.rs:2615:13:2615:17 | vals1 | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2615:13:2615:17 | vals1 | [T;...] | {EXTERNAL LOCATION} | u8 | +| main.rs:2615:21:2615:31 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2615:21:2615:31 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2615:21:2615:31 | [...] | [T;...] | {EXTERNAL LOCATION} | u8 | +| main.rs:2615:22:2615:24 | 1u8 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2615:27:2615:27 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2615:27:2615:27 | 2 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2615:30:2615:30 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2615:30:2615:30 | 3 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2616:9:2616:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2616:13:2616:13 | u | | {EXTERNAL LOCATION} | i32 | +| main.rs:2616:13:2616:13 | u | | {EXTERNAL LOCATION} | u8 | +| main.rs:2616:18:2616:22 | vals1 | | file://:0:0:0:0 | [] | +| main.rs:2616:18:2616:22 | vals1 | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2616:18:2616:22 | vals1 | [T;...] | {EXTERNAL LOCATION} | u8 | +| main.rs:2616:24:2616:25 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2618:13:2618:17 | vals2 | | file://:0:0:0:0 | [] | +| main.rs:2618:13:2618:17 | vals2 | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2618:21:2618:29 | [1u16; 3] | | file://:0:0:0:0 | [] | +| main.rs:2618:21:2618:29 | [1u16; 3] | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2618:22:2618:25 | 1u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2618:28:2618:28 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2619:9:2619:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2619:13:2619:13 | u | | {EXTERNAL LOCATION} | u16 | +| main.rs:2619:18:2619:22 | vals2 | | file://:0:0:0:0 | [] | +| main.rs:2619:18:2619:22 | vals2 | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2619:24:2619:25 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2621:13:2621:17 | vals3 | | file://:0:0:0:0 | [] | +| main.rs:2621:13:2621:17 | vals3 | [T;...] | {EXTERNAL LOCATION} | u32 | +| main.rs:2621:26:2621:26 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2621:31:2621:39 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2621:31:2621:39 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2621:31:2621:39 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | +| main.rs:2621:32:2621:32 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2621:32:2621:32 | 1 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2621:35:2621:35 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2621:35:2621:35 | 2 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2621:38:2621:38 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2621:38:2621:38 | 3 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2622:9:2622:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2622:13:2622:13 | u | | {EXTERNAL LOCATION} | u32 | +| main.rs:2622:18:2622:22 | vals3 | | file://:0:0:0:0 | [] | +| main.rs:2622:18:2622:22 | vals3 | [T;...] | {EXTERNAL LOCATION} | u32 | +| main.rs:2622:24:2622:25 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2624:13:2624:17 | vals4 | | file://:0:0:0:0 | [] | +| main.rs:2624:13:2624:17 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | +| main.rs:2624:26:2624:26 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2624:31:2624:36 | [1; 3] | | file://:0:0:0:0 | [] | +| main.rs:2624:31:2624:36 | [1; 3] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2624:31:2624:36 | [1; 3] | [T;...] | {EXTERNAL LOCATION} | u64 | +| main.rs:2624:32:2624:32 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2624:32:2624:32 | 1 | | {EXTERNAL LOCATION} | u64 | +| main.rs:2624:35:2624:35 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2625:9:2625:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2625:13:2625:13 | u | | {EXTERNAL LOCATION} | u64 | +| main.rs:2625:18:2625:22 | vals4 | | file://:0:0:0:0 | [] | +| main.rs:2625:18:2625:22 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | +| main.rs:2625:24:2625:25 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2627:17:2627:24 | strings1 | | file://:0:0:0:0 | [] | +| main.rs:2627:17:2627:24 | strings1 | [T;...] | file://:0:0:0:0 | & | +| main.rs:2627:17:2627:24 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2627:28:2627:48 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2627:28:2627:48 | [...] | [T;...] | file://:0:0:0:0 | & | +| main.rs:2627:28:2627:48 | [...] | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2627:29:2627:33 | "foo" | | file://:0:0:0:0 | & | +| main.rs:2627:29:2627:33 | "foo" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2627:36:2627:40 | "bar" | | file://:0:0:0:0 | & | +| main.rs:2627:36:2627:40 | "bar" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2627:43:2627:47 | "baz" | | file://:0:0:0:0 | & | +| main.rs:2627:43:2627:47 | "baz" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2628:9:2628:29 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2628:13:2628:13 | s | | {EXTERNAL LOCATION} | Item | +| main.rs:2628:13:2628:13 | s | | file://:0:0:0:0 | & | +| main.rs:2628:13:2628:13 | s | &T | file://:0:0:0:0 | & | +| main.rs:2628:13:2628:13 | s | &T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2628:18:2628:26 | &strings1 | | file://:0:0:0:0 | & | +| main.rs:2628:18:2628:26 | &strings1 | &T | file://:0:0:0:0 | [] | +| main.rs:2628:18:2628:26 | &strings1 | &T.[T;...] | file://:0:0:0:0 | & | +| main.rs:2628:18:2628:26 | &strings1 | &T.[T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2628:19:2628:26 | strings1 | | file://:0:0:0:0 | [] | +| main.rs:2628:19:2628:26 | strings1 | [T;...] | file://:0:0:0:0 | & | +| main.rs:2628:19:2628:26 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2628:28:2628:29 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2629:9:2629:33 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2629:13:2629:13 | s | | {EXTERNAL LOCATION} | Item | +| main.rs:2629:13:2629:13 | s | | file://:0:0:0:0 | & | +| main.rs:2629:13:2629:13 | s | &T | file://:0:0:0:0 | & | +| main.rs:2629:13:2629:13 | s | &T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2629:18:2629:30 | &mut strings1 | | file://:0:0:0:0 | & | +| main.rs:2629:18:2629:30 | &mut strings1 | &T | file://:0:0:0:0 | [] | +| main.rs:2629:18:2629:30 | &mut strings1 | &T.[T;...] | file://:0:0:0:0 | & | +| main.rs:2629:18:2629:30 | &mut strings1 | &T.[T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2629:23:2629:30 | strings1 | | file://:0:0:0:0 | [] | +| main.rs:2629:23:2629:30 | strings1 | [T;...] | file://:0:0:0:0 | & | +| main.rs:2629:23:2629:30 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2629:32:2629:33 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2630:9:2630:28 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2630:13:2630:13 | s | | file://:0:0:0:0 | & | +| main.rs:2630:13:2630:13 | s | &T | {EXTERNAL LOCATION} | str | +| main.rs:2630:18:2630:25 | strings1 | | file://:0:0:0:0 | [] | +| main.rs:2630:18:2630:25 | strings1 | [T;...] | file://:0:0:0:0 | & | +| main.rs:2630:18:2630:25 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2630:27:2630:28 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2632:13:2632:20 | strings2 | | file://:0:0:0:0 | [] | +| main.rs:2632:13:2632:20 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2633:9:2637:9 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2633:9:2637:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2634:13:2634:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2634:26:2634:30 | "foo" | | file://:0:0:0:0 | & | +| main.rs:2634:26:2634:30 | "foo" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2635:13:2635:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2635:26:2635:30 | "bar" | | file://:0:0:0:0 | & | +| main.rs:2635:26:2635:30 | "bar" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2636:13:2636:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2636:26:2636:30 | "baz" | | file://:0:0:0:0 | & | +| main.rs:2636:26:2636:30 | "baz" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2638:9:2638:28 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2638:13:2638:13 | s | | {EXTERNAL LOCATION} | String | +| main.rs:2638:18:2638:25 | strings2 | | file://:0:0:0:0 | [] | +| main.rs:2638:18:2638:25 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2638:27:2638:28 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2640:13:2640:20 | strings3 | | file://:0:0:0:0 | & | +| main.rs:2640:13:2640:20 | strings3 | &T | file://:0:0:0:0 | [] | +| main.rs:2640:13:2640:20 | strings3 | &T.[T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2641:9:2645:9 | &... | | file://:0:0:0:0 | & | +| main.rs:2641:9:2645:9 | &... | &T | file://:0:0:0:0 | [] | +| main.rs:2641:9:2645:9 | &... | &T.[T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2641:10:2645:9 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2641:10:2645:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2642:13:2642:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2642:26:2642:30 | "foo" | | file://:0:0:0:0 | & | +| main.rs:2642:26:2642:30 | "foo" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2643:13:2643:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2643:26:2643:30 | "bar" | | file://:0:0:0:0 | & | +| main.rs:2643:26:2643:30 | "bar" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2644:13:2644:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2644:26:2644:30 | "baz" | | file://:0:0:0:0 | & | +| main.rs:2644:26:2644:30 | "baz" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2646:9:2646:28 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2646:13:2646:13 | s | | {EXTERNAL LOCATION} | Item | +| main.rs:2646:13:2646:13 | s | | file://:0:0:0:0 | & | +| main.rs:2646:13:2646:13 | s | &T | {EXTERNAL LOCATION} | String | +| main.rs:2646:18:2646:25 | strings3 | | file://:0:0:0:0 | & | +| main.rs:2646:18:2646:25 | strings3 | &T | file://:0:0:0:0 | [] | +| main.rs:2646:18:2646:25 | strings3 | &T.[T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2646:27:2646:28 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2648:13:2648:21 | callables | | file://:0:0:0:0 | [] | +| main.rs:2648:13:2648:21 | callables | [T;...] | main.rs:2596:5:2596:24 | MyCallable | +| main.rs:2648:25:2648:81 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2648:25:2648:81 | [...] | [T;...] | main.rs:2596:5:2596:24 | MyCallable | +| main.rs:2648:26:2648:42 | ...::new(...) | | main.rs:2596:5:2596:24 | MyCallable | +| main.rs:2648:45:2648:61 | ...::new(...) | | main.rs:2596:5:2596:24 | MyCallable | +| main.rs:2648:64:2648:80 | ...::new(...) | | main.rs:2596:5:2596:24 | MyCallable | +| main.rs:2649:9:2653:9 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2649:13:2649:13 | c | | main.rs:2596:5:2596:24 | MyCallable | +| main.rs:2650:12:2650:20 | callables | | file://:0:0:0:0 | [] | +| main.rs:2650:12:2650:20 | callables | [T;...] | main.rs:2596:5:2596:24 | MyCallable | +| main.rs:2651:9:2653:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2652:17:2652:22 | result | | {EXTERNAL LOCATION} | i64 | +| main.rs:2652:26:2652:26 | c | | main.rs:2596:5:2596:24 | MyCallable | +| main.rs:2652:26:2652:33 | c.call() | | {EXTERNAL LOCATION} | i64 | +| main.rs:2657:9:2657:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2657:13:2657:13 | i | | {EXTERNAL LOCATION} | Item | +| main.rs:2657:13:2657:13 | i | | {EXTERNAL LOCATION} | i32 | +| main.rs:2657:18:2657:18 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2657:18:2657:22 | 0..10 | | {EXTERNAL LOCATION} | Range | +| main.rs:2657:18:2657:22 | 0..10 | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2657:21:2657:22 | 10 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2657:24:2657:25 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2658:9:2658:29 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2658:13:2658:13 | u | | {EXTERNAL LOCATION} | Range | +| main.rs:2658:13:2658:13 | u | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2658:13:2658:13 | u | Idx | {EXTERNAL LOCATION} | u8 | +| main.rs:2658:18:2658:26 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2658:18:2658:26 | [...] | [T;...] | {EXTERNAL LOCATION} | Range | +| main.rs:2658:18:2658:26 | [...] | [T;...].Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2658:18:2658:26 | [...] | [T;...].Idx | {EXTERNAL LOCATION} | u8 | +| main.rs:2658:19:2658:21 | 0u8 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2658:19:2658:25 | 0u8..10 | | {EXTERNAL LOCATION} | Range | +| main.rs:2658:19:2658:25 | 0u8..10 | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2658:19:2658:25 | 0u8..10 | Idx | {EXTERNAL LOCATION} | u8 | +| main.rs:2658:24:2658:25 | 10 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2658:24:2658:25 | 10 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2658:28:2658:29 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2659:13:2659:17 | range | | {EXTERNAL LOCATION} | Range | +| main.rs:2659:13:2659:17 | range | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2659:21:2659:21 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2659:21:2659:25 | 0..10 | | {EXTERNAL LOCATION} | Range | +| main.rs:2659:21:2659:25 | 0..10 | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2659:24:2659:25 | 10 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2660:9:2660:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2660:13:2660:13 | i | | {EXTERNAL LOCATION} | Item | +| main.rs:2660:13:2660:13 | i | | {EXTERNAL LOCATION} | i32 | +| main.rs:2660:18:2660:22 | range | | {EXTERNAL LOCATION} | Range | +| main.rs:2660:18:2660:22 | range | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2660:24:2660:25 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2661:13:2661:22 | range_full | | {EXTERNAL LOCATION} | RangeFull | +| main.rs:2661:26:2661:27 | .. | | {EXTERNAL LOCATION} | RangeFull | +| main.rs:2662:9:2662:51 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2662:13:2662:13 | i | | {EXTERNAL LOCATION} | Item | +| main.rs:2662:18:2662:48 | &... | | file://:0:0:0:0 | & | +| main.rs:2662:19:2662:36 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2662:19:2662:36 | [...] | [T;...] | {EXTERNAL LOCATION} | i64 | +| main.rs:2662:20:2662:23 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2662:26:2662:29 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2662:32:2662:35 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2662:38:2662:47 | range_full | | {EXTERNAL LOCATION} | RangeFull | +| main.rs:2662:50:2662:51 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2664:13:2664:18 | range1 | | {EXTERNAL LOCATION} | Range | +| main.rs:2664:13:2664:18 | range1 | Idx | {EXTERNAL LOCATION} | u16 | +| main.rs:2665:9:2668:9 | ...::Range {...} | | {EXTERNAL LOCATION} | Range | +| main.rs:2665:9:2668:9 | ...::Range {...} | Idx | {EXTERNAL LOCATION} | u16 | +| main.rs:2666:20:2666:23 | 0u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2667:18:2667:22 | 10u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2669:9:2669:26 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2669:13:2669:13 | u | | {EXTERNAL LOCATION} | Item | +| main.rs:2669:13:2669:13 | u | | {EXTERNAL LOCATION} | u16 | +| main.rs:2669:18:2669:23 | range1 | | {EXTERNAL LOCATION} | Range | +| main.rs:2669:18:2669:23 | range1 | Idx | {EXTERNAL LOCATION} | u16 | +| main.rs:2669:25:2669:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2673:26:2673:26 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2673:29:2673:29 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2673:32:2673:32 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2674:9:2674:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2674:24:2674:25 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2676:13:2676:18 | vals4a | | {EXTERNAL LOCATION} | Vec | +| main.rs:2676:13:2676:18 | vals4a | A | {EXTERNAL LOCATION} | Global | +| main.rs:2676:13:2676:18 | vals4a | T | {EXTERNAL LOCATION} | u16 | +| main.rs:2676:32:2676:43 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2676:32:2676:43 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2676:32:2676:43 | [...] | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2676:32:2676:52 | ... .to_vec() | | {EXTERNAL LOCATION} | Vec | +| main.rs:2676:32:2676:52 | ... .to_vec() | A | {EXTERNAL LOCATION} | Global | +| main.rs:2676:32:2676:52 | ... .to_vec() | T | {EXTERNAL LOCATION} | u16 | +| main.rs:2676:33:2676:36 | 1u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2676:39:2676:39 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2676:42:2676:42 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2677:9:2677:26 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2677:13:2677:13 | u | | {EXTERNAL LOCATION} | u16 | +| main.rs:2677:18:2677:23 | vals4a | | {EXTERNAL LOCATION} | Vec | +| main.rs:2677:18:2677:23 | vals4a | A | {EXTERNAL LOCATION} | Global | +| main.rs:2677:18:2677:23 | vals4a | T | {EXTERNAL LOCATION} | u16 | +| main.rs:2677:25:2677:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2679:22:2679:33 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2679:22:2679:33 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2679:22:2679:33 | [...] | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2679:23:2679:26 | 1u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2679:29:2679:29 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2679:32:2679:32 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2680:9:2680:26 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2680:25:2680:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2682:13:2682:17 | vals5 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2682:13:2682:17 | vals5 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2682:13:2682:17 | vals5 | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2682:13:2682:17 | vals5 | T | {EXTERNAL LOCATION} | u32 | +| main.rs:2682:21:2682:43 | ...::from(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2682:21:2682:43 | ...::from(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2682:21:2682:43 | ...::from(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2682:21:2682:43 | ...::from(...) | T | {EXTERNAL LOCATION} | u32 | +| main.rs:2682:31:2682:42 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2682:31:2682:42 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2682:31:2682:42 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | +| main.rs:2682:32:2682:35 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2682:38:2682:38 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2682:41:2682:41 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2683:9:2683:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2683:13:2683:13 | u | | {EXTERNAL LOCATION} | i32 | +| main.rs:2683:13:2683:13 | u | | {EXTERNAL LOCATION} | u32 | +| main.rs:2683:18:2683:22 | vals5 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2683:18:2683:22 | vals5 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2683:18:2683:22 | vals5 | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2683:18:2683:22 | vals5 | T | {EXTERNAL LOCATION} | u32 | +| main.rs:2683:24:2683:25 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2685:13:2685:17 | vals6 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2685:13:2685:17 | vals6 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2685:13:2685:17 | vals6 | T | file://:0:0:0:0 | & | +| main.rs:2685:13:2685:17 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 | +| main.rs:2685:32:2685:43 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2685:32:2685:43 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2685:32:2685:43 | [...] | [T;...] | {EXTERNAL LOCATION} | u64 | +| main.rs:2685:32:2685:60 | ... .collect() | | {EXTERNAL LOCATION} | Vec | +| main.rs:2685:32:2685:60 | ... .collect() | A | {EXTERNAL LOCATION} | Global | +| main.rs:2685:32:2685:60 | ... .collect() | T | file://:0:0:0:0 | & | +| main.rs:2685:32:2685:60 | ... .collect() | T.&T | {EXTERNAL LOCATION} | u64 | +| main.rs:2685:33:2685:36 | 1u64 | | {EXTERNAL LOCATION} | u64 | +| main.rs:2685:39:2685:39 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2685:42:2685:42 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2686:9:2686:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2686:13:2686:13 | u | | file://:0:0:0:0 | & | +| main.rs:2686:13:2686:13 | u | &T | {EXTERNAL LOCATION} | u64 | +| main.rs:2686:18:2686:22 | vals6 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2686:18:2686:22 | vals6 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2686:18:2686:22 | vals6 | T | file://:0:0:0:0 | & | +| main.rs:2686:18:2686:22 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 | +| main.rs:2686:24:2686:25 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2688:17:2688:21 | vals7 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2688:17:2688:21 | vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2688:17:2688:21 | vals7 | T | {EXTERNAL LOCATION} | u8 | +| main.rs:2688:25:2688:34 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2688:25:2688:34 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2688:25:2688:34 | ...::new(...) | T | {EXTERNAL LOCATION} | u8 | +| main.rs:2689:9:2689:13 | vals7 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2689:9:2689:13 | vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2689:9:2689:13 | vals7 | T | {EXTERNAL LOCATION} | u8 | +| main.rs:2689:9:2689:23 | vals7.push(...) | | file://:0:0:0:0 | () | +| main.rs:2689:20:2689:22 | 1u8 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2690:9:2690:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2690:13:2690:13 | u | | {EXTERNAL LOCATION} | u8 | +| main.rs:2690:18:2690:22 | vals7 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2690:18:2690:22 | vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2690:18:2690:22 | vals7 | T | {EXTERNAL LOCATION} | u8 | +| main.rs:2690:24:2690:25 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2692:33:2692:33 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2692:36:2692:36 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2692:45:2692:45 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2692:48:2692:48 | 4 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2694:13:2694:13 | _ | | file://:0:0:0:0 | () | +| main.rs:2694:17:2697:9 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2694:36:2697:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2695:13:2696:13 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2695:29:2696:13 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2699:17:2699:20 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2699:17:2699:20 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2699:17:2699:20 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2699:17:2699:20 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2699:17:2699:20 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2699:17:2699:20 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2699:17:2699:20 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2699:24:2699:55 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2699:24:2699:55 | ...::new(...) | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2699:24:2699:55 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2699:24:2699:55 | ...::new(...) | V | {EXTERNAL LOCATION} | Box | +| main.rs:2699:24:2699:55 | ...::new(...) | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2699:24:2699:55 | ...::new(...) | V.T | file://:0:0:0:0 | & | +| main.rs:2699:24:2699:55 | ...::new(...) | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2700:9:2700:12 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2700:9:2700:12 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2700:9:2700:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2700:9:2700:12 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2700:9:2700:12 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2700:9:2700:12 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2700:9:2700:12 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2700:9:2700:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2700:9:2700:39 | map1.insert(...) | T | {EXTERNAL LOCATION} | Box | +| main.rs:2700:9:2700:39 | map1.insert(...) | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2700:9:2700:39 | map1.insert(...) | T.T | file://:0:0:0:0 | & | +| main.rs:2700:9:2700:39 | map1.insert(...) | T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2700:21:2700:21 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2700:24:2700:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2700:24:2700:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2700:24:2700:38 | ...::new(...) | T | file://:0:0:0:0 | & | +| main.rs:2700:24:2700:38 | ...::new(...) | T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2700:33:2700:37 | "one" | | file://:0:0:0:0 | & | +| main.rs:2700:33:2700:37 | "one" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2701:9:2701:12 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2701:9:2701:12 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2701:9:2701:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2701:9:2701:12 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2701:9:2701:12 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2701:9:2701:12 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2701:9:2701:12 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2701:9:2701:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2701:9:2701:39 | map1.insert(...) | T | {EXTERNAL LOCATION} | Box | +| main.rs:2701:9:2701:39 | map1.insert(...) | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2701:9:2701:39 | map1.insert(...) | T.T | file://:0:0:0:0 | & | +| main.rs:2701:9:2701:39 | map1.insert(...) | T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2701:21:2701:21 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2701:24:2701:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2701:24:2701:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2701:24:2701:38 | ...::new(...) | T | file://:0:0:0:0 | & | +| main.rs:2701:24:2701:38 | ...::new(...) | T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2701:33:2701:37 | "two" | | file://:0:0:0:0 | & | +| main.rs:2701:33:2701:37 | "two" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2702:9:2702:33 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2702:13:2702:15 | key | | {EXTERNAL LOCATION} | Item | +| main.rs:2702:13:2702:15 | key | | file://:0:0:0:0 | & | +| main.rs:2702:13:2702:15 | key | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:2702:20:2702:23 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2702:20:2702:23 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2702:20:2702:23 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2702:20:2702:23 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2702:20:2702:23 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2702:20:2702:23 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2702:20:2702:23 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2702:20:2702:30 | map1.keys() | | {EXTERNAL LOCATION} | Keys | +| main.rs:2702:20:2702:30 | map1.keys() | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2702:20:2702:30 | map1.keys() | V | {EXTERNAL LOCATION} | Box | +| main.rs:2702:20:2702:30 | map1.keys() | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2702:20:2702:30 | map1.keys() | V.T | file://:0:0:0:0 | & | +| main.rs:2702:20:2702:30 | map1.keys() | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2702:32:2702:33 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2703:9:2703:37 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2703:13:2703:17 | value | | {EXTERNAL LOCATION} | Item | +| main.rs:2703:13:2703:17 | value | | file://:0:0:0:0 | & | +| main.rs:2703:13:2703:17 | value | &T | {EXTERNAL LOCATION} | Box | +| main.rs:2703:13:2703:17 | value | &T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2703:13:2703:17 | value | &T.T | file://:0:0:0:0 | & | +| main.rs:2703:13:2703:17 | value | &T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2703:22:2703:25 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2703:22:2703:25 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2703:22:2703:25 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2703:22:2703:25 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2703:22:2703:25 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2703:22:2703:25 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2703:22:2703:25 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2703:22:2703:34 | map1.values() | | {EXTERNAL LOCATION} | Values | +| main.rs:2703:22:2703:34 | map1.values() | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2703:22:2703:34 | map1.values() | V | {EXTERNAL LOCATION} | Box | +| main.rs:2703:22:2703:34 | map1.values() | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2703:22:2703:34 | map1.values() | V.T | file://:0:0:0:0 | & | +| main.rs:2703:22:2703:34 | map1.values() | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2703:36:2703:37 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2704:9:2704:42 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2704:13:2704:24 | TuplePat | | file://:0:0:0:0 | (T_2) | +| main.rs:2704:13:2704:24 | TuplePat | 0(2) | file://:0:0:0:0 | & | +| main.rs:2704:13:2704:24 | TuplePat | 0(2).&T | {EXTERNAL LOCATION} | i32 | +| main.rs:2704:13:2704:24 | TuplePat | 1(2) | file://:0:0:0:0 | & | +| main.rs:2704:13:2704:24 | TuplePat | 1(2).&T | {EXTERNAL LOCATION} | Box | +| main.rs:2704:13:2704:24 | TuplePat | 1(2).&T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2704:13:2704:24 | TuplePat | 1(2).&T.T | file://:0:0:0:0 | & | +| main.rs:2704:13:2704:24 | TuplePat | 1(2).&T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2704:14:2704:16 | key | | file://:0:0:0:0 | & | +| main.rs:2704:14:2704:16 | key | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:2704:19:2704:23 | value | | file://:0:0:0:0 | & | +| main.rs:2704:19:2704:23 | value | &T | {EXTERNAL LOCATION} | Box | +| main.rs:2704:19:2704:23 | value | &T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2704:19:2704:23 | value | &T.T | file://:0:0:0:0 | & | +| main.rs:2704:19:2704:23 | value | &T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2704:29:2704:32 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2704:29:2704:32 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2704:29:2704:32 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2704:29:2704:32 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2704:29:2704:32 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2704:29:2704:32 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2704:29:2704:32 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2704:29:2704:39 | map1.iter() | | {EXTERNAL LOCATION} | Iter | +| main.rs:2704:29:2704:39 | map1.iter() | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2704:29:2704:39 | map1.iter() | V | {EXTERNAL LOCATION} | Box | +| main.rs:2704:29:2704:39 | map1.iter() | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2704:29:2704:39 | map1.iter() | V.T | file://:0:0:0:0 | & | +| main.rs:2704:29:2704:39 | map1.iter() | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2704:41:2704:42 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2705:9:2705:36 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2705:13:2705:24 | TuplePat | | file://:0:0:0:0 | (T_2) | +| main.rs:2705:13:2705:24 | TuplePat | 0(2) | file://:0:0:0:0 | & | +| main.rs:2705:13:2705:24 | TuplePat | 0(2).&T | {EXTERNAL LOCATION} | i32 | +| main.rs:2705:13:2705:24 | TuplePat | 1(2) | file://:0:0:0:0 | & | +| main.rs:2705:13:2705:24 | TuplePat | 1(2).&T | {EXTERNAL LOCATION} | Box | +| main.rs:2705:13:2705:24 | TuplePat | 1(2).&T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2705:13:2705:24 | TuplePat | 1(2).&T.T | file://:0:0:0:0 | & | +| main.rs:2705:13:2705:24 | TuplePat | 1(2).&T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2705:14:2705:16 | key | | file://:0:0:0:0 | & | +| main.rs:2705:14:2705:16 | key | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:2705:19:2705:23 | value | | file://:0:0:0:0 | & | +| main.rs:2705:19:2705:23 | value | &T | {EXTERNAL LOCATION} | Box | +| main.rs:2705:19:2705:23 | value | &T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2705:19:2705:23 | value | &T.T | file://:0:0:0:0 | & | +| main.rs:2705:19:2705:23 | value | &T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2705:29:2705:33 | &map1 | | file://:0:0:0:0 | & | +| main.rs:2705:29:2705:33 | &map1 | &T | {EXTERNAL LOCATION} | HashMap | +| main.rs:2705:29:2705:33 | &map1 | &T.K | {EXTERNAL LOCATION} | i32 | +| main.rs:2705:29:2705:33 | &map1 | &T.S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2705:29:2705:33 | &map1 | &T.V | {EXTERNAL LOCATION} | Box | +| main.rs:2705:29:2705:33 | &map1 | &T.V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2705:29:2705:33 | &map1 | &T.V.T | file://:0:0:0:0 | & | +| main.rs:2705:29:2705:33 | &map1 | &T.V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2705:30:2705:33 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2705:30:2705:33 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2705:30:2705:33 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2705:30:2705:33 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2705:30:2705:33 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2705:30:2705:33 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2705:30:2705:33 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2705:35:2705:36 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2709:17:2709:17 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2709:26:2709:26 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2709:26:2709:26 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2711:13:2711:13 | _ | | file://:0:0:0:0 | () | +| main.rs:2711:17:2714:9 | while ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2711:23:2711:23 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2711:23:2711:28 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2711:27:2711:28 | 10 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2712:9:2714:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2713:13:2713:13 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2713:13:2713:18 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:2713:18:2713:18 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2725:40:2727:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| main.rs:2725:40:2727:9 | { ... } | T | main.rs:2719:5:2719:20 | S1 | +| main.rs:2725:40:2727:9 | { ... } | T.T | main.rs:2724:10:2724:19 | T | +| main.rs:2726:13:2726:16 | None | | {EXTERNAL LOCATION} | Option | +| main.rs:2726:13:2726:16 | None | T | main.rs:2719:5:2719:20 | S1 | +| main.rs:2726:13:2726:16 | None | T.T | main.rs:2724:10:2724:19 | T | +| main.rs:2729:30:2731:9 | { ... } | | main.rs:2719:5:2719:20 | S1 | +| main.rs:2729:30:2731:9 | { ... } | T | main.rs:2724:10:2724:19 | T | +| main.rs:2730:13:2730:28 | S1(...) | | main.rs:2719:5:2719:20 | S1 | +| main.rs:2730:13:2730:28 | S1(...) | T | main.rs:2724:10:2724:19 | T | +| main.rs:2730:16:2730:27 | ...::default(...) | | main.rs:2724:10:2724:19 | T | +| main.rs:2733:19:2733:22 | SelfParam | | main.rs:2719:5:2719:20 | S1 | +| main.rs:2733:19:2733:22 | SelfParam | T | main.rs:2724:10:2724:19 | T | +| main.rs:2733:33:2735:9 | { ... } | | main.rs:2719:5:2719:20 | S1 | +| main.rs:2733:33:2735:9 | { ... } | T | main.rs:2724:10:2724:19 | T | +| main.rs:2734:13:2734:16 | self | | main.rs:2719:5:2719:20 | S1 | +| main.rs:2734:13:2734:16 | self | T | main.rs:2724:10:2724:19 | T | +| main.rs:2746:15:2746:15 | x | | main.rs:2746:12:2746:12 | T | +| main.rs:2746:26:2748:5 | { ... } | | main.rs:2746:12:2746:12 | T | +| main.rs:2747:9:2747:9 | x | | main.rs:2746:12:2746:12 | T | +| main.rs:2750:16:2772:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2751:13:2751:14 | x1 | | {EXTERNAL LOCATION} | Option | +| main.rs:2751:13:2751:14 | x1 | T | main.rs:2719:5:2719:20 | S1 | +| main.rs:2751:13:2751:14 | x1 | T.T | main.rs:2721:5:2722:14 | S2 | +| main.rs:2751:34:2751:48 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2751:34:2751:48 | ...::assoc_fun(...) | T | main.rs:2719:5:2719:20 | S1 | +| main.rs:2751:34:2751:48 | ...::assoc_fun(...) | T.T | main.rs:2721:5:2722:14 | S2 | +| main.rs:2752:13:2752:14 | x2 | | {EXTERNAL LOCATION} | Option | +| main.rs:2752:13:2752:14 | x2 | T | main.rs:2719:5:2719:20 | S1 | +| main.rs:2752:13:2752:14 | x2 | T.T | main.rs:2721:5:2722:14 | S2 | +| main.rs:2752:18:2752:38 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2752:18:2752:38 | ...::assoc_fun(...) | T | main.rs:2719:5:2719:20 | S1 | +| main.rs:2752:18:2752:38 | ...::assoc_fun(...) | T.T | main.rs:2721:5:2722:14 | S2 | +| main.rs:2753:13:2753:14 | x3 | | {EXTERNAL LOCATION} | Option | +| main.rs:2753:13:2753:14 | x3 | T | main.rs:2719:5:2719:20 | S1 | +| main.rs:2753:13:2753:14 | x3 | T.T | main.rs:2721:5:2722:14 | S2 | +| main.rs:2753:18:2753:32 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2753:18:2753:32 | ...::assoc_fun(...) | T | main.rs:2719:5:2719:20 | S1 | +| main.rs:2753:18:2753:32 | ...::assoc_fun(...) | T.T | main.rs:2721:5:2722:14 | S2 | +| main.rs:2754:13:2754:14 | x4 | | main.rs:2719:5:2719:20 | S1 | +| main.rs:2754:13:2754:14 | x4 | T | main.rs:2721:5:2722:14 | S2 | +| main.rs:2754:18:2754:48 | ...::method(...) | | main.rs:2719:5:2719:20 | S1 | +| main.rs:2754:18:2754:48 | ...::method(...) | T | main.rs:2721:5:2722:14 | S2 | +| main.rs:2754:35:2754:47 | ...::default(...) | | main.rs:2719:5:2719:20 | S1 | +| main.rs:2754:35:2754:47 | ...::default(...) | T | main.rs:2721:5:2722:14 | S2 | +| main.rs:2755:13:2755:14 | x5 | | main.rs:2719:5:2719:20 | S1 | +| main.rs:2755:13:2755:14 | x5 | T | main.rs:2721:5:2722:14 | S2 | +| main.rs:2755:18:2755:42 | ...::method(...) | | main.rs:2719:5:2719:20 | S1 | +| main.rs:2755:18:2755:42 | ...::method(...) | T | main.rs:2721:5:2722:14 | S2 | +| main.rs:2755:29:2755:41 | ...::default(...) | | main.rs:2719:5:2719:20 | S1 | +| main.rs:2755:29:2755:41 | ...::default(...) | T | main.rs:2721:5:2722:14 | S2 | +| main.rs:2756:13:2756:14 | x6 | | main.rs:2740:5:2740:27 | S4 | +| main.rs:2756:13:2756:14 | x6 | T4 | main.rs:2721:5:2722:14 | S2 | +| main.rs:2756:18:2756:45 | S4::<...>(...) | | main.rs:2740:5:2740:27 | S4 | +| main.rs:2756:18:2756:45 | S4::<...>(...) | T4 | main.rs:2721:5:2722:14 | S2 | +| main.rs:2756:27:2756:44 | ...::default(...) | | main.rs:2721:5:2722:14 | S2 | +| main.rs:2757:13:2757:14 | x7 | | main.rs:2740:5:2740:27 | S4 | +| main.rs:2757:13:2757:14 | x7 | T4 | main.rs:2721:5:2722:14 | S2 | +| main.rs:2757:18:2757:23 | S4(...) | | main.rs:2740:5:2740:27 | S4 | +| main.rs:2757:18:2757:23 | S4(...) | T4 | main.rs:2721:5:2722:14 | S2 | +| main.rs:2757:21:2757:22 | S2 | | main.rs:2721:5:2722:14 | S2 | +| main.rs:2758:13:2758:14 | x8 | | main.rs:2740:5:2740:27 | S4 | +| main.rs:2758:13:2758:14 | x8 | T4 | {EXTERNAL LOCATION} | i32 | +| main.rs:2758:18:2758:22 | S4(...) | | main.rs:2740:5:2740:27 | S4 | +| main.rs:2758:18:2758:22 | S4(...) | T4 | {EXTERNAL LOCATION} | i32 | +| main.rs:2758:21:2758:21 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2759:13:2759:14 | x9 | | main.rs:2740:5:2740:27 | S4 | +| main.rs:2759:13:2759:14 | x9 | T4 | main.rs:2721:5:2722:14 | S2 | +| main.rs:2759:18:2759:34 | S4(...) | | main.rs:2740:5:2740:27 | S4 | +| main.rs:2759:18:2759:34 | S4(...) | T4 | main.rs:2721:5:2722:14 | S2 | +| main.rs:2759:21:2759:33 | ...::default(...) | | main.rs:2721:5:2722:14 | S2 | +| main.rs:2760:13:2760:15 | x10 | | main.rs:2742:5:2744:5 | S5 | +| main.rs:2760:13:2760:15 | x10 | T5 | main.rs:2721:5:2722:14 | S2 | +| main.rs:2760:19:2763:9 | S5::<...> {...} | | main.rs:2742:5:2744:5 | S5 | +| main.rs:2760:19:2763:9 | S5::<...> {...} | T5 | main.rs:2721:5:2722:14 | S2 | +| main.rs:2762:20:2762:37 | ...::default(...) | | main.rs:2721:5:2722:14 | S2 | +| main.rs:2764:13:2764:15 | x11 | | main.rs:2742:5:2744:5 | S5 | +| main.rs:2764:13:2764:15 | x11 | T5 | main.rs:2721:5:2722:14 | S2 | +| main.rs:2764:19:2764:34 | S5 {...} | | main.rs:2742:5:2744:5 | S5 | +| main.rs:2764:19:2764:34 | S5 {...} | T5 | main.rs:2721:5:2722:14 | S2 | +| main.rs:2764:31:2764:32 | S2 | | main.rs:2721:5:2722:14 | S2 | +| main.rs:2765:13:2765:15 | x12 | | main.rs:2742:5:2744:5 | S5 | +| main.rs:2765:13:2765:15 | x12 | T5 | {EXTERNAL LOCATION} | i32 | +| main.rs:2765:19:2765:33 | S5 {...} | | main.rs:2742:5:2744:5 | S5 | +| main.rs:2765:19:2765:33 | S5 {...} | T5 | {EXTERNAL LOCATION} | i32 | +| main.rs:2765:31:2765:31 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2766:13:2766:15 | x13 | | main.rs:2742:5:2744:5 | S5 | +| main.rs:2766:13:2766:15 | x13 | T5 | main.rs:2721:5:2722:14 | S2 | +| main.rs:2766:19:2769:9 | S5 {...} | | main.rs:2742:5:2744:5 | S5 | +| main.rs:2766:19:2769:9 | S5 {...} | T5 | main.rs:2721:5:2722:14 | S2 | +| main.rs:2768:20:2768:32 | ...::default(...) | | main.rs:2721:5:2722:14 | S2 | +| main.rs:2770:13:2770:15 | x14 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2770:19:2770:48 | foo::<...>(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:2770:30:2770:47 | ...::default(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:2771:13:2771:15 | x15 | | main.rs:2719:5:2719:20 | S1 | +| main.rs:2771:13:2771:15 | x15 | T | main.rs:2721:5:2722:14 | S2 | +| main.rs:2771:19:2771:37 | ...::default(...) | | main.rs:2719:5:2719:20 | S1 | +| main.rs:2771:19:2771:37 | ...::default(...) | T | main.rs:2721:5:2722:14 | S2 | +| main.rs:2780:35:2782:9 | { ... } | | file://:0:0:0:0 | (T_2) | +| main.rs:2780:35:2782:9 | { ... } | 0(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2780:35:2782:9 | { ... } | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2781:13:2781:26 | TupleExpr | | file://:0:0:0:0 | (T_2) | +| main.rs:2781:13:2781:26 | TupleExpr | 0(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2781:13:2781:26 | TupleExpr | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2781:14:2781:18 | S1 {...} | | main.rs:2776:5:2777:16 | S1 | +| main.rs:2781:21:2781:25 | S1 {...} | | main.rs:2776:5:2777:16 | S1 | +| main.rs:2783:16:2783:19 | SelfParam | | main.rs:2776:5:2777:16 | S1 | +| main.rs:2783:22:2783:23 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2786:16:2820:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2787:13:2787:13 | a | | file://:0:0:0:0 | (T_2) | +| main.rs:2787:13:2787:13 | a | 0(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2787:13:2787:13 | a | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2787:17:2787:30 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2787:17:2787:30 | ...::get_pair(...) | 0(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2787:17:2787:30 | ...::get_pair(...) | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2788:17:2788:17 | b | | file://:0:0:0:0 | (T_2) | +| main.rs:2788:17:2788:17 | b | 0(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2788:17:2788:17 | b | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2788:21:2788:34 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2788:21:2788:34 | ...::get_pair(...) | 0(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2788:21:2788:34 | ...::get_pair(...) | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2789:13:2789:18 | TuplePat | | file://:0:0:0:0 | (T_2) | +| main.rs:2789:13:2789:18 | TuplePat | 0(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2789:13:2789:18 | TuplePat | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2789:14:2789:14 | c | | main.rs:2776:5:2777:16 | S1 | +| main.rs:2789:17:2789:17 | d | | main.rs:2776:5:2777:16 | S1 | +| main.rs:2789:22:2789:35 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2789:22:2789:35 | ...::get_pair(...) | 0(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2789:22:2789:35 | ...::get_pair(...) | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2790:13:2790:22 | TuplePat | | file://:0:0:0:0 | (T_2) | +| main.rs:2790:13:2790:22 | TuplePat | 0(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2790:13:2790:22 | TuplePat | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2790:18:2790:18 | e | | main.rs:2776:5:2777:16 | S1 | +| main.rs:2790:21:2790:21 | f | | main.rs:2776:5:2777:16 | S1 | +| main.rs:2790:26:2790:39 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2790:26:2790:39 | ...::get_pair(...) | 0(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2790:26:2790:39 | ...::get_pair(...) | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2791:13:2791:26 | TuplePat | | file://:0:0:0:0 | (T_2) | +| main.rs:2791:13:2791:26 | TuplePat | 0(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2791:13:2791:26 | TuplePat | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2791:18:2791:18 | g | | main.rs:2776:5:2777:16 | S1 | +| main.rs:2791:25:2791:25 | h | | main.rs:2776:5:2777:16 | S1 | +| main.rs:2791:30:2791:43 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2791:30:2791:43 | ...::get_pair(...) | 0(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2791:30:2791:43 | ...::get_pair(...) | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2793:9:2793:9 | a | | file://:0:0:0:0 | (T_2) | +| main.rs:2793:9:2793:9 | a | 0(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2793:9:2793:9 | a | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2793:9:2793:11 | a.0 | | main.rs:2776:5:2777:16 | S1 | +| main.rs:2793:9:2793:17 | ... .foo() | | file://:0:0:0:0 | () | +| main.rs:2794:9:2794:9 | b | | file://:0:0:0:0 | (T_2) | +| main.rs:2794:9:2794:9 | b | 0(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2794:9:2794:9 | b | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2794:9:2794:11 | b.1 | | main.rs:2776:5:2777:16 | S1 | +| main.rs:2794:9:2794:17 | ... .foo() | | file://:0:0:0:0 | () | +| main.rs:2795:9:2795:9 | c | | main.rs:2776:5:2777:16 | S1 | +| main.rs:2795:9:2795:15 | c.foo() | | file://:0:0:0:0 | () | +| main.rs:2796:9:2796:9 | d | | main.rs:2776:5:2777:16 | S1 | +| main.rs:2796:9:2796:15 | d.foo() | | file://:0:0:0:0 | () | +| main.rs:2797:9:2797:9 | e | | main.rs:2776:5:2777:16 | S1 | +| main.rs:2797:9:2797:15 | e.foo() | | file://:0:0:0:0 | () | +| main.rs:2798:9:2798:9 | f | | main.rs:2776:5:2777:16 | S1 | +| main.rs:2798:9:2798:15 | f.foo() | | file://:0:0:0:0 | () | +| main.rs:2799:9:2799:9 | g | | main.rs:2776:5:2777:16 | S1 | +| main.rs:2799:9:2799:15 | g.foo() | | file://:0:0:0:0 | () | +| main.rs:2800:9:2800:9 | h | | main.rs:2776:5:2777:16 | S1 | +| main.rs:2800:9:2800:15 | h.foo() | | file://:0:0:0:0 | () | +| main.rs:2805:13:2805:13 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2805:17:2805:34 | ...::default(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2806:13:2806:13 | b | | {EXTERNAL LOCATION} | bool | +| main.rs:2806:17:2806:34 | ...::default(...) | | {EXTERNAL LOCATION} | bool | +| main.rs:2807:13:2807:16 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2807:13:2807:16 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | +| main.rs:2807:13:2807:16 | pair | 1(2) | {EXTERNAL LOCATION} | bool | +| main.rs:2807:20:2807:25 | TupleExpr | | file://:0:0:0:0 | (T_2) | +| main.rs:2807:20:2807:25 | TupleExpr | 0(2) | {EXTERNAL LOCATION} | i64 | +| main.rs:2807:20:2807:25 | TupleExpr | 1(2) | {EXTERNAL LOCATION} | bool | +| main.rs:2807:21:2807:21 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2807:24:2807:24 | b | | {EXTERNAL LOCATION} | bool | +| main.rs:2808:13:2808:13 | i | | {EXTERNAL LOCATION} | i64 | +| main.rs:2808:22:2808:25 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2808:22:2808:25 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | +| main.rs:2808:22:2808:25 | pair | 1(2) | {EXTERNAL LOCATION} | bool | +| main.rs:2808:22:2808:27 | pair.0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2809:13:2809:13 | j | | {EXTERNAL LOCATION} | bool | +| main.rs:2809:23:2809:26 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2809:23:2809:26 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | +| main.rs:2809:23:2809:26 | pair | 1(2) | {EXTERNAL LOCATION} | bool | +| main.rs:2809:23:2809:28 | pair.1 | | {EXTERNAL LOCATION} | bool | +| main.rs:2811:13:2811:16 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2811:13:2811:16 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2811:13:2811:16 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2811:20:2811:25 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2811:20:2811:25 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2811:20:2811:32 | ... .into() | | file://:0:0:0:0 | (T_2) | +| main.rs:2811:20:2811:32 | ... .into() | 0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2811:20:2811:32 | ... .into() | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2811:21:2811:21 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2811:24:2811:24 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2812:9:2815:9 | match pair { ... } | | file://:0:0:0:0 | () | +| main.rs:2812:15:2812:18 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2812:15:2812:18 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2812:15:2812:18 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2813:13:2813:18 | TuplePat | | file://:0:0:0:0 | (T_2) | +| main.rs:2813:13:2813:18 | TuplePat | 0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2813:13:2813:18 | TuplePat | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2813:14:2813:14 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2813:17:2813:17 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2813:23:2813:42 | MacroExpr | | file://:0:0:0:0 | () | +| main.rs:2813:30:2813:41 | "unexpected" | | file://:0:0:0:0 | & | +| main.rs:2813:30:2813:41 | "unexpected" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2813:30:2813:41 | ...::_print(...) | | file://:0:0:0:0 | () | +| main.rs:2813:30:2813:41 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2814:13:2814:13 | _ | | file://:0:0:0:0 | (T_2) | +| main.rs:2814:13:2814:13 | _ | 0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2814:13:2814:13 | _ | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2814:18:2814:35 | MacroExpr | | file://:0:0:0:0 | () | +| main.rs:2814:25:2814:34 | "expected" | | file://:0:0:0:0 | & | +| main.rs:2814:25:2814:34 | "expected" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2814:25:2814:34 | ...::_print(...) | | file://:0:0:0:0 | () | +| main.rs:2814:25:2814:34 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2816:13:2816:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2816:17:2816:20 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2816:17:2816:20 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2816:17:2816:20 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2816:17:2816:22 | pair.0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2818:13:2818:13 | y | | file://:0:0:0:0 | & | +| main.rs:2818:13:2818:13 | y | &T | file://:0:0:0:0 | (T_2) | +| main.rs:2818:13:2818:13 | y | &T.0(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2818:13:2818:13 | y | &T.1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2818:17:2818:31 | &... | | file://:0:0:0:0 | & | +| main.rs:2818:17:2818:31 | &... | &T | file://:0:0:0:0 | (T_2) | +| main.rs:2818:17:2818:31 | &... | &T.0(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2818:17:2818:31 | &... | &T.1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2818:18:2818:31 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2818:18:2818:31 | ...::get_pair(...) | 0(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2818:18:2818:31 | ...::get_pair(...) | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2819:9:2819:9 | y | | file://:0:0:0:0 | & | +| main.rs:2819:9:2819:9 | y | &T | file://:0:0:0:0 | (T_2) | +| main.rs:2819:9:2819:9 | y | &T.0(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2819:9:2819:9 | y | &T.1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2819:9:2819:11 | y.0 | | main.rs:2776:5:2777:16 | S1 | +| main.rs:2819:9:2819:17 | ... .foo() | | file://:0:0:0:0 | () | +| main.rs:2825:27:2847:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2826:13:2826:23 | boxed_value | | {EXTERNAL LOCATION} | Box | +| main.rs:2826:13:2826:23 | boxed_value | A | {EXTERNAL LOCATION} | Global | +| main.rs:2826:13:2826:23 | boxed_value | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2826:27:2826:42 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2826:27:2826:42 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2826:27:2826:42 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2826:36:2826:41 | 100i32 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2829:9:2837:9 | match boxed_value { ... } | | file://:0:0:0:0 | () | +| main.rs:2829:15:2829:25 | boxed_value | | {EXTERNAL LOCATION} | Box | +| main.rs:2829:15:2829:25 | boxed_value | A | {EXTERNAL LOCATION} | Global | +| main.rs:2829:15:2829:25 | boxed_value | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2830:13:2830:19 | box 100 | | {EXTERNAL LOCATION} | Box | +| main.rs:2830:13:2830:19 | box 100 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2830:13:2830:19 | box 100 | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2830:17:2830:19 | 100 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2830:24:2832:13 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2831:26:2831:36 | "Boxed 100\\n" | | file://:0:0:0:0 | & | +| main.rs:2831:26:2831:36 | "Boxed 100\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2831:26:2831:36 | ...::_print(...) | | file://:0:0:0:0 | () | +| main.rs:2831:26:2831:36 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2833:13:2833:17 | box ... | | {EXTERNAL LOCATION} | Box | +| main.rs:2833:13:2833:17 | box ... | A | {EXTERNAL LOCATION} | Global | +| main.rs:2833:13:2833:17 | box ... | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2833:22:2836:13 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2835:26:2835:42 | "Boxed value: {}\\n" | | file://:0:0:0:0 | & | +| main.rs:2835:26:2835:42 | "Boxed value: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2835:26:2835:51 | ...::_print(...) | | file://:0:0:0:0 | () | +| main.rs:2835:26:2835:51 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2840:13:2840:22 | nested_box | | {EXTERNAL LOCATION} | Box | +| main.rs:2840:13:2840:22 | nested_box | A | {EXTERNAL LOCATION} | Global | +| main.rs:2840:13:2840:22 | nested_box | T | {EXTERNAL LOCATION} | Box | +| main.rs:2840:13:2840:22 | nested_box | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2840:13:2840:22 | nested_box | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2840:26:2840:50 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2840:26:2840:50 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2840:26:2840:50 | ...::new(...) | T | {EXTERNAL LOCATION} | Box | +| main.rs:2840:26:2840:50 | ...::new(...) | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2840:26:2840:50 | ...::new(...) | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2840:35:2840:49 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2840:35:2840:49 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2840:35:2840:49 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2840:44:2840:48 | 42i32 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2841:9:2846:9 | match nested_box { ... } | | file://:0:0:0:0 | () | +| main.rs:2841:15:2841:24 | nested_box | | {EXTERNAL LOCATION} | Box | +| main.rs:2841:15:2841:24 | nested_box | A | {EXTERNAL LOCATION} | Global | +| main.rs:2841:15:2841:24 | nested_box | T | {EXTERNAL LOCATION} | Box | +| main.rs:2841:15:2841:24 | nested_box | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2841:15:2841:24 | nested_box | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2842:13:2842:21 | box ... | | {EXTERNAL LOCATION} | Box | +| main.rs:2842:13:2842:21 | box ... | A | {EXTERNAL LOCATION} | Global | +| main.rs:2842:13:2842:21 | box ... | T | {EXTERNAL LOCATION} | Box | +| main.rs:2842:13:2842:21 | box ... | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2842:13:2842:21 | box ... | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2842:26:2845:13 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2844:26:2844:43 | "Nested boxed: {}\\n" | | file://:0:0:0:0 | & | +| main.rs:2844:26:2844:43 | "Nested boxed: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2844:26:2844:59 | ...::_print(...) | | file://:0:0:0:0 | () | +| main.rs:2844:26:2844:59 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2856:36:2858:9 | { ... } | | main.rs:2853:5:2853:22 | Path | +| main.rs:2857:13:2857:19 | Path {...} | | main.rs:2853:5:2853:22 | Path | +| main.rs:2860:29:2860:33 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2860:29:2860:33 | SelfParam | &T | main.rs:2853:5:2853:22 | Path | +| main.rs:2860:59:2862:9 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:2860:59:2862:9 | { ... } | E | file://:0:0:0:0 | () | +| main.rs:2860:59:2862:9 | { ... } | T | main.rs:2865:5:2865:25 | PathBuf | +| main.rs:2861:13:2861:30 | Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:2861:13:2861:30 | Ok(...) | E | file://:0:0:0:0 | () | +| main.rs:2861:13:2861:30 | Ok(...) | T | main.rs:2865:5:2865:25 | PathBuf | +| main.rs:2861:16:2861:29 | ...::new(...) | | main.rs:2865:5:2865:25 | PathBuf | +| main.rs:2868:39:2870:9 | { ... } | | main.rs:2865:5:2865:25 | PathBuf | +| main.rs:2869:13:2869:22 | PathBuf {...} | | main.rs:2865:5:2865:25 | PathBuf | +| main.rs:2878:18:2878:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2878:18:2878:22 | SelfParam | &T | main.rs:2865:5:2865:25 | PathBuf | +| main.rs:2878:34:2882:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:2878:34:2882:9 | { ... } | &T | main.rs:2853:5:2853:22 | Path | +| main.rs:2880:33:2880:43 | ...::new(...) | | main.rs:2853:5:2853:22 | Path | +| main.rs:2881:13:2881:17 | &path | | file://:0:0:0:0 | & | +| main.rs:2881:13:2881:17 | &path | &T | main.rs:2853:5:2853:22 | Path | +| main.rs:2881:14:2881:17 | path | | main.rs:2853:5:2853:22 | Path | +| main.rs:2885:16:2893:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2886:13:2886:17 | path1 | | main.rs:2853:5:2853:22 | Path | +| main.rs:2886:21:2886:31 | ...::new(...) | | main.rs:2853:5:2853:22 | Path | +| main.rs:2887:13:2887:17 | path2 | | {EXTERNAL LOCATION} | Result | +| main.rs:2887:13:2887:17 | path2 | E | file://:0:0:0:0 | () | +| main.rs:2887:13:2887:17 | path2 | T | main.rs:2865:5:2865:25 | PathBuf | +| main.rs:2887:21:2887:25 | path1 | | main.rs:2853:5:2853:22 | Path | +| main.rs:2887:21:2887:40 | path1.canonicalize() | | {EXTERNAL LOCATION} | Result | +| main.rs:2887:21:2887:40 | path1.canonicalize() | E | file://:0:0:0:0 | () | +| main.rs:2887:21:2887:40 | path1.canonicalize() | T | main.rs:2865:5:2865:25 | PathBuf | +| main.rs:2888:13:2888:17 | path3 | | main.rs:2865:5:2865:25 | PathBuf | +| main.rs:2888:21:2888:25 | path2 | | {EXTERNAL LOCATION} | Result | +| main.rs:2888:21:2888:25 | path2 | E | file://:0:0:0:0 | () | +| main.rs:2888:21:2888:25 | path2 | T | main.rs:2865:5:2865:25 | PathBuf | +| main.rs:2888:21:2888:34 | path2.unwrap() | | main.rs:2865:5:2865:25 | PathBuf | +| main.rs:2890:13:2890:20 | pathbuf1 | | main.rs:2865:5:2865:25 | PathBuf | +| main.rs:2890:24:2890:37 | ...::new(...) | | main.rs:2865:5:2865:25 | PathBuf | +| main.rs:2891:24:2891:31 | pathbuf1 | | main.rs:2865:5:2865:25 | PathBuf | +| main.rs:2898:14:2898:18 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2898:14:2898:18 | SelfParam | &T | main.rs:2897:5:2899:5 | Self [trait MyTrait] | +| main.rs:2905:14:2905:18 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2905:14:2905:18 | SelfParam | &T | main.rs:2901:5:2902:19 | S | +| main.rs:2905:14:2905:18 | SelfParam | &T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2905:28:2907:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2906:13:2906:16 | self | | file://:0:0:0:0 | & | +| main.rs:2906:13:2906:16 | self | &T | main.rs:2901:5:2902:19 | S | +| main.rs:2906:13:2906:16 | self | &T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2906:13:2906:18 | self.0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2911:14:2911:18 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2911:14:2911:18 | SelfParam | &T | main.rs:2901:5:2902:19 | S | +| main.rs:2911:14:2911:18 | SelfParam | &T.T | main.rs:2901:5:2902:19 | S | +| main.rs:2911:14:2911:18 | SelfParam | &T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2911:28:2913:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2912:13:2912:16 | self | | file://:0:0:0:0 | & | +| main.rs:2912:13:2912:16 | self | &T | main.rs:2901:5:2902:19 | S | +| main.rs:2912:13:2912:16 | self | &T.T | main.rs:2901:5:2902:19 | S | +| main.rs:2912:13:2912:16 | self | &T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2912:13:2912:18 | self.0 | | main.rs:2901:5:2902:19 | S | +| main.rs:2912:13:2912:18 | self.0 | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2912:13:2912:21 | ... .0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2917:15:2917:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2917:15:2917:19 | SelfParam | &T | main.rs:2901:5:2902:19 | S | +| main.rs:2917:15:2917:19 | SelfParam | &T.T | main.rs:2916:10:2916:16 | T | +| main.rs:2917:33:2919:9 | { ... } | | main.rs:2901:5:2902:19 | S | +| main.rs:2917:33:2919:9 | { ... } | T | main.rs:2901:5:2902:19 | S | +| main.rs:2917:33:2919:9 | { ... } | T.T | main.rs:2916:10:2916:16 | T | +| main.rs:2918:13:2918:24 | S(...) | | main.rs:2901:5:2902:19 | S | +| main.rs:2918:13:2918:24 | S(...) | T | main.rs:2901:5:2902:19 | S | +| main.rs:2918:13:2918:24 | S(...) | T.T | main.rs:2916:10:2916:16 | T | +| main.rs:2918:15:2918:23 | S(...) | | main.rs:2901:5:2902:19 | S | +| main.rs:2918:15:2918:23 | S(...) | T | main.rs:2916:10:2916:16 | T | +| main.rs:2918:17:2918:20 | self | | file://:0:0:0:0 | & | +| main.rs:2918:17:2918:20 | self | &T | main.rs:2901:5:2902:19 | S | +| main.rs:2918:17:2918:20 | self | &T.T | main.rs:2916:10:2916:16 | T | +| main.rs:2918:17:2918:22 | self.0 | | main.rs:2916:10:2916:16 | T | +| main.rs:2922:14:2922:14 | b | | {EXTERNAL LOCATION} | bool | +| main.rs:2922:48:2939:5 | { ... } | | {EXTERNAL LOCATION} | Box | +| main.rs:2922:48:2939:5 | { ... } | A | {EXTERNAL LOCATION} | Global | +| main.rs:2922:48:2939:5 | { ... } | T | main.rs:2897:5:2899:5 | dyn MyTrait | +| main.rs:2922:48:2939:5 | { ... } | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2923:13:2923:13 | x | | main.rs:2901:5:2902:19 | S | +| main.rs:2923:13:2923:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2923:17:2928:9 | if b {...} else {...} | | main.rs:2901:5:2902:19 | S | +| main.rs:2923:17:2928:9 | if b {...} else {...} | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2923:20:2923:20 | b | | {EXTERNAL LOCATION} | bool | +| main.rs:2923:22:2926:9 | { ... } | | main.rs:2901:5:2902:19 | S | +| main.rs:2923:22:2926:9 | { ... } | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2924:17:2924:17 | y | | main.rs:2901:5:2902:19 | S | +| main.rs:2924:17:2924:17 | y | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2924:21:2924:38 | ...::default(...) | | main.rs:2901:5:2902:19 | S | +| main.rs:2924:21:2924:38 | ...::default(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2925:13:2925:13 | y | | main.rs:2901:5:2902:19 | S | +| main.rs:2925:13:2925:13 | y | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2926:16:2928:9 | { ... } | | main.rs:2901:5:2902:19 | S | +| main.rs:2926:16:2928:9 | { ... } | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2927:13:2927:16 | S(...) | | main.rs:2901:5:2902:19 | S | +| main.rs:2927:13:2927:16 | S(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2927:15:2927:15 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2932:13:2932:13 | x | | main.rs:2901:5:2902:19 | S | +| main.rs:2932:13:2932:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2932:17:2932:20 | S(...) | | main.rs:2901:5:2902:19 | S | +| main.rs:2932:17:2932:20 | S(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2932:19:2932:19 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2933:9:2938:9 | if b {...} else {...} | | {EXTERNAL LOCATION} | Box | +| main.rs:2933:9:2938:9 | if b {...} else {...} | A | {EXTERNAL LOCATION} | Global | +| main.rs:2933:9:2938:9 | if b {...} else {...} | T | main.rs:2897:5:2899:5 | dyn MyTrait | +| main.rs:2933:9:2938:9 | if b {...} else {...} | T | main.rs:2901:5:2902:19 | S | +| main.rs:2933:9:2938:9 | if b {...} else {...} | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2933:9:2938:9 | if b {...} else {...} | T.T | main.rs:2901:5:2902:19 | S | +| main.rs:2933:9:2938:9 | if b {...} else {...} | T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2933:9:2938:9 | if b {...} else {...} | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2933:12:2933:12 | b | | {EXTERNAL LOCATION} | bool | +| main.rs:2933:14:2936:9 | { ... } | | {EXTERNAL LOCATION} | Box | +| main.rs:2933:14:2936:9 | { ... } | A | {EXTERNAL LOCATION} | Global | +| main.rs:2933:14:2936:9 | { ... } | T | main.rs:2897:5:2899:5 | dyn MyTrait | +| main.rs:2933:14:2936:9 | { ... } | T | main.rs:2901:5:2902:19 | S | +| main.rs:2933:14:2936:9 | { ... } | T.T | main.rs:2901:5:2902:19 | S | +| main.rs:2933:14:2936:9 | { ... } | T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2933:14:2936:9 | { ... } | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2934:17:2934:17 | x | | main.rs:2901:5:2902:19 | S | +| main.rs:2934:17:2934:17 | x | T | main.rs:2901:5:2902:19 | S | +| main.rs:2934:17:2934:17 | x | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2934:21:2934:21 | x | | main.rs:2901:5:2902:19 | S | +| main.rs:2934:21:2934:21 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2934:21:2934:26 | x.m2() | | main.rs:2901:5:2902:19 | S | +| main.rs:2934:21:2934:26 | x.m2() | T | main.rs:2901:5:2902:19 | S | +| main.rs:2934:21:2934:26 | x.m2() | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2935:13:2935:23 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2935:13:2935:23 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2935:13:2935:23 | ...::new(...) | T | main.rs:2897:5:2899:5 | dyn MyTrait | +| main.rs:2935:13:2935:23 | ...::new(...) | T | main.rs:2901:5:2902:19 | S | +| main.rs:2935:13:2935:23 | ...::new(...) | T.T | main.rs:2901:5:2902:19 | S | +| main.rs:2935:13:2935:23 | ...::new(...) | T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2935:13:2935:23 | ...::new(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2935:22:2935:22 | x | | main.rs:2901:5:2902:19 | S | +| main.rs:2935:22:2935:22 | x | T | main.rs:2901:5:2902:19 | S | +| main.rs:2935:22:2935:22 | x | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2936:16:2938:9 | { ... } | | {EXTERNAL LOCATION} | Box | +| main.rs:2936:16:2938:9 | { ... } | A | {EXTERNAL LOCATION} | Global | +| main.rs:2936:16:2938:9 | { ... } | T | main.rs:2897:5:2899:5 | dyn MyTrait | +| main.rs:2936:16:2938:9 | { ... } | T | main.rs:2901:5:2902:19 | S | +| main.rs:2936:16:2938:9 | { ... } | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2936:16:2938:9 | { ... } | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2937:13:2937:23 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2937:13:2937:23 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2937:13:2937:23 | ...::new(...) | T | main.rs:2897:5:2899:5 | dyn MyTrait | +| main.rs:2937:13:2937:23 | ...::new(...) | T | main.rs:2901:5:2902:19 | S | +| main.rs:2937:13:2937:23 | ...::new(...) | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2937:13:2937:23 | ...::new(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2937:22:2937:22 | x | | main.rs:2901:5:2902:19 | S | +| main.rs:2937:22:2937:22 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2943:22:2947:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2944:18:2944:18 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2944:33:2946:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2945:13:2945:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2945:13:2945:17 | ... + ... | | {EXTERNAL LOCATION} | i32 | +| main.rs:2945:17:2945:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2952:11:2952:14 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:2952:30:2960:5 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2954:13:2954:13 | a | | file://:0:0:0:0 | () | +| main.rs:2954:17:2958:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2955:13:2957:13 | if cond {...} | | file://:0:0:0:0 | () | +| main.rs:2955:16:2955:19 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:2955:21:2957:13 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2956:24:2956:25 | 12 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2959:9:2959:9 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2963:20:2970:5 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2966:26:2966:27 | 12 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2968:18:2968:26 | "b: {:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:2968:18:2968:26 | "b: {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2968:18:2968:29 | ...::_print(...) | | file://:0:0:0:0 | () | +| main.rs:2968:18:2968:29 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2969:9:2969:9 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2972:20:2974:5 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2973:16:2973:16 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2977:11:2977:14 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:2977:30:2985:5 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2978:13:2978:13 | a | | file://:0:0:0:0 | () | +| main.rs:2978:17:2982:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2979:13:2981:13 | if cond {...} | | file://:0:0:0:0 | () | +| main.rs:2979:16:2979:19 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:2979:21:2981:13 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2980:24:2980:25 | 12 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2983:18:2983:26 | "a: {:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:2983:18:2983:26 | "a: {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2983:18:2983:29 | ...::_print(...) | | file://:0:0:0:0 | () | +| main.rs:2983:18:2983:29 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2983:29:2983:29 | a | | file://:0:0:0:0 | () | +| main.rs:2984:9:2984:9 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2989:16:3036:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2990:13:2990:13 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2990:13:2990:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2990:17:2990:20 | None | | {EXTERNAL LOCATION} | Option | +| main.rs:2990:17:2990:20 | None | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2991:13:2991:13 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2991:13:2991:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2991:30:2991:30 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2991:30:2991:30 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2992:13:2992:13 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2992:13:2992:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2992:17:2992:35 | ...::None | | {EXTERNAL LOCATION} | Option | +| main.rs:2992:17:2992:35 | ...::None | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2993:13:2993:13 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2993:13:2993:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2993:17:2993:35 | ...::None::<...> | | {EXTERNAL LOCATION} | Option | +| main.rs:2993:17:2993:35 | ...::None::<...> | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2995:26:2995:28 | opt | | {EXTERNAL LOCATION} | Option | +| main.rs:2995:26:2995:28 | opt | T | main.rs:2995:23:2995:23 | T | +| main.rs:2995:42:2995:42 | x | | main.rs:2995:23:2995:23 | T | +| main.rs:2995:48:2995:49 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2997:13:2997:13 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2997:13:2997:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2997:17:2997:20 | None | | {EXTERNAL LOCATION} | Option | +| main.rs:2997:17:2997:20 | None | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2998:9:2998:24 | pin_option(...) | | file://:0:0:0:0 | () | +| main.rs:2998:20:2998:20 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2998:20:2998:20 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2998:23:2998:23 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:3005:13:3005:13 | x | | main.rs:3000:9:3003:9 | MyEither | +| main.rs:3005:13:3005:13 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:3005:13:3005:13 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:3005:17:3005:39 | ...::A {...} | | main.rs:3000:9:3003:9 | MyEither | +| main.rs:3005:17:3005:39 | ...::A {...} | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:3005:17:3005:39 | ...::A {...} | T2 | {EXTERNAL LOCATION} | String | +| main.rs:3005:37:3005:37 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:3006:13:3006:13 | x | | main.rs:3000:9:3003:9 | MyEither | +| main.rs:3006:13:3006:13 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:3006:13:3006:13 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:3006:40:3006:40 | x | | main.rs:3000:9:3003:9 | MyEither | +| main.rs:3006:40:3006:40 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:3006:40:3006:40 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:3007:13:3007:13 | x | | main.rs:3000:9:3003:9 | MyEither | +| main.rs:3007:13:3007:13 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:3007:13:3007:13 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:3007:17:3007:52 | ...::A {...} | | main.rs:3000:9:3003:9 | MyEither | +| main.rs:3007:17:3007:52 | ...::A {...} | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:3007:17:3007:52 | ...::A {...} | T2 | {EXTERNAL LOCATION} | String | +| main.rs:3007:50:3007:50 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:3009:13:3009:13 | x | | main.rs:3000:9:3003:9 | MyEither | +| main.rs:3009:13:3009:13 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:3009:13:3009:13 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:3009:17:3011:9 | ...::B::<...> {...} | | main.rs:3000:9:3003:9 | MyEither | +| main.rs:3009:17:3011:9 | ...::B::<...> {...} | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:3009:17:3011:9 | ...::B::<...> {...} | T2 | {EXTERNAL LOCATION} | String | +| main.rs:3010:20:3010:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | +| main.rs:3013:29:3013:29 | e | | main.rs:3000:9:3003:9 | MyEither | +| main.rs:3013:29:3013:29 | e | T1 | main.rs:3013:26:3013:26 | T | +| main.rs:3013:29:3013:29 | e | T2 | {EXTERNAL LOCATION} | String | +| main.rs:3013:53:3013:53 | x | | main.rs:3013:26:3013:26 | T | +| main.rs:3013:59:3013:60 | { ... } | | file://:0:0:0:0 | () | +| main.rs:3016:13:3016:13 | x | | main.rs:3000:9:3003:9 | MyEither | +| main.rs:3016:13:3016:13 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:3016:13:3016:13 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:3016:17:3018:9 | ...::B {...} | | main.rs:3000:9:3003:9 | MyEither | +| main.rs:3016:17:3018:9 | ...::B {...} | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:3016:17:3018:9 | ...::B {...} | T2 | {EXTERNAL LOCATION} | String | +| main.rs:3017:20:3017:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | +| main.rs:3019:9:3019:27 | pin_my_either(...) | | file://:0:0:0:0 | () | +| main.rs:3019:23:3019:23 | x | | main.rs:3000:9:3003:9 | MyEither | +| main.rs:3019:23:3019:23 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:3019:23:3019:23 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:3019:26:3019:26 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:3021:13:3021:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:3021:13:3021:13 | x | E | {EXTERNAL LOCATION} | String | +| main.rs:3021:13:3021:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:3021:17:3021:29 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:3021:17:3021:29 | ...::Ok(...) | E | {EXTERNAL LOCATION} | String | +| main.rs:3021:17:3021:29 | ...::Ok(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:3021:28:3021:28 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:3022:13:3022:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:3022:13:3022:13 | x | E | {EXTERNAL LOCATION} | String | +| main.rs:3022:13:3022:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:3022:38:3022:38 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:3022:38:3022:38 | x | E | {EXTERNAL LOCATION} | String | +| main.rs:3022:38:3022:38 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:3023:13:3023:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:3023:13:3023:13 | x | E | {EXTERNAL LOCATION} | String | +| main.rs:3023:13:3023:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:3023:17:3023:44 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:3023:17:3023:44 | ...::Ok(...) | E | {EXTERNAL LOCATION} | String | +| main.rs:3023:17:3023:44 | ...::Ok(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:3023:43:3023:43 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:3024:13:3024:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:3024:13:3024:13 | x | E | {EXTERNAL LOCATION} | String | +| main.rs:3024:13:3024:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:3024:17:3024:44 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:3024:17:3024:44 | ...::Ok::<...>(...) | E | {EXTERNAL LOCATION} | String | +| main.rs:3024:17:3024:44 | ...::Ok::<...>(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:3024:43:3024:43 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:3026:29:3026:31 | res | | {EXTERNAL LOCATION} | Result | +| main.rs:3026:29:3026:31 | res | E | main.rs:3026:26:3026:26 | E | +| main.rs:3026:29:3026:31 | res | T | main.rs:3026:23:3026:23 | T | +| main.rs:3026:48:3026:48 | x | | main.rs:3026:26:3026:26 | E | +| main.rs:3026:54:3026:55 | { ... } | | file://:0:0:0:0 | () | +| main.rs:3028:13:3028:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:3028:13:3028:13 | x | E | {EXTERNAL LOCATION} | bool | +| main.rs:3028:13:3028:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:3028:17:3028:29 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:3028:17:3028:29 | ...::Ok(...) | E | {EXTERNAL LOCATION} | bool | +| main.rs:3028:17:3028:29 | ...::Ok(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:3028:28:3028:28 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:3029:9:3029:28 | pin_result(...) | | file://:0:0:0:0 | () | +| main.rs:3029:20:3029:20 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:3029:20:3029:20 | x | E | {EXTERNAL LOCATION} | bool | +| main.rs:3029:20:3029:20 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:3029:23:3029:27 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:3031:17:3031:17 | x | | {EXTERNAL LOCATION} | Vec | +| main.rs:3031:17:3031:17 | x | A | {EXTERNAL LOCATION} | Global | +| main.rs:3031:17:3031:17 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:3031:21:3031:30 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:3031:21:3031:30 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:3031:21:3031:30 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:3032:9:3032:9 | x | | {EXTERNAL LOCATION} | Vec | +| main.rs:3032:9:3032:9 | x | A | {EXTERNAL LOCATION} | Global | +| main.rs:3032:9:3032:9 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:3032:9:3032:17 | x.push(...) | | file://:0:0:0:0 | () | +| main.rs:3032:16:3032:16 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:3034:13:3034:13 | y | | {EXTERNAL LOCATION} | i32 | +| main.rs:3034:17:3034:34 | ...::default(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:3035:9:3035:9 | x | | {EXTERNAL LOCATION} | Vec | +| main.rs:3035:9:3035:9 | x | A | {EXTERNAL LOCATION} | Global | +| main.rs:3035:9:3035:9 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:3035:9:3035:17 | x.push(...) | | file://:0:0:0:0 | () | +| main.rs:3035:16:3035:16 | y | | {EXTERNAL LOCATION} | i32 | +| main.rs:3044:11:3079:1 | { ... } | | file://:0:0:0:0 | () | +| main.rs:3045:5:3045:21 | ...::f(...) | | file://:0:0:0:0 | () | +| main.rs:3046:5:3046:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:3047:5:3047:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:3047:20:3047:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:3047:41:3047:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:3048:5:3048:35 | ...::f(...) | | file://:0:0:0:0 | () | +| main.rs:3049:5:3049:41 | ...::f(...) | | file://:0:0:0:0 | () | +| main.rs:3050:5:3050:45 | ...::test(...) | | file://:0:0:0:0 | () | +| main.rs:3051:5:3051:30 | ...::f(...) | | file://:0:0:0:0 | () | +| main.rs:3052:5:3052:33 | ...::f(...) | | file://:0:0:0:0 | () | +| main.rs:3053:5:3053:21 | ...::f(...) | | file://:0:0:0:0 | () | +| main.rs:3054:5:3054:27 | ...::f(...) | | file://:0:0:0:0 | () | +| main.rs:3055:5:3055:32 | ...::f(...) | | file://:0:0:0:0 | () | +| main.rs:3056:5:3056:23 | ...::f(...) | | file://:0:0:0:0 | () | +| main.rs:3057:5:3057:36 | ...::f(...) | | file://:0:0:0:0 | () | +| main.rs:3058:5:3058:35 | ...::f(...) | | file://:0:0:0:0 | () | +| main.rs:3059:5:3059:29 | ...::f(...) | | file://:0:0:0:0 | () | +| main.rs:3060:5:3060:23 | ...::f(...) | | file://:0:0:0:0 | () | +| main.rs:3061:5:3061:24 | ...::f(...) | | file://:0:0:0:0 | () | +| main.rs:3062:5:3062:17 | ...::f(...) | | file://:0:0:0:0 | () | +| main.rs:3063:5:3063:18 | ...::f(...) | | file://:0:0:0:0 | () | +| main.rs:3064:5:3064:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future | +| main.rs:3064:5:3064:15 | ...::f(...) | Output | file://:0:0:0:0 | () | +| main.rs:3065:5:3065:19 | ...::f(...) | | file://:0:0:0:0 | () | +| main.rs:3066:5:3066:17 | ...::f(...) | | file://:0:0:0:0 | () | +| main.rs:3067:5:3067:14 | ...::f(...) | | file://:0:0:0:0 | () | +| main.rs:3068:5:3068:27 | ...::f(...) | | file://:0:0:0:0 | () | +| main.rs:3069:5:3069:15 | ...::f(...) | | file://:0:0:0:0 | () | +| main.rs:3070:5:3070:43 | ...::f(...) | | file://:0:0:0:0 | () | +| main.rs:3071:5:3071:15 | ...::f(...) | | file://:0:0:0:0 | () | +| main.rs:3072:5:3072:17 | ...::f(...) | | file://:0:0:0:0 | () | +| main.rs:3073:5:3073:23 | ...::test(...) | | file://:0:0:0:0 | () | +| main.rs:3074:5:3074:41 | ...::test_all_patterns(...) | | file://:0:0:0:0 | () | +| main.rs:3075:5:3075:49 | ...::box_patterns(...) | | file://:0:0:0:0 | () | +| main.rs:3076:5:3076:20 | ...::test(...) | | file://:0:0:0:0 | () | +| main.rs:3077:5:3077:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:3077:5:3077:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:3077:5:3077:20 | ...::f(...) | T | main.rs:2897:5:2899:5 | dyn MyTrait | +| main.rs:3077:5:3077:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:3077:16:3077:19 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:3078:5:3078:23 | ...::f(...) | | file://:0:0:0:0 | () | | pattern_matching.rs:13:26:133:1 | { ... } | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:13:26:133:1 | { ... } | T | file://:0:0:0:0 | () | | pattern_matching.rs:14:9:14:13 | value | | {EXTERNAL LOCATION} | Option | From 46f5d89674e895c5142f6bfec52abc3fbcde9a40 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 13 Nov 2025 13:01:53 +0100 Subject: [PATCH 067/127] Rust: Handle builtin types in path resolution --- .../codeql/rust/dataflow/internal/Content.qll | 7 +- .../rust/elements/internal/StructImpl.qll | 6 + .../rust/frameworks/stdlib/Builtins.qll | 33 + .../codeql/rust/internal/PathResolution.qll | 38 +- rust/ql/lib/codeql/rust/internal/Type.qll | 172 +- .../codeql/rust/internal/TypeInference.qll | 145 +- .../lib/codeql/rust/internal/TypeMention.qll | 31 +- rust/ql/lib/codeql/rust/security/Barriers.qll | 10 +- .../builtintypes/BuiltinTypes.expected | 21 + .../elements/builtintypes/BuiltinTypes.ql | 1 - .../test/library-tests/type-inference/main.rs | 30 +- .../type-inference/type-inference.expected | 4473 +++++++++-------- .../type-inference/type-inference.ql | 7 +- rust/tools/builtins/types.rs | 122 + 14 files changed, 2618 insertions(+), 2478 deletions(-) diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/Content.qll b/rust/ql/lib/codeql/rust/dataflow/internal/Content.qll index 95a5fa98bb4..9457a0a7a50 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/Content.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/Content.qll @@ -4,6 +4,7 @@ private import rust private import codeql.rust.controlflow.CfgNodes +private import codeql.rust.frameworks.stdlib.Builtins private import DataFlowImpl /** @@ -36,7 +37,11 @@ class TupleFieldContent extends FieldContent, TTupleFieldContent { /** Holds if this field belongs to a struct. */ predicate isStructField(Struct s, int pos) { field.isStructField(s, pos) } - override FieldExprCfgNode getAnAccess() { field = result.getFieldExpr().getTupleField() } + override FieldExprCfgNode getAnAccess() { + field = result.getFieldExpr().getTupleField() and + // tuples are handled using the special `TupleContent` type + not field = any(TupleType tt).getATupleField() + } final override string toString() { exists(Variant v, int pos, string vname | diff --git a/rust/ql/lib/codeql/rust/elements/internal/StructImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/StructImpl.qll index 3b6fc1ee4ea..e4414305ae8 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/StructImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/StructImpl.qll @@ -32,10 +32,16 @@ module Impl { result.getName().getText() = name } + /** Gets a record field, if any. */ + StructField getAStructField() { result = this.getStructField(_) } + /** Gets the `i`th tuple field, if any. */ pragma[nomagic] TupleField getTupleField(int i) { result = this.getFieldList().(TupleFieldList).getField(i) } + /** Gets a tuple field, if any. */ + TupleField getATupleField() { result = this.getTupleField(_) } + /** Holds if this struct uses tuple fields. */ pragma[nomagic] predicate isTuple() { this.getFieldList() instanceof TupleFieldList } diff --git a/rust/ql/lib/codeql/rust/frameworks/stdlib/Builtins.qll b/rust/ql/lib/codeql/rust/frameworks/stdlib/Builtins.qll index 9269aff2bdc..038bbeaece4 100644 --- a/rust/ql/lib/codeql/rust/frameworks/stdlib/Builtins.qll +++ b/rust/ql/lib/codeql/rust/frameworks/stdlib/Builtins.qll @@ -136,3 +136,36 @@ class F32 extends FloatingPointTypeImpl { class F64 extends FloatingPointTypeImpl { F64() { this.getName() = "f64" } } + +/** The builtin slice type `[T]`. */ +class SliceType extends BuiltinType { + SliceType() { this.getName() = "Slice" } +} + +/** The builtin array type `[T; N]`. */ +class ArrayType extends BuiltinType { + ArrayType() { this.getName() = "Array" } +} + +/** The builtin reference type `&T` or `&mut T`. */ +class RefType extends BuiltinType { + RefType() { this.getName() = "Ref" } +} + +/** The builtin pointer type `*const T` or `*mut T`. */ +class PtrType extends BuiltinType { + PtrType() { this.getName() = "Ptr" } +} + +/** A builtin tuple type `(T1, T2, ...)`. */ +class TupleType extends BuiltinType { + TupleType() { this.getName().matches("Tuple%") } + + /** Gets the arity of this tuple type. */ + int getArity() { + not this.hasGenericParamList() and + result = 0 + or + result = this.getGenericParamList().getNumberOfGenericParams() + } +} diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index 0933f2dcd95..69874a6e570 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -713,12 +713,34 @@ abstract class ImplOrTraitItemNode extends ItemNode { predicate hasAssocItem(string name) { name = this.getAnAssocItem().getName() } } +private TypeItemNode resolveBuiltin(TypeRepr tr) { + tr instanceof SliceTypeRepr and + result instanceof Builtins::SliceType + or + tr instanceof ArrayTypeRepr and + result instanceof Builtins::ArrayType + or + tr instanceof RefTypeRepr and + result instanceof Builtins::RefType + or + tr instanceof PtrTypeRepr and + result instanceof Builtins::PtrType + or + result.(Builtins::TupleType).getArity() = tr.(TupleTypeRepr).getNumberOfFields() +} + final class ImplItemNode extends ImplOrTraitItemNode instanceof Impl { Path getSelfPath() { result = super.getSelfTy().(PathTypeRepr).getPath() } Path getTraitPath() { result = super.getTrait().(PathTypeRepr).getPath() } - TypeItemNode resolveSelfTy() { result = resolvePath(this.getSelfPath()) } + TypeItemNode resolveSelfTyBuiltin() { result = resolveBuiltin(this.(Impl).getSelfTy()) } + + TypeItemNode resolveSelfTy() { + result = resolvePath(this.getSelfPath()) + or + result = this.resolveSelfTyBuiltin() + } TraitItemNode resolveTraitTy() { result = resolvePath(this.getTraitPath()) } @@ -893,7 +915,11 @@ private class ModuleItemNode extends ModuleLikeNode instanceof Module { } private class ImplItemNodeImpl extends ImplItemNode { - TypeItemNode resolveSelfTyCand() { result = resolvePathCand(this.getSelfPath()) } + TypeItemNode resolveSelfTyCand() { + result = resolvePathCand(this.getSelfPath()) + or + result = this.resolveSelfTyBuiltin() + } TraitItemNode resolveTraitTyCand() { result = resolvePathCand(this.getTraitPath()) } } @@ -1764,6 +1790,10 @@ private ItemNode resolvePathCand0(RelevantPath path, Namespace ns) { or result = resolveUseTreeListItem(_, _, path, _) and ns = result.getNamespace() + or + result = resolveBuiltin(path.getSegment().getTypeRepr()) and + not path.getSegment().hasTraitTypeRepr() and + ns.isType() } pragma[nomagic] @@ -2141,7 +2171,9 @@ pragma[nomagic] private predicate builtin(string name, ItemNode i) { exists(BuiltinSourceFile builtins | builtins.getFile().getBaseName() = "types.rs" and - i = builtins.getASuccessor(name) + i = builtins.getASuccessor(name) and + not name = ["Slice", "Array", "Ref", "Ptr"] and + not name.matches("Tuple%") ) } diff --git a/rust/ql/lib/codeql/rust/internal/Type.qll b/rust/ql/lib/codeql/rust/internal/Type.qll index 4b3f6e6ccb9..c6b475b62d7 100644 --- a/rust/ql/lib/codeql/rust/internal/Type.qll +++ b/rust/ql/lib/codeql/rust/internal/Type.qll @@ -7,6 +7,7 @@ private import codeql.rust.internal.CachedStages private import codeql.rust.elements.internal.generated.Raw private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.frameworks.stdlib.Stdlib +private import codeql.rust.frameworks.stdlib.Builtins as Builtins /** * Holds if a dyn trait type should have a type parameter associated with `n`. A @@ -31,39 +32,21 @@ private predicate dynTraitTypeParameter(Trait trait, AstNode n) { cached newtype TType = - TTuple(int arity) { - arity = - [ - any(TupleTypeRepr t).getNumberOfFields(), - any(TupleExpr e).getNumberOfFields(), - any(TuplePat p).getNumberOfFields() - ] and - Stages::TypeInferenceStage::ref() - } or - TStruct(Struct s) or + TStruct(Struct s) { Stages::TypeInferenceStage::ref() } or TEnum(Enum e) or TTrait(Trait t) or TUnion(Union u) or - TArrayType() or // todo: add size? - TRefType() or // todo: add mut? TImplTraitType(ImplTraitTypeRepr impl) or TDynTraitType(Trait t) { t = any(DynTraitTypeRepr dt).getTrait() } or - TSliceType() or TNeverType() or - TPtrType() or TUnknownType() or - TTupleTypeParameter(int arity, int i) { exists(TTuple(arity)) and i in [0 .. arity - 1] } or TTypeParamTypeParameter(TypeParam t) or TAssociatedTypeTypeParameter(TypeAlias t) { any(TraitItemNode trait).getAnAssocItem() = t } or - TArrayTypeParameter() or TDynTraitTypeParameter(AstNode n) { dynTraitTypeParameter(_, n) } or TImplTraitTypeParameter(ImplTraitTypeRepr implTrait, TypeParam tp) { implTraitTypeParam(implTrait, _, tp) } or - TRefTypeParameter() or - TSelfTypeParameter(Trait t) or - TSliceTypeParameter() or - TPtrTypeParameter() + TSelfTypeParameter(Trait t) private predicate implTraitTypeParam(ImplTraitTypeRepr implTrait, int i, TypeParam tp) { implTrait.isInReturnPos() and @@ -106,26 +89,25 @@ abstract class Type extends TType { } /** A tuple type `(T, ...)`. */ -class TupleType extends Type, TTuple { +class TupleType extends StructType { private int arity; - TupleType() { this = TTuple(arity) } - - override TypeParameter getPositionalTypeParameter(int i) { - result = TTupleTypeParameter(arity, i) - } + TupleType() { arity = this.getStruct().(Builtins::TupleType).getArity() } /** Gets the arity of this tuple type. */ int getArity() { result = arity } override string toString() { result = "(T_" + arity + ")" } +} - override Location getLocation() { result instanceof EmptyLocation } +pragma[nomagic] +TypeParamTypeParameter getTupleTypeParameter(int arity, int i) { + result = any(TupleType t | t.getArity() = arity).getPositionalTypeParameter(i) } /** The unit type `()`. */ class UnitType extends TupleType { - UnitType() { this = TTuple(0) } + UnitType() { this.getArity() = 0 } override string toString() { result = "()" } } @@ -229,17 +211,15 @@ class UnionType extends Type, TUnion { * Array types like `[i64; 5]` are modeled as normal generic types * with a single type argument. */ -class ArrayType extends Type, TArrayType { - ArrayType() { this = TArrayType() } +class ArrayType extends StructType { + ArrayType() { this.getStruct() instanceof Builtins::ArrayType } - override TypeParameter getPositionalTypeParameter(int i) { - result = TArrayTypeParameter() and - i = 0 - } + override string toString() { result = "[;]" } +} - override string toString() { result = "[]" } - - override Location getLocation() { result instanceof EmptyLocation } +pragma[nomagic] +TypeParamTypeParameter getArrayTypeParameter() { + result = any(ArrayType t).getPositionalTypeParameter(0) } /** @@ -248,17 +228,15 @@ class ArrayType extends Type, TArrayType { * Reference types like `& i64` are modeled as normal generic types * with a single type argument. */ -class RefType extends Type, TRefType { - RefType() { this = TRefType() } - - override TypeParameter getPositionalTypeParameter(int i) { - result = TRefTypeParameter() and - i = 0 - } +class RefType extends StructType { + RefType() { this.getStruct() instanceof Builtins::RefType } override string toString() { result = "&" } +} - override Location getLocation() { result instanceof EmptyLocation } +pragma[nomagic] +TypeParamTypeParameter getRefTypeParameter() { + result = any(RefType t).getPositionalTypeParameter(0) } /** @@ -340,17 +318,15 @@ class ImplTraitReturnType extends ImplTraitType { * Slice types like `[i64]` are modeled as normal generic types * with a single type argument. */ -class SliceType extends Type, TSliceType { - SliceType() { this = TSliceType() } - - override TypeParameter getPositionalTypeParameter(int i) { - result = TSliceTypeParameter() and - i = 0 - } +class SliceType extends StructType { + SliceType() { this.getStruct() instanceof Builtins::SliceType } override string toString() { result = "[]" } +} - override Location getLocation() { result instanceof EmptyLocation } +pragma[nomagic] +TypeParamTypeParameter getSliceTypeParameter() { + result = any(SliceType t).getPositionalTypeParameter(0) } class NeverType extends Type, TNeverType { @@ -361,11 +337,8 @@ class NeverType extends Type, TNeverType { override Location getLocation() { result instanceof EmptyLocation } } -class PtrType extends Type, TPtrType { - override TypeParameter getPositionalTypeParameter(int i) { - i = 0 and - result = TPtrTypeParameter() - } +class PtrType extends StructType { + PtrType() { this.getStruct() instanceof Builtins::PtrType } override string toString() { result = "*" } @@ -402,6 +375,11 @@ class UnknownType extends Type, TUnknownType { override Location getLocation() { result instanceof EmptyLocation } } +pragma[nomagic] +TypeParamTypeParameter getPtrTypeParameter() { + result = any(PtrType t).getPositionalTypeParameter(0) +} + /** A type parameter. */ abstract class TypeParameter extends Type { override TypeParameter getPositionalTypeParameter(int i) { none() } @@ -423,7 +401,32 @@ class TypeParamTypeParameter extends TypeParameter, TTypeParamTypeParameter { TypeParam getTypeParam() { result = typeParam } - override string toString() { result = typeParam.toString() } + override string toString() { + this = any(SliceType st).getATypeParameter() and + result = "[T]" + or + this = any(ArrayType at).getATypeParameter() and + result = "[T;...]" + or + this = any(RefType rt).getATypeParameter() and + result = "&T" + or + this = any(PtrType pt).getATypeParameter() and + result = "*T" + or + exists(TupleType tt, int arity, int i | + this = tt.getPositionalTypeParameter(i) and + arity = tt.getArity() and + result = i + "(" + arity + ")" + ) + or + not this = any(SliceType st).getATypeParameter() and + not this = any(ArrayType at).getATypeParameter() and + not this = any(RefType rt).getATypeParameter() and + not this = any(PtrType pt).getATypeParameter() and + not this = any(TupleType tt).getATypeParameter() and + result = typeParam.toString() + } override Location getLocation() { result = typeParam.getLocation() } } @@ -461,37 +464,6 @@ class AssociatedTypeTypeParameter extends TypeParameter, TAssociatedTypeTypePara override Location getLocation() { result = typeAlias.getLocation() } } -/** - * A tuple type parameter. For instance the `T` in `(T, U)`. - * - * Since tuples are structural their type parameters can be represented as their - * positional index. The type inference library requires that type parameters - * belong to a single type, so we also include the arity of the tuple type. - */ -class TupleTypeParameter extends TypeParameter, TTupleTypeParameter { - private int arity; - private int index; - - TupleTypeParameter() { this = TTupleTypeParameter(arity, index) } - - override string toString() { result = index.toString() + "(" + arity + ")" } - - override Location getLocation() { result instanceof EmptyLocation } - - /** Gets the index of this tuple type parameter. */ - int getIndex() { result = index } - - /** Gets the tuple type that corresponds to this tuple type parameter. */ - TupleType getTupleType() { result = TTuple(arity) } -} - -/** An implicit array type parameter. */ -class ArrayTypeParameter extends TypeParameter, TArrayTypeParameter { - override string toString() { result = "[T;...]" } - - override Location getLocation() { result instanceof EmptyLocation } -} - class DynTraitTypeParameter extends TypeParameter, TDynTraitTypeParameter { private AstNode n; @@ -539,26 +511,6 @@ class ImplTraitTypeParameter extends TypeParameter, TImplTraitTypeParameter { override Location getLocation() { result = typeParam.getLocation() } } -/** An implicit reference type parameter. */ -class RefTypeParameter extends TypeParameter, TRefTypeParameter { - override string toString() { result = "&T" } - - override Location getLocation() { result instanceof EmptyLocation } -} - -/** An implicit slice type parameter. */ -class SliceTypeParameter extends TypeParameter, TSliceTypeParameter { - override string toString() { result = "[T]" } - - override Location getLocation() { result instanceof EmptyLocation } -} - -class PtrTypeParameter extends TypeParameter, TPtrTypeParameter { - override string toString() { result = "*T" } - - override Location getLocation() { result instanceof EmptyLocation } -} - /** * The implicit `Self` type parameter of a trait, that refers to the * implementing type of the trait. diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index 0ff39fdde78..0c54481b504 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -87,26 +87,6 @@ private module Input1 implements InputSig1 { int getTypeParameterId(TypeParameter tp) { tp = rank[result](TypeParameter tp0, int kind, int id1, int id2 | - tp0 instanceof ArrayTypeParameter and - kind = 0 and - id1 = 0 and - id2 = 0 - or - tp0 instanceof RefTypeParameter and - kind = 0 and - id1 = 0 and - id2 = 1 - or - tp0 instanceof SliceTypeParameter and - kind = 0 and - id1 = 0 and - id2 = 2 - or - tp0 instanceof PtrTypeParameter and - kind = 0 and - id1 = 0 and - id2 = 3 - or kind = 1 and id1 = 0 and id2 = @@ -127,10 +107,6 @@ private module Input1 implements InputSig1 { node = tp0.(SelfTypeParameter).getTrait() or node = tp0.(ImplTraitTypeTypeParameter).getImplTraitTypeRepr() ) - or - kind = 4 and - id1 = tp0.(TupleTypeParameter).getTupleType().getArity() and - id2 = tp0.(TupleTypeParameter).getIndex() | tp0 order by kind, id1, id2 ) @@ -421,7 +397,9 @@ module CertainTypeInference { any(IdentPat ip | n2 = ip.getName() and prefix1.isEmpty() and - if ip.isRef() then prefix2 = TypePath::singleton(TRefTypeParameter()) else prefix2.isEmpty() + if ip.isRef() + then prefix2 = TypePath::singleton(getRefTypeParameter()) + else prefix2.isEmpty() ) } @@ -631,11 +609,11 @@ private predicate typeEquality(AstNode n1, TypePath prefix1, AstNode n2, TypePat n1 = n2.(RefPat).getPat() ) and prefix1.isEmpty() and - prefix2 = TypePath::singleton(TRefTypeParameter()) + prefix2 = TypePath::singleton(getRefTypeParameter()) or exists(int i, int arity | prefix1.isEmpty() and - prefix2 = TypePath::singleton(TTupleTypeParameter(arity, i)) + prefix2 = TypePath::singleton(getTupleTypeParameter(arity, i)) | arity = n2.(TupleExpr).getNumberOfFields() and n1 = n2.(TupleExpr).getField(i) @@ -663,12 +641,12 @@ private predicate typeEquality(AstNode n1, TypePath prefix1, AstNode n2, TypePat ale.getAnExpr() = n2 and ale.getNumberOfExprs() = 1 ) and - prefix1 = TypePath::singleton(TArrayTypeParameter()) and + prefix1 = TypePath::singleton(getArrayTypeParameter()) and prefix2.isEmpty() or // an array repeat expression (`[1; 3]`) has the type of the repeat operand n1.(ArrayRepeatExpr).getRepeatOperand() = n2 and - prefix1 = TypePath::singleton(TArrayTypeParameter()) and + prefix1 = TypePath::singleton(getArrayTypeParameter()) and prefix2.isEmpty() or exists(Struct s | @@ -717,7 +695,7 @@ private predicate lubCoercion(AstNode parent, AstNode child, TypePath prefix) { child = ale.getAnExpr() and ale.getNumberOfExprs() > 1 ) and - prefix = TypePath::singleton(TArrayTypeParameter()) + prefix = TypePath::singleton(getArrayTypeParameter()) or bodyReturns(parent, child) and strictcount(Expr e | bodyReturns(parent, e)) > 1 and @@ -956,9 +934,9 @@ private predicate inferStructExprType = ContextTyping::CheckContextTyping::check/2; pragma[nomagic] -private Type inferTupleRootType(AstNode n) { +private TupleType inferTupleRootType(AstNode n) { // `typeEquality` handles the non-root cases - result = TTuple([n.(TupleExpr).getNumberOfFields(), n.(TuplePat).getTupleArity()]) + result.getArity() = [n.(TupleExpr).getNumberOfFields(), n.(TuplePat).getTupleArity()] } pragma[nomagic] @@ -1191,7 +1169,7 @@ private module MethodResolution { * * `strippedTypePath` points to the type `strippedType` inside `selfType`, * which is the (possibly complex-stripped) root type of `selfType`. For example, - * if `m` has a `&self` parameter, then `strippedTypePath` is `TRefTypeParameter()` + * if `m` has a `&self` parameter, then `strippedTypePath` is `getRefTypeParameter()` * and `strippedType` is the type inside the reference. */ pragma[nomagic] @@ -1401,7 +1379,7 @@ private module MethodResolution { this.hasNoCompatibleTargetBorrow(derefChain0) and t0 = this.getACandidateReceiverTypeAtNoBorrow(derefChain0, path0) | - path0.isCons(TRefTypeParameter(), path) and + path0.isCons(getRefTypeParameter(), path) and result = t0 and derefChain = derefChain0 + ".ref" or @@ -1583,11 +1561,11 @@ private module MethodResolution { borrow = true and ( path.isEmpty() and - result = TRefType() + result instanceof RefType or exists(TypePath suffix | result = this.getACandidateReceiverTypeAtNoBorrow(derefChain, suffix) and - path = TypePath::cons(TRefTypeParameter(), suffix) + path = TypePath::cons(getRefTypeParameter(), suffix) ) ) } @@ -1706,12 +1684,12 @@ private module MethodResolution { override Type getArgumentTypeAt(ArgumentPosition pos, TypePath path) { if this.(Call).implicitBorrowAt(pos, true) then - result = TRefType() and + result instanceof RefType and path.isEmpty() or exists(TypePath path0 | result = inferType(this.getArgument(pos), path0) and - path = TypePath::cons(TRefTypeParameter(), path0) + path = TypePath::cons(getRefTypeParameter(), path0) ) else result = inferType(this.getArgument(pos), path) } @@ -1854,7 +1832,7 @@ private module MethodResolution { | mcc.hasNoBorrow() or - blanketPath.getHead() = TRefTypeParameter() + blanketPath.getHead() = getRefTypeParameter() ) } } @@ -2133,11 +2111,11 @@ private module MethodCallMatchingInput implements MatchingWithEnvironmentInputSi this instanceof IndexExpr then path.isEmpty() and - result = TRefType() + result instanceof RefType or exists(TypePath suffix | result = inferType(this.getNodeAt(apos), suffix) and - path = TypePath::cons(TRefTypeParameter(), suffix) + path = TypePath::cons(getRefTypeParameter(), suffix) ) else ( not apos.isSelf() and @@ -2195,7 +2173,7 @@ private Type inferMethodCallType0( // the implicit deref apos.isReturn() and a instanceof IndexExpr - then path0.isCons(TRefTypeParameter(), path) + then path0.isCons(getRefTypeParameter(), path) else path = path0 ) } @@ -2219,12 +2197,12 @@ private Type inferMethodCallType1(AstNode n, boolean isReturn, TypePath path) { // adjust for implicit deref apos.isSelf() and derefChainBorrow = ".ref;" and - path = TypePath::cons(TRefTypeParameter(), path0) + path = TypePath::cons(getRefTypeParameter(), path0) or // adjust for implicit borrow apos.isSelf() and derefChainBorrow = ";borrow" and - path0.isCons(TRefTypeParameter(), path) + path0.isCons(getRefTypeParameter(), path) ) } @@ -2751,7 +2729,7 @@ private module OperationMatchingInput implements MatchingInputSig { private Type getParameterType(DeclarationPosition dpos, TypePath path) { exists(TypePath path0 | result = super.getParameterType(dpos, path0) and - if this.borrowsAt(dpos) then path0.isCons(TRefTypeParameter(), path) else path0 = path + if this.borrowsAt(dpos) then path0.isCons(getRefTypeParameter(), path) else path0 = path ) } @@ -2762,7 +2740,7 @@ private module OperationMatchingInput implements MatchingInputSig { private Type getReturnType(TypePath path) { exists(TypePath path0 | result = super.getReturnType(path0) and - if this.derefsReturn() then path0.isCons(TRefTypeParameter(), path) else path0 = path + if this.derefsReturn() then path0.isCons(getRefTypeParameter(), path) else path0 = path ) } @@ -2819,14 +2797,6 @@ private Type getTupleFieldExprLookupType(FieldExpr fe, int pos) { ) } -pragma[nomagic] -private TupleTypeParameter resolveTupleTypeFieldExpr(FieldExpr fe) { - exists(int arity, int i | - TTuple(arity) = getTupleFieldExprLookupType(fe, i) and - result = TTupleTypeParameter(arity, i) - ) -} - /** * A matching configuration for resolving types of field expressions like `x.field`. */ @@ -2851,8 +2821,7 @@ private module FieldExprMatchingInput implements MatchingInputSig { private newtype TDeclaration = TStructFieldDecl(StructField sf) or - TTupleFieldDecl(TupleField tf) or - TTupleTypeParameterDecl(TupleTypeParameter ttp) + TTupleFieldDecl(TupleField tf) abstract class Declaration extends TDeclaration { TypeParameter getTypeParameter(TypeParameterPosition ppos) { none() } @@ -2909,31 +2878,6 @@ private module FieldExprMatchingInput implements MatchingInputSig { override TypeRepr getTypeRepr() { result = tf.getTypeRepr() } } - private class TupleTypeParameterDecl extends Declaration, TTupleTypeParameterDecl { - private TupleTypeParameter ttp; - - TupleTypeParameterDecl() { this = TTupleTypeParameterDecl(ttp) } - - override Type getDeclaredType(DeclarationPosition dpos, TypePath path) { - dpos.isSelf() and - ( - result = ttp.getTupleType() and - path.isEmpty() - or - result = ttp and - path = TypePath::singleton(ttp) - ) - or - dpos.isField() and - result = ttp and - path.isEmpty() - } - - override string toString() { result = ttp.toString() } - - override Location getLocation() { result = ttp.getLocation() } - } - class AccessPosition = DeclarationPosition; class Access extends FieldExpr { @@ -2952,10 +2896,10 @@ private module FieldExprMatchingInput implements MatchingInputSig { if apos.isSelf() then // adjust for implicit deref - path0.isCons(TRefTypeParameter(), path) + path0.isCons(getRefTypeParameter(), path) or - not path0.isCons(TRefTypeParameter(), _) and - not (result = TRefType() and path0.isEmpty()) and + not path0.isCons(getRefTypeParameter(), _) and + not (result instanceof RefType and path0.isEmpty()) and path = path0 else path = path0 ) @@ -2966,8 +2910,7 @@ private module FieldExprMatchingInput implements MatchingInputSig { result = [ TStructFieldDecl(resolveStructFieldExpr(this)).(TDeclaration), - TTupleFieldDecl(resolveTupleFieldExpr(this)), - TTupleTypeParameterDecl(resolveTupleTypeFieldExpr(this)) + TTupleFieldDecl(resolveTupleFieldExpr(this)) ] } } @@ -2994,12 +2937,12 @@ private Type inferFieldExprType(AstNode n, TypePath path) { if apos.isSelf() then exists(Type receiverType | receiverType = inferType(n) | - if receiverType = TRefType() + if receiverType instanceof RefType then // adjust for implicit deref - not path0.isCons(TRefTypeParameter(), _) and - not (path0.isEmpty() and result = TRefType()) and - path = TypePath::cons(TRefTypeParameter(), path0) + not path0.isCons(getRefTypeParameter(), _) and + not (path0.isEmpty() and result instanceof RefType) and + path = TypePath::cons(getRefTypeParameter(), path0) else path = path0 ) else path = path0 @@ -3016,7 +2959,7 @@ private Type inferRefNodeType(AstNode ref) { or ref instanceof RefPat ) and - result = TRefType() + result instanceof RefType } pragma[nomagic] @@ -3070,9 +3013,9 @@ private Type inferLiteralType(LiteralExpr le, TypePath path, boolean certain) { or le instanceof StringLiteralExpr and ( - path.isEmpty() and result = TRefType() + path.isEmpty() and result instanceof RefType or - path = TypePath::singleton(TRefTypeParameter()) and + path = TypePath::singleton(getRefTypeParameter()) and result = getStrStruct() ) and certain = true @@ -3146,7 +3089,7 @@ private Type inferAwaitExprType(AstNode n, TypePath path) { * Gets the root type of the array expression `ae`. */ pragma[nomagic] -private Type inferArrayExprType(ArrayExpr ae) { exists(ae) and result = TArrayType() } +private Type inferArrayExprType(ArrayExpr ae) { exists(ae) and result instanceof ArrayType } /** * Gets the root type of the range expression `re`. @@ -3182,11 +3125,11 @@ private Type inferIndexExprType(IndexExpr ie, TypePath path) { // todo: remove? exprPath.isCons(TTypeParamTypeParameter(any(Vec v).getElementTypeParam()), path) or - exprPath.isCons(any(ArrayTypeParameter tp), path) + exprPath.isCons(getArrayTypeParameter(), path) or exists(TypePath path0 | - exprPath.isCons(any(RefTypeParameter tp), path0) and - path0.isCons(any(SliceTypeParameter tp), path) + exprPath.isCons(getRefTypeParameter(), path0) and + path0.isCons(getSliceTypeParameter(), path) ) ) } @@ -3331,7 +3274,7 @@ private Type inferForLoopExprType(AstNode n, TypePath path) { or // TODO: Remove once we can handle the `impl IntoIterator for I` implementation tp = getIteratorItemTypeParameter() and - inferType(fe.getIterable()) != TArrayType() + inferType(fe.getIterable()) != getArrayTypeParameter() ) } @@ -3378,7 +3321,7 @@ pragma[nomagic] private TypePath closureParameterPath(int arity, int index) { result = TypePath::cons(TDynTraitTypeParameter(any(FnOnceTrait t).getTypeParam()), - TypePath::singleton(TTupleTypeParameter(arity, index))) + TypePath::singleton(getTupleTypeParameter(arity, index))) } /** Gets the path to the return type of the `FnOnce` trait. */ @@ -3394,7 +3337,7 @@ pragma[nomagic] private TypePath fnParameterPath(int arity, int index) { result = TypePath::cons(TTypeParamTypeParameter(any(FnOnceTrait t).getTypeParam()), - TypePath::singleton(TTupleTypeParameter(arity, index))) + TypePath::singleton(getTupleTypeParameter(arity, index))) } pragma[nomagic] @@ -3443,7 +3386,7 @@ private Type inferClosureExprType(AstNode n, TypePath path) { or n = ce and path = TypePath::singleton(TDynTraitTypeParameter(any(FnOnceTrait t).getTypeParam())) and - result = TTuple(ce.getNumberOfParams()) + result.(TupleType).getArity() = ce.getNumberOfParams() or // Propagate return type annotation to body n = ce.getClosureBody() and diff --git a/rust/ql/lib/codeql/rust/internal/TypeMention.qll b/rust/ql/lib/codeql/rust/internal/TypeMention.qll index 8a76caf7ba5..90de48035e3 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeMention.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeMention.qll @@ -20,11 +20,11 @@ abstract class TypeMention extends AstNode { class TupleTypeReprMention extends TypeMention instanceof TupleTypeRepr { override Type resolveTypeAt(TypePath path) { path.isEmpty() and - result = TTuple(super.getNumberOfFields()) + result.(TupleType).getArity() = super.getNumberOfFields() or exists(TypePath suffix, int i | result = super.getField(i).(TypeMention).resolveTypeAt(suffix) and - path = TypePath::cons(TTupleTypeParameter(super.getNumberOfFields(), i), suffix) + path = TypePath::cons(getTupleTypeParameter(super.getNumberOfFields(), i), suffix) ) } } @@ -32,11 +32,11 @@ class TupleTypeReprMention extends TypeMention instanceof TupleTypeRepr { class ParenthesizedArgListMention extends TypeMention instanceof ParenthesizedArgList { override Type resolveTypeAt(TypePath path) { path.isEmpty() and - result = TTuple(super.getNumberOfTypeArgs()) + result.(TupleType).getArity() = super.getNumberOfTypeArgs() or exists(TypePath suffix, int index | result = super.getTypeArg(index).getTypeRepr().(TypeMention).resolveTypeAt(suffix) and - path = TypePath::cons(TTupleTypeParameter(super.getNumberOfTypeArgs(), index), suffix) + path = TypePath::cons(getTupleTypeParameter(super.getNumberOfTypeArgs(), index), suffix) ) } } @@ -44,11 +44,11 @@ class ParenthesizedArgListMention extends TypeMention instanceof ParenthesizedAr class ArrayTypeReprMention extends TypeMention instanceof ArrayTypeRepr { override Type resolveTypeAt(TypePath path) { path.isEmpty() and - result = TArrayType() + result instanceof ArrayType or exists(TypePath suffix | result = super.getElementTypeRepr().(TypeMention).resolveTypeAt(suffix) and - path = TypePath::cons(TArrayTypeParameter(), suffix) + path = TypePath::cons(getArrayTypeParameter(), suffix) ) } } @@ -56,11 +56,11 @@ class ArrayTypeReprMention extends TypeMention instanceof ArrayTypeRepr { class RefTypeReprMention extends TypeMention instanceof RefTypeRepr { override Type resolveTypeAt(TypePath path) { path.isEmpty() and - result = TRefType() + result instanceof RefType or exists(TypePath suffix | result = super.getTypeRepr().(TypeMention).resolveTypeAt(suffix) and - path = TypePath::cons(TRefTypeParameter(), suffix) + path = TypePath::cons(getRefTypeParameter(), suffix) ) } } @@ -68,11 +68,11 @@ class RefTypeReprMention extends TypeMention instanceof RefTypeRepr { class SliceTypeReprMention extends TypeMention instanceof SliceTypeRepr { override Type resolveTypeAt(TypePath path) { path.isEmpty() and - result = TSliceType() + result instanceof SliceType or exists(TypePath suffix | result = super.getTypeRepr().(TypeMention).resolveTypeAt(suffix) and - path = TypePath::cons(TSliceTypeParameter(), suffix) + path = TypePath::cons(getSliceTypeParameter(), suffix) ) } } @@ -291,6 +291,9 @@ class NonAliasPathTypeMention extends PathTypeMention { result = this.getSelfTraitBoundArg().resolveTypeAt(suffix) and typePath = TypePath::cons(TSelfTypeParameter(resolved), suffix) ) + or + not this.getSegment().hasTraitTypeRepr() and + result = this.getSegment().getTypeRepr().(TypeMention).resolveTypeAt(typePath) } } @@ -426,11 +429,11 @@ class ShorthandSelfParameterMention extends TypeMention instanceof SelfParam { then // `fn f(&self, ...)` typePath.isEmpty() and - result = TRefType() + result instanceof RefType or exists(TypePath suffix | result = this.resolveSelfType(suffix) and - typePath = TypePath::cons(TRefTypeParameter(), suffix) + typePath = TypePath::cons(getRefTypeParameter(), suffix) ) else // `fn f(self, ...)` @@ -541,11 +544,11 @@ class NeverTypeReprMention extends TypeMention, NeverTypeRepr { class PtrTypeReprMention extends TypeMention instanceof PtrTypeRepr { override Type resolveTypeAt(TypePath path) { path.isEmpty() and - result = TPtrType() + result instanceof PtrType or exists(TypePath suffix | result = super.getTypeRepr().(TypeMention).resolveTypeAt(suffix) and - path = TypePath::cons(TPtrTypeParameter(), suffix) + path = TypePath::cons(getPtrTypeParameter(), suffix) ) } } diff --git a/rust/ql/lib/codeql/rust/security/Barriers.qll b/rust/ql/lib/codeql/rust/security/Barriers.qll index 398e4f56712..cc5ac55fd1b 100644 --- a/rust/ql/lib/codeql/rust/security/Barriers.qll +++ b/rust/ql/lib/codeql/rust/security/Barriers.qll @@ -7,7 +7,7 @@ import rust private import codeql.rust.dataflow.DataFlow private import codeql.rust.internal.TypeInference as TypeInference private import codeql.rust.internal.Type -private import codeql.rust.frameworks.stdlib.Builtins +private import codeql.rust.frameworks.stdlib.Builtins as Builtins /** * A node whose type is a numeric or boolean type, which may be an appropriate @@ -19,8 +19,8 @@ class NumericTypeBarrier extends DataFlow::Node { t = TypeInference::inferType(this.asExpr().getExpr()) and s = t.getStruct() | - s instanceof NumericType or - s instanceof Bool + s instanceof Builtins::NumericType or + s instanceof Builtins::Bool ) } } @@ -35,8 +35,8 @@ class IntegralOrBooleanTypeBarrier extends DataFlow::Node { t = TypeInference::inferType(this.asExpr().getExpr()) and s = t.getStruct() | - s instanceof IntegralType or - s instanceof Bool + s instanceof Builtins::IntegralType or + s instanceof Builtins::Bool ) } } diff --git a/rust/ql/test/library-tests/elements/builtintypes/BuiltinTypes.expected b/rust/ql/test/library-tests/elements/builtintypes/BuiltinTypes.expected index 2b0aecda049..0a993bf6842 100644 --- a/rust/ql/test/library-tests/elements/builtintypes/BuiltinTypes.expected +++ b/rust/ql/test/library-tests/elements/builtintypes/BuiltinTypes.expected @@ -1,3 +1,24 @@ +| struct Array | | +| struct Ptr | | +| struct Ref | | +| struct Slice | | +| struct Tuple0 | | +| struct Tuple1 | | +| struct Tuple2 | | +| struct Tuple3 | | +| struct Tuple4 | | +| struct Tuple5 | | +| struct Tuple6 | | +| struct Tuple7 | | +| struct Tuple8 | | +| struct Tuple9 | | +| struct Tuple10 | | +| struct Tuple11 | | +| struct Tuple12 | | +| struct Tuple13 | | +| struct Tuple14 | | +| struct Tuple15 | | +| struct Tuple16 | | | struct bool | | | struct char | | | struct f32 | FloatingPointType, NumericType | diff --git a/rust/ql/test/library-tests/elements/builtintypes/BuiltinTypes.ql b/rust/ql/test/library-tests/elements/builtintypes/BuiltinTypes.ql index 4da1117a3fb..8dfd49bc137 100644 --- a/rust/ql/test/library-tests/elements/builtintypes/BuiltinTypes.ql +++ b/rust/ql/test/library-tests/elements/builtintypes/BuiltinTypes.ql @@ -1,6 +1,5 @@ import rust import codeql.rust.frameworks.stdlib.Builtins -import codeql.rust.internal.Type string describe(BuiltinType t) { t instanceof NumericType and result = "NumericType" diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index a8568116afb..c18c43330c1 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -1755,7 +1755,7 @@ mod builtins { let x = [1, 2, 3].my_method(); // $ target=my_method type=x:&T.i32 let x = <[_; 3]>::my_method(&[1, 2, 3]); // $ target=my_method type=x:&T.i32 - let x = <[i32; 3]>::my_func(); // $ MISSING: target=my_func type=x:i32 + let x = <[i32; 3]>::my_func(); // $ target=my_func type=x:i32 impl MyTrait for [T] { fn my_method(&self) -> &T { @@ -1770,11 +1770,11 @@ mod builtins { let s: &[i32] = &[1, 2, 3]; let x = s.my_method(); // $ target=my_method type=x:&T.i32 let x = <[_]>::my_method(s); // $ target=my_method type=x:&T.i32 - let x = <[i32]>::my_func(); // $ MISSING: target=my_func type=x:i32 + let x = <[i32]>::my_func(); // $ target=my_func type=x:i32 impl MyTrait for (T, i32) { fn my_method(&self) -> &T { - &self.0 + &self.0 // $ fieldof=Tuple2 } fn my_func() -> T { @@ -1785,7 +1785,7 @@ mod builtins { let p = (42, 7); let x = p.my_method(); // $ target=my_method type=x:&T.i32 let x = <(_, _)>::my_method(&p); // $ target=my_method type=x:&T.i32 - let x = <(i32, i32)>::my_func(); // $ MISSING: target=my_func type=x:i32 + let x = <(i32, i32)>::my_func(); // $ target=my_func type=x:i32 impl MyTrait for &T { fn my_method(&self) -> &T { @@ -1800,7 +1800,7 @@ mod builtins { let r = &42; let x = r.my_method(); // $ target=my_method type=x:&T.i32 let x = <&_>::my_method(&r); // $ target=my_method type=x:&T.i32 - let x = <&i32>::my_func(); // $ MISSING: target=my_func type=x:i32 + let x = <&i32>::my_func(); // $ target=my_func type=x:i32 impl MyTrait for *mut T { fn my_method(&self) -> &T { @@ -1816,7 +1816,7 @@ mod builtins { let p: *mut i32 = &mut v; let x = unsafe { p.my_method() }; // $ target=my_method type=x:&T.i32 let x = unsafe { <*mut _>::my_method(&p) }; // $ target=my_method type=x:&T.i32 - let x = <*mut i32>::my_func(); // $ MISSING: target=my_func type=x:i32 + let x = <*mut i32>::my_func(); // $ target=my_func type=x:i32 } } @@ -2344,7 +2344,7 @@ mod impl_trait { // For this function the `impl` type does not appear in the root of the return type let f = get_a_my_trait3(S1).unwrap().get_a(); // $ target=get_a_my_trait3 target=unwrap target=MyTrait::get_a type=f:S1 - let g = get_a_my_trait4(S1).0.get_a(); // $ target=get_a_my_trait4 target=MyTrait::get_a type=g:S1 + let g = get_a_my_trait4(S1).0.get_a(); // $ target=get_a_my_trait4 target=MyTrait::get_a type=g:S1 fieldof=Tuple2 } } @@ -2670,7 +2670,7 @@ mod loops { // for loops with containers - let vals3 = vec![1, 2, 3]; // $ MISSING: type=vals3:Vec type=vals3:T.i32 + let vals3 = vec![1, 2, 3]; // $ type=vals3:Vec $ MISSING: type=vals3:T.i32 for i in vals3 {} // $ MISSING: type=i:i32 let vals4a: Vec = [1u16, 2, 3].to_vec(); // $ certainType=vals4a:Vec certainType=vals4a:T.u16 @@ -2689,7 +2689,7 @@ mod loops { vals7.push(1u8); // $ target=push for u in vals7 {} // $ type=u:u8 - let matrix1 = vec![vec![1, 2], vec![3, 4]]; // $ MISSING: type=matrix1:Vec type=matrix1:T.Vec type=matrix1:T.T.i32 + let matrix1 = vec![vec![1, 2], vec![3, 4]]; // $ type=matrix1:Vec $ MISSING: type=matrix1:T.Vec type=matrix1:T.T.i32 #[rustfmt::skip] let _ = for row in matrix1 { // $ MISSING: type=row:Vec type=row:T.i32 for cell in row { // $ MISSING: type=cell:i32 @@ -2790,8 +2790,8 @@ mod tuples { let (mut e, f) = S1::get_pair(); // $ target=get_pair type=e:S1 type=f:S1 let (mut g, mut h) = S1::get_pair(); // $ target=get_pair type=g:S1 type=h:S1 - a.0.foo(); // $ target=foo - b.1.foo(); // $ target=foo + a.0.foo(); // $ target=foo fieldof=Tuple2 + b.1.foo(); // $ target=foo fieldof=Tuple2 c.foo(); // $ target=foo d.foo(); // $ target=foo e.foo(); // $ target=foo @@ -2805,18 +2805,18 @@ mod tuples { let a = Default::default(); // $ target=default type=a:i64 let b = Default::default(); // $ target=default type=b:bool let pair = (a, b); // $ type=pair:0(2).i64 type=pair:1(2).bool - let i: i64 = pair.0; - let j: bool = pair.1; + let i: i64 = pair.0; // $ fieldof=Tuple2 + let j: bool = pair.1; // $ fieldof=Tuple2 let pair = [1, 1].into(); // $ type=pair:(T_2) type=pair:0(2).i32 type=pair:1(2).i32 MISSING: target=into match pair { (0, 0) => print!("unexpected"), _ => print!("expected"), } - let x = pair.0; // $ type=x:i32 + let x = pair.0; // $ type=x:i32 fieldof=Tuple2 let y = &S1::get_pair(); // $ target=get_pair - y.0.foo(); // $ target=foo + y.0.foo(); // $ target=foo fieldof=Tuple2 } } 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 8e8465ae5f6..5b73cb2e29d 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -1,92 +1,92 @@ inferType -| blanket_impl.rs:15:18:15:22 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:15:18:15:22 | SelfParam | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:15:18:15:22 | SelfParam | &T | blanket_impl.rs:9:5:10:14 | S2 | -| blanket_impl.rs:15:42:17:9 | { ... } | | file://:0:0:0:0 | & | +| blanket_impl.rs:15:42:17:9 | { ... } | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:15:42:17:9 | { ... } | &T | blanket_impl.rs:6:5:7:14 | S1 | -| blanket_impl.rs:16:13:16:15 | &S1 | | file://:0:0:0:0 | & | +| blanket_impl.rs:16:13:16:15 | &S1 | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:16:13:16:15 | &S1 | &T | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:16:14:16:15 | S1 | | blanket_impl.rs:6:5:7:14 | S1 | -| blanket_impl.rs:21:19:21:23 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:21:19:21:23 | SelfParam | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:21:19:21:23 | SelfParam | &T | blanket_impl.rs:20:5:22:5 | Self [trait Clone1] | -| blanket_impl.rs:25:22:25:26 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:25:22:25:26 | SelfParam | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:25:22:25:26 | SelfParam | &T | blanket_impl.rs:24:5:28:5 | Self [trait Duplicatable] | -| blanket_impl.rs:32:19:32:23 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:32:19:32:23 | SelfParam | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:32:19:32:23 | SelfParam | &T | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:32:34:34:9 | { ... } | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:33:13:33:17 | * ... | | blanket_impl.rs:6:5:7:14 | S1 | -| blanket_impl.rs:33:14:33:17 | self | | file://:0:0:0:0 | & | +| blanket_impl.rs:33:14:33:17 | self | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:33:14:33:17 | self | &T | blanket_impl.rs:6:5:7:14 | S1 | -| blanket_impl.rs:40:22:40:26 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:40:22:40:26 | SelfParam | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:40:22:40:26 | SelfParam | &T | blanket_impl.rs:38:10:38:18 | T | | blanket_impl.rs:40:37:42:9 | { ... } | | blanket_impl.rs:38:10:38:18 | T | -| blanket_impl.rs:41:13:41:16 | self | | file://:0:0:0:0 | & | +| blanket_impl.rs:41:13:41:16 | self | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:41:13:41:16 | self | &T | blanket_impl.rs:38:10:38:18 | T | | blanket_impl.rs:41:13:41:25 | self.clone1() | | blanket_impl.rs:38:10:38:18 | T | -| blanket_impl.rs:45:33:60:5 | { ... } | | file://:0:0:0:0 | () | +| blanket_impl.rs:45:33:60:5 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:46:13:46:14 | x1 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:46:18:46:19 | S1 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:46:18:46:28 | S1.clone1() | | blanket_impl.rs:6:5:7:14 | S1 | -| blanket_impl.rs:47:18:47:25 | "{x1:?}\\n" | | file://:0:0:0:0 | & | +| blanket_impl.rs:47:18:47:25 | "{x1:?}\\n" | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:47:18:47:25 | "{x1:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| blanket_impl.rs:47:18:47:25 | ...::_print(...) | | file://:0:0:0:0 | () | -| blanket_impl.rs:47:18:47:25 | { ... } | | file://:0:0:0:0 | () | +| blanket_impl.rs:47:18:47:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:47:18:47:25 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:47:20:47:21 | x1 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:48:13:48:14 | x2 | | blanket_impl.rs:6:5:7:14 | S1 | -| blanket_impl.rs:48:18:48:22 | (...) | | file://:0:0:0:0 | & | +| blanket_impl.rs:48:18:48:22 | (...) | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:48:18:48:22 | (...) | &T | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:48:18:48:31 | ... .clone1() | | blanket_impl.rs:6:5:7:14 | S1 | -| blanket_impl.rs:48:19:48:21 | &S1 | | file://:0:0:0:0 | & | +| blanket_impl.rs:48:19:48:21 | &S1 | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:48:19:48:21 | &S1 | &T | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:48:20:48:21 | S1 | | blanket_impl.rs:6:5:7:14 | S1 | -| blanket_impl.rs:49:18:49:25 | "{x2:?}\\n" | | file://:0:0:0:0 | & | +| blanket_impl.rs:49:18:49:25 | "{x2:?}\\n" | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:49:18:49:25 | "{x2:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| blanket_impl.rs:49:18:49:25 | ...::_print(...) | | file://:0:0:0:0 | () | -| blanket_impl.rs:49:18:49:25 | { ... } | | file://:0:0:0:0 | () | +| blanket_impl.rs:49:18:49:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:49:18:49:25 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:49:20:49:21 | x2 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:50:13:50:14 | x3 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:50:18:50:19 | S1 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:50:18:50:31 | S1.duplicate() | | blanket_impl.rs:6:5:7:14 | S1 | -| blanket_impl.rs:51:18:51:25 | "{x3:?}\\n" | | file://:0:0:0:0 | & | +| blanket_impl.rs:51:18:51:25 | "{x3:?}\\n" | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:51:18:51:25 | "{x3:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| blanket_impl.rs:51:18:51:25 | ...::_print(...) | | file://:0:0:0:0 | () | -| blanket_impl.rs:51:18:51:25 | { ... } | | file://:0:0:0:0 | () | +| blanket_impl.rs:51:18:51:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:51:18:51:25 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:51:20:51:21 | x3 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:52:13:52:14 | x4 | | blanket_impl.rs:6:5:7:14 | S1 | -| blanket_impl.rs:52:18:52:22 | (...) | | file://:0:0:0:0 | & | +| blanket_impl.rs:52:18:52:22 | (...) | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:52:18:52:22 | (...) | &T | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:52:18:52:34 | ... .duplicate() | | blanket_impl.rs:6:5:7:14 | S1 | -| blanket_impl.rs:52:19:52:21 | &S1 | | file://:0:0:0:0 | & | +| blanket_impl.rs:52:19:52:21 | &S1 | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:52:19:52:21 | &S1 | &T | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:52:20:52:21 | S1 | | blanket_impl.rs:6:5:7:14 | S1 | -| blanket_impl.rs:53:18:53:25 | "{x4:?}\\n" | | file://:0:0:0:0 | & | +| blanket_impl.rs:53:18:53:25 | "{x4:?}\\n" | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:53:18:53:25 | "{x4:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| blanket_impl.rs:53:18:53:25 | ...::_print(...) | | file://:0:0:0:0 | () | -| blanket_impl.rs:53:18:53:25 | { ... } | | file://:0:0:0:0 | () | +| blanket_impl.rs:53:18:53:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:53:18:53:25 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:53:20:53:21 | x4 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:54:13:54:14 | x5 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:54:18:54:35 | ...::duplicate(...) | | blanket_impl.rs:6:5:7:14 | S1 | -| blanket_impl.rs:54:32:54:34 | &S1 | | file://:0:0:0:0 | & | +| blanket_impl.rs:54:32:54:34 | &S1 | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:54:32:54:34 | &S1 | &T | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:54:33:54:34 | S1 | | blanket_impl.rs:6:5:7:14 | S1 | -| blanket_impl.rs:55:18:55:25 | "{x5:?}\\n" | | file://:0:0:0:0 | & | +| blanket_impl.rs:55:18:55:25 | "{x5:?}\\n" | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:55:18:55:25 | "{x5:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| blanket_impl.rs:55:18:55:25 | ...::_print(...) | | file://:0:0:0:0 | () | -| blanket_impl.rs:55:18:55:25 | { ... } | | file://:0:0:0:0 | () | +| blanket_impl.rs:55:18:55:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:55:18:55:25 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:55:20:55:21 | x5 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:56:18:56:19 | S2 | | blanket_impl.rs:9:5:10:14 | S2 | -| blanket_impl.rs:57:18:57:25 | "{x6:?}\\n" | | file://:0:0:0:0 | & | +| blanket_impl.rs:57:18:57:25 | "{x6:?}\\n" | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:57:18:57:25 | "{x6:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| blanket_impl.rs:57:18:57:25 | ...::_print(...) | | file://:0:0:0:0 | () | -| blanket_impl.rs:57:18:57:25 | { ... } | | file://:0:0:0:0 | () | -| blanket_impl.rs:58:18:58:22 | (...) | | file://:0:0:0:0 | & | +| blanket_impl.rs:57:18:57:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:57:18:57:25 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:58:18:58:22 | (...) | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:58:18:58:22 | (...) | &T | blanket_impl.rs:9:5:10:14 | S2 | -| blanket_impl.rs:58:19:58:21 | &S2 | | file://:0:0:0:0 | & | +| blanket_impl.rs:58:19:58:21 | &S2 | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:58:19:58:21 | &S2 | &T | blanket_impl.rs:9:5:10:14 | S2 | | blanket_impl.rs:58:20:58:21 | S2 | | blanket_impl.rs:9:5:10:14 | S2 | -| blanket_impl.rs:59:18:59:25 | "{x7:?}\\n" | | file://:0:0:0:0 | & | +| blanket_impl.rs:59:18:59:25 | "{x7:?}\\n" | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:59:18:59:25 | "{x7:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| blanket_impl.rs:59:18:59:25 | ...::_print(...) | | file://:0:0:0:0 | () | -| blanket_impl.rs:59:18:59:25 | { ... } | | file://:0:0:0:0 | () | +| blanket_impl.rs:59:18:59:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:59:18:59:25 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:68:24:68:24 | x | | {EXTERNAL LOCATION} | i64 | | blanket_impl.rs:68:32:68:32 | y | | blanket_impl.rs:67:5:69:5 | Self [trait Trait1] | | blanket_impl.rs:72:24:72:24 | x | | {EXTERNAL LOCATION} | i64 | @@ -101,91 +101,91 @@ inferType | blanket_impl.rs:85:13:85:32 | ...::assoc_func1(...) | | blanket_impl.rs:82:10:82:18 | T | | blanket_impl.rs:85:28:85:28 | x | | {EXTERNAL LOCATION} | i64 | | blanket_impl.rs:85:31:85:31 | y | | blanket_impl.rs:82:10:82:18 | T | -| blanket_impl.rs:89:33:98:5 | { ... } | | file://:0:0:0:0 | () | +| blanket_impl.rs:89:33:98:5 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:90:13:90:14 | x1 | | blanket_impl.rs:64:5:65:14 | S1 | | blanket_impl.rs:90:18:90:39 | ...::assoc_func1(...) | | blanket_impl.rs:64:5:65:14 | S1 | | blanket_impl.rs:90:34:90:34 | 1 | | {EXTERNAL LOCATION} | i32 | | blanket_impl.rs:90:37:90:38 | S1 | | blanket_impl.rs:64:5:65:14 | S1 | -| blanket_impl.rs:91:18:91:25 | "{x1:?}\\n" | | file://:0:0:0:0 | & | +| blanket_impl.rs:91:18:91:25 | "{x1:?}\\n" | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:91:18:91:25 | "{x1:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| blanket_impl.rs:91:18:91:25 | ...::_print(...) | | file://:0:0:0:0 | () | -| blanket_impl.rs:91:18:91:25 | { ... } | | file://:0:0:0:0 | () | +| blanket_impl.rs:91:18:91:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:91:18:91:25 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:91:20:91:21 | x1 | | blanket_impl.rs:64:5:65:14 | S1 | | blanket_impl.rs:92:13:92:14 | x2 | | blanket_impl.rs:64:5:65:14 | S1 | | blanket_impl.rs:92:18:92:43 | ...::assoc_func1(...) | | blanket_impl.rs:64:5:65:14 | S1 | | blanket_impl.rs:92:38:92:38 | 1 | | {EXTERNAL LOCATION} | i32 | | blanket_impl.rs:92:41:92:42 | S1 | | blanket_impl.rs:64:5:65:14 | S1 | -| blanket_impl.rs:93:18:93:25 | "{x2:?}\\n" | | file://:0:0:0:0 | & | +| blanket_impl.rs:93:18:93:25 | "{x2:?}\\n" | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:93:18:93:25 | "{x2:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| blanket_impl.rs:93:18:93:25 | ...::_print(...) | | file://:0:0:0:0 | () | -| blanket_impl.rs:93:18:93:25 | { ... } | | file://:0:0:0:0 | () | +| blanket_impl.rs:93:18:93:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:93:18:93:25 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:93:20:93:21 | x2 | | blanket_impl.rs:64:5:65:14 | S1 | | blanket_impl.rs:94:13:94:14 | x3 | | blanket_impl.rs:64:5:65:14 | S1 | | blanket_impl.rs:94:18:94:39 | ...::assoc_func2(...) | | blanket_impl.rs:64:5:65:14 | S1 | | blanket_impl.rs:94:34:94:34 | 1 | | {EXTERNAL LOCATION} | i32 | | blanket_impl.rs:94:37:94:38 | S1 | | blanket_impl.rs:64:5:65:14 | S1 | -| blanket_impl.rs:95:18:95:25 | "{x3:?}\\n" | | file://:0:0:0:0 | & | +| blanket_impl.rs:95:18:95:25 | "{x3:?}\\n" | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:95:18:95:25 | "{x3:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| blanket_impl.rs:95:18:95:25 | ...::_print(...) | | file://:0:0:0:0 | () | -| blanket_impl.rs:95:18:95:25 | { ... } | | file://:0:0:0:0 | () | +| blanket_impl.rs:95:18:95:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:95:18:95:25 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:95:20:95:21 | x3 | | blanket_impl.rs:64:5:65:14 | S1 | | blanket_impl.rs:96:13:96:14 | x4 | | blanket_impl.rs:64:5:65:14 | S1 | | blanket_impl.rs:96:18:96:43 | ...::assoc_func2(...) | | blanket_impl.rs:64:5:65:14 | S1 | | blanket_impl.rs:96:38:96:38 | 1 | | {EXTERNAL LOCATION} | i32 | | blanket_impl.rs:96:41:96:42 | S1 | | blanket_impl.rs:64:5:65:14 | S1 | -| blanket_impl.rs:97:18:97:25 | "{x4:?}\\n" | | file://:0:0:0:0 | & | +| blanket_impl.rs:97:18:97:25 | "{x4:?}\\n" | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:97:18:97:25 | "{x4:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| blanket_impl.rs:97:18:97:25 | ...::_print(...) | | file://:0:0:0:0 | () | -| blanket_impl.rs:97:18:97:25 | { ... } | | file://:0:0:0:0 | () | +| blanket_impl.rs:97:18:97:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:97:18:97:25 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:97:20:97:21 | x4 | | blanket_impl.rs:64:5:65:14 | S1 | -| blanket_impl.rs:108:22:108:26 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:108:22:108:26 | SelfParam | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:108:22:108:26 | SelfParam | &T | blanket_impl.rs:107:5:109:5 | Self [trait Flag] | -| blanket_impl.rs:112:26:112:30 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:112:26:112:30 | SelfParam | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:112:26:112:30 | SelfParam | &T | blanket_impl.rs:111:5:113:5 | Self [trait TryFlag] | -| blanket_impl.rs:119:26:119:30 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:119:26:119:30 | SelfParam | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:119:26:119:30 | SelfParam | &T | blanket_impl.rs:115:10:115:11 | Fl | | blanket_impl.rs:119:49:121:9 | { ... } | | {EXTERNAL LOCATION} | Option | | blanket_impl.rs:119:49:121:9 | { ... } | T | {EXTERNAL LOCATION} | bool | | blanket_impl.rs:120:13:120:34 | Some(...) | | {EXTERNAL LOCATION} | Option | | blanket_impl.rs:120:13:120:34 | Some(...) | T | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:120:18:120:21 | self | | file://:0:0:0:0 | & | +| blanket_impl.rs:120:18:120:21 | self | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:120:18:120:21 | self | &T | blanket_impl.rs:115:10:115:11 | Fl | | blanket_impl.rs:120:18:120:33 | self.read_flag() | | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:126:32:126:36 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:126:32:126:36 | SelfParam | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:126:32:126:36 | SelfParam | &T | blanket_impl.rs:124:5:129:5 | Self [trait TryFlagExt] | | blanket_impl.rs:126:55:128:9 | { ... } | | {EXTERNAL LOCATION} | Option | | blanket_impl.rs:126:55:128:9 | { ... } | T | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:127:13:127:16 | self | | file://:0:0:0:0 | & | +| blanket_impl.rs:127:13:127:16 | self | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:127:13:127:16 | self | &T | blanket_impl.rs:124:5:129:5 | Self [trait TryFlagExt] | | blanket_impl.rs:127:13:127:32 | self.try_read_flag() | | {EXTERNAL LOCATION} | Option | | blanket_impl.rs:127:13:127:32 | self.try_read_flag() | T | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:135:32:135:36 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:135:32:135:36 | SelfParam | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:135:32:135:36 | SelfParam | &T | blanket_impl.rs:133:5:136:5 | Self [trait AnotherTryFlag] | -| blanket_impl.rs:144:26:144:30 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:144:26:144:30 | SelfParam | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:144:26:144:30 | SelfParam | &T | blanket_impl.rs:138:5:140:5 | MyTryFlag | | blanket_impl.rs:144:49:146:9 | { ... } | | {EXTERNAL LOCATION} | Option | | blanket_impl.rs:144:49:146:9 | { ... } | T | {EXTERNAL LOCATION} | bool | | blanket_impl.rs:145:13:145:27 | Some(...) | | {EXTERNAL LOCATION} | Option | | blanket_impl.rs:145:13:145:27 | Some(...) | T | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:145:18:145:21 | self | | file://:0:0:0:0 | & | +| blanket_impl.rs:145:18:145:21 | self | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:145:18:145:21 | self | &T | blanket_impl.rs:138:5:140:5 | MyTryFlag | | blanket_impl.rs:145:18:145:26 | self.flag | | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:155:22:155:26 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:155:22:155:26 | SelfParam | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:155:22:155:26 | SelfParam | &T | blanket_impl.rs:149:5:151:5 | MyFlag | | blanket_impl.rs:155:37:157:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:156:13:156:16 | self | | file://:0:0:0:0 | & | +| blanket_impl.rs:156:13:156:16 | self | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:156:13:156:16 | self | &T | blanket_impl.rs:149:5:151:5 | MyFlag | | blanket_impl.rs:156:13:156:21 | self.flag | | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:166:32:166:36 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:166:32:166:36 | SelfParam | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:166:32:166:36 | SelfParam | &T | blanket_impl.rs:160:5:162:5 | MyOtherFlag | | blanket_impl.rs:166:55:168:9 | { ... } | | {EXTERNAL LOCATION} | Option | | blanket_impl.rs:166:55:168:9 | { ... } | T | {EXTERNAL LOCATION} | bool | | blanket_impl.rs:167:13:167:27 | Some(...) | | {EXTERNAL LOCATION} | Option | | blanket_impl.rs:167:13:167:27 | Some(...) | T | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:167:18:167:21 | self | | file://:0:0:0:0 | & | +| blanket_impl.rs:167:18:167:21 | self | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:167:18:167:21 | self | &T | blanket_impl.rs:160:5:162:5 | MyOtherFlag | | blanket_impl.rs:167:18:167:26 | self.flag | | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:171:15:184:5 | { ... } | | file://:0:0:0:0 | () | +| blanket_impl.rs:171:15:184:5 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:172:13:172:23 | my_try_flag | | blanket_impl.rs:138:5:140:5 | MyTryFlag | | blanket_impl.rs:172:27:172:50 | MyTryFlag {...} | | blanket_impl.rs:138:5:140:5 | MyTryFlag | | blanket_impl.rs:172:45:172:48 | true | | {EXTERNAL LOCATION} | bool | @@ -212,129 +212,129 @@ inferType | blanket_impl.rs:211:15:211:18 | SelfParam | | blanket_impl.rs:209:5:212:5 | Self [trait MyTrait4a] | | blanket_impl.rs:216:15:216:18 | SelfParam | | blanket_impl.rs:214:5:217:5 | Self [trait MyTrait4b] | | blanket_impl.rs:221:15:221:18 | SelfParam | | blanket_impl.rs:188:5:189:14 | S1 | -| blanket_impl.rs:221:21:221:22 | { ... } | | file://:0:0:0:0 | () | +| blanket_impl.rs:221:21:221:22 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:226:15:226:18 | SelfParam | | blanket_impl.rs:188:5:189:14 | S1 | -| blanket_impl.rs:226:21:226:22 | { ... } | | file://:0:0:0:0 | () | -| blanket_impl.rs:231:15:231:18 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:226:21:226:22 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:231:15:231:18 | SelfParam | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:231:15:231:18 | SelfParam | &T | blanket_impl.rs:229:10:229:27 | T | -| blanket_impl.rs:231:21:233:9 | { ... } | | file://:0:0:0:0 | () | -| blanket_impl.rs:232:13:232:16 | self | | file://:0:0:0:0 | & | +| blanket_impl.rs:231:21:233:9 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:232:13:232:16 | self | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:232:13:232:16 | self | &T | blanket_impl.rs:229:10:229:27 | T | -| blanket_impl.rs:232:13:232:21 | self.m1() | | file://:0:0:0:0 | () | -| blanket_impl.rs:238:15:238:18 | SelfParam | | file://:0:0:0:0 | & | -| blanket_impl.rs:238:15:238:18 | SelfParam | &T | file://:0:0:0:0 | & | +| blanket_impl.rs:232:13:232:21 | self.m1() | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:238:15:238:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:238:15:238:18 | SelfParam | &T | {EXTERNAL LOCATION} | & | | blanket_impl.rs:238:15:238:18 | SelfParam | &T.&T | blanket_impl.rs:188:5:189:14 | S1 | -| blanket_impl.rs:238:21:240:9 | { ... } | | file://:0:0:0:0 | () | -| blanket_impl.rs:239:13:239:16 | self | | file://:0:0:0:0 | & | -| blanket_impl.rs:239:13:239:16 | self | &T | file://:0:0:0:0 | & | +| blanket_impl.rs:238:21:240:9 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:239:13:239:16 | self | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:239:13:239:16 | self | &T | {EXTERNAL LOCATION} | & | | blanket_impl.rs:239:13:239:16 | self | &T.&T | blanket_impl.rs:188:5:189:14 | S1 | -| blanket_impl.rs:239:13:239:21 | self.m1() | | file://:0:0:0:0 | () | +| blanket_impl.rs:239:13:239:21 | self.m1() | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:245:15:245:18 | SelfParam | | blanket_impl.rs:243:10:243:20 | T | -| blanket_impl.rs:245:21:247:9 | { ... } | | file://:0:0:0:0 | () | +| blanket_impl.rs:245:21:247:9 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:246:13:246:16 | self | | blanket_impl.rs:243:10:243:20 | T | -| blanket_impl.rs:246:13:246:21 | self.m3() | | file://:0:0:0:0 | () | -| blanket_impl.rs:252:15:252:18 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:246:13:246:21 | self.m3() | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:252:15:252:18 | SelfParam | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:252:15:252:18 | SelfParam | &T | blanket_impl.rs:250:10:250:10 | T | -| blanket_impl.rs:252:21:252:22 | { ... } | | file://:0:0:0:0 | () | -| blanket_impl.rs:255:33:263:5 | { ... } | | file://:0:0:0:0 | () | -| blanket_impl.rs:256:13:256:14 | x1 | | file://:0:0:0:0 | () | +| blanket_impl.rs:252:21:252:22 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:255:33:263:5 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:256:13:256:14 | x1 | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:256:18:256:19 | S1 | | blanket_impl.rs:188:5:189:14 | S1 | -| blanket_impl.rs:256:18:256:24 | S1.m1() | | file://:0:0:0:0 | () | -| blanket_impl.rs:257:13:257:14 | x2 | | file://:0:0:0:0 | () | -| blanket_impl.rs:257:18:257:22 | (...) | | file://:0:0:0:0 | & | +| blanket_impl.rs:256:18:256:24 | S1.m1() | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:257:13:257:14 | x2 | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:257:18:257:22 | (...) | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:257:18:257:22 | (...) | &T | blanket_impl.rs:188:5:189:14 | S1 | -| blanket_impl.rs:257:18:257:27 | ... .m2() | | file://:0:0:0:0 | () | -| blanket_impl.rs:257:19:257:21 | &S1 | | file://:0:0:0:0 | & | +| blanket_impl.rs:257:18:257:27 | ... .m2() | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:257:19:257:21 | &S1 | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:257:19:257:21 | &S1 | &T | blanket_impl.rs:188:5:189:14 | S1 | | blanket_impl.rs:257:20:257:21 | S1 | | blanket_impl.rs:188:5:189:14 | S1 | -| blanket_impl.rs:258:13:258:14 | x3 | | file://:0:0:0:0 | () | -| blanket_impl.rs:258:18:258:23 | (...) | | file://:0:0:0:0 | & | -| blanket_impl.rs:258:18:258:23 | (...) | &T | file://:0:0:0:0 | & | +| blanket_impl.rs:258:13:258:14 | x3 | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:258:18:258:23 | (...) | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:258:18:258:23 | (...) | &T | {EXTERNAL LOCATION} | & | | blanket_impl.rs:258:18:258:23 | (...) | &T.&T | blanket_impl.rs:188:5:189:14 | S1 | -| blanket_impl.rs:258:18:258:28 | ... .m2() | | file://:0:0:0:0 | () | -| blanket_impl.rs:258:19:258:22 | &... | | file://:0:0:0:0 | & | -| blanket_impl.rs:258:19:258:22 | &... | &T | file://:0:0:0:0 | & | +| blanket_impl.rs:258:18:258:28 | ... .m2() | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:258:19:258:22 | &... | | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:258:19:258:22 | &... | &T | {EXTERNAL LOCATION} | & | | blanket_impl.rs:258:19:258:22 | &... | &T.&T | blanket_impl.rs:188:5:189:14 | S1 | -| blanket_impl.rs:258:20:258:22 | &S1 | | file://:0:0:0:0 | & | +| blanket_impl.rs:258:20:258:22 | &S1 | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:258:20:258:22 | &S1 | &T | blanket_impl.rs:188:5:189:14 | S1 | | blanket_impl.rs:258:21:258:22 | S1 | | blanket_impl.rs:188:5:189:14 | S1 | -| blanket_impl.rs:259:13:259:14 | x4 | | file://:0:0:0:0 | () | +| blanket_impl.rs:259:13:259:14 | x4 | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:259:18:259:19 | S1 | | blanket_impl.rs:188:5:189:14 | S1 | -| blanket_impl.rs:259:18:259:24 | S1.m4() | | file://:0:0:0:0 | () | -| blanket_impl.rs:260:13:260:14 | x5 | | file://:0:0:0:0 | () | -| blanket_impl.rs:260:18:260:22 | (...) | | file://:0:0:0:0 | & | +| blanket_impl.rs:259:18:259:24 | S1.m4() | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:260:13:260:14 | x5 | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:260:18:260:22 | (...) | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:260:18:260:22 | (...) | &T | blanket_impl.rs:188:5:189:14 | S1 | -| blanket_impl.rs:260:18:260:27 | ... .m4() | | file://:0:0:0:0 | () | -| blanket_impl.rs:260:19:260:21 | &S1 | | file://:0:0:0:0 | & | +| blanket_impl.rs:260:18:260:27 | ... .m4() | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:260:19:260:21 | &S1 | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:260:19:260:21 | &S1 | &T | blanket_impl.rs:188:5:189:14 | S1 | | blanket_impl.rs:260:20:260:21 | S1 | | blanket_impl.rs:188:5:189:14 | S1 | -| blanket_impl.rs:261:13:261:14 | x6 | | file://:0:0:0:0 | () | +| blanket_impl.rs:261:13:261:14 | x6 | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:261:18:261:19 | S2 | | blanket_impl.rs:191:5:192:14 | S2 | -| blanket_impl.rs:261:18:261:24 | S2.m4() | | file://:0:0:0:0 | () | -| blanket_impl.rs:262:13:262:14 | x7 | | file://:0:0:0:0 | () | -| blanket_impl.rs:262:18:262:22 | (...) | | file://:0:0:0:0 | & | +| blanket_impl.rs:261:18:261:24 | S2.m4() | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:262:13:262:14 | x7 | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:262:18:262:22 | (...) | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:262:18:262:22 | (...) | &T | blanket_impl.rs:191:5:192:14 | S2 | -| blanket_impl.rs:262:18:262:27 | ... .m4() | | file://:0:0:0:0 | () | -| blanket_impl.rs:262:19:262:21 | &S2 | | file://:0:0:0:0 | & | +| blanket_impl.rs:262:18:262:27 | ... .m4() | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:262:19:262:21 | &S2 | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:262:19:262:21 | &S2 | &T | blanket_impl.rs:191:5:192:14 | S2 | | blanket_impl.rs:262:20:262:21 | S2 | | blanket_impl.rs:191:5:192:14 | S2 | -| blanket_impl.rs:272:21:272:25 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:272:21:272:25 | SelfParam | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:272:21:272:25 | SelfParam | &T | blanket_impl.rs:271:5:274:5 | Self [trait Executor] | -| blanket_impl.rs:273:24:273:28 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:273:24:273:28 | SelfParam | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:273:24:273:28 | SelfParam | &T | blanket_impl.rs:271:5:274:5 | Self [trait Executor] | | blanket_impl.rs:273:31:273:35 | query | | blanket_impl.rs:273:21:273:21 | E | -| blanket_impl.rs:277:21:277:25 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:277:21:277:25 | SelfParam | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:277:21:277:25 | SelfParam | &T | blanket_impl.rs:276:10:276:22 | T | -| blanket_impl.rs:277:28:279:9 | { ... } | | file://:0:0:0:0 | () | -| blanket_impl.rs:278:22:278:41 | "Executor::execute1\\n" | | file://:0:0:0:0 | & | +| blanket_impl.rs:277:28:279:9 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:278:22:278:41 | "Executor::execute1\\n" | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:278:22:278:41 | "Executor::execute1\\n" | &T | {EXTERNAL LOCATION} | str | -| blanket_impl.rs:278:22:278:41 | ...::_print(...) | | file://:0:0:0:0 | () | -| blanket_impl.rs:278:22:278:41 | { ... } | | file://:0:0:0:0 | () | -| blanket_impl.rs:281:24:281:28 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:278:22:278:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:278:22:278:41 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:281:24:281:28 | SelfParam | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:281:24:281:28 | SelfParam | &T | blanket_impl.rs:276:10:276:22 | T | | blanket_impl.rs:281:31:281:36 | _query | | blanket_impl.rs:281:21:281:21 | E | -| blanket_impl.rs:281:42:283:9 | { ... } | | file://:0:0:0:0 | () | -| blanket_impl.rs:282:22:282:41 | "Executor::execute2\\n" | | file://:0:0:0:0 | & | +| blanket_impl.rs:281:42:283:9 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:282:22:282:41 | "Executor::execute2\\n" | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:282:22:282:41 | "Executor::execute2\\n" | &T | {EXTERNAL LOCATION} | str | -| blanket_impl.rs:282:22:282:41 | ...::_print(...) | | file://:0:0:0:0 | () | -| blanket_impl.rs:282:22:282:41 | { ... } | | file://:0:0:0:0 | () | -| blanket_impl.rs:290:16:300:5 | { ... } | | file://:0:0:0:0 | () | +| blanket_impl.rs:282:22:282:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:282:22:282:41 | { ... } | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:290:16:300:5 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:291:13:291:13 | c | | blanket_impl.rs:286:5:286:29 | MySqlConnection | | blanket_impl.rs:291:17:291:34 | MySqlConnection {...} | | blanket_impl.rs:286:5:286:29 | MySqlConnection | | blanket_impl.rs:293:9:293:9 | c | | blanket_impl.rs:286:5:286:29 | MySqlConnection | -| blanket_impl.rs:293:9:293:20 | c.execute1() | | file://:0:0:0:0 | () | -| blanket_impl.rs:294:9:294:37 | ...::execute1(...) | | file://:0:0:0:0 | () | -| blanket_impl.rs:294:35:294:36 | &c | | file://:0:0:0:0 | & | +| blanket_impl.rs:293:9:293:20 | c.execute1() | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:294:9:294:37 | ...::execute1(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:294:35:294:36 | &c | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:294:35:294:36 | &c | &T | blanket_impl.rs:286:5:286:29 | MySqlConnection | | blanket_impl.rs:294:36:294:36 | c | | blanket_impl.rs:286:5:286:29 | MySqlConnection | | blanket_impl.rs:296:9:296:9 | c | | blanket_impl.rs:286:5:286:29 | MySqlConnection | -| blanket_impl.rs:296:9:296:41 | c.execute2(...) | | file://:0:0:0:0 | () | -| blanket_impl.rs:296:20:296:40 | "SELECT * FROM users" | | file://:0:0:0:0 | & | +| blanket_impl.rs:296:9:296:41 | c.execute2(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:296:20:296:40 | "SELECT * FROM users" | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:296:20:296:40 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | | blanket_impl.rs:297:9:297:9 | c | | blanket_impl.rs:286:5:286:29 | MySqlConnection | -| blanket_impl.rs:297:9:297:49 | c.execute2(...) | | file://:0:0:0:0 | () | -| blanket_impl.rs:297:28:297:48 | "SELECT * FROM users" | | file://:0:0:0:0 | & | +| blanket_impl.rs:297:9:297:49 | c.execute2(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:297:28:297:48 | "SELECT * FROM users" | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:297:28:297:48 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | -| blanket_impl.rs:298:9:298:60 | ...::execute2(...) | | file://:0:0:0:0 | () | -| blanket_impl.rs:298:35:298:36 | &c | | file://:0:0:0:0 | & | +| blanket_impl.rs:298:9:298:60 | ...::execute2(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:298:35:298:36 | &c | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:298:35:298:36 | &c | &T | blanket_impl.rs:286:5:286:29 | MySqlConnection | | blanket_impl.rs:298:36:298:36 | c | | blanket_impl.rs:286:5:286:29 | MySqlConnection | -| blanket_impl.rs:298:39:298:59 | "SELECT * FROM users" | | file://:0:0:0:0 | & | +| blanket_impl.rs:298:39:298:59 | "SELECT * FROM users" | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:298:39:298:59 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | -| blanket_impl.rs:299:9:299:68 | ...::execute2::<...>(...) | | file://:0:0:0:0 | () | -| blanket_impl.rs:299:43:299:44 | &c | | file://:0:0:0:0 | & | +| blanket_impl.rs:299:9:299:68 | ...::execute2::<...>(...) | | {EXTERNAL LOCATION} | () | +| blanket_impl.rs:299:43:299:44 | &c | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:299:43:299:44 | &c | &T | blanket_impl.rs:286:5:286:29 | MySqlConnection | | blanket_impl.rs:299:44:299:44 | c | | blanket_impl.rs:286:5:286:29 | MySqlConnection | -| blanket_impl.rs:299:47:299:67 | "SELECT * FROM users" | | file://:0:0:0:0 | & | +| blanket_impl.rs:299:47:299:67 | "SELECT * FROM users" | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:299:47:299:67 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | -| closure.rs:4:19:31:5 | { ... } | | file://:0:0:0:0 | () | +| closure.rs:4:19:31:5 | { ... } | | {EXTERNAL LOCATION} | () | | closure.rs:6:13:6:22 | my_closure | | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:6:13:6:22 | my_closure | dyn(Args) | file://:0:0:0:0 | (T_2) | +| closure.rs:6:13:6:22 | my_closure | dyn(Args) | {EXTERNAL LOCATION} | (T_2) | | closure.rs:6:13:6:22 | my_closure | dyn(Args).0(2) | {EXTERNAL LOCATION} | bool | | closure.rs:6:13:6:22 | my_closure | dyn(Args).1(2) | {EXTERNAL LOCATION} | bool | | closure.rs:6:13:6:22 | my_closure | dyn(Output) | {EXTERNAL LOCATION} | bool | | closure.rs:6:26:6:38 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:6:26:6:38 | \|...\| ... | dyn(Args) | file://:0:0:0:0 | (T_2) | +| closure.rs:6:26:6:38 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_2) | | closure.rs:6:26:6:38 | \|...\| ... | dyn(Args).0(2) | {EXTERNAL LOCATION} | bool | | closure.rs:6:26:6:38 | \|...\| ... | dyn(Args).1(2) | {EXTERNAL LOCATION} | bool | | closure.rs:6:26:6:38 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | bool | @@ -346,11 +346,11 @@ inferType | closure.rs:8:13:8:13 | x | | {EXTERNAL LOCATION} | i64 | | closure.rs:8:22:8:25 | 1i64 | | {EXTERNAL LOCATION} | i64 | | closure.rs:9:13:9:19 | add_one | | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:9:13:9:19 | add_one | dyn(Args) | file://:0:0:0:0 | (T_1) | +| closure.rs:9:13:9:19 | add_one | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:9:13:9:19 | add_one | dyn(Args).0(1) | {EXTERNAL LOCATION} | i64 | | closure.rs:9:13:9:19 | add_one | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:9:23:9:34 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:9:23:9:34 | \|...\| ... | dyn(Args) | file://:0:0:0:0 | (T_1) | +| closure.rs:9:23:9:34 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:9:23:9:34 | \|...\| ... | dyn(Args).0(1) | {EXTERNAL LOCATION} | i64 | | closure.rs:9:23:9:34 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:9:24:9:24 | n | | {EXTERNAL LOCATION} | i64 | @@ -359,7 +359,7 @@ inferType | closure.rs:9:31:9:34 | 1i64 | | {EXTERNAL LOCATION} | i64 | | closure.rs:10:13:10:14 | _y | | {EXTERNAL LOCATION} | i64 | | closure.rs:10:18:10:24 | add_one | | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:10:18:10:24 | add_one | dyn(Args) | file://:0:0:0:0 | (T_1) | +| closure.rs:10:18:10:24 | add_one | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:10:18:10:24 | add_one | dyn(Args).0(1) | {EXTERNAL LOCATION} | i64 | | closure.rs:10:18:10:24 | add_one | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:10:18:10:27 | add_one(...) | | {EXTERNAL LOCATION} | i64 | @@ -367,55 +367,55 @@ inferType | closure.rs:13:13:13:13 | x | | {EXTERNAL LOCATION} | i64 | | closure.rs:13:17:13:34 | ...::default(...) | | {EXTERNAL LOCATION} | i64 | | closure.rs:14:13:14:20 | add_zero | | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:14:13:14:20 | add_zero | dyn(Args) | file://:0:0:0:0 | (T_1) | +| closure.rs:14:13:14:20 | add_zero | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:14:13:14:20 | add_zero | dyn(Args).0(1) | {EXTERNAL LOCATION} | i64 | | closure.rs:14:13:14:20 | add_zero | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:14:24:14:33 | \|...\| n | | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:14:24:14:33 | \|...\| n | dyn(Args) | file://:0:0:0:0 | (T_1) | +| closure.rs:14:24:14:33 | \|...\| n | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:14:24:14:33 | \|...\| n | dyn(Args).0(1) | {EXTERNAL LOCATION} | i64 | | closure.rs:14:24:14:33 | \|...\| n | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:14:25:14:25 | n | | {EXTERNAL LOCATION} | i64 | | closure.rs:14:33:14:33 | n | | {EXTERNAL LOCATION} | i64 | | closure.rs:15:13:15:14 | _y | | {EXTERNAL LOCATION} | i64 | | closure.rs:15:18:15:25 | add_zero | | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:15:18:15:25 | add_zero | dyn(Args) | file://:0:0:0:0 | (T_1) | +| closure.rs:15:18:15:25 | add_zero | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:15:18:15:25 | add_zero | dyn(Args).0(1) | {EXTERNAL LOCATION} | i64 | | closure.rs:15:18:15:25 | add_zero | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:15:18:15:28 | add_zero(...) | | {EXTERNAL LOCATION} | i64 | | closure.rs:15:27:15:27 | x | | {EXTERNAL LOCATION} | i64 | | closure.rs:17:13:17:21 | _get_bool | | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:17:13:17:21 | _get_bool | dyn(Args) | file://:0:0:0:0 | () | +| closure.rs:17:13:17:21 | _get_bool | dyn(Args) | {EXTERNAL LOCATION} | () | | closure.rs:17:13:17:21 | _get_bool | dyn(Output) | {EXTERNAL LOCATION} | bool | | closure.rs:17:25:21:9 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:17:25:21:9 | \|...\| ... | dyn(Args) | file://:0:0:0:0 | () | +| closure.rs:17:25:21:9 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | () | | closure.rs:17:25:21:9 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | bool | | closure.rs:17:36:21:9 | { ... } | | {EXTERNAL LOCATION} | bool | | closure.rs:19:17:19:17 | b | | {EXTERNAL LOCATION} | bool | | closure.rs:19:21:19:38 | ...::default(...) | | {EXTERNAL LOCATION} | bool | | closure.rs:20:13:20:13 | b | | {EXTERNAL LOCATION} | bool | | closure.rs:24:13:24:14 | id | | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:24:13:24:14 | id | dyn(Args) | file://:0:0:0:0 | (T_1) | +| closure.rs:24:13:24:14 | id | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:24:13:24:14 | id | dyn(Args).0(1) | {EXTERNAL LOCATION} | bool | | closure.rs:24:13:24:14 | id | dyn(Output) | {EXTERNAL LOCATION} | bool | | closure.rs:24:18:24:22 | \|...\| b | | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:24:18:24:22 | \|...\| b | dyn(Args) | file://:0:0:0:0 | (T_1) | +| closure.rs:24:18:24:22 | \|...\| b | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:24:18:24:22 | \|...\| b | dyn(Args).0(1) | {EXTERNAL LOCATION} | bool | | closure.rs:24:18:24:22 | \|...\| b | dyn(Output) | {EXTERNAL LOCATION} | bool | | closure.rs:24:19:24:19 | b | | {EXTERNAL LOCATION} | bool | | closure.rs:24:22:24:22 | b | | {EXTERNAL LOCATION} | bool | | closure.rs:25:13:25:14 | _b | | {EXTERNAL LOCATION} | bool | | closure.rs:25:18:25:19 | id | | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:25:18:25:19 | id | dyn(Args) | file://:0:0:0:0 | (T_1) | +| closure.rs:25:18:25:19 | id | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:25:18:25:19 | id | dyn(Args).0(1) | {EXTERNAL LOCATION} | bool | | closure.rs:25:18:25:19 | id | dyn(Output) | {EXTERNAL LOCATION} | bool | | closure.rs:25:18:25:25 | id(...) | | {EXTERNAL LOCATION} | bool | | closure.rs:25:21:25:24 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:28:13:28:15 | id2 | | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:28:13:28:15 | id2 | dyn(Args) | file://:0:0:0:0 | (T_1) | +| closure.rs:28:13:28:15 | id2 | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:28:13:28:15 | id2 | dyn(Args).0(1) | {EXTERNAL LOCATION} | bool | | closure.rs:28:13:28:15 | id2 | dyn(Output) | {EXTERNAL LOCATION} | bool | | closure.rs:28:19:28:23 | \|...\| b | | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:28:19:28:23 | \|...\| b | dyn(Args) | file://:0:0:0:0 | (T_1) | +| closure.rs:28:19:28:23 | \|...\| b | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:28:19:28:23 | \|...\| b | dyn(Args).0(1) | {EXTERNAL LOCATION} | bool | | closure.rs:28:19:28:23 | \|...\| b | dyn(Output) | {EXTERNAL LOCATION} | bool | | closure.rs:28:20:28:20 | b | | {EXTERNAL LOCATION} | bool | @@ -424,19 +424,19 @@ inferType | closure.rs:29:19:29:36 | ...::default(...) | | {EXTERNAL LOCATION} | bool | | closure.rs:30:13:30:15 | _b2 | | {EXTERNAL LOCATION} | bool | | closure.rs:30:25:30:27 | id2 | | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:30:25:30:27 | id2 | dyn(Args) | file://:0:0:0:0 | (T_1) | +| closure.rs:30:25:30:27 | id2 | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:30:25:30:27 | id2 | dyn(Args).0(1) | {EXTERNAL LOCATION} | bool | | closure.rs:30:25:30:27 | id2 | dyn(Output) | {EXTERNAL LOCATION} | bool | | closure.rs:30:25:30:32 | id2(...) | | {EXTERNAL LOCATION} | bool | | closure.rs:30:29:30:31 | arg | | {EXTERNAL LOCATION} | bool | | closure.rs:35:44:35:44 | f | | closure.rs:35:20:35:41 | F | -| closure.rs:35:50:37:5 | { ... } | | file://:0:0:0:0 | () | +| closure.rs:35:50:37:5 | { ... } | | {EXTERNAL LOCATION} | () | | closure.rs:36:13:36:19 | _return | | {EXTERNAL LOCATION} | i64 | | closure.rs:36:23:36:23 | f | | closure.rs:35:20:35:41 | F | | closure.rs:36:23:36:29 | f(...) | | {EXTERNAL LOCATION} | i64 | | closure.rs:36:25:36:28 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:39:46:39:46 | f | | closure.rs:39:22:39:43 | F | -| closure.rs:39:52:42:5 | { ... } | | file://:0:0:0:0 | () | +| closure.rs:39:52:42:5 | { ... } | | {EXTERNAL LOCATION} | () | | closure.rs:40:13:40:15 | arg | | {EXTERNAL LOCATION} | bool | | closure.rs:40:19:40:36 | ...::default(...) | | {EXTERNAL LOCATION} | bool | | closure.rs:41:9:41:9 | f | | closure.rs:39:22:39:43 | F | @@ -454,14 +454,14 @@ inferType | closure.rs:49:9:49:12 | f(...) | | {EXTERNAL LOCATION} | i64 | | closure.rs:49:11:49:11 | 2 | | {EXTERNAL LOCATION} | i32 | | closure.rs:49:11:49:11 | 2 | | {EXTERNAL LOCATION} | i64 | -| closure.rs:52:15:64:5 | { ... } | | file://:0:0:0:0 | () | +| closure.rs:52:15:64:5 | { ... } | | {EXTERNAL LOCATION} | () | | closure.rs:53:13:53:13 | f | | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:53:13:53:13 | f | dyn(Args) | file://:0:0:0:0 | (T_1) | +| closure.rs:53:13:53:13 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:53:13:53:13 | f | dyn(Args).0(1) | {EXTERNAL LOCATION} | bool | | closure.rs:53:13:53:13 | f | dyn(Output) | {EXTERNAL LOCATION} | i32 | | closure.rs:53:13:53:13 | f | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:53:17:59:9 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:53:17:59:9 | \|...\| ... | dyn(Args) | file://:0:0:0:0 | (T_1) | +| closure.rs:53:17:59:9 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:53:17:59:9 | \|...\| ... | dyn(Args).0(1) | {EXTERNAL LOCATION} | bool | | closure.rs:53:17:59:9 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | i32 | | closure.rs:53:17:59:9 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | i64 | @@ -484,20 +484,20 @@ inferType | closure.rs:60:18:60:31 | apply(...) | | {EXTERNAL LOCATION} | i32 | | closure.rs:60:18:60:31 | apply(...) | | {EXTERNAL LOCATION} | i64 | | closure.rs:60:24:60:24 | f | | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:60:24:60:24 | f | dyn(Args) | file://:0:0:0:0 | (T_1) | +| closure.rs:60:24:60:24 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:60:24:60:24 | f | dyn(Args).0(1) | {EXTERNAL LOCATION} | bool | | closure.rs:60:24:60:24 | f | dyn(Output) | {EXTERNAL LOCATION} | i32 | | closure.rs:60:24:60:24 | f | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:60:27:60:30 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:62:13:62:13 | f | | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:62:13:62:13 | f | dyn(Args) | file://:0:0:0:0 | (T_1) | +| closure.rs:62:13:62:13 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:62:17:62:25 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:62:17:62:25 | \|...\| ... | dyn(Args) | file://:0:0:0:0 | (T_1) | +| closure.rs:62:17:62:25 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:62:25:62:25 | 1 | | {EXTERNAL LOCATION} | i32 | | closure.rs:63:13:63:15 | _r2 | | {EXTERNAL LOCATION} | i64 | | closure.rs:63:19:63:30 | apply_two(...) | | {EXTERNAL LOCATION} | i64 | | closure.rs:63:29:63:29 | f | | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:63:29:63:29 | f | dyn(Args) | file://:0:0:0:0 | (T_1) | +| closure.rs:63:29:63:29 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:68:54:68:54 | f | | {EXTERNAL LOCATION} | Box | | closure.rs:68:54:68:54 | f | A | {EXTERNAL LOCATION} | Global | | closure.rs:68:54:68:54 | f | T | closure.rs:68:26:68:51 | F | @@ -511,17 +511,17 @@ inferType | closure.rs:72:30:72:30 | f | | {EXTERNAL LOCATION} | Box | | closure.rs:72:30:72:30 | f | A | {EXTERNAL LOCATION} | Global | | closure.rs:72:30:72:30 | f | T | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:72:30:72:30 | f | T.dyn(Args) | file://:0:0:0:0 | (T_1) | +| closure.rs:72:30:72:30 | f | T.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:72:30:72:30 | f | T.dyn(Args).0(1) | closure.rs:72:24:72:24 | A | | closure.rs:72:30:72:30 | f | T.dyn(Output) | closure.rs:72:27:72:27 | B | | closure.rs:72:58:72:60 | arg | | closure.rs:72:24:72:24 | A | -| closure.rs:72:66:75:5 | { ... } | | file://:0:0:0:0 | () | +| closure.rs:72:66:75:5 | { ... } | | {EXTERNAL LOCATION} | () | | closure.rs:73:13:73:15 | _r1 | | closure.rs:72:27:72:27 | B | | closure.rs:73:19:73:37 | apply_boxed(...) | | closure.rs:72:27:72:27 | B | | closure.rs:73:31:73:31 | f | | {EXTERNAL LOCATION} | Box | | closure.rs:73:31:73:31 | f | A | {EXTERNAL LOCATION} | Global | | closure.rs:73:31:73:31 | f | T | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:73:31:73:31 | f | T.dyn(Args) | file://:0:0:0:0 | (T_1) | +| closure.rs:73:31:73:31 | f | T.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:73:31:73:31 | f | T.dyn(Args).0(1) | closure.rs:72:24:72:24 | A | | closure.rs:73:31:73:31 | f | T.dyn(Output) | closure.rs:72:27:72:27 | B | | closure.rs:73:34:73:36 | arg | | closure.rs:72:24:72:24 | A | @@ -530,55 +530,55 @@ inferType | closure.rs:74:31:74:53 | ...::new(...) | | {EXTERNAL LOCATION} | Box | | closure.rs:74:31:74:53 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | closure.rs:74:31:74:53 | ...::new(...) | T | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:74:31:74:53 | ...::new(...) | T.dyn(Args) | file://:0:0:0:0 | (T_1) | +| closure.rs:74:31:74:53 | ...::new(...) | T.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:74:31:74:53 | ...::new(...) | T.dyn(Args).0(1) | {EXTERNAL LOCATION} | i64 | | closure.rs:74:31:74:53 | ...::new(...) | T.dyn(Output) | {EXTERNAL LOCATION} | bool | | closure.rs:74:40:74:52 | \|...\| true | | {EXTERNAL LOCATION} | dyn FnOnce | -| closure.rs:74:40:74:52 | \|...\| true | dyn(Args) | file://:0:0:0:0 | (T_1) | +| closure.rs:74:40:74:52 | \|...\| true | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:74:40:74:52 | \|...\| true | dyn(Args).0(1) | {EXTERNAL LOCATION} | i64 | | closure.rs:74:40:74:52 | \|...\| true | dyn(Output) | {EXTERNAL LOCATION} | bool | | closure.rs:74:41:74:41 | _ | | {EXTERNAL LOCATION} | i64 | | closure.rs:74:49:74:52 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:74:56:74:56 | 3 | | {EXTERNAL LOCATION} | i32 | -| dereference.rs:12:14:12:18 | SelfParam | | file://:0:0:0:0 | & | +| dereference.rs:12:14:12:18 | SelfParam | | {EXTERNAL LOCATION} | & | | 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 | { ... } | | {EXTERNAL LOCATION} | & | | 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 | &... | | {EXTERNAL LOCATION} | & | | 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 | | {EXTERNAL LOCATION} | & | | 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 | | {EXTERNAL LOCATION} | & | | 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 | { ... } | | {EXTERNAL LOCATION} | & | | 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 | &... | | {EXTERNAL LOCATION} | & | | 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 | | {EXTERNAL LOCATION} | & | | 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:33:12:33:16 | SelfParam | | file://:0:0:0:0 | & | +| dereference.rs:33:12:33:16 | SelfParam | | {EXTERNAL LOCATION} | & | | dereference.rs:33:12:33:16 | SelfParam | &T | dereference.rs:30:1:30:15 | S | | dereference.rs:33:12:33:16 | SelfParam | &T.T | dereference.rs:32:6:32:6 | T | -| dereference.rs:33:25:35:5 | { ... } | | file://:0:0:0:0 | & | +| dereference.rs:33:25:35:5 | { ... } | | {EXTERNAL LOCATION} | & | | dereference.rs:33:25:35:5 | { ... } | &T | dereference.rs:32:6:32:6 | T | -| dereference.rs:34:9:34:15 | &... | | file://:0:0:0:0 | & | +| dereference.rs:34:9:34:15 | &... | | {EXTERNAL LOCATION} | & | | dereference.rs:34:9:34:15 | &... | &T | dereference.rs:32:6:32:6 | T | -| dereference.rs:34:10:34:13 | self | | file://:0:0:0:0 | & | +| dereference.rs:34:10:34:13 | self | | {EXTERNAL LOCATION} | & | | dereference.rs:34:10:34:13 | self | &T | dereference.rs:30:1:30:15 | S | | dereference.rs:34:10:34:13 | self | &T.T | dereference.rs:32:6:32:6 | T | | dereference.rs:34:10:34:15 | self.0 | | dereference.rs:32:6:32:6 | T | -| dereference.rs:38:39:50:1 | { ... } | | file://:0:0:0:0 | () | +| dereference.rs:38:39:50:1 | { ... } | | {EXTERNAL LOCATION} | () | | dereference.rs:40:9:40:10 | a1 | | 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 | _b1 | | file://:0:0:0:0 | & | +| dereference.rs:41:9:41:11 | _b1 | | {EXTERNAL LOCATION} | & | | dereference.rs:41:9:41:11 | _b1 | &T | {EXTERNAL LOCATION} | i64 | | dereference.rs:41:15:41:16 | a1 | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:41:15:41:24 | a1.deref() | | file://:0:0:0:0 | & | +| dereference.rs:41:15:41:24 | a1.deref() | | {EXTERNAL LOCATION} | & | | dereference.rs:41:15:41:24 | a1.deref() | &T | {EXTERNAL LOCATION} | i64 | | dereference.rs:44:9:44:10 | a2 | | dereference.rs:4:1:6:1 | MyIntPointer | | dereference.rs:44:14:44:42 | MyIntPointer {...} | | dereference.rs:4:1:6:1 | MyIntPointer | @@ -594,17 +594,17 @@ inferType | dereference.rs:49:15:49:33 | ... .is_positive() | | {EXTERNAL LOCATION} | bool | | dereference.rs:49:16:49:18 | * ... | | {EXTERNAL LOCATION} | i64 | | dereference.rs:49:17:49:18 | a3 | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:52:39:64:1 | { ... } | | file://:0:0:0:0 | () | +| dereference.rs:52:39:64:1 | { ... } | | {EXTERNAL LOCATION} | () | | dereference.rs:54:9:54:10 | c1 | | dereference.rs:17:1:19:1 | MySmartPointer | | dereference.rs:54:9:54:10 | c1 | T | {EXTERNAL LOCATION} | char | | dereference.rs:54:14:54:42 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | | dereference.rs:54:14:54:42 | MySmartPointer {...} | T | {EXTERNAL LOCATION} | char | | dereference.rs:54:38:54:40 | 'a' | | {EXTERNAL LOCATION} | char | -| dereference.rs:55:9:55:11 | _d1 | | file://:0:0:0:0 | & | +| dereference.rs:55:9:55:11 | _d1 | | {EXTERNAL LOCATION} | & | | dereference.rs:55:9:55:11 | _d1 | &T | {EXTERNAL LOCATION} | char | | dereference.rs:55:15:55:16 | c1 | | dereference.rs:17:1:19:1 | MySmartPointer | | dereference.rs:55:15:55:16 | c1 | T | {EXTERNAL LOCATION} | char | -| dereference.rs:55:15:55:24 | c1.deref() | | file://:0:0:0:0 | & | +| dereference.rs:55:15:55:24 | c1.deref() | | {EXTERNAL LOCATION} | & | | dereference.rs:55:15:55:24 | c1.deref() | &T | {EXTERNAL LOCATION} | char | | dereference.rs:58:9:58:10 | c2 | | dereference.rs:17:1:19:1 | MySmartPointer | | dereference.rs:58:9:58:10 | c2 | T | {EXTERNAL LOCATION} | char | @@ -626,39 +626,39 @@ inferType | dereference.rs:63:16:63:18 | * ... | | {EXTERNAL LOCATION} | i64 | | dereference.rs:63:17:63:18 | c3 | | dereference.rs:17:1:19:1 | MySmartPointer | | dereference.rs:63:17:63:18 | c3 | T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:66:31:78:1 | { ... } | | file://:0:0:0:0 | () | -| dereference.rs:68:9:68:10 | e1 | | file://:0:0:0:0 | & | +| dereference.rs:66:31:78:1 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:68:9:68:10 | e1 | | {EXTERNAL LOCATION} | & | | dereference.rs:68:9:68:10 | e1 | &T | {EXTERNAL LOCATION} | char | -| dereference.rs:68:14:68:17 | &'a' | | file://:0:0:0:0 | & | +| dereference.rs:68:14:68:17 | &'a' | | {EXTERNAL LOCATION} | & | | dereference.rs:68:14:68:17 | &'a' | &T | {EXTERNAL LOCATION} | char | | dereference.rs:68:15:68:17 | 'a' | | {EXTERNAL LOCATION} | char | -| dereference.rs:69:9:69:11 | _f1 | | file://:0:0:0:0 | & | +| dereference.rs:69:9:69:11 | _f1 | | {EXTERNAL LOCATION} | & | | dereference.rs:69:9:69:11 | _f1 | &T | {EXTERNAL LOCATION} | char | -| dereference.rs:69:15:69:16 | e1 | | file://:0:0:0:0 | & | +| dereference.rs:69:15:69:16 | e1 | | {EXTERNAL LOCATION} | & | | dereference.rs:69:15:69:16 | e1 | &T | {EXTERNAL LOCATION} | char | -| dereference.rs:69:15:69:24 | e1.deref() | | file://:0:0:0:0 | & | +| dereference.rs:69:15:69:24 | e1.deref() | | {EXTERNAL LOCATION} | & | | dereference.rs:69:15:69:24 | e1.deref() | &T | {EXTERNAL LOCATION} | char | -| dereference.rs:72:9:72:10 | e2 | | file://:0:0:0:0 | & | +| dereference.rs:72:9:72:10 | e2 | | {EXTERNAL LOCATION} | & | | dereference.rs:72:9:72:10 | e2 | &T | {EXTERNAL LOCATION} | char | -| dereference.rs:72:14:72:17 | &'a' | | file://:0:0:0:0 | & | +| dereference.rs:72:14:72:17 | &'a' | | {EXTERNAL LOCATION} | & | | dereference.rs:72:14:72:17 | &'a' | &T | {EXTERNAL LOCATION} | char | | dereference.rs:72:15:72:17 | 'a' | | {EXTERNAL LOCATION} | char | | dereference.rs:73:9:73:11 | _f2 | | {EXTERNAL LOCATION} | char | | dereference.rs:73:15:73:17 | * ... | | {EXTERNAL LOCATION} | char | -| dereference.rs:73:16:73:17 | e2 | | file://:0:0:0:0 | & | +| dereference.rs:73:16:73:17 | e2 | | {EXTERNAL LOCATION} | & | | dereference.rs:73:16:73:17 | e2 | &T | {EXTERNAL LOCATION} | char | -| dereference.rs:76:9:76:10 | e3 | | file://:0:0:0:0 | & | +| dereference.rs:76:9:76:10 | e3 | | {EXTERNAL LOCATION} | & | | dereference.rs:76:9:76:10 | e3 | &T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:76:14:76:19 | &34i64 | | file://:0:0:0:0 | & | +| dereference.rs:76:14:76:19 | &34i64 | | {EXTERNAL LOCATION} | & | | dereference.rs:76:14:76:19 | &34i64 | &T | {EXTERNAL LOCATION} | i64 | | dereference.rs:76:15:76:19 | 34i64 | | {EXTERNAL LOCATION} | i64 | | dereference.rs:77:9:77:11 | _f3 | | {EXTERNAL LOCATION} | bool | | dereference.rs:77:15:77:19 | (...) | | {EXTERNAL LOCATION} | i64 | | dereference.rs:77:15:77:33 | ... .is_positive() | | {EXTERNAL LOCATION} | bool | | dereference.rs:77:16:77:18 | * ... | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:77:17:77:18 | e3 | | file://:0:0:0:0 | & | +| dereference.rs:77:17:77:18 | e3 | | {EXTERNAL LOCATION} | & | | dereference.rs:77:17:77:18 | e3 | &T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:80:31:92:1 | { ... } | | file://:0:0:0:0 | () | +| dereference.rs:80:31:92:1 | { ... } | | {EXTERNAL LOCATION} | () | | dereference.rs:82:9:82:10 | g1 | | {EXTERNAL LOCATION} | Box | | dereference.rs:82:9:82:10 | g1 | A | {EXTERNAL LOCATION} | Global | | dereference.rs:82:9:82:10 | g1 | T | {EXTERNAL LOCATION} | char | @@ -666,12 +666,12 @@ inferType | dereference.rs:82:25:82:37 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | dereference.rs:82:25:82:37 | ...::new(...) | T | {EXTERNAL LOCATION} | char | | dereference.rs:82:34:82:36 | 'a' | | {EXTERNAL LOCATION} | char | -| dereference.rs:83:9:83:11 | _h1 | | file://:0:0:0:0 | & | +| dereference.rs:83:9:83:11 | _h1 | | {EXTERNAL LOCATION} | & | | dereference.rs:83:9:83:11 | _h1 | &T | {EXTERNAL LOCATION} | char | | dereference.rs:83:15:83:16 | g1 | | {EXTERNAL LOCATION} | Box | | dereference.rs:83:15:83:16 | g1 | A | {EXTERNAL LOCATION} | Global | | dereference.rs:83:15:83:16 | g1 | T | {EXTERNAL LOCATION} | char | -| dereference.rs:83:15:83:24 | g1.deref() | | file://:0:0:0:0 | & | +| dereference.rs:83:15:83:24 | g1.deref() | | {EXTERNAL LOCATION} | & | | dereference.rs:83:15:83:24 | g1.deref() | &T | {EXTERNAL LOCATION} | char | | dereference.rs:86:9:86:10 | g2 | | {EXTERNAL LOCATION} | Box | | dereference.rs:86:9:86:10 | g2 | A | {EXTERNAL LOCATION} | Global | @@ -699,7 +699,7 @@ inferType | dereference.rs:91:17:91:18 | g3 | | {EXTERNAL LOCATION} | Box | | dereference.rs:91:17:91:18 | g3 | A | {EXTERNAL LOCATION} | Global | | dereference.rs:91:17:91:18 | g3 | T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:94:27:105:1 | { ... } | | file://:0:0:0:0 | () | +| dereference.rs:94:27:105:1 | { ... } | | {EXTERNAL LOCATION} | () | | dereference.rs:96:9:96:9 | x | | dereference.rs:4:1:6:1 | MyIntPointer | | dereference.rs:96:13:96:41 | MyIntPointer {...} | | dereference.rs:4:1:6:1 | MyIntPointer | | dereference.rs:96:35:96:39 | 34i64 | | {EXTERNAL LOCATION} | i64 | @@ -723,88 +723,88 @@ inferType | dereference.rs:104:14:104:14 | z | | dereference.rs:17:1:19:1 | MySmartPointer | | dereference.rs:104:14:104:14 | z | T | dereference.rs:30:1:30:15 | S | | dereference.rs:104:14:104:14 | z | T.T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:131:19:139:5 | { ... } | | file://:0:0:0:0 | () | +| dereference.rs:131:19:139:5 | { ... } | | {EXTERNAL LOCATION} | () | | dereference.rs:132:17:132:26 | key_to_key | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:132:17:132:26 | key_to_key | K | file://:0:0:0:0 | & | +| dereference.rs:132:17:132:26 | key_to_key | K | {EXTERNAL LOCATION} | & | | dereference.rs:132:17:132:26 | key_to_key | K.&T | dereference.rs:110:5:111:21 | Key | | dereference.rs:132:17:132:26 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | -| dereference.rs:132:17:132:26 | key_to_key | V | file://:0:0:0:0 | & | +| dereference.rs:132:17:132:26 | key_to_key | V | {EXTERNAL LOCATION} | & | | dereference.rs:132:17:132:26 | key_to_key | V.&T | dereference.rs:110:5:111:21 | Key | | dereference.rs:132:30:132:57 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:132:30:132:57 | ...::new(...) | K | file://:0:0:0:0 | & | +| dereference.rs:132:30:132:57 | ...::new(...) | K | {EXTERNAL LOCATION} | & | | dereference.rs:132:30:132:57 | ...::new(...) | K.&T | dereference.rs:110:5:111:21 | Key | | dereference.rs:132:30:132:57 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | -| dereference.rs:132:30:132:57 | ...::new(...) | V | file://:0:0:0:0 | & | +| dereference.rs:132:30:132:57 | ...::new(...) | V | {EXTERNAL LOCATION} | & | | dereference.rs:132:30:132:57 | ...::new(...) | V.&T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:133:17:133:19 | key | | file://:0:0:0:0 | & | +| dereference.rs:133:17:133:19 | key | | {EXTERNAL LOCATION} | & | | dereference.rs:133:17:133:19 | key | &T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:133:17:133:19 | key | &T | file://:0:0:0:0 | & | +| dereference.rs:133:17:133:19 | key | &T | {EXTERNAL LOCATION} | & | | dereference.rs:133:17:133:19 | key | &T.&T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:133:23:133:29 | &... | | file://:0:0:0:0 | & | +| dereference.rs:133:23:133:29 | &... | | {EXTERNAL LOCATION} | & | | dereference.rs:133:23:133:29 | &... | &T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:133:23:133:29 | &... | &T | file://:0:0:0:0 | & | +| dereference.rs:133:23:133:29 | &... | &T | {EXTERNAL LOCATION} | & | | dereference.rs:133:23:133:29 | &... | &T.&T | dereference.rs:110:5:111:21 | Key | | dereference.rs:133:24:133:29 | Key {...} | | dereference.rs:110:5:111:21 | Key | -| dereference.rs:134:9:137:9 | if ... {...} | | file://:0:0:0:0 | () | +| dereference.rs:134:9:137:9 | if ... {...} | | {EXTERNAL LOCATION} | () | | dereference.rs:134:16:134:28 | Some(...) | | {EXTERNAL LOCATION} | Option | -| dereference.rs:134:16:134:28 | Some(...) | T | file://:0:0:0:0 | & | +| dereference.rs:134:16:134:28 | Some(...) | T | {EXTERNAL LOCATION} | & | | dereference.rs:134:16:134:28 | Some(...) | T.&T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:134:16:134:28 | Some(...) | T.&T | file://:0:0:0:0 | & | +| dereference.rs:134:16:134:28 | Some(...) | T.&T | {EXTERNAL LOCATION} | & | | dereference.rs:134:16:134:28 | Some(...) | T.&T.&T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:134:21:134:27 | ref_key | | file://:0:0:0:0 | & | +| dereference.rs:134:21:134:27 | ref_key | | {EXTERNAL LOCATION} | & | | dereference.rs:134:21:134:27 | ref_key | &T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:134:21:134:27 | ref_key | &T | file://:0:0:0:0 | & | +| dereference.rs:134:21:134:27 | ref_key | &T | {EXTERNAL LOCATION} | & | | dereference.rs:134:21:134:27 | ref_key | &T.&T | dereference.rs:110:5:111:21 | Key | | dereference.rs:134:32:134:41 | key_to_key | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:134:32:134:41 | key_to_key | K | file://:0:0:0:0 | & | +| dereference.rs:134:32:134:41 | key_to_key | K | {EXTERNAL LOCATION} | & | | dereference.rs:134:32:134:41 | key_to_key | K.&T | dereference.rs:110:5:111:21 | Key | | dereference.rs:134:32:134:41 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | -| dereference.rs:134:32:134:41 | key_to_key | V | file://:0:0:0:0 | & | +| dereference.rs:134:32:134:41 | key_to_key | V | {EXTERNAL LOCATION} | & | | dereference.rs:134:32:134:41 | key_to_key | V.&T | dereference.rs:110:5:111:21 | Key | | dereference.rs:134:32:134:50 | key_to_key.get(...) | | {EXTERNAL LOCATION} | Option | -| dereference.rs:134:32:134:50 | key_to_key.get(...) | T | file://:0:0:0:0 | & | +| dereference.rs:134:32:134:50 | key_to_key.get(...) | T | {EXTERNAL LOCATION} | & | | dereference.rs:134:32:134:50 | key_to_key.get(...) | T.&T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:134:32:134:50 | key_to_key.get(...) | T.&T | file://:0:0:0:0 | & | +| dereference.rs:134:32:134:50 | key_to_key.get(...) | T.&T | {EXTERNAL LOCATION} | & | | dereference.rs:134:32:134:50 | key_to_key.get(...) | T.&T.&T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:134:47:134:49 | key | | file://:0:0:0:0 | & | +| dereference.rs:134:47:134:49 | key | | {EXTERNAL LOCATION} | & | | dereference.rs:134:47:134:49 | key | &T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:134:47:134:49 | key | &T | file://:0:0:0:0 | & | +| dereference.rs:134:47:134:49 | key | &T | {EXTERNAL LOCATION} | & | | dereference.rs:134:47:134:49 | key | &T.&T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:134:52:137:9 | { ... } | | file://:0:0:0:0 | () | -| dereference.rs:136:13:136:15 | key | | file://:0:0:0:0 | & | +| dereference.rs:134:52:137:9 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:136:13:136:15 | key | | {EXTERNAL LOCATION} | & | | dereference.rs:136:13:136:15 | key | &T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:136:13:136:15 | key | &T | file://:0:0:0:0 | & | +| dereference.rs:136:13:136:15 | key | &T | {EXTERNAL LOCATION} | & | | dereference.rs:136:13:136:15 | key | &T.&T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:136:13:136:25 | ... = ... | | file://:0:0:0:0 | () | -| dereference.rs:136:19:136:25 | ref_key | | file://:0:0:0:0 | & | +| dereference.rs:136:13:136:25 | ... = ... | | {EXTERNAL LOCATION} | () | +| dereference.rs:136:19:136:25 | ref_key | | {EXTERNAL LOCATION} | & | | dereference.rs:136:19:136:25 | ref_key | &T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:136:19:136:25 | ref_key | &T | file://:0:0:0:0 | & | +| dereference.rs:136:19:136:25 | ref_key | &T | {EXTERNAL LOCATION} | & | | dereference.rs:136:19:136:25 | ref_key | &T.&T | dereference.rs:110:5:111:21 | Key | | dereference.rs:138:9:138:18 | key_to_key | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:138:9:138:18 | key_to_key | K | file://:0:0:0:0 | & | +| dereference.rs:138:9:138:18 | key_to_key | K | {EXTERNAL LOCATION} | & | | dereference.rs:138:9:138:18 | key_to_key | K.&T | dereference.rs:110:5:111:21 | Key | | dereference.rs:138:9:138:18 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | -| dereference.rs:138:9:138:18 | key_to_key | V | file://:0:0:0:0 | & | +| dereference.rs:138:9:138:18 | key_to_key | V | {EXTERNAL LOCATION} | & | | dereference.rs:138:9:138:18 | key_to_key | V.&T | dereference.rs:110:5:111:21 | Key | | dereference.rs:138:9:138:35 | key_to_key.insert(...) | | {EXTERNAL LOCATION} | Option | -| dereference.rs:138:9:138:35 | key_to_key.insert(...) | T | file://:0:0:0:0 | & | +| dereference.rs:138:9:138:35 | key_to_key.insert(...) | T | {EXTERNAL LOCATION} | & | | dereference.rs:138:9:138:35 | key_to_key.insert(...) | T.&T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:138:9:138:35 | key_to_key.insert(...) | T.&T | file://:0:0:0:0 | & | +| dereference.rs:138:9:138:35 | key_to_key.insert(...) | T.&T | {EXTERNAL LOCATION} | & | | dereference.rs:138:9:138:35 | key_to_key.insert(...) | T.&T.&T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:138:27:138:29 | key | | file://:0:0:0:0 | & | +| dereference.rs:138:27:138:29 | key | | {EXTERNAL LOCATION} | & | | dereference.rs:138:27:138:29 | key | &T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:138:27:138:29 | key | &T | file://:0:0:0:0 | & | +| dereference.rs:138:27:138:29 | key | &T | {EXTERNAL LOCATION} | & | | dereference.rs:138:27:138:29 | key | &T.&T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:138:32:138:34 | key | | file://:0:0:0:0 | & | +| dereference.rs:138:32:138:34 | key | | {EXTERNAL LOCATION} | & | | dereference.rs:138:32:138:34 | key | &T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:138:32:138:34 | key | &T | file://:0:0:0:0 | & | +| dereference.rs:138:32:138:34 | key | &T | {EXTERNAL LOCATION} | & | | dereference.rs:138:32:138:34 | key | &T.&T | dereference.rs:110:5:111:21 | Key | | dereference.rs:144:16:144:19 | SelfParam | | dereference.rs:143:5:145:5 | Self [trait MyTrait1] | -| dereference.rs:151:16:151:19 | SelfParam | | file://:0:0:0:0 | & | +| dereference.rs:151:16:151:19 | SelfParam | | {EXTERNAL LOCATION} | & | | dereference.rs:151:16:151:19 | SelfParam | &T | dereference.rs:147:5:147:13 | S | | dereference.rs:151:27:153:9 | { ... } | | dereference.rs:147:5:147:13 | S | | dereference.rs:152:13:152:13 | S | | dereference.rs:147:5:147:13 | S | -| dereference.rs:158:16:158:19 | SelfParam | | file://:0:0:0:0 | & | +| dereference.rs:158:16:158:19 | SelfParam | | {EXTERNAL LOCATION} | & | | dereference.rs:158:16:158:19 | SelfParam | &T | dereference.rs:147:5:147:13 | S | | dereference.rs:158:29:160:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | dereference.rs:159:13:159:14 | 42 | | {EXTERNAL LOCATION} | i32 | @@ -812,24 +812,24 @@ inferType | dereference.rs:164:16:164:19 | SelfParam | | dereference.rs:163:5:165:5 | Self [trait MyTrait2] | | dereference.rs:164:22:164:24 | arg | | dereference.rs:163:20:163:21 | T1 | | dereference.rs:169:16:169:19 | SelfParam | | dereference.rs:147:5:147:13 | S | -| dereference.rs:169:22:169:24 | arg | | file://:0:0:0:0 | & | +| dereference.rs:169:22:169:24 | arg | | {EXTERNAL LOCATION} | & | | dereference.rs:169:22:169:24 | arg | &T | dereference.rs:147:5:147:13 | S | | dereference.rs:169:36:171:9 | { ... } | | dereference.rs:147:5:147:13 | S | | dereference.rs:170:13:170:13 | S | | dereference.rs:147:5:147:13 | S | | dereference.rs:176:16:176:19 | SelfParam | | dereference.rs:147:5:147:13 | S | -| dereference.rs:176:22:176:24 | arg | | file://:0:0:0:0 | & | +| dereference.rs:176:22:176:24 | arg | | {EXTERNAL LOCATION} | & | | dereference.rs:176:22:176:24 | arg | &T | dereference.rs:147:5:147:13 | S | | dereference.rs:176:42:178:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | dereference.rs:177:13:177:14 | 42 | | {EXTERNAL LOCATION} | i32 | | dereference.rs:177:13:177:14 | 42 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:181:19:188:5 | { ... } | | file://:0:0:0:0 | () | +| dereference.rs:181:19:188:5 | { ... } | | {EXTERNAL LOCATION} | () | | dereference.rs:182:13:182:13 | x | | dereference.rs:147:5:147:13 | S | | dereference.rs:182:13:182:13 | x | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:182:17:182:20 | (...) | | file://:0:0:0:0 | & | +| dereference.rs:182:17:182:20 | (...) | | {EXTERNAL LOCATION} | & | | dereference.rs:182:17:182:20 | (...) | &T | dereference.rs:147:5:147:13 | S | | dereference.rs:182:17:182:26 | ... .foo() | | dereference.rs:147:5:147:13 | S | | dereference.rs:182:17:182:26 | ... .foo() | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:182:18:182:19 | &S | | file://:0:0:0:0 | & | +| dereference.rs:182:18:182:19 | &S | | {EXTERNAL LOCATION} | & | | dereference.rs:182:18:182:19 | &S | &T | dereference.rs:147:5:147:13 | S | | dereference.rs:182:19:182:19 | S | | dereference.rs:147:5:147:13 | S | | dereference.rs:183:13:183:13 | y | | dereference.rs:147:5:147:13 | S | @@ -839,11 +839,11 @@ inferType | dereference.rs:183:17:183:23 | S.foo() | | {EXTERNAL LOCATION} | i64 | | dereference.rs:184:13:184:13 | z | | dereference.rs:147:5:147:13 | S | | dereference.rs:184:13:184:13 | z | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:184:17:184:24 | (...) | | file://:0:0:0:0 | & | +| dereference.rs:184:17:184:24 | (...) | | {EXTERNAL LOCATION} | & | | dereference.rs:184:17:184:24 | (...) | &T | dereference.rs:147:5:147:13 | S | | dereference.rs:184:17:184:30 | ... .foo() | | dereference.rs:147:5:147:13 | S | | dereference.rs:184:17:184:30 | ... .foo() | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:184:18:184:23 | &mut S | | file://:0:0:0:0 | & | +| dereference.rs:184:18:184:23 | &mut S | | {EXTERNAL LOCATION} | & | | dereference.rs:184:18:184:23 | &mut S | &T | dereference.rs:147:5:147:13 | S | | dereference.rs:184:23:184:23 | S | | dereference.rs:147:5:147:13 | S | | dereference.rs:186:13:186:13 | x | | dereference.rs:147:5:147:13 | S | @@ -851,7 +851,7 @@ inferType | dereference.rs:186:17:186:17 | S | | dereference.rs:147:5:147:13 | S | | dereference.rs:186:17:186:25 | S.bar(...) | | dereference.rs:147:5:147:13 | S | | dereference.rs:186:17:186:25 | S.bar(...) | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:186:23:186:24 | &S | | file://:0:0:0:0 | & | +| dereference.rs:186:23:186:24 | &S | | {EXTERNAL LOCATION} | & | | dereference.rs:186:23:186:24 | &S | &T | dereference.rs:147:5:147:13 | S | | dereference.rs:186:24:186:24 | S | | dereference.rs:147:5:147:13 | S | | dereference.rs:187:13:187:13 | y | | dereference.rs:147:5:147:13 | S | @@ -859,90 +859,90 @@ inferType | dereference.rs:187:17:187:17 | S | | dereference.rs:147:5:147:13 | S | | dereference.rs:187:17:187:29 | S.bar(...) | | dereference.rs:147:5:147:13 | S | | dereference.rs:187:17:187:29 | S.bar(...) | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:187:23:187:28 | &mut S | | file://:0:0:0:0 | & | +| dereference.rs:187:23:187:28 | &mut S | | {EXTERNAL LOCATION} | & | | dereference.rs:187:23:187:28 | &mut S | &T | dereference.rs:147:5:147:13 | S | | dereference.rs:187:28:187:28 | S | | dereference.rs:147:5:147:13 | S | -| dereference.rs:196:16:196:20 | SelfParam | | file://:0:0:0:0 | & | +| dereference.rs:196:16:196:20 | SelfParam | | {EXTERNAL LOCATION} | & | | dereference.rs:196:16:196:20 | SelfParam | &T | dereference.rs:195:5:197:5 | Self [trait Bar] | -| dereference.rs:201:16:201:24 | SelfParam | | file://:0:0:0:0 | & | +| dereference.rs:201:16:201:24 | SelfParam | | {EXTERNAL LOCATION} | & | | dereference.rs:201:16:201:24 | SelfParam | &T | dereference.rs:193:5:193:17 | Foo | -| dereference.rs:201:27:203:9 | { ... } | | file://:0:0:0:0 | () | -| dereference.rs:202:13:202:39 | MacroExpr | | file://:0:0:0:0 | () | -| dereference.rs:202:22:202:38 | "In struct impl!\\n" | | file://:0:0:0:0 | & | +| dereference.rs:201:27:203:9 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:202:13:202:39 | MacroExpr | | {EXTERNAL LOCATION} | () | +| dereference.rs:202:22:202:38 | "In struct impl!\\n" | | {EXTERNAL LOCATION} | & | | dereference.rs:202:22:202:38 | "In struct impl!\\n" | &T | {EXTERNAL LOCATION} | str | -| dereference.rs:202:22:202:38 | ...::_print(...) | | file://:0:0:0:0 | () | -| dereference.rs:202:22:202:38 | MacroBlockExpr | | file://:0:0:0:0 | () | -| dereference.rs:202:22:202:38 | { ... } | | file://:0:0:0:0 | () | -| dereference.rs:208:16:208:20 | SelfParam | | file://:0:0:0:0 | & | +| dereference.rs:202:22:202:38 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:202:22:202:38 | MacroBlockExpr | | {EXTERNAL LOCATION} | () | +| dereference.rs:202:22:202:38 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:208:16:208:20 | SelfParam | | {EXTERNAL LOCATION} | & | | dereference.rs:208:16:208:20 | SelfParam | &T | dereference.rs:193:5:193:17 | Foo | -| dereference.rs:208:23:210:9 | { ... } | | file://:0:0:0:0 | () | -| dereference.rs:209:13:209:38 | MacroExpr | | file://:0:0:0:0 | () | -| dereference.rs:209:22:209:37 | "In trait impl!\\n" | | file://:0:0:0:0 | & | +| dereference.rs:208:23:210:9 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:209:13:209:38 | MacroExpr | | {EXTERNAL LOCATION} | () | +| dereference.rs:209:22:209:37 | "In trait impl!\\n" | | {EXTERNAL LOCATION} | & | | dereference.rs:209:22:209:37 | "In trait impl!\\n" | &T | {EXTERNAL LOCATION} | str | -| dereference.rs:209:22:209:37 | ...::_print(...) | | file://:0:0:0:0 | () | -| dereference.rs:209:22:209:37 | MacroBlockExpr | | file://:0:0:0:0 | () | -| dereference.rs:209:22:209:37 | { ... } | | file://:0:0:0:0 | () | -| dereference.rs:213:19:216:5 | { ... } | | file://:0:0:0:0 | () | +| dereference.rs:209:22:209:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:209:22:209:37 | MacroBlockExpr | | {EXTERNAL LOCATION} | () | +| dereference.rs:209:22:209:37 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:213:19:216:5 | { ... } | | {EXTERNAL LOCATION} | () | | dereference.rs:214:17:214:17 | f | | dereference.rs:193:5:193:17 | Foo | | dereference.rs:214:21:214:26 | Foo {...} | | dereference.rs:193:5:193:17 | Foo | | dereference.rs:215:9:215:9 | f | | dereference.rs:193:5:193:17 | Foo | -| dereference.rs:215:9:215:15 | f.bar() | | file://:0:0:0:0 | () | -| dereference.rs:219:15:228:1 | { ... } | | file://:0:0:0:0 | () | -| dereference.rs:220:5:220:38 | explicit_monomorphic_dereference(...) | | file://:0:0:0:0 | () | -| dereference.rs:221:5:221:38 | explicit_polymorphic_dereference(...) | | file://:0:0:0:0 | () | -| dereference.rs:222:5:222:30 | explicit_ref_dereference(...) | | file://:0:0:0:0 | () | -| dereference.rs:223:5:223:30 | explicit_box_dereference(...) | | file://:0:0:0:0 | () | -| dereference.rs:224:5:224:26 | implicit_dereference(...) | | file://:0:0:0:0 | () | -| dereference.rs:225:5:225:41 | ...::test(...) | | file://:0:0:0:0 | () | -| dereference.rs:226:5:226:26 | ...::test(...) | | file://:0:0:0:0 | () | -| dereference.rs:227:5:227:34 | ...::main(...) | | file://:0:0:0:0 | () | -| dyn_type.rs:7:10:7:14 | SelfParam | | file://:0:0:0:0 | & | +| dereference.rs:215:9:215:15 | f.bar() | | {EXTERNAL LOCATION} | () | +| dereference.rs:219:15:228:1 | { ... } | | {EXTERNAL LOCATION} | () | +| dereference.rs:220:5:220:38 | explicit_monomorphic_dereference(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:221:5:221:38 | explicit_polymorphic_dereference(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:222:5:222:30 | explicit_ref_dereference(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:223:5:223:30 | explicit_box_dereference(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:224:5:224:26 | implicit_dereference(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:225:5:225:41 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:226:5:226:26 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| dereference.rs:227:5:227:34 | ...::main(...) | | {EXTERNAL LOCATION} | () | +| dyn_type.rs:7:10:7:14 | SelfParam | | {EXTERNAL LOCATION} | & | | dyn_type.rs:7:10:7:14 | SelfParam | &T | dyn_type.rs:5:1:8:1 | Self [trait MyTrait1] | -| dyn_type.rs:12:12:12:16 | SelfParam | | file://:0:0:0:0 | & | +| dyn_type.rs:12:12:12:16 | SelfParam | | {EXTERNAL LOCATION} | & | | dyn_type.rs:12:12:12:16 | SelfParam | &T | dyn_type.rs:10:1:13:1 | Self [trait GenericGet] | -| dyn_type.rs:18:12:18:16 | SelfParam | | file://:0:0:0:0 | & | +| dyn_type.rs:18:12:18:16 | SelfParam | | {EXTERNAL LOCATION} | & | | dyn_type.rs:18:12:18:16 | SelfParam | &T | dyn_type.rs:15:1:19:1 | Self [trait AssocTrait] | -| dyn_type.rs:28:10:28:14 | SelfParam | | file://:0:0:0:0 | & | +| dyn_type.rs:28:10:28:14 | SelfParam | | {EXTERNAL LOCATION} | & | | dyn_type.rs:28:10:28:14 | SelfParam | &T | dyn_type.rs:21:1:24:1 | MyStruct | | dyn_type.rs:28:27:30:5 | { ... } | | {EXTERNAL LOCATION} | String | | dyn_type.rs:29:9:29:43 | MacroExpr | | {EXTERNAL LOCATION} | String | -| dyn_type.rs:29:17:29:30 | "MyTrait1: {}" | | file://:0:0:0:0 | & | +| dyn_type.rs:29:17:29:30 | "MyTrait1: {}" | | {EXTERNAL LOCATION} | & | | dyn_type.rs:29:17:29:30 | "MyTrait1: {}" | &T | {EXTERNAL LOCATION} | str | | dyn_type.rs:29:17:29:42 | ...::format(...) | | {EXTERNAL LOCATION} | String | | dyn_type.rs:29:17:29:42 | ...::must_use(...) | | {EXTERNAL LOCATION} | String | | dyn_type.rs:29:17:29:42 | MacroBlockExpr | | {EXTERNAL LOCATION} | String | | dyn_type.rs:29:17:29:42 | { ... } | | {EXTERNAL LOCATION} | String | -| dyn_type.rs:29:33:29:36 | self | | file://:0:0:0:0 | & | +| dyn_type.rs:29:33:29:36 | self | | {EXTERNAL LOCATION} | & | | dyn_type.rs:29:33:29:36 | self | &T | dyn_type.rs:21:1:24:1 | MyStruct | | dyn_type.rs:29:33:29:42 | self.value | | {EXTERNAL LOCATION} | i32 | -| dyn_type.rs:40:12:40:16 | SelfParam | | file://:0:0:0:0 | & | +| dyn_type.rs:40:12:40:16 | SelfParam | | {EXTERNAL LOCATION} | & | | dyn_type.rs:40:12:40:16 | SelfParam | &T | dyn_type.rs:33:1:36:1 | GenStruct | | dyn_type.rs:40:12:40:16 | SelfParam | &T.A | dyn_type.rs:38:6:38:21 | A | | dyn_type.rs:40:24:42:5 | { ... } | | dyn_type.rs:38:6:38:21 | A | -| dyn_type.rs:41:9:41:12 | self | | file://:0:0:0:0 | & | +| dyn_type.rs:41:9:41:12 | self | | {EXTERNAL LOCATION} | & | | dyn_type.rs:41:9:41:12 | self | &T | dyn_type.rs:33:1:36:1 | GenStruct | | dyn_type.rs:41:9:41:12 | self | &T.A | dyn_type.rs:38:6:38:21 | A | | dyn_type.rs:41:9:41:18 | self.value | | dyn_type.rs:38:6:38:21 | A | | dyn_type.rs:41:9:41:26 | ... .clone() | | dyn_type.rs:38:6:38:21 | A | -| dyn_type.rs:51:12:51:16 | SelfParam | | file://:0:0:0:0 | & | +| dyn_type.rs:51:12:51:16 | SelfParam | | {EXTERNAL LOCATION} | & | | dyn_type.rs:51:12:51:16 | SelfParam | &T | dyn_type.rs:33:1:36:1 | GenStruct | | dyn_type.rs:51:12:51:16 | SelfParam | &T.A | dyn_type.rs:45:6:45:8 | GGP | -| dyn_type.rs:51:34:53:5 | { ... } | | file://:0:0:0:0 | (T_2) | +| dyn_type.rs:51:34:53:5 | { ... } | | {EXTERNAL LOCATION} | (T_2) | | dyn_type.rs:51:34:53:5 | { ... } | 0(2) | dyn_type.rs:45:6:45:8 | GGP | | dyn_type.rs:51:34:53:5 | { ... } | 1(2) | {EXTERNAL LOCATION} | bool | -| dyn_type.rs:52:9:52:34 | TupleExpr | | file://:0:0:0:0 | (T_2) | +| dyn_type.rs:52:9:52:34 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | | dyn_type.rs:52:9:52:34 | TupleExpr | 0(2) | dyn_type.rs:45:6:45:8 | GGP | | dyn_type.rs:52:9:52:34 | TupleExpr | 1(2) | {EXTERNAL LOCATION} | bool | -| dyn_type.rs:52:10:52:13 | self | | file://:0:0:0:0 | & | +| dyn_type.rs:52:10:52:13 | self | | {EXTERNAL LOCATION} | & | | dyn_type.rs:52:10:52:13 | self | &T | dyn_type.rs:33:1:36:1 | GenStruct | | dyn_type.rs:52:10:52:13 | self | &T.A | dyn_type.rs:45:6:45:8 | GGP | | dyn_type.rs:52:10:52:19 | self.value | | dyn_type.rs:45:6:45:8 | GGP | | dyn_type.rs:52:10:52:27 | ... .clone() | | dyn_type.rs:45:6:45:8 | GGP | | dyn_type.rs:52:30:52:33 | true | | {EXTERNAL LOCATION} | bool | -| dyn_type.rs:56:40:56:40 | a | | file://:0:0:0:0 | & | +| dyn_type.rs:56:40:56:40 | a | | {EXTERNAL LOCATION} | & | | dyn_type.rs:56:40:56:40 | a | &T | dyn_type.rs:56:13:56:37 | G | | dyn_type.rs:56:52:58:1 | { ... } | | dyn_type.rs:56:10:56:10 | A | -| dyn_type.rs:57:5:57:5 | a | | file://:0:0:0:0 | & | +| dyn_type.rs:57:5:57:5 | a | | {EXTERNAL LOCATION} | & | | dyn_type.rs:57:5:57:5 | a | &T | dyn_type.rs:56:13:56:37 | G | | dyn_type.rs:57:5:57:11 | a.get() | | dyn_type.rs:56:10:56:10 | A | | dyn_type.rs:60:46:60:46 | a | | dyn_type.rs:60:18:60:43 | A | @@ -959,34 +959,34 @@ inferType | dyn_type.rs:61:14:61:35 | GenStruct {...} | | dyn_type.rs:33:1:36:1 | GenStruct | | dyn_type.rs:61:14:61:35 | GenStruct {...} | A | dyn_type.rs:60:18:60:43 | A | | dyn_type.rs:61:33:61:33 | a | | dyn_type.rs:60:18:60:43 | A | -| dyn_type.rs:64:25:64:27 | obj | | file://:0:0:0:0 | & | +| dyn_type.rs:64:25:64:27 | obj | | {EXTERNAL LOCATION} | & | | dyn_type.rs:64:25:64:27 | obj | &T | dyn_type.rs:5:1:8:1 | dyn MyTrait1 | -| dyn_type.rs:64:45:66:1 | { ... } | | file://:0:0:0:0 | () | +| dyn_type.rs:64:45:66:1 | { ... } | | {EXTERNAL LOCATION} | () | | dyn_type.rs:65:9:65:15 | _result | | {EXTERNAL LOCATION} | String | | dyn_type.rs:65:19:65:24 | (...) | | dyn_type.rs:5:1:8:1 | dyn MyTrait1 | | dyn_type.rs:65:19:65:28 | ... .m() | | {EXTERNAL LOCATION} | String | | dyn_type.rs:65:20:65:23 | * ... | | dyn_type.rs:5:1:8:1 | dyn MyTrait1 | -| dyn_type.rs:65:21:65:23 | obj | | file://:0:0:0:0 | & | +| dyn_type.rs:65:21:65:23 | obj | | {EXTERNAL LOCATION} | & | | dyn_type.rs:65:21:65:23 | obj | &T | dyn_type.rs:5:1:8:1 | dyn MyTrait1 | -| dyn_type.rs:68:27:68:29 | obj | | file://:0:0:0:0 | & | +| dyn_type.rs:68:27:68:29 | obj | | {EXTERNAL LOCATION} | & | | dyn_type.rs:68:27:68:29 | obj | &T | dyn_type.rs:10:1:13:1 | dyn GenericGet | | dyn_type.rs:68:27:68:29 | obj | &T.dyn(A) | {EXTERNAL LOCATION} | String | -| dyn_type.rs:68:57:71:1 | { ... } | | file://:0:0:0:0 | () | +| dyn_type.rs:68:57:71:1 | { ... } | | {EXTERNAL LOCATION} | () | | dyn_type.rs:69:9:69:16 | _result1 | | {EXTERNAL LOCATION} | String | | dyn_type.rs:69:20:69:25 | (...) | | dyn_type.rs:10:1:13:1 | dyn GenericGet | | dyn_type.rs:69:20:69:25 | (...) | dyn(A) | {EXTERNAL LOCATION} | String | | dyn_type.rs:69:20:69:31 | ... .get() | | {EXTERNAL LOCATION} | String | | dyn_type.rs:69:21:69:24 | * ... | | dyn_type.rs:10:1:13:1 | dyn GenericGet | | dyn_type.rs:69:21:69:24 | * ... | dyn(A) | {EXTERNAL LOCATION} | String | -| dyn_type.rs:69:22:69:24 | obj | | file://:0:0:0:0 | & | +| dyn_type.rs:69:22:69:24 | obj | | {EXTERNAL LOCATION} | & | | dyn_type.rs:69:22:69:24 | obj | &T | dyn_type.rs:10:1:13:1 | dyn GenericGet | | dyn_type.rs:69:22:69:24 | obj | &T.dyn(A) | {EXTERNAL LOCATION} | String | | dyn_type.rs:70:9:70:16 | _result2 | | {EXTERNAL LOCATION} | String | | dyn_type.rs:70:20:70:29 | get_a(...) | | {EXTERNAL LOCATION} | String | -| dyn_type.rs:70:26:70:28 | obj | | file://:0:0:0:0 | & | +| dyn_type.rs:70:26:70:28 | obj | | {EXTERNAL LOCATION} | & | | dyn_type.rs:70:26:70:28 | obj | &T | dyn_type.rs:10:1:13:1 | dyn GenericGet | | dyn_type.rs:70:26:70:28 | obj | &T.dyn(A) | {EXTERNAL LOCATION} | String | -| dyn_type.rs:73:26:76:1 | { ... } | | file://:0:0:0:0 | () | +| dyn_type.rs:73:26:76:1 | { ... } | | {EXTERNAL LOCATION} | () | | dyn_type.rs:74:9:74:11 | obj | | {EXTERNAL LOCATION} | Box | | dyn_type.rs:74:9:74:11 | obj | A | {EXTERNAL LOCATION} | Global | | dyn_type.rs:74:9:74:11 | obj | T | dyn_type.rs:10:1:13:1 | dyn GenericGet | @@ -1006,36 +1006,36 @@ inferType | dyn_type.rs:75:21:75:23 | obj | A | {EXTERNAL LOCATION} | Global | | dyn_type.rs:75:21:75:23 | obj | T | dyn_type.rs:10:1:13:1 | dyn GenericGet | | dyn_type.rs:75:21:75:23 | obj | T.dyn(A) | {EXTERNAL LOCATION} | bool | -| dyn_type.rs:78:24:78:24 | a | | file://:0:0:0:0 | & | +| dyn_type.rs:78:24:78:24 | a | | {EXTERNAL LOCATION} | & | | dyn_type.rs:78:24:78:24 | a | &T | dyn_type.rs:15:1:19:1 | dyn AssocTrait | | dyn_type.rs:78:24:78:24 | a | &T.dyn(AP) | dyn_type.rs:78:21:78:21 | B | | dyn_type.rs:78:24:78:24 | a | &T.dyn(GP) | dyn_type.rs:78:18:78:18 | A | -| dyn_type.rs:78:65:80:1 | { ... } | | file://:0:0:0:0 | (T_2) | +| dyn_type.rs:78:65:80:1 | { ... } | | {EXTERNAL LOCATION} | (T_2) | | dyn_type.rs:78:65:80:1 | { ... } | 0(2) | dyn_type.rs:78:18:78:18 | A | | dyn_type.rs:78:65:80:1 | { ... } | 1(2) | dyn_type.rs:78:21:78:21 | B | -| dyn_type.rs:79:5:79:5 | a | | file://:0:0:0:0 | & | +| dyn_type.rs:79:5:79:5 | a | | {EXTERNAL LOCATION} | & | | dyn_type.rs:79:5:79:5 | a | &T | dyn_type.rs:15:1:19:1 | dyn AssocTrait | | dyn_type.rs:79:5:79:5 | a | &T.dyn(AP) | dyn_type.rs:78:21:78:21 | B | | dyn_type.rs:79:5:79:5 | a | &T.dyn(GP) | dyn_type.rs:78:18:78:18 | A | -| dyn_type.rs:79:5:79:11 | a.get() | | file://:0:0:0:0 | (T_2) | +| dyn_type.rs:79:5:79:11 | a.get() | | {EXTERNAL LOCATION} | (T_2) | | dyn_type.rs:79:5:79:11 | a.get() | 0(2) | dyn_type.rs:78:18:78:18 | A | | dyn_type.rs:79:5:79:11 | a.get() | 1(2) | dyn_type.rs:78:21:78:21 | B | -| dyn_type.rs:82:55:82:55 | a | | file://:0:0:0:0 | & | +| dyn_type.rs:82:55:82:55 | a | | {EXTERNAL LOCATION} | & | | dyn_type.rs:82:55:82:55 | a | &T | dyn_type.rs:82:20:82:52 | T | -| dyn_type.rs:82:72:84:1 | { ... } | | file://:0:0:0:0 | (T_2) | +| dyn_type.rs:82:72:84:1 | { ... } | | {EXTERNAL LOCATION} | (T_2) | | dyn_type.rs:82:72:84:1 | { ... } | 0(2) | dyn_type.rs:82:14:82:14 | A | | dyn_type.rs:82:72:84:1 | { ... } | 1(2) | dyn_type.rs:82:17:82:17 | B | -| dyn_type.rs:83:5:83:5 | a | | file://:0:0:0:0 | & | +| dyn_type.rs:83:5:83:5 | a | | {EXTERNAL LOCATION} | & | | dyn_type.rs:83:5:83:5 | a | &T | dyn_type.rs:82:20:82:52 | T | -| dyn_type.rs:83:5:83:11 | a.get() | | file://:0:0:0:0 | (T_2) | +| dyn_type.rs:83:5:83:11 | a.get() | | {EXTERNAL LOCATION} | (T_2) | | dyn_type.rs:83:5:83:11 | a.get() | 0(2) | dyn_type.rs:82:14:82:14 | A | | dyn_type.rs:83:5:83:11 | a.get() | 1(2) | dyn_type.rs:82:17:82:17 | B | -| dyn_type.rs:86:20:86:22 | obj | | file://:0:0:0:0 | & | +| dyn_type.rs:86:20:86:22 | obj | | {EXTERNAL LOCATION} | & | | dyn_type.rs:86:20:86:22 | obj | &T | dyn_type.rs:15:1:19:1 | dyn AssocTrait | | dyn_type.rs:86:20:86:22 | obj | &T.dyn(AP) | {EXTERNAL LOCATION} | bool | | dyn_type.rs:86:20:86:22 | obj | &T.dyn(GP) | {EXTERNAL LOCATION} | i64 | -| dyn_type.rs:86:58:99:1 | { ... } | | file://:0:0:0:0 | () | -| dyn_type.rs:87:9:90:5 | TuplePat | | file://:0:0:0:0 | (T_2) | +| dyn_type.rs:86:58:99:1 | { ... } | | {EXTERNAL LOCATION} | () | +| dyn_type.rs:87:9:90:5 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | | dyn_type.rs:87:9:90:5 | TuplePat | 0(2) | {EXTERNAL LOCATION} | i64 | | dyn_type.rs:87:9:90:5 | TuplePat | 1(2) | {EXTERNAL LOCATION} | bool | | dyn_type.rs:88:9:88:11 | _gp | | {EXTERNAL LOCATION} | i64 | @@ -1043,69 +1043,69 @@ inferType | dyn_type.rs:90:9:90:14 | (...) | | dyn_type.rs:15:1:19:1 | dyn AssocTrait | | dyn_type.rs:90:9:90:14 | (...) | dyn(AP) | {EXTERNAL LOCATION} | bool | | dyn_type.rs:90:9:90:14 | (...) | dyn(GP) | {EXTERNAL LOCATION} | i64 | -| dyn_type.rs:90:9:90:20 | ... .get() | | file://:0:0:0:0 | (T_2) | +| dyn_type.rs:90:9:90:20 | ... .get() | | {EXTERNAL LOCATION} | (T_2) | | dyn_type.rs:90:9:90:20 | ... .get() | 0(2) | {EXTERNAL LOCATION} | i64 | | dyn_type.rs:90:9:90:20 | ... .get() | 1(2) | {EXTERNAL LOCATION} | bool | | dyn_type.rs:90:10:90:13 | * ... | | dyn_type.rs:15:1:19:1 | dyn AssocTrait | | dyn_type.rs:90:10:90:13 | * ... | dyn(AP) | {EXTERNAL LOCATION} | bool | | dyn_type.rs:90:10:90:13 | * ... | dyn(GP) | {EXTERNAL LOCATION} | i64 | -| dyn_type.rs:90:11:90:13 | obj | | file://:0:0:0:0 | & | +| dyn_type.rs:90:11:90:13 | obj | | {EXTERNAL LOCATION} | & | | dyn_type.rs:90:11:90:13 | obj | &T | dyn_type.rs:15:1:19:1 | dyn AssocTrait | | dyn_type.rs:90:11:90:13 | obj | &T.dyn(AP) | {EXTERNAL LOCATION} | bool | | dyn_type.rs:90:11:90:13 | obj | &T.dyn(GP) | {EXTERNAL LOCATION} | i64 | -| dyn_type.rs:91:9:94:5 | TuplePat | | file://:0:0:0:0 | (T_2) | +| dyn_type.rs:91:9:94:5 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | | dyn_type.rs:91:9:94:5 | TuplePat | 0(2) | {EXTERNAL LOCATION} | i64 | | dyn_type.rs:91:9:94:5 | TuplePat | 1(2) | {EXTERNAL LOCATION} | bool | | dyn_type.rs:92:9:92:11 | _gp | | {EXTERNAL LOCATION} | i64 | | dyn_type.rs:93:9:93:11 | _ap | | {EXTERNAL LOCATION} | bool | -| dyn_type.rs:94:9:94:26 | assoc_dyn_get(...) | | file://:0:0:0:0 | (T_2) | +| dyn_type.rs:94:9:94:26 | assoc_dyn_get(...) | | {EXTERNAL LOCATION} | (T_2) | | dyn_type.rs:94:9:94:26 | assoc_dyn_get(...) | 0(2) | {EXTERNAL LOCATION} | i64 | | dyn_type.rs:94:9:94:26 | assoc_dyn_get(...) | 1(2) | {EXTERNAL LOCATION} | bool | -| dyn_type.rs:94:23:94:25 | obj | | file://:0:0:0:0 | & | +| dyn_type.rs:94:23:94:25 | obj | | {EXTERNAL LOCATION} | & | | dyn_type.rs:94:23:94:25 | obj | &T | dyn_type.rs:15:1:19:1 | dyn AssocTrait | | dyn_type.rs:94:23:94:25 | obj | &T.dyn(AP) | {EXTERNAL LOCATION} | bool | | dyn_type.rs:94:23:94:25 | obj | &T.dyn(GP) | {EXTERNAL LOCATION} | i64 | -| dyn_type.rs:95:9:98:5 | TuplePat | | file://:0:0:0:0 | (T_2) | +| dyn_type.rs:95:9:98:5 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | | dyn_type.rs:95:9:98:5 | TuplePat | 0(2) | {EXTERNAL LOCATION} | i64 | | dyn_type.rs:95:9:98:5 | TuplePat | 1(2) | {EXTERNAL LOCATION} | bool | | dyn_type.rs:96:9:96:11 | _gp | | {EXTERNAL LOCATION} | i64 | | dyn_type.rs:97:9:97:11 | _ap | | {EXTERNAL LOCATION} | bool | -| dyn_type.rs:98:9:98:22 | assoc_get(...) | | file://:0:0:0:0 | (T_2) | +| dyn_type.rs:98:9:98:22 | assoc_get(...) | | {EXTERNAL LOCATION} | (T_2) | | dyn_type.rs:98:9:98:22 | assoc_get(...) | 0(2) | {EXTERNAL LOCATION} | i64 | | dyn_type.rs:98:9:98:22 | assoc_get(...) | 1(2) | {EXTERNAL LOCATION} | bool | -| dyn_type.rs:98:19:98:21 | obj | | file://:0:0:0:0 | & | +| dyn_type.rs:98:19:98:21 | obj | | {EXTERNAL LOCATION} | & | | dyn_type.rs:98:19:98:21 | obj | &T | dyn_type.rs:15:1:19:1 | dyn AssocTrait | | dyn_type.rs:98:19:98:21 | obj | &T.dyn(AP) | {EXTERNAL LOCATION} | bool | | dyn_type.rs:98:19:98:21 | obj | &T.dyn(GP) | {EXTERNAL LOCATION} | i64 | -| dyn_type.rs:101:15:108:1 | { ... } | | file://:0:0:0:0 | () | -| dyn_type.rs:102:5:102:49 | test_basic_dyn_trait(...) | | file://:0:0:0:0 | () | -| dyn_type.rs:102:26:102:48 | &... | | file://:0:0:0:0 | & | +| dyn_type.rs:101:15:108:1 | { ... } | | {EXTERNAL LOCATION} | () | +| dyn_type.rs:102:5:102:49 | test_basic_dyn_trait(...) | | {EXTERNAL LOCATION} | () | +| dyn_type.rs:102:26:102:48 | &... | | {EXTERNAL LOCATION} | & | | dyn_type.rs:102:26:102:48 | &... | &T | dyn_type.rs:21:1:24:1 | MyStruct | | dyn_type.rs:102:27:102:48 | MyStruct {...} | | dyn_type.rs:21:1:24:1 | MyStruct | | dyn_type.rs:102:45:102:46 | 42 | | {EXTERNAL LOCATION} | i32 | -| dyn_type.rs:103:5:105:6 | test_generic_dyn_trait(...) | | file://:0:0:0:0 | () | -| dyn_type.rs:103:28:105:5 | &... | | file://:0:0:0:0 | & | +| dyn_type.rs:103:5:105:6 | test_generic_dyn_trait(...) | | {EXTERNAL LOCATION} | () | +| dyn_type.rs:103:28:105:5 | &... | | {EXTERNAL LOCATION} | & | | dyn_type.rs:103:28:105:5 | &... | &T | dyn_type.rs:33:1:36:1 | GenStruct | | dyn_type.rs:103:28:105:5 | &... | &T.A | {EXTERNAL LOCATION} | String | | dyn_type.rs:103:29:105:5 | GenStruct {...} | | dyn_type.rs:33:1:36:1 | GenStruct | | dyn_type.rs:103:29:105:5 | GenStruct {...} | A | {EXTERNAL LOCATION} | String | -| dyn_type.rs:104:16:104:17 | "" | | file://:0:0:0:0 | & | +| dyn_type.rs:104:16:104:17 | "" | | {EXTERNAL LOCATION} | & | | dyn_type.rs:104:16:104:17 | "" | &T | {EXTERNAL LOCATION} | str | | dyn_type.rs:104:16:104:29 | "".to_string() | | {EXTERNAL LOCATION} | String | -| dyn_type.rs:106:5:106:25 | test_poly_dyn_trait(...) | | file://:0:0:0:0 | () | -| dyn_type.rs:107:5:107:46 | test_assoc_type(...) | | file://:0:0:0:0 | () | -| dyn_type.rs:107:21:107:45 | &... | | file://:0:0:0:0 | & | +| dyn_type.rs:106:5:106:25 | test_poly_dyn_trait(...) | | {EXTERNAL LOCATION} | () | +| dyn_type.rs:107:5:107:46 | test_assoc_type(...) | | {EXTERNAL LOCATION} | () | +| dyn_type.rs:107:21:107:45 | &... | | {EXTERNAL LOCATION} | & | | dyn_type.rs:107:21:107:45 | &... | &T | dyn_type.rs:33:1:36:1 | GenStruct | | dyn_type.rs:107:21:107:45 | &... | &T.A | {EXTERNAL LOCATION} | i32 | | dyn_type.rs:107:22:107:45 | GenStruct {...} | | dyn_type.rs:33:1:36:1 | GenStruct | | dyn_type.rs:107:22:107:45 | GenStruct {...} | A | {EXTERNAL LOCATION} | i32 | | dyn_type.rs:107:41:107:43 | 100 | | {EXTERNAL LOCATION} | i32 | | invalid/main.rs:8:16:8:19 | SelfParam | | invalid/main.rs:7:5:9:5 | Self [trait T1] | -| invalid/main.rs:8:22:8:23 | { ... } | | file://:0:0:0:0 | () | +| invalid/main.rs:8:22:8:23 | { ... } | | {EXTERNAL LOCATION} | () | | invalid/main.rs:12:16:12:19 | SelfParam | | invalid/main.rs:11:5:15:5 | Self [trait T2] | -| invalid/main.rs:12:22:14:9 | { ... } | | file://:0:0:0:0 | () | +| invalid/main.rs:12:22:14:9 | { ... } | | {EXTERNAL LOCATION} | () | | invalid/main.rs:13:13:13:16 | self | | invalid/main.rs:11:5:15:5 | Self [trait T2] | -| invalid/main.rs:13:13:13:22 | self.foo() | | file://:0:0:0:0 | () | +| invalid/main.rs:13:13:13:22 | self.foo() | | {EXTERNAL LOCATION} | () | | invalid/main.rs:25:22:25:25 | SelfParam | | invalid/main.rs:24:5:26:5 | Self [trait AddAlias] | | invalid/main.rs:25:28:25:32 | other | | invalid/main.rs:24:5:26:5 | Self [trait AddAlias] | | invalid/main.rs:29:22:29:25 | SelfParam | | invalid/main.rs:21:5:22:20 | Num | @@ -1123,7 +1123,7 @@ inferType | invalid/main.rs:40:13:40:16 | self | | invalid/main.rs:35:10:35:20 | T | | invalid/main.rs:40:13:40:33 | self.add_alias(...) | | invalid/main.rs:35:10:35:20 | T | | invalid/main.rs:40:28:40:32 | other | | invalid/main.rs:35:10:35:20 | T | -| invalid/main.rs:44:30:49:5 | { ... } | | file://:0:0:0:0 | () | +| invalid/main.rs:44:30:49:5 | { ... } | | {EXTERNAL LOCATION} | () | | invalid/main.rs:45:13:45:13 | a | | invalid/main.rs:21:5:22:20 | Num | | invalid/main.rs:45:17:45:22 | Num(...) | | invalid/main.rs:21:5:22:20 | Num | | invalid/main.rs:45:21:45:21 | 5 | | {EXTERNAL LOCATION} | i32 | @@ -1134,64 +1134,64 @@ inferType | invalid/main.rs:47:17:47:17 | a | | invalid/main.rs:21:5:22:20 | Num | | invalid/main.rs:47:17:47:21 | ... + ... | | invalid/main.rs:21:5:22:20 | Num | | invalid/main.rs:47:21:47:21 | b | | invalid/main.rs:21:5:22:20 | Num | -| invalid/main.rs:57:19:57:23 | SelfParam | | file://:0:0:0:0 | & | +| invalid/main.rs:57:19:57:23 | SelfParam | | {EXTERNAL LOCATION} | & | | invalid/main.rs:57:19:57:23 | SelfParam | &T | invalid/main.rs:56:5:58:5 | Self [trait Clone1] | -| invalid/main.rs:61:22:61:26 | SelfParam | | file://:0:0:0:0 | & | +| invalid/main.rs:61:22:61:26 | SelfParam | | {EXTERNAL LOCATION} | & | | invalid/main.rs:61:22:61:26 | SelfParam | &T | invalid/main.rs:60:5:64:5 | Self [trait Duplicatable] | -| invalid/main.rs:68:19:68:23 | SelfParam | | file://:0:0:0:0 | & | +| invalid/main.rs:68:19:68:23 | SelfParam | | {EXTERNAL LOCATION} | & | | invalid/main.rs:68:19:68:23 | SelfParam | &T | invalid/main.rs:53:5:54:14 | S1 | | invalid/main.rs:68:34:70:9 | { ... } | | invalid/main.rs:53:5:54:14 | S1 | | invalid/main.rs:69:13:69:17 | * ... | | invalid/main.rs:53:5:54:14 | S1 | -| invalid/main.rs:69:14:69:17 | self | | file://:0:0:0:0 | & | +| invalid/main.rs:69:14:69:17 | self | | {EXTERNAL LOCATION} | & | | invalid/main.rs:69:14:69:17 | self | &T | invalid/main.rs:53:5:54:14 | S1 | -| invalid/main.rs:75:22:75:26 | SelfParam | | file://:0:0:0:0 | & | +| invalid/main.rs:75:22:75:26 | SelfParam | | {EXTERNAL LOCATION} | & | | invalid/main.rs:75:22:75:26 | SelfParam | &T | invalid/main.rs:53:5:54:14 | S1 | | invalid/main.rs:75:37:77:9 | { ... } | | invalid/main.rs:53:5:54:14 | S1 | | invalid/main.rs:76:13:76:17 | * ... | | invalid/main.rs:53:5:54:14 | S1 | -| invalid/main.rs:76:14:76:17 | self | | file://:0:0:0:0 | & | +| invalid/main.rs:76:14:76:17 | self | | {EXTERNAL LOCATION} | & | | invalid/main.rs:76:14:76:17 | self | &T | invalid/main.rs:53:5:54:14 | S1 | -| invalid/main.rs:83:22:83:26 | SelfParam | | file://:0:0:0:0 | & | +| invalid/main.rs:83:22:83:26 | SelfParam | | {EXTERNAL LOCATION} | & | | invalid/main.rs:83:22:83:26 | SelfParam | &T | invalid/main.rs:81:10:81:18 | T | | invalid/main.rs:83:37:85:9 | { ... } | | invalid/main.rs:81:10:81:18 | T | -| invalid/main.rs:84:13:84:16 | self | | file://:0:0:0:0 | & | +| invalid/main.rs:84:13:84:16 | self | | {EXTERNAL LOCATION} | & | | invalid/main.rs:84:13:84:16 | self | &T | invalid/main.rs:81:10:81:18 | T | | invalid/main.rs:84:13:84:25 | self.clone1() | | invalid/main.rs:81:10:81:18 | T | -| invalid/main.rs:88:33:92:5 | { ... } | | file://:0:0:0:0 | () | +| invalid/main.rs:88:33:92:5 | { ... } | | {EXTERNAL LOCATION} | () | | invalid/main.rs:91:13:91:13 | x | | invalid/main.rs:53:5:54:14 | S1 | | invalid/main.rs:91:17:91:18 | S1 | | invalid/main.rs:53:5:54:14 | S1 | | invalid/main.rs:91:17:91:30 | S1.duplicate() | | invalid/main.rs:53:5:54:14 | S1 | -| main.rs:25:30:28:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:25:30:28:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:26:13:26:13 | x | | main.rs:5:5:8:5 | MyThing | | main.rs:26:17:26:32 | MyThing {...} | | main.rs:5:5:8:5 | MyThing | | main.rs:26:30:26:30 | S | | main.rs:3:5:4:13 | S | -| main.rs:27:18:27:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:27:18:27:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:27:18:27:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:27:18:27:28 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:27:18:27:28 | { ... } | | file://:0:0:0:0 | () | +| main.rs:27:18:27:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:27:18:27:28 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:27:26:27:26 | x | | main.rs:5:5:8:5 | MyThing | | main.rs:27:26:27:28 | x.a | | main.rs:3:5:4:13 | S | | main.rs:30:29:30:29 | x | | main.rs:16:5:19:5 | GenericThing | | main.rs:30:29:30:29 | x | A | {EXTERNAL LOCATION} | bool | -| main.rs:30:46:33:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:30:46:33:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:31:13:31:13 | a | | {EXTERNAL LOCATION} | bool | | main.rs:31:17:31:17 | x | | main.rs:16:5:19:5 | GenericThing | | main.rs:31:17:31:17 | x | A | {EXTERNAL LOCATION} | bool | | main.rs:31:17:31:19 | x.a | | {EXTERNAL LOCATION} | bool | -| main.rs:32:18:32:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:32:18:32:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:32:18:32:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:32:18:32:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:32:18:32:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:32:18:32:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:32:18:32:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:32:26:32:26 | a | | {EXTERNAL LOCATION} | bool | -| main.rs:35:31:63:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:35:31:63:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:37:13:37:13 | x | | main.rs:16:5:19:5 | GenericThing | | main.rs:37:13:37:13 | x | A | main.rs:3:5:4:13 | S | | main.rs:37:17:37:42 | GenericThing::<...> {...} | | main.rs:16:5:19:5 | GenericThing | | main.rs:37:17:37:42 | GenericThing::<...> {...} | A | main.rs:3:5:4:13 | S | | main.rs:37:40:37:40 | S | | main.rs:3:5:4:13 | S | -| main.rs:38:18:38:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:38:18:38:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:38:18:38:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:38:18:38:28 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:38:18:38:28 | { ... } | | file://:0:0:0:0 | () | +| main.rs:38:18:38:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:38:18:38:28 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:38:26:38:26 | x | | main.rs:16:5:19:5 | GenericThing | | main.rs:38:26:38:26 | x | A | main.rs:3:5:4:13 | S | | main.rs:38:26:38:28 | x.a | | main.rs:3:5:4:13 | S | @@ -1200,10 +1200,10 @@ inferType | main.rs:41:17:41:37 | GenericThing {...} | | main.rs:16:5:19:5 | GenericThing | | main.rs:41:17:41:37 | GenericThing {...} | A | main.rs:3:5:4:13 | S | | main.rs:41:35:41:35 | S | | main.rs:3:5:4:13 | S | -| main.rs:42:18:42:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:42:18:42:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:42:18:42:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:42:18:42:28 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:42:18:42:28 | { ... } | | file://:0:0:0:0 | () | +| main.rs:42:18:42:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:42:18:42:28 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:42:26:42:26 | x | | main.rs:16:5:19:5 | GenericThing | | main.rs:42:26:42:26 | x | A | main.rs:3:5:4:13 | S | | main.rs:42:26:42:28 | x.a | | main.rs:3:5:4:13 | S | @@ -1211,10 +1211,10 @@ inferType | main.rs:46:17:48:9 | OptionS {...} | | main.rs:21:5:23:5 | OptionS | | main.rs:47:16:47:33 | ...::MyNone(...) | | main.rs:10:5:14:5 | MyOption | | main.rs:47:16:47:33 | ...::MyNone(...) | T | main.rs:3:5:4:13 | S | -| main.rs:49:18:49:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:49:18:49:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:49:18:49:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:49:18:49:28 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:49:18:49:28 | { ... } | | file://:0:0:0:0 | () | +| main.rs:49:18:49:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:49:18:49:28 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:49:26:49:26 | x | | main.rs:21:5:23:5 | OptionS | | main.rs:49:26:49:28 | x.a | | main.rs:10:5:14:5 | MyOption | | main.rs:49:26:49:28 | x.a | T | main.rs:3:5:4:13 | S | @@ -1226,10 +1226,10 @@ inferType | main.rs:52:17:54:9 | GenericThing::<...> {...} | A.T | main.rs:3:5:4:13 | S | | main.rs:53:16:53:33 | ...::MyNone(...) | | main.rs:10:5:14:5 | MyOption | | main.rs:53:16:53:33 | ...::MyNone(...) | T | main.rs:3:5:4:13 | S | -| main.rs:55:18:55:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:55:18:55:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:55:18:55:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:55:18:55:28 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:55:18:55:28 | { ... } | | file://:0:0:0:0 | () | +| main.rs:55:18:55:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:55:18:55:28 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:55:26:55:26 | x | | main.rs:16:5:19:5 | GenericThing | | main.rs:55:26:55:26 | x | A | main.rs:10:5:14:5 | MyOption | | main.rs:55:26:55:26 | x | A.T | main.rs:3:5:4:13 | S | @@ -1250,15 +1250,15 @@ inferType | main.rs:61:30:61:30 | x | A.T | main.rs:3:5:4:13 | S | | main.rs:61:30:61:32 | x.a | | main.rs:10:5:14:5 | MyOption | | main.rs:61:30:61:32 | x.a | T | main.rs:3:5:4:13 | S | -| main.rs:62:18:62:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:62:18:62:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:62:18:62:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:62:18:62:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:62:18:62:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:62:18:62:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:62:18:62:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:62:26:62:26 | a | | main.rs:10:5:14:5 | MyOption | | main.rs:62:26:62:26 | a | T | main.rs:3:5:4:13 | S | -| main.rs:65:16:68:5 | { ... } | | file://:0:0:0:0 | () | -| main.rs:66:9:66:29 | simple_field_access(...) | | file://:0:0:0:0 | () | -| main.rs:67:9:67:30 | generic_field_access(...) | | file://:0:0:0:0 | () | +| main.rs:65:16:68:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:66:9:66:29 | simple_field_access(...) | | {EXTERNAL LOCATION} | () | +| main.rs:67:9:67:30 | generic_field_access(...) | | {EXTERNAL LOCATION} | () | | main.rs:75:19:75:22 | SelfParam | | main.rs:72:5:72:21 | Foo | | main.rs:75:33:77:9 | { ... } | | main.rs:72:5:72:21 | Foo | | main.rs:76:13:76:16 | self | | main.rs:72:5:72:21 | Foo | @@ -1266,10 +1266,10 @@ inferType | main.rs:79:32:81:9 | { ... } | | main.rs:72:5:72:21 | Foo | | main.rs:80:13:80:16 | self | | main.rs:72:5:72:21 | Foo | | main.rs:84:23:89:5 | { ... } | | main.rs:72:5:72:21 | Foo | -| main.rs:85:18:85:33 | "main.rs::m1::f\\n" | | file://:0:0:0:0 | & | +| main.rs:85:18:85:33 | "main.rs::m1::f\\n" | | {EXTERNAL LOCATION} | & | | main.rs:85:18:85:33 | "main.rs::m1::f\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:85:18:85:33 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:85:18:85:33 | { ... } | | file://:0:0:0:0 | () | +| main.rs:85:18:85:33 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:85:18:85:33 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:86:13:86:13 | x | | main.rs:72:5:72:21 | Foo | | main.rs:86:17:86:22 | Foo {...} | | main.rs:72:5:72:21 | Foo | | main.rs:87:13:87:13 | y | | main.rs:72:5:72:21 | Foo | @@ -1278,10 +1278,10 @@ inferType | main.rs:91:14:91:14 | x | | main.rs:72:5:72:21 | Foo | | main.rs:91:22:91:22 | y | | main.rs:72:5:72:21 | Foo | | main.rs:91:37:95:5 | { ... } | | main.rs:72:5:72:21 | Foo | -| main.rs:92:18:92:33 | "main.rs::m1::g\\n" | | file://:0:0:0:0 | & | +| main.rs:92:18:92:33 | "main.rs::m1::g\\n" | | {EXTERNAL LOCATION} | & | | main.rs:92:18:92:33 | "main.rs::m1::g\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:92:18:92:33 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:92:18:92:33 | { ... } | | file://:0:0:0:0 | () | +| main.rs:92:18:92:33 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:92:18:92:33 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:93:9:93:9 | x | | main.rs:72:5:72:21 | Foo | | main.rs:93:9:93:14 | x.m1() | | main.rs:72:5:72:21 | Foo | | main.rs:94:9:94:9 | y | | main.rs:72:5:72:21 | Foo | @@ -1291,7 +1291,7 @@ inferType | main.rs:110:39:112:9 | { ... } | | {EXTERNAL LOCATION} | bool | | main.rs:111:13:111:16 | self | | main.rs:99:5:102:5 | MyThing | | main.rs:111:13:111:22 | self.field | | {EXTERNAL LOCATION} | bool | -| main.rs:115:16:121:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:115:16:121:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:116:13:116:13 | x | | main.rs:99:5:102:5 | MyThing | | main.rs:116:17:116:39 | MyThing {...} | | main.rs:99:5:102:5 | MyThing | | main.rs:116:34:116:37 | true | | {EXTERNAL LOCATION} | bool | @@ -1304,39 +1304,39 @@ inferType | main.rs:120:13:120:13 | b | | {EXTERNAL LOCATION} | bool | | main.rs:120:17:120:40 | ...::trait_method(...) | | {EXTERNAL LOCATION} | bool | | main.rs:120:39:120:39 | y | | main.rs:99:5:102:5 | MyThing | -| main.rs:130:25:130:29 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:130:25:130:29 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:130:25:130:29 | SelfParam | &T | main.rs:128:9:133:9 | Self [trait Foo] | -| main.rs:130:32:132:13 | { ... } | | file://:0:0:0:0 | () | -| main.rs:131:26:131:31 | "foo!\\n" | | file://:0:0:0:0 | & | +| main.rs:130:32:132:13 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:131:26:131:31 | "foo!\\n" | | {EXTERNAL LOCATION} | & | | main.rs:131:26:131:31 | "foo!\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:131:26:131:31 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:131:26:131:31 | { ... } | | file://:0:0:0:0 | () | -| main.rs:137:25:137:29 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:131:26:131:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:131:26:131:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:137:25:137:29 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:137:25:137:29 | SelfParam | &T | main.rs:135:9:140:9 | Self [trait Bar] | -| main.rs:137:32:139:13 | { ... } | | file://:0:0:0:0 | () | -| main.rs:138:26:138:31 | "bar!\\n" | | file://:0:0:0:0 | & | +| main.rs:137:32:139:13 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:138:26:138:31 | "bar!\\n" | | {EXTERNAL LOCATION} | & | | main.rs:138:26:138:31 | "bar!\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:138:26:138:31 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:138:26:138:31 | { ... } | | file://:0:0:0:0 | () | -| main.rs:149:15:170:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:138:26:138:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:138:26:138:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:149:15:170:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:150:13:150:13 | x | | main.rs:142:9:142:21 | X | | main.rs:150:17:150:17 | X | | main.rs:142:9:142:21 | X | -| main.rs:151:9:154:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:151:9:154:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:153:13:153:13 | x | | main.rs:142:9:142:21 | X | -| main.rs:153:13:153:24 | x.a_method() | | file://:0:0:0:0 | () | -| main.rs:155:9:158:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:153:13:153:24 | x.a_method() | | {EXTERNAL LOCATION} | () | +| main.rs:155:9:158:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:157:13:157:13 | x | | main.rs:142:9:142:21 | X | -| main.rs:157:13:157:24 | x.a_method() | | file://:0:0:0:0 | () | -| main.rs:159:9:162:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:157:13:157:24 | x.a_method() | | {EXTERNAL LOCATION} | () | +| main.rs:159:9:162:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:161:13:161:13 | x | | main.rs:142:9:142:21 | X | -| main.rs:161:13:161:24 | x.a_method() | | file://:0:0:0:0 | () | -| main.rs:163:9:169:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:167:13:167:29 | ...::a_method(...) | | file://:0:0:0:0 | () | -| main.rs:167:27:167:28 | &x | | file://:0:0:0:0 | & | +| main.rs:161:13:161:24 | x.a_method() | | {EXTERNAL LOCATION} | () | +| main.rs:163:9:169:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:167:13:167:29 | ...::a_method(...) | | {EXTERNAL LOCATION} | () | +| main.rs:167:27:167:28 | &x | | {EXTERNAL LOCATION} | & | | main.rs:167:27:167:28 | &x | &T | main.rs:142:9:142:21 | X | | main.rs:167:28:167:28 | x | | main.rs:142:9:142:21 | X | -| main.rs:168:13:168:29 | ...::a_method(...) | | file://:0:0:0:0 | () | -| main.rs:168:27:168:28 | &x | | file://:0:0:0:0 | & | +| main.rs:168:13:168:29 | ...::a_method(...) | | {EXTERNAL LOCATION} | () | +| main.rs:168:27:168:28 | &x | | {EXTERNAL LOCATION} | & | | main.rs:168:27:168:28 | &x | &T | main.rs:142:9:142:21 | X | | main.rs:168:28:168:28 | x | | main.rs:142:9:142:21 | X | | main.rs:186:15:186:18 | SelfParam | | main.rs:174:5:177:5 | MyThing | @@ -1360,7 +1360,7 @@ inferType | main.rs:200:13:200:16 | self | | main.rs:174:5:177:5 | MyThing | | main.rs:200:13:200:16 | self | A | main.rs:198:10:198:10 | T | | main.rs:200:13:200:18 | self.a | | main.rs:198:10:198:10 | T | -| main.rs:204:16:220:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:204:16:220:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:205:13:205:13 | x | | main.rs:174:5:177:5 | MyThing | | main.rs:205:13:205:13 | x | A | main.rs:179:5:180:14 | S1 | | main.rs:205:17:205:33 | MyThing {...} | | main.rs:174:5:177:5 | MyThing | @@ -1371,31 +1371,31 @@ inferType | main.rs:206:17:206:33 | MyThing {...} | | main.rs:174:5:177:5 | MyThing | | main.rs:206:17:206:33 | MyThing {...} | A | main.rs:181:5:182:14 | S2 | | main.rs:206:30:206:31 | S2 | | main.rs:181:5:182:14 | S2 | -| main.rs:209:18:209:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:209:18:209:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:209:18:209:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:209:18:209:28 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:209:18:209:28 | { ... } | | file://:0:0:0:0 | () | +| main.rs:209:18:209:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:209:18:209:28 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:209:26:209:26 | x | | main.rs:174:5:177:5 | MyThing | | main.rs:209:26:209:26 | x | A | main.rs:179:5:180:14 | S1 | | main.rs:209:26:209:28 | x.a | | main.rs:179:5:180:14 | S1 | -| main.rs:210:18:210:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:210:18:210:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:210:18:210:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:210:18:210:28 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:210:18:210:28 | { ... } | | file://:0:0:0:0 | () | +| main.rs:210:18:210:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:210:18:210:28 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:210:26:210:26 | y | | main.rs:174:5:177:5 | MyThing | | main.rs:210:26:210:26 | y | A | main.rs:181:5:182:14 | S2 | | main.rs:210:26:210:28 | y.a | | main.rs:181:5:182:14 | S2 | -| main.rs:212:18:212:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:212:18:212:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:212:18:212:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:212:18:212:31 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:212:18:212:31 | { ... } | | file://:0:0:0:0 | () | +| main.rs:212:18:212:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:212:18:212:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:212:26:212:26 | x | | main.rs:174:5:177:5 | MyThing | | main.rs:212:26:212:26 | x | A | main.rs:179:5:180:14 | S1 | | main.rs:212:26:212:31 | x.m1() | | main.rs:179:5:180:14 | S1 | -| main.rs:213:18:213:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:213:18:213:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:213:18:213:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:213:18:213:33 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:213:18:213:33 | { ... } | | file://:0:0:0:0 | () | +| main.rs:213:18:213:33 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:213:18:213:33 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:213:26:213:26 | y | | main.rs:174:5:177:5 | MyThing | | main.rs:213:26:213:26 | y | A | main.rs:181:5:182:14 | S2 | | main.rs:213:26:213:31 | y.m1() | | main.rs:174:5:177:5 | MyThing | @@ -1411,17 +1411,17 @@ inferType | main.rs:216:17:216:33 | MyThing {...} | | main.rs:174:5:177:5 | MyThing | | main.rs:216:17:216:33 | MyThing {...} | A | main.rs:181:5:182:14 | S2 | | main.rs:216:30:216:31 | S2 | | main.rs:181:5:182:14 | S2 | -| main.rs:218:18:218:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:218:18:218:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:218:18:218:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:218:18:218:31 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:218:18:218:31 | { ... } | | file://:0:0:0:0 | () | +| main.rs:218:18:218:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:218:18:218:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:218:26:218:26 | x | | main.rs:174:5:177:5 | MyThing | | main.rs:218:26:218:26 | x | A | main.rs:179:5:180:14 | S1 | | main.rs:218:26:218:31 | x.m2() | | main.rs:179:5:180:14 | S1 | -| main.rs:219:18:219:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:219:18:219:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:219:18:219:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:219:18:219:31 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:219:18:219:31 | { ... } | | file://:0:0:0:0 | () | +| main.rs:219:18:219:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:219:18:219:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:219:26:219:26 | y | | main.rs:174:5:177:5 | MyThing | | main.rs:219:26:219:26 | y | A | main.rs:181:5:182:14 | S2 | | main.rs:219:26:219:31 | y.m2() | | main.rs:181:5:182:14 | S2 | @@ -1545,7 +1545,7 @@ inferType | main.rs:366:73:369:5 | { ... } | | main.rs:235:5:236:14 | S1 | | main.rs:368:9:368:13 | thing | | main.rs:366:39:366:53 | TP | | main.rs:368:9:368:26 | thing.convert_to() | | main.rs:235:5:236:14 | S1 | -| main.rs:371:16:442:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:371:16:442:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:372:13:372:20 | thing_s1 | | main.rs:224:5:227:5 | MyThing | | main.rs:372:13:372:20 | thing_s1 | A | main.rs:235:5:236:14 | S1 | | main.rs:372:24:372:40 | MyThing {...} | | main.rs:224:5:227:5 | MyThing | @@ -1561,17 +1561,17 @@ inferType | main.rs:374:24:374:40 | MyThing {...} | | main.rs:224:5:227:5 | MyThing | | main.rs:374:24:374:40 | MyThing {...} | A | main.rs:239:5:240:14 | S3 | | main.rs:374:37:374:38 | S3 | | main.rs:239:5:240:14 | S3 | -| main.rs:378:18:378:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:378:18:378:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:378:18:378:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:378:18:378:38 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:378:18:378:38 | { ... } | | file://:0:0:0:0 | () | +| main.rs:378:18:378:38 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:378:18:378:38 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:378:26:378:33 | thing_s1 | | main.rs:224:5:227:5 | MyThing | | main.rs:378:26:378:33 | thing_s1 | A | main.rs:235:5:236:14 | S1 | | main.rs:378:26:378:38 | thing_s1.m1() | | main.rs:235:5:236:14 | S1 | -| main.rs:379:18:379:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:379:18:379:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:379:18:379:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:379:18:379:40 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:379:18:379:40 | { ... } | | file://:0:0:0:0 | () | +| main.rs:379:18:379:40 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:379:18:379:40 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:379:26:379:33 | thing_s2 | | main.rs:224:5:227:5 | MyThing | | main.rs:379:26:379:33 | thing_s2 | A | main.rs:237:5:238:14 | S2 | | main.rs:379:26:379:38 | thing_s2.m1() | | main.rs:224:5:227:5 | MyThing | @@ -1581,10 +1581,10 @@ inferType | main.rs:380:22:380:29 | thing_s3 | | main.rs:224:5:227:5 | MyThing | | main.rs:380:22:380:29 | thing_s3 | A | main.rs:239:5:240:14 | S3 | | main.rs:380:22:380:34 | thing_s3.m1() | | main.rs:239:5:240:14 | S3 | -| main.rs:381:18:381:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:381:18:381:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:381:18:381:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:381:18:381:27 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:381:18:381:27 | { ... } | | file://:0:0:0:0 | () | +| main.rs:381:18:381:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:381:18:381:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:381:26:381:27 | s3 | | main.rs:239:5:240:14 | S3 | | main.rs:383:13:383:14 | p1 | | main.rs:229:5:233:5 | MyPair | | main.rs:383:13:383:14 | p1 | P1 | main.rs:235:5:236:14 | S1 | @@ -1594,10 +1594,10 @@ inferType | main.rs:383:18:383:42 | MyPair {...} | P2 | main.rs:235:5:236:14 | S1 | | main.rs:383:31:383:32 | S1 | | main.rs:235:5:236:14 | S1 | | main.rs:383:39:383:40 | S1 | | main.rs:235:5:236:14 | S1 | -| main.rs:384:18:384:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:384:18:384:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:384:18:384:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:384:18:384:32 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:384:18:384:32 | { ... } | | file://:0:0:0:0 | () | +| main.rs:384:18:384:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:384:18:384:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:384:26:384:27 | p1 | | main.rs:229:5:233:5 | MyPair | | main.rs:384:26:384:27 | p1 | P1 | main.rs:235:5:236:14 | S1 | | main.rs:384:26:384:27 | p1 | P2 | main.rs:235:5:236:14 | S1 | @@ -1610,10 +1610,10 @@ inferType | main.rs:386:18:386:42 | MyPair {...} | P2 | main.rs:237:5:238:14 | S2 | | main.rs:386:31:386:32 | S1 | | main.rs:235:5:236:14 | S1 | | main.rs:386:39:386:40 | S2 | | main.rs:237:5:238:14 | S2 | -| main.rs:387:18:387:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:387:18:387:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:387:18:387:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:387:18:387:32 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:387:18:387:32 | { ... } | | file://:0:0:0:0 | () | +| main.rs:387:18:387:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:387:18:387:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:387:26:387:27 | p2 | | main.rs:229:5:233:5 | MyPair | | main.rs:387:26:387:27 | p2 | P1 | main.rs:235:5:236:14 | S1 | | main.rs:387:26:387:27 | p2 | P2 | main.rs:237:5:238:14 | S2 | @@ -1630,10 +1630,10 @@ inferType | main.rs:390:17:390:33 | MyThing {...} | A | main.rs:235:5:236:14 | S1 | | main.rs:390:30:390:31 | S1 | | main.rs:235:5:236:14 | S1 | | main.rs:391:17:391:18 | S3 | | main.rs:239:5:240:14 | S3 | -| main.rs:393:18:393:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:393:18:393:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:393:18:393:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:393:18:393:32 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:393:18:393:32 | { ... } | | file://:0:0:0:0 | () | +| main.rs:393:18:393:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:393:18:393:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:393:26:393:27 | p3 | | main.rs:229:5:233:5 | MyPair | | main.rs:393:26:393:27 | p3 | P1 | main.rs:224:5:227:5 | MyThing | | main.rs:393:26:393:27 | p3 | P1.A | main.rs:235:5:236:14 | S1 | @@ -1652,20 +1652,20 @@ inferType | main.rs:397:17:397:17 | a | P1 | main.rs:235:5:236:14 | S1 | | main.rs:397:17:397:17 | a | P2 | main.rs:235:5:236:14 | S1 | | main.rs:397:17:397:23 | a.fst() | | main.rs:235:5:236:14 | S1 | -| main.rs:398:18:398:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:398:18:398:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:398:18:398:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:398:18:398:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:398:18:398:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:398:18:398:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:398:18:398:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:398:26:398:26 | x | | main.rs:235:5:236:14 | S1 | | main.rs:399:13:399:13 | y | | main.rs:235:5:236:14 | S1 | | main.rs:399:17:399:17 | a | | main.rs:229:5:233:5 | MyPair | | main.rs:399:17:399:17 | a | P1 | main.rs:235:5:236:14 | S1 | | main.rs:399:17:399:17 | a | P2 | main.rs:235:5:236:14 | S1 | | main.rs:399:17:399:23 | a.snd() | | main.rs:235:5:236:14 | S1 | -| main.rs:400:18:400:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:400:18:400:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:400:18:400:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:400:18:400:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:400:18:400:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:400:18:400:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:400:18:400:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:400:26:400:26 | y | | main.rs:235:5:236:14 | S1 | | main.rs:406:13:406:13 | b | | main.rs:229:5:233:5 | MyPair | | main.rs:406:13:406:13 | b | P1 | main.rs:237:5:238:14 | S2 | @@ -1680,29 +1680,29 @@ inferType | main.rs:407:17:407:17 | b | P1 | main.rs:237:5:238:14 | S2 | | main.rs:407:17:407:17 | b | P2 | main.rs:235:5:236:14 | S1 | | main.rs:407:17:407:23 | b.fst() | | main.rs:235:5:236:14 | S1 | -| main.rs:408:18:408:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:408:18:408:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:408:18:408:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:408:18:408:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:408:18:408:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:408:18:408:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:408:18:408:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:408:26:408:26 | x | | main.rs:235:5:236:14 | S1 | | main.rs:409:13:409:13 | y | | main.rs:237:5:238:14 | S2 | | main.rs:409:17:409:17 | b | | main.rs:229:5:233:5 | MyPair | | main.rs:409:17:409:17 | b | P1 | main.rs:237:5:238:14 | S2 | | main.rs:409:17:409:17 | b | P2 | main.rs:235:5:236:14 | S1 | | main.rs:409:17:409:23 | b.snd() | | main.rs:237:5:238:14 | S2 | -| main.rs:410:18:410:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:410:18:410:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:410:18:410:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:410:18:410:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:410:18:410:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:410:18:410:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:410:18:410:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:410:26:410:26 | y | | main.rs:237:5:238:14 | S2 | | main.rs:414:13:414:13 | x | | main.rs:235:5:236:14 | S1 | | main.rs:414:17:414:39 | call_trait_m1(...) | | main.rs:235:5:236:14 | S1 | | main.rs:414:31:414:38 | thing_s1 | | main.rs:224:5:227:5 | MyThing | | main.rs:414:31:414:38 | thing_s1 | A | main.rs:235:5:236:14 | S1 | -| main.rs:415:18:415:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:415:18:415:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:415:18:415:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:415:18:415:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:415:18:415:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:415:18:415:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:415:18:415:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:415:26:415:26 | x | | main.rs:235:5:236:14 | S1 | | main.rs:416:13:416:13 | y | | main.rs:224:5:227:5 | MyThing | | main.rs:416:13:416:13 | y | A | main.rs:237:5:238:14 | S2 | @@ -1710,10 +1710,10 @@ inferType | main.rs:416:17:416:39 | call_trait_m1(...) | A | main.rs:237:5:238:14 | S2 | | main.rs:416:31:416:38 | thing_s2 | | main.rs:224:5:227:5 | MyThing | | main.rs:416:31:416:38 | thing_s2 | A | main.rs:237:5:238:14 | S2 | -| main.rs:417:18:417:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:417:18:417:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:417:18:417:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:417:18:417:28 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:417:18:417:28 | { ... } | | file://:0:0:0:0 | () | +| main.rs:417:18:417:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:417:18:417:28 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:417:26:417:26 | y | | main.rs:224:5:227:5 | MyThing | | main.rs:417:26:417:26 | y | A | main.rs:237:5:238:14 | S2 | | main.rs:417:26:417:28 | y.a | | main.rs:237:5:238:14 | S2 | @@ -1730,20 +1730,20 @@ inferType | main.rs:421:25:421:25 | a | | main.rs:229:5:233:5 | MyPair | | main.rs:421:25:421:25 | a | P1 | main.rs:235:5:236:14 | S1 | | main.rs:421:25:421:25 | a | P2 | main.rs:235:5:236:14 | S1 | -| main.rs:422:18:422:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:422:18:422:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:422:18:422:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:422:18:422:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:422:18:422:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:422:18:422:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:422:18:422:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:422:26:422:26 | x | | main.rs:235:5:236:14 | S1 | | main.rs:423:13:423:13 | y | | main.rs:235:5:236:14 | S1 | | main.rs:423:17:423:26 | get_snd(...) | | main.rs:235:5:236:14 | S1 | | main.rs:423:25:423:25 | a | | main.rs:229:5:233:5 | MyPair | | main.rs:423:25:423:25 | a | P1 | main.rs:235:5:236:14 | S1 | | main.rs:423:25:423:25 | a | P2 | main.rs:235:5:236:14 | S1 | -| main.rs:424:18:424:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:424:18:424:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:424:18:424:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:424:18:424:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:424:18:424:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:424:18:424:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:424:18:424:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:424:26:424:26 | y | | main.rs:235:5:236:14 | S1 | | main.rs:427:13:427:13 | b | | main.rs:229:5:233:5 | MyPair | | main.rs:427:13:427:13 | b | P1 | main.rs:237:5:238:14 | S2 | @@ -1758,20 +1758,20 @@ inferType | main.rs:428:25:428:25 | b | | main.rs:229:5:233:5 | MyPair | | main.rs:428:25:428:25 | b | P1 | main.rs:237:5:238:14 | S2 | | main.rs:428:25:428:25 | b | P2 | main.rs:235:5:236:14 | S1 | -| main.rs:429:18:429:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:429:18:429:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:429:18:429:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:429:18:429:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:429:18:429:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:429:18:429:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:429:18:429:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:429:26:429:26 | x | | main.rs:235:5:236:14 | S1 | | main.rs:430:13:430:13 | y | | main.rs:237:5:238:14 | S2 | | main.rs:430:17:430:26 | get_snd(...) | | main.rs:237:5:238:14 | S2 | | main.rs:430:25:430:25 | b | | main.rs:229:5:233:5 | MyPair | | main.rs:430:25:430:25 | b | P1 | main.rs:237:5:238:14 | S2 | | main.rs:430:25:430:25 | b | P2 | main.rs:235:5:236:14 | S1 | -| main.rs:431:18:431:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:431:18:431:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:431:18:431:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:431:18:431:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:431:18:431:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:431:18:431:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:431:18:431:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:431:26:431:26 | y | | main.rs:237:5:238:14 | S2 | | main.rs:433:13:433:13 | c | | main.rs:229:5:233:5 | MyPair | | main.rs:433:13:433:13 | c | P1 | main.rs:239:5:240:14 | S3 | @@ -1851,66 +1851,66 @@ inferType | main.rs:512:34:512:35 | s1 | | main.rs:446:5:447:14 | S1 | | main.rs:512:48:514:9 | { ... } | | main.rs:446:5:447:14 | S1 | | main.rs:513:13:513:14 | S1 | | main.rs:446:5:447:14 | S1 | -| main.rs:521:14:521:18 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:521:14:521:18 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:521:14:521:18 | SelfParam | &T | main.rs:520:5:522:5 | Self [trait OverlappingTrait2] | -| main.rs:521:21:521:21 | x | | file://:0:0:0:0 | & | +| main.rs:521:21:521:21 | x | | {EXTERNAL LOCATION} | & | | main.rs:521:21:521:21 | x | &T | main.rs:520:29:520:29 | T | -| main.rs:526:14:526:18 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:526:14:526:18 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:526:14:526:18 | SelfParam | &T | main.rs:517:5:518:22 | S3 | | main.rs:526:14:526:18 | SelfParam | &T.T3 | main.rs:524:10:524:10 | T | -| main.rs:526:21:526:21 | x | | file://:0:0:0:0 | & | +| main.rs:526:21:526:21 | x | | {EXTERNAL LOCATION} | & | | main.rs:526:21:526:21 | x | &T | main.rs:524:10:524:10 | T | -| main.rs:526:37:528:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:526:37:528:9 | { ... } | | {EXTERNAL LOCATION} | & | | main.rs:526:37:528:9 | { ... } | &T | main.rs:517:5:518:22 | S3 | | main.rs:526:37:528:9 | { ... } | &T.T3 | main.rs:524:10:524:10 | T | -| main.rs:527:13:527:16 | self | | file://:0:0:0:0 | & | +| main.rs:527:13:527:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:527:13:527:16 | self | &T | main.rs:517:5:518:22 | S3 | | main.rs:527:13:527:16 | self | &T.T3 | main.rs:524:10:524:10 | T | -| main.rs:533:14:533:18 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:533:14:533:18 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:533:14:533:18 | SelfParam | &T | main.rs:517:5:518:22 | S3 | | main.rs:533:14:533:18 | SelfParam | &T.T3 | main.rs:531:10:531:10 | T | | main.rs:533:21:533:21 | x | | main.rs:531:10:531:10 | T | -| main.rs:533:36:535:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:533:36:535:9 | { ... } | | {EXTERNAL LOCATION} | & | | main.rs:533:36:535:9 | { ... } | &T | main.rs:517:5:518:22 | S3 | | main.rs:533:36:535:9 | { ... } | &T.T3 | main.rs:531:10:531:10 | T | -| main.rs:534:13:534:16 | self | | file://:0:0:0:0 | & | +| main.rs:534:13:534:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:534:13:534:16 | self | &T | main.rs:517:5:518:22 | S3 | | main.rs:534:13:534:16 | self | &T.T3 | main.rs:531:10:531:10 | T | -| main.rs:540:14:540:18 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:540:14:540:18 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:540:14:540:18 | SelfParam | &T | main.rs:538:5:541:5 | Self [trait MyTrait1] | -| main.rs:540:21:540:22 | { ... } | | file://:0:0:0:0 | () | -| main.rs:550:14:550:18 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:540:21:540:22 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:550:14:550:18 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:550:14:550:18 | SelfParam | &T | main.rs:545:5:546:14 | S4 | -| main.rs:550:21:550:22 | { ... } | | file://:0:0:0:0 | () | -| main.rs:560:14:560:18 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:550:21:550:22 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:560:14:560:18 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:560:14:560:18 | SelfParam | &T | main.rs:555:5:556:22 | S5 | | main.rs:560:14:560:18 | SelfParam | &T.T5 | {EXTERNAL LOCATION} | i32 | -| main.rs:560:21:560:22 | { ... } | | file://:0:0:0:0 | () | -| main.rs:569:16:595:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:560:21:560:22 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:569:16:595:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:570:13:570:13 | x | | main.rs:446:5:447:14 | S1 | | main.rs:570:17:570:18 | S1 | | main.rs:446:5:447:14 | S1 | -| main.rs:571:18:571:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:571:18:571:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:571:18:571:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:571:18:571:42 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:571:18:571:42 | { ... } | | file://:0:0:0:0 | () | +| main.rs:571:18:571:42 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:571:18:571:42 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:571:26:571:26 | x | | main.rs:446:5:447:14 | S1 | | main.rs:571:26:571:42 | x.common_method() | | main.rs:446:5:447:14 | S1 | -| main.rs:572:18:572:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:572:18:572:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:572:18:572:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:572:18:572:45 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:572:18:572:45 | { ... } | | file://:0:0:0:0 | () | +| main.rs:572:18:572:45 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:572:18:572:45 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:572:26:572:45 | ...::common_method(...) | | main.rs:446:5:447:14 | S1 | | main.rs:572:44:572:44 | x | | main.rs:446:5:447:14 | S1 | -| main.rs:573:18:573:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:573:18:573:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:573:18:573:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:573:18:573:44 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:573:18:573:44 | { ... } | | file://:0:0:0:0 | () | +| main.rs:573:18:573:44 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:573:18:573:44 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:573:26:573:26 | x | | main.rs:446:5:447:14 | S1 | | main.rs:573:26:573:44 | x.common_method_2() | | main.rs:446:5:447:14 | S1 | -| main.rs:574:18:574:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:574:18:574:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:574:18:574:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:574:18:574:47 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:574:18:574:47 | { ... } | | file://:0:0:0:0 | () | +| main.rs:574:18:574:47 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:574:18:574:47 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:574:26:574:47 | ...::common_method_2(...) | | main.rs:446:5:447:14 | S1 | | main.rs:574:46:574:46 | x | | main.rs:446:5:447:14 | S1 | | main.rs:576:13:576:13 | y | | main.rs:479:5:479:22 | S2 | @@ -1918,17 +1918,17 @@ inferType | main.rs:576:17:576:22 | S2(...) | | main.rs:479:5:479:22 | S2 | | main.rs:576:17:576:22 | S2(...) | T2 | main.rs:446:5:447:14 | S1 | | main.rs:576:20:576:21 | S1 | | main.rs:446:5:447:14 | S1 | -| main.rs:577:18:577:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:577:18:577:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:577:18:577:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:577:18:577:42 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:577:18:577:42 | { ... } | | file://:0:0:0:0 | () | +| main.rs:577:18:577:42 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:577:18:577:42 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:577:26:577:26 | y | | main.rs:479:5:479:22 | S2 | | main.rs:577:26:577:26 | y | T2 | main.rs:446:5:447:14 | S1 | | main.rs:577:26:577:42 | y.common_method() | | main.rs:446:5:447:14 | S1 | -| main.rs:578:18:578:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:578:18:578:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:578:18:578:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:578:18:578:56 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:578:18:578:56 | { ... } | | file://:0:0:0:0 | () | +| main.rs:578:18:578:56 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:578:18:578:56 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:578:26:578:56 | ...::common_method(...) | | main.rs:446:5:447:14 | S1 | | main.rs:578:50:578:55 | S2(...) | | main.rs:479:5:479:22 | S2 | | main.rs:578:50:578:55 | S2(...) | T2 | main.rs:446:5:447:14 | S1 | @@ -1938,25 +1938,25 @@ inferType | main.rs:580:17:580:21 | S2(...) | | main.rs:479:5:479:22 | S2 | | main.rs:580:17:580:21 | S2(...) | T2 | {EXTERNAL LOCATION} | i32 | | main.rs:580:20:580:20 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:581:18:581:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:581:18:581:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:581:18:581:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:581:18:581:42 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:581:18:581:42 | { ... } | | file://:0:0:0:0 | () | +| main.rs:581:18:581:42 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:581:18:581:42 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:581:26:581:26 | z | | main.rs:479:5:479:22 | S2 | | main.rs:581:26:581:26 | z | T2 | {EXTERNAL LOCATION} | i32 | | main.rs:581:26:581:42 | z.common_method() | | main.rs:446:5:447:14 | S1 | -| main.rs:582:18:582:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:582:18:582:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:582:18:582:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:582:18:582:49 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:582:18:582:49 | { ... } | | file://:0:0:0:0 | () | +| main.rs:582:18:582:49 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:582:18:582:49 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:582:26:582:49 | ...::common_method(...) | | main.rs:446:5:447:14 | S1 | | main.rs:582:44:582:48 | S2(...) | | main.rs:479:5:479:22 | S2 | | main.rs:582:44:582:48 | S2(...) | T2 | {EXTERNAL LOCATION} | i32 | | main.rs:582:47:582:47 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:583:18:583:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:583:18:583:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:583:18:583:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:583:18:583:56 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:583:18:583:56 | { ... } | | file://:0:0:0:0 | () | +| main.rs:583:18:583:56 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:583:18:583:56 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:583:26:583:56 | ...::common_method(...) | | main.rs:446:5:447:14 | S1 | | main.rs:583:51:583:55 | S2(...) | | main.rs:479:5:479:22 | S2 | | main.rs:583:51:583:55 | S2(...) | T2 | {EXTERNAL LOCATION} | i32 | @@ -1966,41 +1966,41 @@ inferType | main.rs:585:17:585:22 | S3(...) | | main.rs:517:5:518:22 | S3 | | main.rs:585:17:585:22 | S3(...) | T3 | main.rs:446:5:447:14 | S1 | | main.rs:585:20:585:21 | S1 | | main.rs:446:5:447:14 | S1 | -| main.rs:586:18:586:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:586:18:586:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:586:18:586:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:586:18:586:31 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:586:18:586:31 | { ... } | | file://:0:0:0:0 | () | +| main.rs:586:18:586:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:586:18:586:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:586:26:586:26 | w | | main.rs:517:5:518:22 | S3 | | main.rs:586:26:586:26 | w | T3 | main.rs:446:5:447:14 | S1 | -| main.rs:586:26:586:31 | w.m(...) | | file://:0:0:0:0 | & | +| main.rs:586:26:586:31 | w.m(...) | | {EXTERNAL LOCATION} | & | | main.rs:586:26:586:31 | w.m(...) | &T | main.rs:517:5:518:22 | S3 | | main.rs:586:26:586:31 | w.m(...) | &T.T3 | main.rs:446:5:447:14 | S1 | | main.rs:586:30:586:30 | x | | main.rs:446:5:447:14 | S1 | -| main.rs:587:18:587:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:587:18:587:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:587:18:587:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:587:18:587:37 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:587:18:587:37 | { ... } | | file://:0:0:0:0 | () | -| main.rs:587:26:587:37 | ...::m(...) | | file://:0:0:0:0 | & | +| main.rs:587:18:587:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:587:18:587:37 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:587:26:587:37 | ...::m(...) | | {EXTERNAL LOCATION} | & | | main.rs:587:26:587:37 | ...::m(...) | &T | main.rs:517:5:518:22 | S3 | | main.rs:587:26:587:37 | ...::m(...) | &T.T3 | main.rs:446:5:447:14 | S1 | -| main.rs:587:32:587:33 | &w | | file://:0:0:0:0 | & | +| main.rs:587:32:587:33 | &w | | {EXTERNAL LOCATION} | & | | main.rs:587:32:587:33 | &w | &T | main.rs:517:5:518:22 | S3 | | main.rs:587:32:587:33 | &w | &T.T3 | main.rs:446:5:447:14 | S1 | | main.rs:587:33:587:33 | w | | main.rs:517:5:518:22 | S3 | | main.rs:587:33:587:33 | w | T3 | main.rs:446:5:447:14 | S1 | | main.rs:587:36:587:36 | x | | main.rs:446:5:447:14 | S1 | | main.rs:589:9:589:10 | S4 | | main.rs:545:5:546:14 | S4 | -| main.rs:589:9:589:14 | S4.m() | | file://:0:0:0:0 | () | -| main.rs:590:9:590:18 | ...::m(...) | | file://:0:0:0:0 | () | -| main.rs:590:15:590:17 | &S4 | | file://:0:0:0:0 | & | +| main.rs:589:9:589:14 | S4.m() | | {EXTERNAL LOCATION} | () | +| main.rs:590:9:590:18 | ...::m(...) | | {EXTERNAL LOCATION} | () | +| main.rs:590:15:590:17 | &S4 | | {EXTERNAL LOCATION} | & | | main.rs:590:15:590:17 | &S4 | &T | main.rs:545:5:546:14 | S4 | | main.rs:590:16:590:17 | S4 | | main.rs:545:5:546:14 | S4 | | main.rs:591:9:591:16 | S5(...) | | main.rs:555:5:556:22 | S5 | | main.rs:591:9:591:16 | S5(...) | T5 | {EXTERNAL LOCATION} | i32 | -| main.rs:591:9:591:20 | ... .m() | | file://:0:0:0:0 | () | +| main.rs:591:9:591:20 | ... .m() | | {EXTERNAL LOCATION} | () | | main.rs:591:12:591:15 | 0i32 | | {EXTERNAL LOCATION} | i32 | -| main.rs:592:9:592:24 | ...::m(...) | | file://:0:0:0:0 | () | -| main.rs:592:15:592:23 | &... | | file://:0:0:0:0 | & | +| main.rs:592:9:592:24 | ...::m(...) | | {EXTERNAL LOCATION} | () | +| main.rs:592:15:592:23 | &... | | {EXTERNAL LOCATION} | & | | main.rs:592:15:592:23 | &... | &T | main.rs:555:5:556:22 | S5 | | main.rs:592:15:592:23 | &... | &T.T5 | {EXTERNAL LOCATION} | i32 | | main.rs:592:16:592:23 | S5(...) | | main.rs:555:5:556:22 | S5 | @@ -2008,10 +2008,10 @@ inferType | main.rs:592:19:592:22 | 0i32 | | {EXTERNAL LOCATION} | i32 | | main.rs:593:9:593:16 | S5(...) | | main.rs:555:5:556:22 | S5 | | main.rs:593:9:593:16 | S5(...) | T5 | {EXTERNAL LOCATION} | bool | -| main.rs:593:9:593:20 | ... .m() | | file://:0:0:0:0 | () | +| main.rs:593:9:593:20 | ... .m() | | {EXTERNAL LOCATION} | () | | main.rs:593:12:593:15 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:594:9:594:24 | ...::m(...) | | file://:0:0:0:0 | () | -| main.rs:594:15:594:23 | &... | | file://:0:0:0:0 | & | +| main.rs:594:9:594:24 | ...::m(...) | | {EXTERNAL LOCATION} | () | +| main.rs:594:15:594:23 | &... | | {EXTERNAL LOCATION} | & | | main.rs:594:15:594:23 | &... | &T | main.rs:555:5:556:22 | S5 | | main.rs:594:15:594:23 | &... | &T.T5 | {EXTERNAL LOCATION} | bool | | main.rs:594:16:594:23 | S5(...) | | main.rs:555:5:556:22 | S5 | @@ -2020,60 +2020,60 @@ inferType | main.rs:611:19:611:22 | SelfParam | | main.rs:609:5:612:5 | Self [trait FirstTrait] | | main.rs:616:19:616:22 | SelfParam | | main.rs:614:5:617:5 | Self [trait SecondTrait] | | main.rs:619:64:619:64 | x | | main.rs:619:45:619:61 | T | -| main.rs:619:70:623:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:619:70:623:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:621:13:621:14 | s1 | | main.rs:619:35:619:42 | I | | main.rs:621:18:621:18 | x | | main.rs:619:45:619:61 | T | | main.rs:621:18:621:27 | x.method() | | main.rs:619:35:619:42 | I | -| main.rs:622:18:622:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:622:18:622:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:622:18:622:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:622:18:622:27 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:622:18:622:27 | { ... } | | file://:0:0:0:0 | () | +| main.rs:622:18:622:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:622:18:622:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:622:26:622:27 | s1 | | main.rs:619:35:619:42 | I | | main.rs:625:65:625:65 | x | | main.rs:625:46:625:62 | T | -| main.rs:625:71:629:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:625:71:629:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:627:13:627:14 | s2 | | main.rs:625:36:625:43 | I | | main.rs:627:18:627:18 | x | | main.rs:625:46:625:62 | T | | main.rs:627:18:627:27 | x.method() | | main.rs:625:36:625:43 | I | -| main.rs:628:18:628:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:628:18:628:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:628:18:628:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:628:18:628:27 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:628:18:628:27 | { ... } | | file://:0:0:0:0 | () | +| main.rs:628:18:628:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:628:18:628:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:628:26:628:27 | s2 | | main.rs:625:36:625:43 | I | | main.rs:631:49:631:49 | x | | main.rs:631:30:631:46 | T | -| main.rs:631:55:634:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:631:55:634:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:632:13:632:13 | s | | main.rs:601:5:602:14 | S1 | | main.rs:632:17:632:17 | x | | main.rs:631:30:631:46 | T | | main.rs:632:17:632:26 | x.method() | | main.rs:601:5:602:14 | S1 | -| main.rs:633:18:633:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:633:18:633:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:633:18:633:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:633:18:633:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:633:18:633:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:633:18:633:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:633:18:633:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:633:26:633:26 | s | | main.rs:601:5:602:14 | S1 | | main.rs:636:53:636:53 | x | | main.rs:636:34:636:50 | T | -| main.rs:636:59:639:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:636:59:639:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:637:13:637:13 | s | | main.rs:601:5:602:14 | S1 | | main.rs:637:17:637:17 | x | | main.rs:636:34:636:50 | T | | main.rs:637:17:637:26 | x.method() | | main.rs:601:5:602:14 | S1 | -| main.rs:638:18:638:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:638:18:638:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:638:18:638:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:638:18:638:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:638:18:638:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:638:18:638:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:638:18:638:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:638:26:638:26 | s | | main.rs:601:5:602:14 | S1 | | main.rs:641:43:641:43 | x | | main.rs:641:40:641:40 | T | -| main.rs:644:5:647:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:644:5:647:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:645:13:645:13 | s | | main.rs:601:5:602:14 | S1 | | main.rs:645:17:645:17 | x | | main.rs:641:40:641:40 | T | | main.rs:645:17:645:26 | x.method() | | main.rs:601:5:602:14 | S1 | -| main.rs:646:18:646:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:646:18:646:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:646:18:646:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:646:18:646:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:646:18:646:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:646:18:646:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:646:18:646:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:646:26:646:26 | s | | main.rs:601:5:602:14 | S1 | | main.rs:650:16:650:19 | SelfParam | | main.rs:649:5:653:5 | Self [trait Pair] | | main.rs:652:16:652:19 | SelfParam | | main.rs:649:5:653:5 | Self [trait Pair] | | main.rs:655:53:655:53 | x | | main.rs:655:50:655:50 | T | | main.rs:655:59:655:59 | y | | main.rs:655:50:655:50 | T | -| main.rs:659:5:662:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:659:5:662:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:660:13:660:13 | _ | | main.rs:601:5:602:14 | S1 | | main.rs:660:17:660:17 | x | | main.rs:655:50:655:50 | T | | main.rs:660:17:660:23 | x.fst() | | main.rs:601:5:602:14 | S1 | @@ -2082,70 +2082,70 @@ inferType | main.rs:661:17:661:26 | y.method() | | main.rs:601:5:602:14 | S1 | | main.rs:664:58:664:58 | x | | main.rs:664:41:664:55 | T | | main.rs:664:64:664:64 | y | | main.rs:664:41:664:55 | T | -| main.rs:664:70:669:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:664:70:669:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:666:13:666:14 | s1 | | main.rs:601:5:602:14 | S1 | | main.rs:666:18:666:18 | x | | main.rs:664:41:664:55 | T | | main.rs:666:18:666:24 | x.fst() | | main.rs:601:5:602:14 | S1 | | main.rs:667:13:667:14 | s2 | | main.rs:604:5:605:14 | S2 | | main.rs:667:18:667:18 | y | | main.rs:664:41:664:55 | T | | main.rs:667:18:667:24 | y.snd() | | main.rs:604:5:605:14 | S2 | -| main.rs:668:18:668:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:668:18:668:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:668:18:668:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:668:18:668:37 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:668:18:668:37 | { ... } | | file://:0:0:0:0 | () | +| main.rs:668:18:668:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:668:18:668:37 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:668:32:668:33 | s1 | | main.rs:601:5:602:14 | S1 | | main.rs:668:36:668:37 | s2 | | main.rs:604:5:605:14 | S2 | | main.rs:671:69:671:69 | x | | main.rs:671:52:671:66 | T | | main.rs:671:75:671:75 | y | | main.rs:671:52:671:66 | T | -| main.rs:671:81:676:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:671:81:676:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:673:13:673:14 | s1 | | main.rs:601:5:602:14 | S1 | | main.rs:673:18:673:18 | x | | main.rs:671:52:671:66 | T | | main.rs:673:18:673:24 | x.fst() | | main.rs:601:5:602:14 | S1 | | main.rs:674:13:674:14 | s2 | | main.rs:671:41:671:49 | T2 | | main.rs:674:18:674:18 | y | | main.rs:671:52:671:66 | T | | main.rs:674:18:674:24 | y.snd() | | main.rs:671:41:671:49 | T2 | -| main.rs:675:18:675:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:675:18:675:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:675:18:675:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:675:18:675:37 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:675:18:675:37 | { ... } | | file://:0:0:0:0 | () | +| main.rs:675:18:675:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:675:18:675:37 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:675:32:675:33 | s1 | | main.rs:601:5:602:14 | S1 | | main.rs:675:36:675:37 | s2 | | main.rs:671:41:671:49 | T2 | | main.rs:678:50:678:50 | x | | main.rs:678:41:678:47 | T | | main.rs:678:56:678:56 | y | | main.rs:678:41:678:47 | T | -| main.rs:678:62:683:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:678:62:683:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:680:13:680:14 | s1 | | {EXTERNAL LOCATION} | bool | | main.rs:680:18:680:18 | x | | main.rs:678:41:678:47 | T | | main.rs:680:18:680:24 | x.fst() | | {EXTERNAL LOCATION} | bool | | main.rs:681:13:681:14 | s2 | | {EXTERNAL LOCATION} | i64 | | main.rs:681:18:681:18 | y | | main.rs:678:41:678:47 | T | | main.rs:681:18:681:24 | y.snd() | | {EXTERNAL LOCATION} | i64 | -| main.rs:682:18:682:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:682:18:682:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:682:18:682:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:682:18:682:37 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:682:18:682:37 | { ... } | | file://:0:0:0:0 | () | +| main.rs:682:18:682:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:682:18:682:37 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:682:32:682:33 | s1 | | {EXTERNAL LOCATION} | bool | | main.rs:682:36:682:37 | s2 | | {EXTERNAL LOCATION} | i64 | | main.rs:685:54:685:54 | x | | main.rs:685:41:685:51 | T | | main.rs:685:60:685:60 | y | | main.rs:685:41:685:51 | T | -| main.rs:685:66:690:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:685:66:690:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:687:13:687:14 | s1 | | {EXTERNAL LOCATION} | u8 | | main.rs:687:18:687:18 | x | | main.rs:685:41:685:51 | T | | main.rs:687:18:687:24 | x.fst() | | {EXTERNAL LOCATION} | u8 | | main.rs:688:13:688:14 | s2 | | {EXTERNAL LOCATION} | i64 | | main.rs:688:18:688:18 | y | | main.rs:685:41:685:51 | T | | main.rs:688:18:688:24 | y.snd() | | {EXTERNAL LOCATION} | i64 | -| main.rs:689:18:689:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:689:18:689:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:689:18:689:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:689:18:689:37 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:689:18:689:37 | { ... } | | file://:0:0:0:0 | () | +| main.rs:689:18:689:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:689:18:689:37 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:689:32:689:33 | s1 | | {EXTERNAL LOCATION} | u8 | | main.rs:689:36:689:37 | s2 | | {EXTERNAL LOCATION} | i64 | -| main.rs:697:18:697:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:697:18:697:22 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:697:18:697:22 | SelfParam | &T | main.rs:694:5:698:5 | Self [trait TraitWithSelfTp] | -| main.rs:700:40:700:44 | thing | | file://:0:0:0:0 | & | +| main.rs:700:40:700:44 | thing | | {EXTERNAL LOCATION} | & | | main.rs:700:40:700:44 | thing | &T | main.rs:700:17:700:37 | T | | main.rs:700:56:702:5 | { ... } | | main.rs:700:14:700:14 | A | -| main.rs:701:9:701:13 | thing | | file://:0:0:0:0 | & | +| main.rs:701:9:701:13 | thing | | {EXTERNAL LOCATION} | & | | main.rs:701:9:701:13 | thing | &T | main.rs:700:17:700:37 | T | | main.rs:701:9:701:21 | thing.get_a() | | main.rs:700:14:700:14 | A | | main.rs:705:44:705:48 | thing | | main.rs:705:24:705:41 | S | @@ -2157,26 +2157,26 @@ inferType | main.rs:706:19:706:31 | thing.get_a() | T | main.rs:705:24:705:41 | S | | main.rs:707:9:707:9 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:707:9:707:9 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:713:55:713:59 | thing | | file://:0:0:0:0 | & | +| main.rs:713:55:713:59 | thing | | {EXTERNAL LOCATION} | & | | main.rs:713:55:713:59 | thing | &T | main.rs:713:25:713:52 | S | -| main.rs:713:66:716:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:713:66:716:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:715:13:715:15 | _ms | | {EXTERNAL LOCATION} | Option | | main.rs:715:13:715:15 | _ms | T | main.rs:713:25:713:52 | S | | main.rs:715:19:715:30 | get_a(...) | | {EXTERNAL LOCATION} | Option | | main.rs:715:19:715:30 | get_a(...) | T | main.rs:713:25:713:52 | S | -| main.rs:715:25:715:29 | thing | | file://:0:0:0:0 | & | +| main.rs:715:25:715:29 | thing | | {EXTERNAL LOCATION} | & | | main.rs:715:25:715:29 | thing | &T | main.rs:713:25:713:52 | S | -| main.rs:724:18:724:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:724:18:724:22 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:724:18:724:22 | SelfParam | &T | main.rs:718:5:720:5 | MyStruct | | main.rs:724:41:726:9 | { ... } | | {EXTERNAL LOCATION} | Option | | main.rs:724:41:726:9 | { ... } | T | main.rs:718:5:720:5 | MyStruct | | main.rs:725:13:725:48 | Some(...) | | {EXTERNAL LOCATION} | Option | | main.rs:725:13:725:48 | Some(...) | T | main.rs:718:5:720:5 | MyStruct | | main.rs:725:18:725:47 | MyStruct {...} | | main.rs:718:5:720:5 | MyStruct | -| main.rs:725:36:725:39 | self | | file://:0:0:0:0 | & | +| main.rs:725:36:725:39 | self | | {EXTERNAL LOCATION} | & | | main.rs:725:36:725:39 | self | &T | main.rs:718:5:720:5 | MyStruct | | main.rs:725:36:725:45 | self.value | | {EXTERNAL LOCATION} | i32 | -| main.rs:731:19:734:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:731:19:734:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:732:13:732:13 | s | | main.rs:718:5:720:5 | MyStruct | | main.rs:732:17:732:37 | MyStruct {...} | | main.rs:718:5:720:5 | MyStruct | | main.rs:732:35:732:35 | 0 | | {EXTERNAL LOCATION} | i32 | @@ -2184,7 +2184,7 @@ inferType | main.rs:733:13:733:15 | _ms | T | main.rs:718:5:720:5 | MyStruct | | main.rs:733:19:733:27 | get_a(...) | | {EXTERNAL LOCATION} | Option | | main.rs:733:19:733:27 | get_a(...) | T | main.rs:718:5:720:5 | MyStruct | -| main.rs:733:25:733:26 | &s | | file://:0:0:0:0 | & | +| main.rs:733:25:733:26 | &s | | {EXTERNAL LOCATION} | & | | main.rs:733:25:733:26 | &s | &T | main.rs:718:5:720:5 | MyStruct | | main.rs:733:26:733:26 | s | | main.rs:718:5:720:5 | MyStruct | | main.rs:749:15:749:18 | SelfParam | | main.rs:748:5:759:5 | Self [trait MyTrait] | @@ -2276,7 +2276,7 @@ inferType | main.rs:826:13:826:13 | x | | main.rs:738:5:741:5 | MyThing | | main.rs:826:13:826:13 | x | T | main.rs:820:10:820:10 | T | | main.rs:826:13:826:15 | x.a | | main.rs:820:10:820:10 | T | -| main.rs:830:16:888:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:830:16:888:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:831:13:831:13 | x | | main.rs:738:5:741:5 | MyThing | | main.rs:831:13:831:13 | x | T | main.rs:743:5:744:14 | S1 | | main.rs:831:17:831:33 | MyThing {...} | | main.rs:738:5:741:5 | MyThing | @@ -2287,17 +2287,17 @@ inferType | main.rs:832:17:832:33 | MyThing {...} | | main.rs:738:5:741:5 | MyThing | | main.rs:832:17:832:33 | MyThing {...} | T | main.rs:745:5:746:14 | S2 | | main.rs:832:30:832:31 | S2 | | main.rs:745:5:746:14 | S2 | -| main.rs:834:18:834:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:834:18:834:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:834:18:834:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:834:18:834:31 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:834:18:834:31 | { ... } | | file://:0:0:0:0 | () | +| main.rs:834:18:834:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:834:18:834:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:834:26:834:26 | x | | main.rs:738:5:741:5 | MyThing | | main.rs:834:26:834:26 | x | T | main.rs:743:5:744:14 | S1 | | main.rs:834:26:834:31 | x.m1() | | main.rs:743:5:744:14 | S1 | -| main.rs:835:18:835:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:835:18:835:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:835:18:835:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:835:18:835:31 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:835:18:835:31 | { ... } | | file://:0:0:0:0 | () | +| main.rs:835:18:835:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:835:18:835:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:835:26:835:26 | y | | main.rs:738:5:741:5 | MyThing | | main.rs:835:26:835:26 | y | T | main.rs:745:5:746:14 | S2 | | main.rs:835:26:835:31 | y.m1() | | main.rs:745:5:746:14 | S2 | @@ -2311,17 +2311,17 @@ inferType | main.rs:838:17:838:33 | MyThing {...} | | main.rs:738:5:741:5 | MyThing | | main.rs:838:17:838:33 | MyThing {...} | T | main.rs:745:5:746:14 | S2 | | main.rs:838:30:838:31 | S2 | | main.rs:745:5:746:14 | S2 | -| main.rs:840:18:840:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:840:18:840:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:840:18:840:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:840:18:840:31 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:840:18:840:31 | { ... } | | file://:0:0:0:0 | () | +| main.rs:840:18:840:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:840:18:840:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:840:26:840:26 | x | | main.rs:738:5:741:5 | MyThing | | main.rs:840:26:840:26 | x | T | main.rs:743:5:744:14 | S1 | | main.rs:840:26:840:31 | x.m2() | | main.rs:743:5:744:14 | S1 | -| main.rs:841:18:841:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:841:18:841:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:841:18:841:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:841:18:841:31 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:841:18:841:31 | { ... } | | file://:0:0:0:0 | () | +| main.rs:841:18:841:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:841:18:841:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:841:26:841:26 | y | | main.rs:738:5:741:5 | MyThing | | main.rs:841:26:841:26 | y | T | main.rs:745:5:746:14 | S2 | | main.rs:841:26:841:31 | y.m2() | | main.rs:745:5:746:14 | S2 | @@ -2339,91 +2339,91 @@ inferType | main.rs:846:17:846:33 | call_trait_m1(...) | | main.rs:743:5:744:14 | S1 | | main.rs:846:31:846:32 | x2 | | main.rs:738:5:741:5 | MyThing | | main.rs:846:31:846:32 | x2 | T | main.rs:743:5:744:14 | S1 | -| main.rs:847:18:847:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:847:18:847:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:847:18:847:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:847:18:847:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:847:18:847:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:847:18:847:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:847:18:847:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:847:26:847:26 | a | | main.rs:743:5:744:14 | S1 | | main.rs:848:13:848:13 | a | | main.rs:743:5:744:14 | S1 | | main.rs:848:17:848:35 | call_trait_m1_2(...) | | main.rs:743:5:744:14 | S1 | | main.rs:848:33:848:34 | x2 | | main.rs:738:5:741:5 | MyThing | | main.rs:848:33:848:34 | x2 | T | main.rs:743:5:744:14 | S1 | -| main.rs:849:18:849:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:849:18:849:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:849:18:849:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:849:18:849:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:849:18:849:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:849:18:849:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:849:18:849:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:849:26:849:26 | a | | main.rs:743:5:744:14 | S1 | | main.rs:850:13:850:13 | a | | main.rs:743:5:744:14 | S1 | | main.rs:850:17:850:35 | call_trait_m1_3(...) | | main.rs:743:5:744:14 | S1 | | main.rs:850:33:850:34 | x2 | | main.rs:738:5:741:5 | MyThing | | main.rs:850:33:850:34 | x2 | T | main.rs:743:5:744:14 | S1 | -| main.rs:851:18:851:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:851:18:851:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:851:18:851:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:851:18:851:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:851:18:851:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:851:18:851:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:851:18:851:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:851:26:851:26 | a | | main.rs:743:5:744:14 | S1 | | main.rs:852:13:852:13 | a | | main.rs:745:5:746:14 | S2 | | main.rs:852:17:852:33 | call_trait_m1(...) | | main.rs:745:5:746:14 | S2 | | main.rs:852:31:852:32 | y2 | | main.rs:738:5:741:5 | MyThing | | main.rs:852:31:852:32 | y2 | T | main.rs:745:5:746:14 | S2 | -| main.rs:853:18:853:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:853:18:853:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:853:18:853:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:853:18:853:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:853:18:853:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:853:18:853:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:853:18:853:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:853:26:853:26 | a | | main.rs:745:5:746:14 | S2 | | main.rs:854:13:854:13 | a | | main.rs:745:5:746:14 | S2 | | main.rs:854:17:854:35 | call_trait_m1_2(...) | | main.rs:745:5:746:14 | S2 | | main.rs:854:33:854:34 | y2 | | main.rs:738:5:741:5 | MyThing | | main.rs:854:33:854:34 | y2 | T | main.rs:745:5:746:14 | S2 | -| main.rs:855:18:855:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:855:18:855:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:855:18:855:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:855:18:855:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:855:18:855:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:855:18:855:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:855:18:855:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:855:26:855:26 | a | | main.rs:745:5:746:14 | S2 | | main.rs:856:13:856:13 | a | | main.rs:745:5:746:14 | S2 | | main.rs:856:17:856:35 | call_trait_m1_3(...) | | main.rs:745:5:746:14 | S2 | | main.rs:856:33:856:34 | y2 | | main.rs:738:5:741:5 | MyThing | | main.rs:856:33:856:34 | y2 | T | main.rs:745:5:746:14 | S2 | -| main.rs:857:18:857:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:857:18:857:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:857:18:857:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:857:18:857:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:857:18:857:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:857:18:857:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:857:18:857:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:857:26:857:26 | a | | main.rs:745:5:746:14 | S2 | | main.rs:858:13:858:13 | a | | main.rs:743:5:744:14 | S1 | | main.rs:858:17:858:38 | call_trait_assoc_1(...) | | main.rs:743:5:744:14 | S1 | | main.rs:858:36:858:37 | x2 | | main.rs:738:5:741:5 | MyThing | | main.rs:858:36:858:37 | x2 | T | main.rs:743:5:744:14 | S1 | -| main.rs:859:18:859:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:859:18:859:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:859:18:859:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:859:18:859:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:859:18:859:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:859:18:859:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:859:18:859:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:859:26:859:26 | a | | main.rs:743:5:744:14 | S1 | | main.rs:860:13:860:13 | a | | main.rs:743:5:744:14 | S1 | | main.rs:860:17:860:38 | call_trait_assoc_2(...) | | main.rs:743:5:744:14 | S1 | | main.rs:860:36:860:37 | x2 | | main.rs:738:5:741:5 | MyThing | | main.rs:860:36:860:37 | x2 | T | main.rs:743:5:744:14 | S1 | -| main.rs:861:18:861:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:861:18:861:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:861:18:861:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:861:18:861:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:861:18:861:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:861:18:861:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:861:18:861:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:861:26:861:26 | a | | main.rs:743:5:744:14 | S1 | | main.rs:862:13:862:13 | a | | main.rs:745:5:746:14 | S2 | | main.rs:862:17:862:38 | call_trait_assoc_1(...) | | main.rs:745:5:746:14 | S2 | | main.rs:862:36:862:37 | y2 | | main.rs:738:5:741:5 | MyThing | | main.rs:862:36:862:37 | y2 | T | main.rs:745:5:746:14 | S2 | -| main.rs:863:18:863:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:863:18:863:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:863:18:863:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:863:18:863:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:863:18:863:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:863:18:863:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:863:18:863:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:863:26:863:26 | a | | main.rs:745:5:746:14 | S2 | | main.rs:864:13:864:13 | a | | main.rs:745:5:746:14 | S2 | | main.rs:864:17:864:38 | call_trait_assoc_2(...) | | main.rs:745:5:746:14 | S2 | | main.rs:864:36:864:37 | y2 | | main.rs:738:5:741:5 | MyThing | | main.rs:864:36:864:37 | y2 | T | main.rs:745:5:746:14 | S2 | -| main.rs:865:18:865:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:865:18:865:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:865:18:865:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:865:18:865:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:865:18:865:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:865:18:865:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:865:18:865:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:865:26:865:26 | a | | main.rs:745:5:746:14 | S2 | | main.rs:867:13:867:14 | x3 | | main.rs:738:5:741:5 | MyThing | | main.rs:867:13:867:14 | x3 | T | main.rs:738:5:741:5 | MyThing | @@ -2448,60 +2448,60 @@ inferType | main.rs:874:37:874:38 | x3 | | main.rs:738:5:741:5 | MyThing | | main.rs:874:37:874:38 | x3 | T | main.rs:738:5:741:5 | MyThing | | main.rs:874:37:874:38 | x3 | T.T | main.rs:743:5:744:14 | S1 | -| main.rs:875:18:875:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:875:18:875:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:875:18:875:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:875:18:875:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:875:18:875:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:875:18:875:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:875:18:875:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:875:26:875:26 | a | | main.rs:743:5:744:14 | S1 | | main.rs:876:13:876:13 | a | | main.rs:743:5:744:14 | S1 | | main.rs:876:17:876:41 | call_trait_thing_m1_2(...) | | main.rs:743:5:744:14 | S1 | | main.rs:876:39:876:40 | x3 | | main.rs:738:5:741:5 | MyThing | | main.rs:876:39:876:40 | x3 | T | main.rs:738:5:741:5 | MyThing | | main.rs:876:39:876:40 | x3 | T.T | main.rs:743:5:744:14 | S1 | -| main.rs:877:18:877:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:877:18:877:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:877:18:877:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:877:18:877:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:877:18:877:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:877:18:877:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:877:18:877:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:877:26:877:26 | a | | main.rs:743:5:744:14 | S1 | | main.rs:878:13:878:13 | a | | main.rs:743:5:744:14 | S1 | | main.rs:878:17:878:41 | call_trait_thing_m1_3(...) | | main.rs:743:5:744:14 | S1 | | main.rs:878:39:878:40 | x3 | | main.rs:738:5:741:5 | MyThing | | main.rs:878:39:878:40 | x3 | T | main.rs:738:5:741:5 | MyThing | | main.rs:878:39:878:40 | x3 | T.T | main.rs:743:5:744:14 | S1 | -| main.rs:879:18:879:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:879:18:879:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:879:18:879:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:879:18:879:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:879:18:879:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:879:18:879:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:879:18:879:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:879:26:879:26 | a | | main.rs:743:5:744:14 | S1 | | main.rs:880:13:880:13 | b | | main.rs:745:5:746:14 | S2 | | main.rs:880:17:880:39 | call_trait_thing_m1(...) | | main.rs:745:5:746:14 | S2 | | main.rs:880:37:880:38 | y3 | | main.rs:738:5:741:5 | MyThing | | main.rs:880:37:880:38 | y3 | T | main.rs:738:5:741:5 | MyThing | | main.rs:880:37:880:38 | y3 | T.T | main.rs:745:5:746:14 | S2 | -| main.rs:881:18:881:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:881:18:881:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:881:18:881:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:881:18:881:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:881:18:881:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:881:18:881:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:881:18:881:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:881:26:881:26 | b | | main.rs:745:5:746:14 | S2 | | main.rs:882:13:882:13 | b | | main.rs:745:5:746:14 | S2 | | main.rs:882:17:882:41 | call_trait_thing_m1_2(...) | | main.rs:745:5:746:14 | S2 | | main.rs:882:39:882:40 | y3 | | main.rs:738:5:741:5 | MyThing | | main.rs:882:39:882:40 | y3 | T | main.rs:738:5:741:5 | MyThing | | main.rs:882:39:882:40 | y3 | T.T | main.rs:745:5:746:14 | S2 | -| main.rs:883:18:883:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:883:18:883:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:883:18:883:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:883:18:883:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:883:18:883:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:883:18:883:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:883:18:883:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:883:26:883:26 | b | | main.rs:745:5:746:14 | S2 | | main.rs:884:13:884:13 | b | | main.rs:745:5:746:14 | S2 | | main.rs:884:17:884:41 | call_trait_thing_m1_3(...) | | main.rs:745:5:746:14 | S2 | | main.rs:884:39:884:40 | y3 | | main.rs:738:5:741:5 | MyThing | | main.rs:884:39:884:40 | y3 | T | main.rs:738:5:741:5 | MyThing | | main.rs:884:39:884:40 | y3 | T.T | main.rs:745:5:746:14 | S2 | -| main.rs:885:18:885:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:885:18:885:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:885:18:885:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:885:18:885:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:885:18:885:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:885:18:885:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:885:18:885:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:885:26:885:26 | b | | main.rs:745:5:746:14 | S2 | | main.rs:886:13:886:13 | x | | {EXTERNAL LOCATION} | i32 | | main.rs:886:17:886:26 | ...::m2(...) | | {EXTERNAL LOCATION} | i32 | @@ -2521,32 +2521,32 @@ inferType | main.rs:914:13:914:16 | self | | main.rs:903:5:917:5 | Self [trait MyTrait] | | main.rs:914:13:914:21 | self.m1() | | main.rs:904:9:904:28 | AssociatedType | | main.rs:915:13:915:43 | ...::default(...) | | main.rs:904:9:904:28 | AssociatedType | -| main.rs:923:19:923:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:923:19:923:23 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:923:19:923:23 | SelfParam | &T | main.rs:919:5:929:5 | Self [trait MyTraitAssoc2] | | main.rs:923:26:923:26 | a | | main.rs:923:16:923:16 | A | -| main.rs:925:22:925:26 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:925:22:925:26 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:925:22:925:26 | SelfParam | &T | main.rs:919:5:929:5 | Self [trait MyTraitAssoc2] | | main.rs:925:29:925:29 | a | | main.rs:925:19:925:19 | A | | main.rs:925:35:925:35 | b | | main.rs:925:19:925:19 | A | | main.rs:925:75:928:9 | { ... } | | main.rs:920:9:920:52 | GenericAssociatedType | -| main.rs:926:13:926:16 | self | | file://:0:0:0:0 | & | +| main.rs:926:13:926:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:926:13:926:16 | self | &T | main.rs:919:5:929:5 | Self [trait MyTraitAssoc2] | | main.rs:926:13:926:23 | self.put(...) | | main.rs:920:9:920:52 | GenericAssociatedType | | main.rs:926:22:926:22 | a | | main.rs:925:19:925:19 | A | -| main.rs:927:13:927:16 | self | | file://:0:0:0:0 | & | +| main.rs:927:13:927:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:927:13:927:16 | self | &T | main.rs:919:5:929:5 | Self [trait MyTraitAssoc2] | | main.rs:927:13:927:23 | self.put(...) | | main.rs:920:9:920:52 | GenericAssociatedType | | main.rs:927:22:927:22 | b | | main.rs:925:19:925:19 | A | -| main.rs:936:21:936:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:936:21:936:25 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:936:21:936:25 | SelfParam | &T | main.rs:931:5:941:5 | Self [trait TraitMultipleAssoc] | -| main.rs:938:20:938:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:938:20:938:24 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:938:20:938:24 | SelfParam | &T | main.rs:931:5:941:5 | Self [trait TraitMultipleAssoc] | -| main.rs:940:20:940:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:940:20:940:24 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:940:20:940:24 | SelfParam | &T | main.rs:931:5:941:5 | Self [trait TraitMultipleAssoc] | | main.rs:956:15:956:18 | SelfParam | | main.rs:943:5:944:13 | S | | main.rs:956:45:958:9 | { ... } | | main.rs:949:5:950:14 | AT | | main.rs:957:13:957:14 | AT | | main.rs:949:5:950:14 | AT | -| main.rs:966:19:966:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:966:19:966:23 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:966:19:966:23 | SelfParam | &T | main.rs:943:5:944:13 | S | | main.rs:966:26:966:26 | a | | main.rs:966:16:966:16 | A | | main.rs:966:46:968:9 | { ... } | | main.rs:892:5:895:5 | Wrapper | @@ -2567,25 +2567,25 @@ inferType | main.rs:983:30:983:31 | S2 | | main.rs:946:5:947:14 | S2 | | main.rs:989:22:989:26 | thing | | main.rs:989:10:989:19 | T | | main.rs:990:9:990:13 | thing | | main.rs:989:10:989:19 | T | -| main.rs:997:21:997:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:997:21:997:25 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:997:21:997:25 | SelfParam | &T | main.rs:949:5:950:14 | AT | | main.rs:997:34:999:9 | { ... } | | main.rs:949:5:950:14 | AT | | main.rs:998:13:998:14 | AT | | main.rs:949:5:950:14 | AT | -| main.rs:1001:20:1001:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1001:20:1001:24 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1001:20:1001:24 | SelfParam | &T | main.rs:949:5:950:14 | AT | | main.rs:1001:43:1003:9 | { ... } | | main.rs:943:5:944:13 | S | | main.rs:1002:13:1002:13 | S | | main.rs:943:5:944:13 | S | -| main.rs:1005:20:1005:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1005:20:1005:24 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1005:20:1005:24 | SelfParam | &T | main.rs:949:5:950:14 | AT | | main.rs:1005:43:1007:9 | { ... } | | main.rs:946:5:947:14 | S2 | | main.rs:1006:13:1006:14 | S2 | | main.rs:946:5:947:14 | S2 | -| main.rs:1010:16:1038:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1010:16:1038:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1011:13:1011:14 | x1 | | main.rs:943:5:944:13 | S | | main.rs:1011:18:1011:18 | S | | main.rs:943:5:944:13 | S | -| main.rs:1013:18:1013:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1013:18:1013:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1013:18:1013:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1013:18:1013:32 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1013:18:1013:32 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1013:18:1013:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1013:18:1013:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1013:26:1013:27 | x1 | | main.rs:943:5:944:13 | S | | main.rs:1013:26:1013:32 | x1.m1() | | main.rs:949:5:950:14 | AT | | main.rs:1015:13:1015:14 | x2 | | main.rs:943:5:944:13 | S | @@ -2593,26 +2593,26 @@ inferType | main.rs:1017:13:1017:13 | y | | main.rs:949:5:950:14 | AT | | main.rs:1017:17:1017:18 | x2 | | main.rs:943:5:944:13 | S | | main.rs:1017:17:1017:23 | x2.m2() | | main.rs:949:5:950:14 | AT | -| main.rs:1018:18:1018:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1018:18:1018:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1018:18:1018:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1018:18:1018:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1018:18:1018:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1018:18:1018:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1018:18:1018:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1018:26:1018:26 | y | | main.rs:949:5:950:14 | AT | | main.rs:1020:13:1020:14 | x3 | | main.rs:943:5:944:13 | S | | main.rs:1020:18:1020:18 | S | | main.rs:943:5:944:13 | S | -| main.rs:1022:18:1022:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1022:18:1022:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1022:18:1022:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1022:18:1022:43 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1022:18:1022:43 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1022:18:1022:43 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1022:18:1022:43 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1022:26:1022:27 | x3 | | main.rs:943:5:944:13 | S | | main.rs:1022:26:1022:34 | x3.put(...) | | main.rs:892:5:895:5 | Wrapper | | main.rs:1022:26:1022:34 | x3.put(...) | A | {EXTERNAL LOCATION} | i32 | | main.rs:1022:26:1022:43 | ... .unwrap() | | {EXTERNAL LOCATION} | i32 | | main.rs:1022:33:1022:33 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1025:18:1025:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1025:18:1025:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1025:18:1025:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1025:18:1025:49 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1025:18:1025:49 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1025:18:1025:49 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1025:18:1025:49 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1025:26:1025:27 | x3 | | main.rs:943:5:944:13 | S | | main.rs:1025:26:1025:40 | x3.putTwo(...) | | main.rs:892:5:895:5 | Wrapper | | main.rs:1025:26:1025:40 | x3.putTwo(...) | A | main.rs:963:36:963:50 | AssociatedParam | @@ -2620,25 +2620,25 @@ inferType | main.rs:1025:36:1025:36 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:1025:39:1025:39 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:1027:20:1027:20 | S | | main.rs:943:5:944:13 | S | -| main.rs:1028:18:1028:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1028:18:1028:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1028:18:1028:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1028:18:1028:27 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1028:18:1028:27 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1028:18:1028:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1028:18:1028:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1030:13:1030:14 | x5 | | main.rs:946:5:947:14 | S2 | | main.rs:1030:18:1030:19 | S2 | | main.rs:946:5:947:14 | S2 | -| main.rs:1031:18:1031:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1031:18:1031:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1031:18:1031:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1031:18:1031:32 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1031:18:1031:32 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1031:18:1031:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1031:18:1031:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1031:26:1031:27 | x5 | | main.rs:946:5:947:14 | S2 | | main.rs:1031:26:1031:32 | x5.m1() | | main.rs:892:5:895:5 | Wrapper | | main.rs:1031:26:1031:32 | x5.m1() | A | main.rs:946:5:947:14 | S2 | | main.rs:1032:13:1032:14 | x6 | | main.rs:946:5:947:14 | S2 | | main.rs:1032:18:1032:19 | S2 | | main.rs:946:5:947:14 | S2 | -| main.rs:1033:18:1033:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1033:18:1033:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1033:18:1033:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1033:18:1033:32 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1033:18:1033:32 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1033:18:1033:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1033:18:1033:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1033:26:1033:27 | x6 | | main.rs:946:5:947:14 | S2 | | main.rs:1033:26:1033:32 | x6.m2() | | main.rs:892:5:895:5 | Wrapper | | main.rs:1033:26:1033:32 | x6.m2() | A | main.rs:946:5:947:14 | S2 | @@ -2651,34 +2651,34 @@ inferType | main.rs:1037:13:1037:21 | assoc_two | | main.rs:946:5:947:14 | S2 | | main.rs:1037:25:1037:26 | AT | | main.rs:949:5:950:14 | AT | | main.rs:1037:25:1037:36 | AT.get_two() | | main.rs:946:5:947:14 | S2 | -| main.rs:1045:19:1045:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1045:19:1045:23 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1045:19:1045:23 | SelfParam | &T | main.rs:1042:5:1046:5 | Self [trait Supertrait] | | main.rs:1045:26:1045:32 | content | | main.rs:1043:9:1043:21 | Content | -| main.rs:1050:24:1050:28 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1050:24:1050:28 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1050:24:1050:28 | SelfParam | &T | main.rs:1048:5:1051:5 | Self [trait Subtrait] | -| main.rs:1059:23:1059:27 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1059:23:1059:27 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1059:23:1059:27 | SelfParam | &T | main.rs:1053:5:1063:5 | Self [trait Subtrait2] | | main.rs:1059:30:1059:31 | c1 | | main.rs:1043:9:1043:21 | Content | | main.rs:1059:49:1059:50 | c2 | | main.rs:1043:9:1043:21 | Content | -| main.rs:1059:68:1062:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1060:13:1060:16 | self | | file://:0:0:0:0 | & | +| main.rs:1059:68:1062:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1060:13:1060:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1060:13:1060:16 | self | &T | main.rs:1053:5:1063:5 | Self [trait Subtrait2] | -| main.rs:1060:13:1060:27 | self.insert(...) | | file://:0:0:0:0 | () | +| main.rs:1060:13:1060:27 | self.insert(...) | | {EXTERNAL LOCATION} | () | | main.rs:1060:25:1060:26 | c1 | | main.rs:1043:9:1043:21 | Content | -| main.rs:1061:13:1061:16 | self | | file://:0:0:0:0 | & | +| main.rs:1061:13:1061:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1061:13:1061:16 | self | &T | main.rs:1053:5:1063:5 | Self [trait Subtrait2] | -| main.rs:1061:13:1061:27 | self.insert(...) | | file://:0:0:0:0 | () | +| main.rs:1061:13:1061:27 | self.insert(...) | | {EXTERNAL LOCATION} | () | | main.rs:1061:25:1061:26 | c2 | | main.rs:1043:9:1043:21 | Content | -| main.rs:1069:19:1069:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1069:19:1069:23 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1069:19:1069:23 | SelfParam | &T | main.rs:1065:5:1065:24 | MyType | | main.rs:1069:19:1069:23 | SelfParam | &T.T | main.rs:1067:10:1067:10 | T | | main.rs:1069:26:1069:33 | _content | | main.rs:1067:10:1067:10 | T | -| main.rs:1069:51:1071:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1070:22:1070:42 | "Inserting content: \\n" | | file://:0:0:0:0 | & | +| main.rs:1069:51:1071:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1070:22:1070:42 | "Inserting content: \\n" | | {EXTERNAL LOCATION} | & | | main.rs:1070:22:1070:42 | "Inserting content: \\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1070:22:1070:42 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1070:22:1070:42 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1076:24:1076:28 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1070:22:1070:42 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1070:22:1070:42 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1076:24:1076:28 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1076:24:1076:28 | SelfParam | &T | main.rs:1065:5:1065:24 | MyType | | main.rs:1076:24:1076:28 | SelfParam | &T.T | main.rs:1074:10:1074:17 | T | | main.rs:1076:48:1078:9 | { ... } | | main.rs:1074:10:1074:17 | T | @@ -2688,31 +2688,31 @@ inferType | main.rs:1077:13:1077:29 | ... .clone() | | main.rs:1074:10:1074:17 | T | | main.rs:1077:14:1077:18 | * ... | | main.rs:1065:5:1065:24 | MyType | | main.rs:1077:14:1077:18 | * ... | T | main.rs:1074:10:1074:17 | T | -| main.rs:1077:15:1077:18 | self | | file://:0:0:0:0 | & | +| main.rs:1077:15:1077:18 | self | | {EXTERNAL LOCATION} | & | | main.rs:1077:15:1077:18 | self | &T | main.rs:1065:5:1065:24 | MyType | | main.rs:1077:15:1077:18 | self | &T.T | main.rs:1074:10:1074:17 | T | -| main.rs:1081:33:1081:36 | item | | file://:0:0:0:0 | & | +| main.rs:1081:33:1081:36 | item | | {EXTERNAL LOCATION} | & | | main.rs:1081:33:1081:36 | item | &T | main.rs:1081:20:1081:30 | T | | main.rs:1081:57:1083:5 | { ... } | | main.rs:1043:9:1043:21 | Content | -| main.rs:1082:9:1082:12 | item | | file://:0:0:0:0 | & | +| main.rs:1082:9:1082:12 | item | | {EXTERNAL LOCATION} | & | | main.rs:1082:9:1082:12 | item | &T | main.rs:1081:20:1081:30 | T | | main.rs:1082:9:1082:26 | item.get_content() | | main.rs:1043:9:1043:21 | Content | -| main.rs:1085:35:1085:38 | item | | file://:0:0:0:0 | & | +| main.rs:1085:35:1085:38 | item | | {EXTERNAL LOCATION} | & | | main.rs:1085:35:1085:38 | item | &T | main.rs:1085:21:1085:32 | T | | main.rs:1085:45:1085:46 | c1 | | main.rs:1043:9:1043:21 | Content | | main.rs:1085:61:1085:62 | c2 | | main.rs:1043:9:1043:21 | Content | | main.rs:1085:77:1085:78 | c3 | | main.rs:1043:9:1043:21 | Content | -| main.rs:1085:93:1088:5 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1086:9:1086:12 | item | | file://:0:0:0:0 | & | +| main.rs:1085:93:1088:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1086:9:1086:12 | item | | {EXTERNAL LOCATION} | & | | main.rs:1086:9:1086:12 | item | &T | main.rs:1085:21:1085:32 | T | -| main.rs:1086:9:1086:23 | item.insert(...) | | file://:0:0:0:0 | () | +| main.rs:1086:9:1086:23 | item.insert(...) | | {EXTERNAL LOCATION} | () | | main.rs:1086:21:1086:22 | c1 | | main.rs:1043:9:1043:21 | Content | -| main.rs:1087:9:1087:12 | item | | file://:0:0:0:0 | & | +| main.rs:1087:9:1087:12 | item | | {EXTERNAL LOCATION} | & | | main.rs:1087:9:1087:12 | item | &T | main.rs:1085:21:1085:32 | T | -| main.rs:1087:9:1087:31 | item.insert_two(...) | | file://:0:0:0:0 | () | +| main.rs:1087:9:1087:31 | item.insert_two(...) | | {EXTERNAL LOCATION} | () | | main.rs:1087:25:1087:26 | c2 | | main.rs:1043:9:1043:21 | Content | | main.rs:1087:29:1087:30 | c3 | | main.rs:1043:9:1043:21 | Content | -| main.rs:1090:15:1096:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1090:15:1096:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1091:13:1091:17 | item1 | | main.rs:1065:5:1065:24 | MyType | | main.rs:1091:13:1091:17 | item1 | T | {EXTERNAL LOCATION} | i64 | | main.rs:1091:21:1091:33 | MyType(...) | | main.rs:1065:5:1065:24 | MyType | @@ -2725,7 +2725,7 @@ inferType | main.rs:1094:21:1094:32 | MyType(...) | | main.rs:1065:5:1065:24 | MyType | | main.rs:1094:21:1094:32 | MyType(...) | T | {EXTERNAL LOCATION} | bool | | main.rs:1094:28:1094:31 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1095:37:1095:42 | &item2 | | file://:0:0:0:0 | & | +| main.rs:1095:37:1095:42 | &item2 | | {EXTERNAL LOCATION} | & | | main.rs:1095:37:1095:42 | &item2 | &T | main.rs:1065:5:1065:24 | MyType | | main.rs:1095:37:1095:42 | &item2 | &T.T | {EXTERNAL LOCATION} | bool | | main.rs:1095:38:1095:42 | item2 | | main.rs:1065:5:1065:24 | MyType | @@ -2744,7 +2744,7 @@ inferType | main.rs:1115:17:1115:32 | ...::C2 {...} | A | main.rs:1111:10:1111:10 | T | | main.rs:1115:30:1115:30 | a | | main.rs:1111:10:1111:10 | T | | main.rs:1115:37:1115:37 | a | | main.rs:1111:10:1111:10 | T | -| main.rs:1120:16:1126:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1120:16:1126:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1121:13:1121:13 | x | | main.rs:1100:5:1104:5 | MyEnum | | main.rs:1121:13:1121:13 | x | A | main.rs:1106:5:1107:14 | S1 | | main.rs:1121:17:1121:30 | ...::C1(...) | | main.rs:1100:5:1104:5 | MyEnum | @@ -2755,22 +2755,22 @@ inferType | main.rs:1122:17:1122:36 | ...::C2 {...} | | main.rs:1100:5:1104:5 | MyEnum | | main.rs:1122:17:1122:36 | ...::C2 {...} | A | main.rs:1108:5:1109:14 | S2 | | main.rs:1122:33:1122:34 | S2 | | main.rs:1108:5:1109:14 | S2 | -| main.rs:1124:18:1124:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1124:18:1124:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1124:18:1124:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1124:18:1124:31 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1124:18:1124:31 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1124:18:1124:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1124:18:1124:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1124:26:1124:26 | x | | main.rs:1100:5:1104:5 | MyEnum | | main.rs:1124:26:1124:26 | x | A | main.rs:1106:5:1107:14 | S1 | | main.rs:1124:26:1124:31 | x.m1() | | main.rs:1106:5:1107:14 | S1 | -| main.rs:1125:18:1125:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1125:18:1125:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1125:18:1125:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1125:18:1125:31 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1125:18:1125:31 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1125:18:1125:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1125:18:1125:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1125:26:1125:26 | y | | main.rs:1100:5:1104:5 | MyEnum | | main.rs:1125:26:1125:26 | y | A | main.rs:1108:5:1109:14 | S2 | | main.rs:1125:26:1125:31 | y.m1() | | main.rs:1108:5:1109:14 | S2 | | main.rs:1147:15:1147:18 | SelfParam | | main.rs:1145:5:1148:5 | Self [trait MyTrait1] | -| main.rs:1152:15:1152:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1152:15:1152:19 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1152:15:1152:19 | SelfParam | &T | main.rs:1150:5:1162:5 | Self [trait MyTrait2] | | main.rs:1155:9:1161:9 | { ... } | | main.rs:1150:20:1150:22 | Tr2 | | main.rs:1156:13:1160:13 | if ... {...} else {...} | | main.rs:1150:20:1150:22 | Tr2 | @@ -2778,13 +2778,13 @@ inferType | main.rs:1156:16:1156:20 | ... > ... | | {EXTERNAL LOCATION} | bool | | main.rs:1156:20:1156:20 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:1156:22:1158:13 | { ... } | | main.rs:1150:20:1150:22 | Tr2 | -| main.rs:1157:17:1157:20 | self | | file://:0:0:0:0 | & | +| main.rs:1157:17:1157:20 | self | | {EXTERNAL LOCATION} | & | | main.rs:1157:17:1157:20 | self | &T | main.rs:1150:5:1162:5 | Self [trait MyTrait2] | | main.rs:1157:17:1157:25 | self.m1() | | main.rs:1150:20:1150:22 | Tr2 | | main.rs:1158:20:1160:13 | { ... } | | main.rs:1150:20:1150:22 | Tr2 | | main.rs:1159:17:1159:31 | ...::m1(...) | | main.rs:1150:20:1150:22 | Tr2 | | main.rs:1159:26:1159:30 | * ... | | main.rs:1150:5:1162:5 | Self [trait MyTrait2] | -| main.rs:1159:27:1159:30 | self | | file://:0:0:0:0 | & | +| main.rs:1159:27:1159:30 | self | | {EXTERNAL LOCATION} | & | | main.rs:1159:27:1159:30 | self | &T | main.rs:1150:5:1162:5 | Self [trait MyTrait2] | | main.rs:1166:15:1166:18 | SelfParam | | main.rs:1164:5:1176:5 | Self [trait MyTrait3] | | main.rs:1169:9:1175:9 | { ... } | | main.rs:1164:20:1164:22 | Tr3 | @@ -2801,7 +2801,7 @@ inferType | main.rs:1173:17:1173:31 | ...::m2(...) | | main.rs:1130:5:1133:5 | MyThing | | main.rs:1173:17:1173:31 | ...::m2(...) | A | main.rs:1164:20:1164:22 | Tr3 | | main.rs:1173:17:1173:33 | ... .a | | main.rs:1164:20:1164:22 | Tr3 | -| main.rs:1173:26:1173:30 | &self | | file://:0:0:0:0 | & | +| main.rs:1173:26:1173:30 | &self | | {EXTERNAL LOCATION} | & | | main.rs:1173:26:1173:30 | &self | &T | main.rs:1164:5:1176:5 | Self [trait MyTrait3] | | main.rs:1173:27:1173:30 | self | | main.rs:1164:5:1176:5 | Self [trait MyTrait3] | | main.rs:1180:15:1180:18 | SelfParam | | main.rs:1130:5:1133:5 | MyThing | @@ -2824,19 +2824,19 @@ inferType | main.rs:1199:9:1199:9 | x | | main.rs:1198:26:1198:41 | T2 | | main.rs:1199:9:1199:14 | x.m1() | | main.rs:1198:22:1198:23 | T1 | | main.rs:1202:56:1202:56 | x | | main.rs:1202:39:1202:53 | T | -| main.rs:1202:62:1206:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1202:62:1206:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1204:13:1204:13 | a | | main.rs:1130:5:1133:5 | MyThing | | main.rs:1204:13:1204:13 | a | A | main.rs:1140:5:1141:14 | S1 | | main.rs:1204:17:1204:17 | x | | main.rs:1202:39:1202:53 | T | | main.rs:1204:17:1204:22 | x.m1() | | main.rs:1130:5:1133:5 | MyThing | | main.rs:1204:17:1204:22 | x.m1() | A | main.rs:1140:5:1141:14 | S1 | -| main.rs:1205:18:1205:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1205:18:1205:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1205:18:1205:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1205:18:1205:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1205:18:1205:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1205:18:1205:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1205:18:1205:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1205:26:1205:26 | a | | main.rs:1130:5:1133:5 | MyThing | | main.rs:1205:26:1205:26 | a | A | main.rs:1140:5:1141:14 | S1 | -| main.rs:1208:16:1232:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1208:16:1232:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1209:13:1209:13 | x | | main.rs:1130:5:1133:5 | MyThing | | main.rs:1209:13:1209:13 | x | A | main.rs:1140:5:1141:14 | S1 | | main.rs:1209:17:1209:33 | MyThing {...} | | main.rs:1130:5:1133:5 | MyThing | @@ -2847,17 +2847,17 @@ inferType | main.rs:1210:17:1210:33 | MyThing {...} | | main.rs:1130:5:1133:5 | MyThing | | main.rs:1210:17:1210:33 | MyThing {...} | A | main.rs:1142:5:1143:14 | S2 | | main.rs:1210:30:1210:31 | S2 | | main.rs:1142:5:1143:14 | S2 | -| main.rs:1212:18:1212:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1212:18:1212:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1212:18:1212:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1212:18:1212:31 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1212:18:1212:31 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1212:18:1212:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1212:18:1212:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1212:26:1212:26 | x | | main.rs:1130:5:1133:5 | MyThing | | main.rs:1212:26:1212:26 | x | A | main.rs:1140:5:1141:14 | S1 | | main.rs:1212:26:1212:31 | x.m1() | | main.rs:1140:5:1141:14 | S1 | -| main.rs:1213:18:1213:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1213:18:1213:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1213:18:1213:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1213:18:1213:31 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1213:18:1213:31 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1213:18:1213:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1213:18:1213:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1213:26:1213:26 | y | | main.rs:1130:5:1133:5 | MyThing | | main.rs:1213:26:1213:26 | y | A | main.rs:1142:5:1143:14 | S2 | | main.rs:1213:26:1213:31 | y.m1() | | main.rs:1142:5:1143:14 | S2 | @@ -2871,17 +2871,17 @@ inferType | main.rs:1216:17:1216:33 | MyThing {...} | | main.rs:1130:5:1133:5 | MyThing | | main.rs:1216:17:1216:33 | MyThing {...} | A | main.rs:1142:5:1143:14 | S2 | | main.rs:1216:30:1216:31 | S2 | | main.rs:1142:5:1143:14 | S2 | -| main.rs:1218:18:1218:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1218:18:1218:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1218:18:1218:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1218:18:1218:31 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1218:18:1218:31 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1218:18:1218:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1218:18:1218:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1218:26:1218:26 | x | | main.rs:1130:5:1133:5 | MyThing | | main.rs:1218:26:1218:26 | x | A | main.rs:1140:5:1141:14 | S1 | | main.rs:1218:26:1218:31 | x.m2() | | main.rs:1140:5:1141:14 | S1 | -| main.rs:1219:18:1219:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1219:18:1219:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1219:18:1219:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1219:18:1219:31 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1219:18:1219:31 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1219:18:1219:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1219:18:1219:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1219:26:1219:26 | y | | main.rs:1130:5:1133:5 | MyThing | | main.rs:1219:26:1219:26 | y | A | main.rs:1142:5:1143:14 | S2 | | main.rs:1219:26:1219:31 | y.m2() | | main.rs:1142:5:1143:14 | S2 | @@ -2895,17 +2895,17 @@ inferType | main.rs:1222:17:1222:34 | MyThing2 {...} | | main.rs:1135:5:1138:5 | MyThing2 | | main.rs:1222:17:1222:34 | MyThing2 {...} | A | main.rs:1142:5:1143:14 | S2 | | main.rs:1222:31:1222:32 | S2 | | main.rs:1142:5:1143:14 | S2 | -| main.rs:1224:18:1224:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1224:18:1224:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1224:18:1224:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1224:18:1224:31 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1224:18:1224:31 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1224:18:1224:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1224:18:1224:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1224:26:1224:26 | x | | main.rs:1135:5:1138:5 | MyThing2 | | main.rs:1224:26:1224:26 | x | A | main.rs:1140:5:1141:14 | S1 | | main.rs:1224:26:1224:31 | x.m3() | | main.rs:1140:5:1141:14 | S1 | -| main.rs:1225:18:1225:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1225:18:1225:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1225:18:1225:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1225:18:1225:31 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1225:18:1225:31 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1225:18:1225:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1225:18:1225:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1225:26:1225:26 | y | | main.rs:1135:5:1138:5 | MyThing2 | | main.rs:1225:26:1225:26 | y | A | main.rs:1142:5:1143:14 | S2 | | main.rs:1225:26:1225:31 | y.m3() | | main.rs:1142:5:1143:14 | S2 | @@ -2929,11 +2929,11 @@ inferType | main.rs:1231:17:1231:32 | call_trait_m1(...) | A | main.rs:1142:5:1143:14 | S2 | | main.rs:1231:31:1231:31 | x | | main.rs:1135:5:1138:5 | MyThing2 | | main.rs:1231:31:1231:31 | x | A | main.rs:1142:5:1143:14 | S2 | -| main.rs:1248:22:1248:22 | x | | file://:0:0:0:0 | & | +| main.rs:1248:22:1248:22 | x | | {EXTERNAL LOCATION} | & | | main.rs:1248:22:1248:22 | x | &T | main.rs:1248:11:1248:19 | T | -| main.rs:1248:35:1250:5 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1248:35:1250:5 | { ... } | | {EXTERNAL LOCATION} | & | | main.rs:1248:35:1250:5 | { ... } | &T | main.rs:1248:11:1248:19 | T | -| main.rs:1249:9:1249:9 | x | | file://:0:0:0:0 | & | +| main.rs:1249:9:1249:9 | x | | {EXTERNAL LOCATION} | & | | main.rs:1249:9:1249:9 | x | &T | main.rs:1248:11:1248:19 | T | | main.rs:1253:17:1253:20 | SelfParam | | main.rs:1238:5:1239:14 | S1 | | main.rs:1253:29:1255:9 | { ... } | | main.rs:1241:5:1242:14 | S2 | @@ -2942,38 +2942,38 @@ inferType | main.rs:1261:5:1263:5 | { ... } | | main.rs:1258:17:1258:18 | T2 | | main.rs:1262:9:1262:9 | x | | main.rs:1258:13:1258:14 | T1 | | main.rs:1262:9:1262:16 | x.into() | | main.rs:1258:17:1258:18 | T2 | -| main.rs:1265:16:1281:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1265:16:1281:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1266:13:1266:13 | x | | main.rs:1238:5:1239:14 | S1 | | main.rs:1266:17:1266:18 | S1 | | main.rs:1238:5:1239:14 | S1 | -| main.rs:1267:18:1267:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1267:18:1267:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1267:18:1267:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1267:18:1267:31 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1267:18:1267:31 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1267:26:1267:31 | id(...) | | file://:0:0:0:0 | & | +| main.rs:1267:18:1267:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1267:18:1267:31 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1267:26:1267:31 | id(...) | | {EXTERNAL LOCATION} | & | | main.rs:1267:26:1267:31 | id(...) | &T | main.rs:1238:5:1239:14 | S1 | -| main.rs:1267:29:1267:30 | &x | | file://:0:0:0:0 | & | +| main.rs:1267:29:1267:30 | &x | | {EXTERNAL LOCATION} | & | | main.rs:1267:29:1267:30 | &x | &T | main.rs:1238:5:1239:14 | S1 | | main.rs:1267:30:1267:30 | x | | main.rs:1238:5:1239:14 | S1 | | main.rs:1269:13:1269:13 | x | | main.rs:1238:5:1239:14 | S1 | | main.rs:1269:17:1269:18 | S1 | | main.rs:1238:5:1239:14 | S1 | -| main.rs:1270:18:1270:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1270:18:1270:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1270:18:1270:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1270:18:1270:37 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1270:18:1270:37 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1270:26:1270:37 | id::<...>(...) | | file://:0:0:0:0 | & | +| main.rs:1270:18:1270:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1270:18:1270:37 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1270:26:1270:37 | id::<...>(...) | | {EXTERNAL LOCATION} | & | | main.rs:1270:26:1270:37 | id::<...>(...) | &T | main.rs:1238:5:1239:14 | S1 | -| main.rs:1270:35:1270:36 | &x | | file://:0:0:0:0 | & | +| main.rs:1270:35:1270:36 | &x | | {EXTERNAL LOCATION} | & | | main.rs:1270:35:1270:36 | &x | &T | main.rs:1238:5:1239:14 | S1 | | main.rs:1270:36:1270:36 | x | | main.rs:1238:5:1239:14 | S1 | | main.rs:1272:13:1272:13 | x | | main.rs:1238:5:1239:14 | S1 | | main.rs:1272:17:1272:18 | S1 | | main.rs:1238:5:1239:14 | S1 | -| main.rs:1274:18:1274:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1274:18:1274:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1274:18:1274:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1274:18:1274:44 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1274:18:1274:44 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1274:26:1274:44 | id::<...>(...) | | file://:0:0:0:0 | & | +| main.rs:1274:18:1274:44 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1274:18:1274:44 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1274:26:1274:44 | id::<...>(...) | | {EXTERNAL LOCATION} | & | | main.rs:1274:26:1274:44 | id::<...>(...) | &T | main.rs:1244:5:1244:25 | dyn Trait | -| main.rs:1274:42:1274:43 | &x | | file://:0:0:0:0 | & | +| main.rs:1274:42:1274:43 | &x | | {EXTERNAL LOCATION} | & | | main.rs:1274:42:1274:43 | &x | &T | main.rs:1238:5:1239:14 | S1 | | main.rs:1274:43:1274:43 | x | | main.rs:1238:5:1239:14 | S1 | | main.rs:1276:13:1276:13 | x | | main.rs:1238:5:1239:14 | S1 | @@ -2998,21 +2998,21 @@ inferType | main.rs:1296:17:1296:38 | ...::PairNone(...) | Fst | main.rs:1293:10:1293:12 | Fst | | main.rs:1296:17:1296:38 | ...::PairNone(...) | Snd | main.rs:1293:15:1293:17 | Snd | | main.rs:1296:43:1296:82 | MacroExpr | | file://:0:0:0:0 | ! | -| main.rs:1296:50:1296:81 | "PairNone has no second elemen... | | file://:0:0:0:0 | & | +| main.rs:1296:50:1296:81 | "PairNone has no second elemen... | | {EXTERNAL LOCATION} | & | | main.rs:1296:50:1296:81 | "PairNone has no second elemen... | &T | {EXTERNAL LOCATION} | str | | main.rs:1296:50:1296:81 | ...::panic_fmt(...) | | file://:0:0:0:0 | ! | -| main.rs:1296:50:1296:81 | MacroExpr | | file://:0:0:0:0 | () | -| main.rs:1296:50:1296:81 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1296:50:1296:81 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1296:50:1296:81 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1297:17:1297:38 | ...::PairFst(...) | | main.rs:1285:5:1291:5 | PairOption | | main.rs:1297:17:1297:38 | ...::PairFst(...) | Fst | main.rs:1293:10:1293:12 | Fst | | main.rs:1297:17:1297:38 | ...::PairFst(...) | Snd | main.rs:1293:15:1293:17 | Snd | | main.rs:1297:37:1297:37 | _ | | main.rs:1293:10:1293:12 | Fst | | main.rs:1297:43:1297:81 | MacroExpr | | file://:0:0:0:0 | ! | -| main.rs:1297:50:1297:80 | "PairFst has no second element... | | file://:0:0:0:0 | & | +| main.rs:1297:50:1297:80 | "PairFst has no second element... | | {EXTERNAL LOCATION} | & | | main.rs:1297:50:1297:80 | "PairFst has no second element... | &T | {EXTERNAL LOCATION} | str | | main.rs:1297:50:1297:80 | ...::panic_fmt(...) | | file://:0:0:0:0 | ! | -| main.rs:1297:50:1297:80 | MacroExpr | | file://:0:0:0:0 | () | -| main.rs:1297:50:1297:80 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1297:50:1297:80 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:1297:50:1297:80 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1298:17:1298:40 | ...::PairSnd(...) | | main.rs:1285:5:1291:5 | PairOption | | main.rs:1298:17:1298:40 | ...::PairSnd(...) | Fst | main.rs:1293:10:1293:12 | Fst | | main.rs:1298:17:1298:40 | ...::PairSnd(...) | Snd | main.rs:1293:15:1293:17 | Snd | @@ -3029,7 +3029,7 @@ inferType | main.rs:1325:10:1325:10 | t | Snd | main.rs:1285:5:1291:5 | PairOption | | main.rs:1325:10:1325:10 | t | Snd.Fst | main.rs:1307:5:1308:14 | S2 | | main.rs:1325:10:1325:10 | t | Snd.Snd | main.rs:1310:5:1311:14 | S3 | -| main.rs:1325:30:1328:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1325:30:1328:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1326:13:1326:13 | x | | main.rs:1310:5:1311:14 | S3 | | main.rs:1326:17:1326:17 | t | | main.rs:1285:5:1291:5 | PairOption | | main.rs:1326:17:1326:17 | t | Fst | main.rs:1307:5:1308:14 | S2 | @@ -3040,10 +3040,10 @@ inferType | main.rs:1326:17:1326:29 | t.unwrapSnd() | Fst | main.rs:1307:5:1308:14 | S2 | | main.rs:1326:17:1326:29 | t.unwrapSnd() | Snd | main.rs:1310:5:1311:14 | S3 | | main.rs:1326:17:1326:41 | ... .unwrapSnd() | | main.rs:1310:5:1311:14 | S3 | -| main.rs:1327:18:1327:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1327:18:1327:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1327:18:1327:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1327:18:1327:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1327:18:1327:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1327:18:1327:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1327:18:1327:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1327:26:1327:26 | x | | main.rs:1310:5:1311:14 | S3 | | main.rs:1342:22:1342:25 | SelfParam | | main.rs:1340:5:1343:5 | Self [trait TraitWithAssocType] | | main.rs:1350:22:1350:25 | SelfParam | | main.rs:1338:5:1338:28 | GenS | @@ -3057,7 +3057,7 @@ inferType | main.rs:1351:16:1351:19 | self | | main.rs:1338:5:1338:28 | GenS | | main.rs:1351:16:1351:19 | self | GenT | main.rs:1345:10:1345:15 | Output | | main.rs:1351:16:1351:21 | self.0 | | main.rs:1345:10:1345:15 | Output | -| main.rs:1355:16:1377:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1355:16:1377:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1357:13:1357:14 | p1 | | main.rs:1285:5:1291:5 | PairOption | | main.rs:1357:13:1357:14 | p1 | Fst | main.rs:1304:5:1305:14 | S1 | | main.rs:1357:13:1357:14 | p1 | Snd | main.rs:1307:5:1308:14 | S2 | @@ -3066,10 +3066,10 @@ inferType | main.rs:1357:26:1357:53 | ...::PairBoth(...) | Snd | main.rs:1307:5:1308:14 | S2 | | main.rs:1357:47:1357:48 | S1 | | main.rs:1304:5:1305:14 | S1 | | main.rs:1357:51:1357:52 | S2 | | main.rs:1307:5:1308:14 | S2 | -| main.rs:1358:18:1358:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1358:18:1358:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1358:18:1358:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1358:18:1358:27 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1358:18:1358:27 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1358:18:1358:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1358:18:1358:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1358:26:1358:27 | p1 | | main.rs:1285:5:1291:5 | PairOption | | main.rs:1358:26:1358:27 | p1 | Fst | main.rs:1304:5:1305:14 | S1 | | main.rs:1358:26:1358:27 | p1 | Snd | main.rs:1307:5:1308:14 | S2 | @@ -3079,10 +3079,10 @@ inferType | main.rs:1361:26:1361:47 | ...::PairNone(...) | | main.rs:1285:5:1291:5 | PairOption | | main.rs:1361:26:1361:47 | ...::PairNone(...) | Fst | main.rs:1304:5:1305:14 | S1 | | main.rs:1361:26:1361:47 | ...::PairNone(...) | Snd | main.rs:1307:5:1308:14 | S2 | -| main.rs:1362:18:1362:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1362:18:1362:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1362:18:1362:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1362:18:1362:27 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1362:18:1362:27 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1362:18:1362:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1362:18:1362:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1362:26:1362:27 | p2 | | main.rs:1285:5:1291:5 | PairOption | | main.rs:1362:26:1362:27 | p2 | Fst | main.rs:1304:5:1305:14 | S1 | | main.rs:1362:26:1362:27 | p2 | Snd | main.rs:1307:5:1308:14 | S2 | @@ -3093,10 +3093,10 @@ inferType | main.rs:1365:34:1365:56 | ...::PairSnd(...) | Fst | main.rs:1307:5:1308:14 | S2 | | main.rs:1365:34:1365:56 | ...::PairSnd(...) | Snd | main.rs:1310:5:1311:14 | S3 | | main.rs:1365:54:1365:55 | S3 | | main.rs:1310:5:1311:14 | S3 | -| main.rs:1366:18:1366:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1366:18:1366:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1366:18:1366:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1366:18:1366:27 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1366:18:1366:27 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1366:18:1366:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1366:18:1366:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1366:26:1366:27 | p3 | | main.rs:1285:5:1291:5 | PairOption | | main.rs:1366:26:1366:27 | p3 | Fst | main.rs:1307:5:1308:14 | S2 | | main.rs:1366:26:1366:27 | p3 | Snd | main.rs:1310:5:1311:14 | S3 | @@ -3106,14 +3106,14 @@ inferType | main.rs:1369:35:1369:56 | ...::PairNone(...) | | main.rs:1285:5:1291:5 | PairOption | | main.rs:1369:35:1369:56 | ...::PairNone(...) | Fst | main.rs:1307:5:1308:14 | S2 | | main.rs:1369:35:1369:56 | ...::PairNone(...) | Snd | main.rs:1310:5:1311:14 | S3 | -| main.rs:1370:18:1370:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1370:18:1370:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1370:18:1370:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1370:18:1370:27 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1370:18:1370:27 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1370:18:1370:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1370:18:1370:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1370:26:1370:27 | p3 | | main.rs:1285:5:1291:5 | PairOption | | main.rs:1370:26:1370:27 | p3 | Fst | main.rs:1307:5:1308:14 | S2 | | main.rs:1370:26:1370:27 | p3 | Snd | main.rs:1310:5:1311:14 | S3 | -| main.rs:1372:9:1372:55 | g(...) | | file://:0:0:0:0 | () | +| main.rs:1372:9:1372:55 | g(...) | | {EXTERNAL LOCATION} | () | | main.rs:1372:11:1372:54 | ...::PairSnd(...) | | main.rs:1285:5:1291:5 | PairOption | | main.rs:1372:11:1372:54 | ...::PairSnd(...) | Fst | main.rs:1307:5:1308:14 | S2 | | main.rs:1372:11:1372:54 | ...::PairSnd(...) | Snd | main.rs:1285:5:1291:5 | PairOption | @@ -3138,22 +3138,22 @@ inferType | main.rs:1376:17:1376:38 | ... .get_input() | E | {EXTERNAL LOCATION} | bool | | main.rs:1376:17:1376:38 | ... .get_input() | T | {EXTERNAL LOCATION} | bool | | main.rs:1376:22:1376:25 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1389:16:1389:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1389:16:1389:24 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1389:16:1389:24 | SelfParam | &T | main.rs:1387:5:1394:5 | Self [trait MyTrait] | | main.rs:1389:27:1389:31 | value | | main.rs:1387:19:1387:19 | S | -| main.rs:1391:21:1391:29 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1391:21:1391:29 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1391:21:1391:29 | SelfParam | &T | main.rs:1387:5:1394:5 | Self [trait MyTrait] | | main.rs:1391:32:1391:36 | value | | main.rs:1387:19:1387:19 | S | -| main.rs:1391:42:1393:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1392:13:1392:16 | self | | file://:0:0:0:0 | & | +| main.rs:1391:42:1393:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1392:13:1392:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1392:13:1392:16 | self | &T | main.rs:1387:5:1394:5 | Self [trait MyTrait] | -| main.rs:1392:13:1392:27 | self.set(...) | | file://:0:0:0:0 | () | +| main.rs:1392:13:1392:27 | self.set(...) | | {EXTERNAL LOCATION} | () | | main.rs:1392:22:1392:26 | value | | main.rs:1387:19:1387:19 | S | -| main.rs:1398:16:1398:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1398:16:1398:24 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1398:16:1398:24 | SelfParam | &T | main.rs:1381:5:1385:5 | MyOption | | main.rs:1398:16:1398:24 | SelfParam | &T.T | main.rs:1396:10:1396:10 | T | | main.rs:1398:27:1398:31 | value | | main.rs:1396:10:1396:10 | T | -| main.rs:1398:37:1398:38 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1398:37:1398:38 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1402:26:1404:9 | { ... } | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1402:26:1404:9 | { ... } | T | main.rs:1401:10:1401:10 | T | | main.rs:1403:13:1403:30 | ...::MyNone(...) | | main.rs:1381:5:1385:5 | MyOption | @@ -3180,15 +3180,15 @@ inferType | main.rs:1411:34:1411:34 | x | T | main.rs:1407:10:1407:10 | T | | main.rs:1411:40:1411:40 | x | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1411:40:1411:40 | x | T | main.rs:1407:10:1407:10 | T | -| main.rs:1419:16:1465:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1419:16:1465:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1420:13:1420:14 | x1 | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1420:13:1420:14 | x1 | T | main.rs:1416:5:1417:13 | S | | main.rs:1420:18:1420:37 | ...::new(...) | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1420:18:1420:37 | ...::new(...) | T | main.rs:1416:5:1417:13 | S | -| main.rs:1421:18:1421:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1421:18:1421:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1421:18:1421:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1421:18:1421:27 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1421:18:1421:27 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1421:18:1421:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1421:18:1421:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1421:26:1421:27 | x1 | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1421:26:1421:27 | x1 | T | main.rs:1416:5:1417:13 | S | | main.rs:1423:17:1423:18 | x2 | | main.rs:1381:5:1385:5 | MyOption | @@ -3197,39 +3197,39 @@ inferType | main.rs:1423:22:1423:36 | ...::new(...) | T | main.rs:1416:5:1417:13 | S | | main.rs:1424:9:1424:10 | x2 | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1424:9:1424:10 | x2 | T | main.rs:1416:5:1417:13 | S | -| main.rs:1424:9:1424:17 | x2.set(...) | | file://:0:0:0:0 | () | +| main.rs:1424:9:1424:17 | x2.set(...) | | {EXTERNAL LOCATION} | () | | main.rs:1424:16:1424:16 | S | | main.rs:1416:5:1417:13 | S | -| main.rs:1425:18:1425:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1425:18:1425:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1425:18:1425:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1425:18:1425:27 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1425:18:1425:27 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1425:18:1425:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1425:18:1425:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1425:26:1425:27 | x2 | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1425:26:1425:27 | x2 | T | main.rs:1416:5:1417:13 | S | | main.rs:1428:17:1428:18 | x3 | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1428:22:1428:36 | ...::new(...) | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1429:9:1429:10 | x3 | | main.rs:1381:5:1385:5 | MyOption | -| main.rs:1429:9:1429:22 | x3.call_set(...) | | file://:0:0:0:0 | () | +| main.rs:1429:9:1429:22 | x3.call_set(...) | | {EXTERNAL LOCATION} | () | | main.rs:1429:21:1429:21 | S | | main.rs:1416:5:1417:13 | S | -| main.rs:1430:18:1430:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1430:18:1430:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1430:18:1430:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1430:18:1430:27 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1430:18:1430:27 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1430:18:1430:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1430:18:1430:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1430:26:1430:27 | x3 | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1432:17:1432:18 | x4 | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1432:17:1432:18 | x4 | T | main.rs:1416:5:1417:13 | S | | main.rs:1432:22:1432:36 | ...::new(...) | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1432:22:1432:36 | ...::new(...) | T | main.rs:1416:5:1417:13 | S | -| main.rs:1433:9:1433:33 | ...::set(...) | | file://:0:0:0:0 | () | -| main.rs:1433:23:1433:29 | &mut x4 | | file://:0:0:0:0 | & | +| main.rs:1433:9:1433:33 | ...::set(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1433:23:1433:29 | &mut x4 | | {EXTERNAL LOCATION} | & | | main.rs:1433:23:1433:29 | &mut x4 | &T | main.rs:1381:5:1385:5 | MyOption | | main.rs:1433:23:1433:29 | &mut x4 | &T.T | main.rs:1416:5:1417:13 | S | | main.rs:1433:28:1433:29 | x4 | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1433:28:1433:29 | x4 | T | main.rs:1416:5:1417:13 | S | | main.rs:1433:32:1433:32 | S | | main.rs:1416:5:1417:13 | S | -| main.rs:1434:18:1434:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1434:18:1434:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1434:18:1434:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1434:18:1434:27 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1434:18:1434:27 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1434:18:1434:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1434:18:1434:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1434:26:1434:27 | x4 | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1434:26:1434:27 | x4 | T | main.rs:1416:5:1417:13 | S | | main.rs:1436:13:1436:14 | x5 | | main.rs:1381:5:1385:5 | MyOption | @@ -3240,10 +3240,10 @@ inferType | main.rs:1436:18:1436:58 | ...::MySome(...) | T.T | main.rs:1416:5:1417:13 | S | | main.rs:1436:35:1436:57 | ...::MyNone(...) | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1436:35:1436:57 | ...::MyNone(...) | T | main.rs:1416:5:1417:13 | S | -| main.rs:1437:18:1437:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1437:18:1437:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1437:18:1437:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1437:18:1437:37 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1437:18:1437:37 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1437:18:1437:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1437:18:1437:37 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1437:26:1437:27 | x5 | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1437:26:1437:27 | x5 | T | main.rs:1381:5:1385:5 | MyOption | | main.rs:1437:26:1437:27 | x5 | T.T | main.rs:1416:5:1417:13 | S | @@ -3257,10 +3257,10 @@ inferType | main.rs:1439:18:1439:58 | ...::MySome(...) | T.T | main.rs:1416:5:1417:13 | S | | main.rs:1439:35:1439:57 | ...::MyNone(...) | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1439:35:1439:57 | ...::MyNone(...) | T | main.rs:1416:5:1417:13 | S | -| main.rs:1440:18:1440:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1440:18:1440:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1440:18:1440:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1440:18:1440:61 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1440:18:1440:61 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1440:18:1440:61 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1440:18:1440:61 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1440:26:1440:61 | ...::flatten(...) | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1440:26:1440:61 | ...::flatten(...) | T | main.rs:1416:5:1417:13 | S | | main.rs:1440:59:1440:60 | x6 | | main.rs:1381:5:1385:5 | MyOption | @@ -3282,10 +3282,10 @@ inferType | main.rs:1446:13:1446:31 | ...::MySome(...) | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1446:13:1446:31 | ...::MySome(...) | T | main.rs:1416:5:1417:13 | S | | main.rs:1446:30:1446:30 | S | | main.rs:1416:5:1417:13 | S | -| main.rs:1448:18:1448:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1448:18:1448:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1448:18:1448:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1448:18:1448:32 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1448:18:1448:32 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1448:18:1448:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1448:18:1448:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1448:26:1448:32 | from_if | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1448:26:1448:32 | from_if | T | main.rs:1416:5:1417:13 | S | | main.rs:1451:13:1451:22 | from_match | | main.rs:1381:5:1385:5 | MyOption | @@ -3302,31 +3302,31 @@ inferType | main.rs:1453:22:1453:40 | ...::MySome(...) | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1453:22:1453:40 | ...::MySome(...) | T | main.rs:1416:5:1417:13 | S | | main.rs:1453:39:1453:39 | S | | main.rs:1416:5:1417:13 | S | -| main.rs:1455:18:1455:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1455:18:1455:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1455:18:1455:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1455:18:1455:35 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1455:18:1455:35 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1455:18:1455:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1455:18:1455:35 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1455:26:1455:35 | from_match | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1455:26:1455:35 | from_match | T | main.rs:1416:5:1417:13 | S | | main.rs:1458:13:1458:21 | from_loop | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1458:13:1458:21 | from_loop | T | main.rs:1416:5:1417:13 | S | | main.rs:1458:25:1463:9 | loop { ... } | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1458:25:1463:9 | loop { ... } | T | main.rs:1416:5:1417:13 | S | -| main.rs:1458:30:1463:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1459:13:1461:13 | if ... {...} | | file://:0:0:0:0 | () | +| main.rs:1458:30:1463:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1459:13:1461:13 | if ... {...} | | {EXTERNAL LOCATION} | () | | main.rs:1459:16:1459:16 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:1459:16:1459:20 | ... > ... | | {EXTERNAL LOCATION} | bool | | main.rs:1459:20:1459:20 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1459:22:1461:13 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1459:22:1461:13 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1460:23:1460:40 | ...::MyNone(...) | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1460:23:1460:40 | ...::MyNone(...) | T | main.rs:1416:5:1417:13 | S | | main.rs:1462:19:1462:37 | ...::MySome(...) | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1462:19:1462:37 | ...::MySome(...) | T | main.rs:1416:5:1417:13 | S | | main.rs:1462:36:1462:36 | S | | main.rs:1416:5:1417:13 | S | -| main.rs:1464:18:1464:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1464:18:1464:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1464:18:1464:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1464:18:1464:34 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1464:18:1464:34 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1464:18:1464:34 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1464:18:1464:34 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1464:26:1464:34 | from_loop | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1464:26:1464:34 | from_loop | T | main.rs:1416:5:1417:13 | S | | main.rs:1482:15:1482:18 | SelfParam | | main.rs:1470:5:1471:19 | S | @@ -3335,63 +3335,63 @@ inferType | main.rs:1483:13:1483:16 | self | | main.rs:1470:5:1471:19 | S | | main.rs:1483:13:1483:16 | self | T | main.rs:1481:10:1481:10 | T | | main.rs:1483:13:1483:18 | self.0 | | main.rs:1481:10:1481:10 | T | -| main.rs:1486:15:1486:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1486:15:1486:19 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1486:15:1486:19 | SelfParam | &T | main.rs:1470:5:1471:19 | S | | main.rs:1486:15:1486:19 | SelfParam | &T.T | main.rs:1481:10:1481:10 | T | -| main.rs:1486:28:1488:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1486:28:1488:9 | { ... } | | {EXTERNAL LOCATION} | & | | main.rs:1486:28:1488:9 | { ... } | &T | main.rs:1481:10:1481:10 | T | -| main.rs:1487:13:1487:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1487:13:1487:19 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1487:13:1487:19 | &... | &T | main.rs:1481:10:1481:10 | T | -| main.rs:1487:14:1487:17 | self | | file://:0:0:0:0 | & | +| main.rs:1487:14:1487:17 | self | | {EXTERNAL LOCATION} | & | | main.rs:1487:14:1487:17 | self | &T | main.rs:1470:5:1471:19 | S | | main.rs:1487:14:1487:17 | self | &T.T | main.rs:1481:10:1481:10 | T | | main.rs:1487:14:1487:19 | self.0 | | main.rs:1481:10:1481:10 | T | -| main.rs:1490:15:1490:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1490:15:1490:25 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1490:15:1490:25 | SelfParam | &T | main.rs:1470:5:1471:19 | S | | main.rs:1490:15:1490:25 | SelfParam | &T.T | main.rs:1481:10:1481:10 | T | -| main.rs:1490:34:1492:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1490:34:1492:9 | { ... } | | {EXTERNAL LOCATION} | & | | main.rs:1490:34:1492:9 | { ... } | &T | main.rs:1481:10:1481:10 | T | -| main.rs:1491:13:1491:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1491:13:1491:19 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1491:13:1491:19 | &... | &T | main.rs:1481:10:1481:10 | T | -| main.rs:1491:14:1491:17 | self | | file://:0:0:0:0 | & | +| main.rs:1491:14:1491:17 | self | | {EXTERNAL LOCATION} | & | | main.rs:1491:14:1491:17 | self | &T | main.rs:1470:5:1471:19 | S | | main.rs:1491:14:1491:17 | self | &T.T | main.rs:1481:10:1481:10 | T | | main.rs:1491:14:1491:19 | self.0 | | main.rs:1481:10:1481:10 | T | -| main.rs:1496:29:1496:33 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1496:29:1496:33 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1496:29:1496:33 | SelfParam | &T | main.rs:1495:5:1498:5 | Self [trait ATrait] | | main.rs:1497:33:1497:36 | SelfParam | | main.rs:1495:5:1498:5 | Self [trait ATrait] | -| main.rs:1503:29:1503:33 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1503:29:1503:33 | SelfParam | &T | file://:0:0:0:0 | & | +| main.rs:1503:29:1503:33 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1503:29:1503:33 | SelfParam | &T | {EXTERNAL LOCATION} | & | | main.rs:1503:29:1503:33 | SelfParam | &T.&T | main.rs:1476:5:1479:5 | MyInt | | main.rs:1503:43:1505:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:1504:13:1504:22 | (...) | | main.rs:1476:5:1479:5 | MyInt | | main.rs:1504:13:1504:24 | ... .a | | {EXTERNAL LOCATION} | i64 | | main.rs:1504:14:1504:21 | * ... | | main.rs:1476:5:1479:5 | MyInt | -| main.rs:1504:15:1504:21 | (...) | | file://:0:0:0:0 | & | +| main.rs:1504:15:1504:21 | (...) | | {EXTERNAL LOCATION} | & | | main.rs:1504:15:1504:21 | (...) | &T | main.rs:1476:5:1479:5 | MyInt | -| main.rs:1504:16:1504:20 | * ... | | file://:0:0:0:0 | & | +| main.rs:1504:16:1504:20 | * ... | | {EXTERNAL LOCATION} | & | | main.rs:1504:16:1504:20 | * ... | &T | main.rs:1476:5:1479:5 | MyInt | -| main.rs:1504:17:1504:20 | self | | file://:0:0:0:0 | & | -| main.rs:1504:17:1504:20 | self | &T | file://:0:0:0:0 | & | +| main.rs:1504:17:1504:20 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1504:17:1504:20 | self | &T | {EXTERNAL LOCATION} | & | | main.rs:1504:17:1504:20 | self | &T.&T | main.rs:1476:5:1479:5 | MyInt | -| main.rs:1508:33:1508:36 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1508:33:1508:36 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1508:33:1508:36 | SelfParam | &T | main.rs:1476:5:1479:5 | MyInt | | main.rs:1508:46:1510:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:1509:13:1509:19 | (...) | | main.rs:1476:5:1479:5 | MyInt | | main.rs:1509:13:1509:21 | ... .a | | {EXTERNAL LOCATION} | i64 | | main.rs:1509:14:1509:18 | * ... | | main.rs:1476:5:1479:5 | MyInt | -| main.rs:1509:15:1509:18 | self | | file://:0:0:0:0 | & | +| main.rs:1509:15:1509:18 | self | | {EXTERNAL LOCATION} | & | | main.rs:1509:15:1509:18 | self | &T | main.rs:1476:5:1479:5 | MyInt | -| main.rs:1513:16:1563:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1513:16:1563:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1514:13:1514:14 | x1 | | main.rs:1470:5:1471:19 | S | | main.rs:1514:13:1514:14 | x1 | T | main.rs:1473:5:1474:14 | S2 | | main.rs:1514:18:1514:22 | S(...) | | main.rs:1470:5:1471:19 | S | | main.rs:1514:18:1514:22 | S(...) | T | main.rs:1473:5:1474:14 | S2 | | main.rs:1514:20:1514:21 | S2 | | main.rs:1473:5:1474:14 | S2 | -| main.rs:1515:18:1515:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1515:18:1515:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1515:18:1515:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1515:18:1515:32 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1515:18:1515:32 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1515:18:1515:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1515:18:1515:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1515:26:1515:27 | x1 | | main.rs:1470:5:1471:19 | S | | main.rs:1515:26:1515:27 | x1 | T | main.rs:1473:5:1474:14 | S2 | | main.rs:1515:26:1515:32 | x1.m1() | | main.rs:1473:5:1474:14 | S2 | @@ -3400,147 +3400,147 @@ inferType | main.rs:1517:18:1517:22 | S(...) | | main.rs:1470:5:1471:19 | S | | main.rs:1517:18:1517:22 | S(...) | T | main.rs:1473:5:1474:14 | S2 | | main.rs:1517:20:1517:21 | S2 | | main.rs:1473:5:1474:14 | S2 | -| main.rs:1519:18:1519:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1519:18:1519:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1519:18:1519:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1519:18:1519:32 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1519:18:1519:32 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1519:18:1519:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1519:18:1519:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1519:26:1519:27 | x2 | | main.rs:1470:5:1471:19 | S | | main.rs:1519:26:1519:27 | x2 | T | main.rs:1473:5:1474:14 | S2 | -| main.rs:1519:26:1519:32 | x2.m2() | | file://:0:0:0:0 | & | +| main.rs:1519:26:1519:32 | x2.m2() | | {EXTERNAL LOCATION} | & | | main.rs:1519:26:1519:32 | x2.m2() | &T | main.rs:1473:5:1474:14 | S2 | -| main.rs:1520:18:1520:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1520:18:1520:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1520:18:1520:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1520:18:1520:32 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1520:18:1520:32 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1520:18:1520:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1520:18:1520:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1520:26:1520:27 | x2 | | main.rs:1470:5:1471:19 | S | | main.rs:1520:26:1520:27 | x2 | T | main.rs:1473:5:1474:14 | S2 | -| main.rs:1520:26:1520:32 | x2.m3() | | file://:0:0:0:0 | & | +| main.rs:1520:26:1520:32 | x2.m3() | | {EXTERNAL LOCATION} | & | | main.rs:1520:26:1520:32 | x2.m3() | &T | main.rs:1473:5:1474:14 | S2 | | main.rs:1522:13:1522:14 | x3 | | main.rs:1470:5:1471:19 | S | | main.rs:1522:13:1522:14 | x3 | T | main.rs:1473:5:1474:14 | S2 | | main.rs:1522:18:1522:22 | S(...) | | main.rs:1470:5:1471:19 | S | | main.rs:1522:18:1522:22 | S(...) | T | main.rs:1473:5:1474:14 | S2 | | main.rs:1522:20:1522:21 | S2 | | main.rs:1473:5:1474:14 | S2 | -| main.rs:1524:18:1524:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1524:18:1524:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1524:18:1524:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1524:18:1524:41 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1524:18:1524:41 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1524:26:1524:41 | ...::m2(...) | | file://:0:0:0:0 | & | +| main.rs:1524:18:1524:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1524:18:1524:41 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1524:26:1524:41 | ...::m2(...) | | {EXTERNAL LOCATION} | & | | main.rs:1524:26:1524:41 | ...::m2(...) | &T | main.rs:1473:5:1474:14 | S2 | -| main.rs:1524:38:1524:40 | &x3 | | file://:0:0:0:0 | & | +| main.rs:1524:38:1524:40 | &x3 | | {EXTERNAL LOCATION} | & | | main.rs:1524:38:1524:40 | &x3 | &T | main.rs:1470:5:1471:19 | S | | main.rs:1524:38:1524:40 | &x3 | &T.T | main.rs:1473:5:1474:14 | S2 | | main.rs:1524:39:1524:40 | x3 | | main.rs:1470:5:1471:19 | S | | main.rs:1524:39:1524:40 | x3 | T | main.rs:1473:5:1474:14 | S2 | -| main.rs:1525:18:1525:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1525:18:1525:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1525:18:1525:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1525:18:1525:41 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1525:18:1525:41 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1525:26:1525:41 | ...::m3(...) | | file://:0:0:0:0 | & | +| main.rs:1525:18:1525:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1525:18:1525:41 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1525:26:1525:41 | ...::m3(...) | | {EXTERNAL LOCATION} | & | | main.rs:1525:26:1525:41 | ...::m3(...) | &T | main.rs:1473:5:1474:14 | S2 | -| main.rs:1525:38:1525:40 | &x3 | | file://:0:0:0:0 | & | +| main.rs:1525:38:1525:40 | &x3 | | {EXTERNAL LOCATION} | & | | main.rs:1525:38:1525:40 | &x3 | &T | main.rs:1470:5:1471:19 | S | | main.rs:1525:38:1525:40 | &x3 | &T.T | main.rs:1473:5:1474:14 | S2 | | main.rs:1525:39:1525:40 | x3 | | main.rs:1470:5:1471:19 | S | | main.rs:1525:39:1525:40 | x3 | T | main.rs:1473:5:1474:14 | S2 | -| main.rs:1527:13:1527:14 | x4 | | file://:0:0:0:0 | & | +| main.rs:1527:13:1527:14 | x4 | | {EXTERNAL LOCATION} | & | | main.rs:1527:13:1527:14 | x4 | &T | main.rs:1470:5:1471:19 | S | | main.rs:1527:13:1527:14 | x4 | &T.T | main.rs:1473:5:1474:14 | S2 | -| main.rs:1527:18:1527:23 | &... | | file://:0:0:0:0 | & | +| main.rs:1527:18:1527:23 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1527:18:1527:23 | &... | &T | main.rs:1470:5:1471:19 | S | | main.rs:1527:18:1527:23 | &... | &T.T | main.rs:1473:5:1474:14 | S2 | | main.rs:1527:19:1527:23 | S(...) | | main.rs:1470:5:1471:19 | S | | main.rs:1527:19:1527:23 | S(...) | T | main.rs:1473:5:1474:14 | S2 | | main.rs:1527:21:1527:22 | S2 | | main.rs:1473:5:1474:14 | S2 | -| main.rs:1529:18:1529:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1529:18:1529:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1529:18:1529:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1529:18:1529:32 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1529:18:1529:32 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1529:26:1529:27 | x4 | | file://:0:0:0:0 | & | +| main.rs:1529:18:1529:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1529:18:1529:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1529:26:1529:27 | x4 | | {EXTERNAL LOCATION} | & | | main.rs:1529:26:1529:27 | x4 | &T | main.rs:1470:5:1471:19 | S | | main.rs:1529:26:1529:27 | x4 | &T.T | main.rs:1473:5:1474:14 | S2 | -| main.rs:1529:26:1529:32 | x4.m2() | | file://:0:0:0:0 | & | +| main.rs:1529:26:1529:32 | x4.m2() | | {EXTERNAL LOCATION} | & | | main.rs:1529:26:1529:32 | x4.m2() | &T | main.rs:1473:5:1474:14 | S2 | -| main.rs:1530:18:1530:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1530:18:1530:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1530:18:1530:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1530:18:1530:32 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1530:18:1530:32 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1530:26:1530:27 | x4 | | file://:0:0:0:0 | & | +| main.rs:1530:18:1530:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1530:18:1530:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1530:26:1530:27 | x4 | | {EXTERNAL LOCATION} | & | | main.rs:1530:26:1530:27 | x4 | &T | main.rs:1470:5:1471:19 | S | | main.rs:1530:26:1530:27 | x4 | &T.T | main.rs:1473:5:1474:14 | S2 | -| main.rs:1530:26:1530:32 | x4.m3() | | file://:0:0:0:0 | & | +| main.rs:1530:26:1530:32 | x4.m3() | | {EXTERNAL LOCATION} | & | | main.rs:1530:26:1530:32 | x4.m3() | &T | main.rs:1473:5:1474:14 | S2 | -| main.rs:1532:13:1532:14 | x5 | | file://:0:0:0:0 | & | +| main.rs:1532:13:1532:14 | x5 | | {EXTERNAL LOCATION} | & | | main.rs:1532:13:1532:14 | x5 | &T | main.rs:1470:5:1471:19 | S | | main.rs:1532:13:1532:14 | x5 | &T.T | main.rs:1473:5:1474:14 | S2 | -| main.rs:1532:18:1532:23 | &... | | file://:0:0:0:0 | & | +| main.rs:1532:18:1532:23 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1532:18:1532:23 | &... | &T | main.rs:1470:5:1471:19 | S | | main.rs:1532:18:1532:23 | &... | &T.T | main.rs:1473:5:1474:14 | S2 | | main.rs:1532:19:1532:23 | S(...) | | main.rs:1470:5:1471:19 | S | | main.rs:1532:19:1532:23 | S(...) | T | main.rs:1473:5:1474:14 | S2 | | main.rs:1532:21:1532:22 | S2 | | main.rs:1473:5:1474:14 | S2 | -| main.rs:1534:18:1534:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1534:18:1534:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1534:18:1534:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1534:18:1534:32 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1534:18:1534:32 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1534:26:1534:27 | x5 | | file://:0:0:0:0 | & | +| main.rs:1534:18:1534:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1534:18:1534:32 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1534:26:1534:27 | x5 | | {EXTERNAL LOCATION} | & | | main.rs:1534:26:1534:27 | x5 | &T | main.rs:1470:5:1471:19 | S | | main.rs:1534:26:1534:27 | x5 | &T.T | main.rs:1473:5:1474:14 | S2 | | main.rs:1534:26:1534:32 | x5.m1() | | main.rs:1473:5:1474:14 | S2 | -| main.rs:1535:18:1535:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1535:18:1535:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1535:18:1535:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1535:18:1535:29 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1535:18:1535:29 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1535:26:1535:27 | x5 | | file://:0:0:0:0 | & | +| main.rs:1535:18:1535:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1535:18:1535:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1535:26:1535:27 | x5 | | {EXTERNAL LOCATION} | & | | main.rs:1535:26:1535:27 | x5 | &T | main.rs:1470:5:1471:19 | S | | main.rs:1535:26:1535:27 | x5 | &T.T | main.rs:1473:5:1474:14 | S2 | | main.rs:1535:26:1535:29 | x5.0 | | main.rs:1473:5:1474:14 | S2 | -| main.rs:1537:13:1537:14 | x6 | | file://:0:0:0:0 | & | +| main.rs:1537:13:1537:14 | x6 | | {EXTERNAL LOCATION} | & | | main.rs:1537:13:1537:14 | x6 | &T | main.rs:1470:5:1471:19 | S | | main.rs:1537:13:1537:14 | x6 | &T.T | main.rs:1473:5:1474:14 | S2 | -| main.rs:1537:18:1537:23 | &... | | file://:0:0:0:0 | & | +| main.rs:1537:18:1537:23 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1537:18:1537:23 | &... | &T | main.rs:1470:5:1471:19 | S | | main.rs:1537:18:1537:23 | &... | &T.T | main.rs:1473:5:1474:14 | S2 | | main.rs:1537:19:1537:23 | S(...) | | main.rs:1470:5:1471:19 | S | | main.rs:1537:19:1537:23 | S(...) | T | main.rs:1473:5:1474:14 | S2 | | main.rs:1537:21:1537:22 | S2 | | main.rs:1473:5:1474:14 | S2 | -| main.rs:1540:18:1540:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1540:18:1540:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1540:18:1540:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1540:18:1540:35 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1540:18:1540:35 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1540:18:1540:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1540:18:1540:35 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1540:26:1540:30 | (...) | | main.rs:1470:5:1471:19 | S | | main.rs:1540:26:1540:30 | (...) | T | main.rs:1473:5:1474:14 | S2 | | main.rs:1540:26:1540:35 | ... .m1() | | main.rs:1473:5:1474:14 | S2 | | main.rs:1540:27:1540:29 | * ... | | main.rs:1470:5:1471:19 | S | | main.rs:1540:27:1540:29 | * ... | T | main.rs:1473:5:1474:14 | S2 | -| main.rs:1540:28:1540:29 | x6 | | file://:0:0:0:0 | & | +| main.rs:1540:28:1540:29 | x6 | | {EXTERNAL LOCATION} | & | | main.rs:1540:28:1540:29 | x6 | &T | main.rs:1470:5:1471:19 | S | | main.rs:1540:28:1540:29 | x6 | &T.T | main.rs:1473:5:1474:14 | S2 | | main.rs:1542:13:1542:14 | x7 | | main.rs:1470:5:1471:19 | S | -| main.rs:1542:13:1542:14 | x7 | T | file://:0:0:0:0 | & | +| main.rs:1542:13:1542:14 | x7 | T | {EXTERNAL LOCATION} | & | | main.rs:1542:13:1542:14 | x7 | T.&T | main.rs:1473:5:1474:14 | S2 | | main.rs:1542:18:1542:23 | S(...) | | main.rs:1470:5:1471:19 | S | -| main.rs:1542:18:1542:23 | S(...) | T | file://:0:0:0:0 | & | +| main.rs:1542:18:1542:23 | S(...) | T | {EXTERNAL LOCATION} | & | | main.rs:1542:18:1542:23 | S(...) | T.&T | main.rs:1473:5:1474:14 | S2 | -| main.rs:1542:20:1542:22 | &S2 | | file://:0:0:0:0 | & | +| main.rs:1542:20:1542:22 | &S2 | | {EXTERNAL LOCATION} | & | | main.rs:1542:20:1542:22 | &S2 | &T | main.rs:1473:5:1474:14 | S2 | | main.rs:1542:21:1542:22 | S2 | | main.rs:1473:5:1474:14 | S2 | -| main.rs:1545:13:1545:13 | t | | file://:0:0:0:0 | & | +| main.rs:1545:13:1545:13 | t | | {EXTERNAL LOCATION} | & | | main.rs:1545:13:1545:13 | t | &T | main.rs:1473:5:1474:14 | S2 | | main.rs:1545:17:1545:18 | x7 | | main.rs:1470:5:1471:19 | S | -| main.rs:1545:17:1545:18 | x7 | T | file://:0:0:0:0 | & | +| main.rs:1545:17:1545:18 | x7 | T | {EXTERNAL LOCATION} | & | | main.rs:1545:17:1545:18 | x7 | T.&T | main.rs:1473:5:1474:14 | S2 | -| main.rs:1545:17:1545:23 | x7.m1() | | file://:0:0:0:0 | & | +| main.rs:1545:17:1545:23 | x7.m1() | | {EXTERNAL LOCATION} | & | | main.rs:1545:17:1545:23 | x7.m1() | &T | main.rs:1473:5:1474:14 | S2 | -| main.rs:1546:18:1546:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1546:18:1546:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1546:18:1546:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1546:18:1546:27 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1546:18:1546:27 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1546:18:1546:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1546:18:1546:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1546:26:1546:27 | x7 | | main.rs:1470:5:1471:19 | S | -| main.rs:1546:26:1546:27 | x7 | T | file://:0:0:0:0 | & | +| main.rs:1546:26:1546:27 | x7 | T | {EXTERNAL LOCATION} | & | | main.rs:1546:26:1546:27 | x7 | T.&T | main.rs:1473:5:1474:14 | S2 | | main.rs:1548:13:1548:14 | x9 | | {EXTERNAL LOCATION} | String | -| main.rs:1548:26:1548:32 | "Hello" | | file://:0:0:0:0 | & | +| main.rs:1548:26:1548:32 | "Hello" | | {EXTERNAL LOCATION} | & | | main.rs:1548:26:1548:32 | "Hello" | &T | {EXTERNAL LOCATION} | str | | main.rs:1548:26:1548:44 | "Hello".to_string() | | {EXTERNAL LOCATION} | String | | main.rs:1552:13:1552:13 | u | | {EXTERNAL LOCATION} | Result | @@ -3548,80 +3548,80 @@ inferType | main.rs:1552:17:1552:18 | x9 | | {EXTERNAL LOCATION} | String | | main.rs:1552:17:1552:33 | x9.parse() | | {EXTERNAL LOCATION} | Result | | main.rs:1552:17:1552:33 | x9.parse() | T | {EXTERNAL LOCATION} | u32 | -| main.rs:1554:13:1554:20 | my_thing | | file://:0:0:0:0 | & | +| main.rs:1554:13:1554:20 | my_thing | | {EXTERNAL LOCATION} | & | | main.rs:1554:13:1554:20 | my_thing | &T | main.rs:1476:5:1479:5 | MyInt | -| main.rs:1554:24:1554:39 | &... | | file://:0:0:0:0 | & | +| main.rs:1554:24:1554:39 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1554:24:1554:39 | &... | &T | main.rs:1476:5:1479:5 | MyInt | | main.rs:1554:25:1554:39 | MyInt {...} | | main.rs:1476:5:1479:5 | MyInt | | main.rs:1554:36:1554:37 | 37 | | {EXTERNAL LOCATION} | i32 | | main.rs:1556:13:1556:13 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:1556:17:1556:24 | my_thing | | file://:0:0:0:0 | & | +| main.rs:1556:17:1556:24 | my_thing | | {EXTERNAL LOCATION} | & | | main.rs:1556:17:1556:24 | my_thing | &T | main.rs:1476:5:1479:5 | MyInt | | main.rs:1556:17:1556:43 | my_thing.method_on_borrow() | | {EXTERNAL LOCATION} | i64 | -| main.rs:1557:18:1557:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1557:18:1557:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1557:18:1557:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1557:18:1557:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1557:18:1557:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1557:18:1557:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1557:18:1557:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1557:26:1557:26 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:1560:13:1560:20 | my_thing | | file://:0:0:0:0 | & | +| main.rs:1560:13:1560:20 | my_thing | | {EXTERNAL LOCATION} | & | | main.rs:1560:13:1560:20 | my_thing | &T | main.rs:1476:5:1479:5 | MyInt | -| main.rs:1560:24:1560:39 | &... | | file://:0:0:0:0 | & | +| main.rs:1560:24:1560:39 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1560:24:1560:39 | &... | &T | main.rs:1476:5:1479:5 | MyInt | | main.rs:1560:25:1560:39 | MyInt {...} | | main.rs:1476:5:1479:5 | MyInt | | main.rs:1560:36:1560:37 | 38 | | {EXTERNAL LOCATION} | i32 | | main.rs:1561:13:1561:13 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:1561:17:1561:24 | my_thing | | file://:0:0:0:0 | & | +| main.rs:1561:17:1561:24 | my_thing | | {EXTERNAL LOCATION} | & | | main.rs:1561:17:1561:24 | my_thing | &T | main.rs:1476:5:1479:5 | MyInt | | main.rs:1561:17:1561:47 | my_thing.method_not_on_borrow() | | {EXTERNAL LOCATION} | i64 | -| main.rs:1562:18:1562:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1562:18:1562:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1562:18:1562:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1562:18:1562:26 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1562:18:1562:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1562:18:1562:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1562:18:1562:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1562:26:1562:26 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:1569:16:1569:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1569:16:1569:20 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1569:16:1569:20 | SelfParam | &T | main.rs:1567:5:1575:5 | Self [trait MyTrait] | -| main.rs:1572:16:1572:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1572:16:1572:20 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1572:16:1572:20 | SelfParam | &T | main.rs:1567:5:1575:5 | Self [trait MyTrait] | -| main.rs:1572:32:1574:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1572:32:1574:9 | { ... } | | {EXTERNAL LOCATION} | & | | main.rs:1572:32:1574:9 | { ... } | &T | main.rs:1567:5:1575:5 | Self [trait MyTrait] | -| main.rs:1573:13:1573:16 | self | | file://:0:0:0:0 | & | +| main.rs:1573:13:1573:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1573:13:1573:16 | self | &T | main.rs:1567:5:1575:5 | Self [trait MyTrait] | -| main.rs:1573:13:1573:22 | self.foo() | | file://:0:0:0:0 | & | +| main.rs:1573:13:1573:22 | self.foo() | | {EXTERNAL LOCATION} | & | | main.rs:1573:13:1573:22 | self.foo() | &T | main.rs:1567:5:1575:5 | Self [trait MyTrait] | -| main.rs:1581:16:1581:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1581:16:1581:20 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1581:16:1581:20 | SelfParam | &T | main.rs:1577:5:1577:20 | MyStruct | -| main.rs:1581:36:1583:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1581:36:1583:9 | { ... } | | {EXTERNAL LOCATION} | & | | main.rs:1581:36:1583:9 | { ... } | &T | main.rs:1577:5:1577:20 | MyStruct | -| main.rs:1582:13:1582:16 | self | | file://:0:0:0:0 | & | +| main.rs:1582:13:1582:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1582:13:1582:16 | self | &T | main.rs:1577:5:1577:20 | MyStruct | -| main.rs:1586:16:1589:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1586:16:1589:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1587:13:1587:13 | x | | main.rs:1577:5:1577:20 | MyStruct | | main.rs:1587:17:1587:24 | MyStruct | | main.rs:1577:5:1577:20 | MyStruct | | main.rs:1588:9:1588:9 | x | | main.rs:1577:5:1577:20 | MyStruct | -| main.rs:1588:9:1588:15 | x.bar() | | file://:0:0:0:0 | & | +| main.rs:1588:9:1588:15 | x.bar() | | {EXTERNAL LOCATION} | & | | main.rs:1588:9:1588:15 | x.bar() | &T | main.rs:1577:5:1577:20 | MyStruct | -| main.rs:1598:16:1598:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1598:16:1598:20 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1598:16:1598:20 | SelfParam | &T | main.rs:1595:5:1595:26 | MyStruct | | main.rs:1598:16:1598:20 | SelfParam | &T.T | main.rs:1597:10:1597:10 | T | -| main.rs:1598:32:1600:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1598:32:1600:9 | { ... } | | {EXTERNAL LOCATION} | & | | main.rs:1598:32:1600:9 | { ... } | &T | main.rs:1595:5:1595:26 | MyStruct | | main.rs:1598:32:1600:9 | { ... } | &T.T | main.rs:1597:10:1597:10 | T | -| main.rs:1599:13:1599:16 | self | | file://:0:0:0:0 | & | +| main.rs:1599:13:1599:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1599:13:1599:16 | self | &T | main.rs:1595:5:1595:26 | MyStruct | | main.rs:1599:13:1599:16 | self | &T.T | main.rs:1597:10:1597:10 | T | -| main.rs:1602:16:1602:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1602:16:1602:20 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1602:16:1602:20 | SelfParam | &T | main.rs:1595:5:1595:26 | MyStruct | | main.rs:1602:16:1602:20 | SelfParam | &T.T | main.rs:1597:10:1597:10 | T | -| main.rs:1602:23:1602:23 | x | | file://:0:0:0:0 | & | +| main.rs:1602:23:1602:23 | x | | {EXTERNAL LOCATION} | & | | main.rs:1602:23:1602:23 | x | &T | main.rs:1595:5:1595:26 | MyStruct | | main.rs:1602:23:1602:23 | x | &T.T | main.rs:1597:10:1597:10 | T | -| main.rs:1602:42:1604:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1602:42:1604:9 | { ... } | | {EXTERNAL LOCATION} | & | | main.rs:1602:42:1604:9 | { ... } | &T | main.rs:1595:5:1595:26 | MyStruct | | main.rs:1602:42:1604:9 | { ... } | &T.T | main.rs:1597:10:1597:10 | T | -| main.rs:1603:13:1603:16 | self | | file://:0:0:0:0 | & | +| main.rs:1603:13:1603:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1603:13:1603:16 | self | &T | main.rs:1595:5:1595:26 | MyStruct | | main.rs:1603:13:1603:16 | self | &T.T | main.rs:1597:10:1597:10 | T | -| main.rs:1607:16:1613:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1607:16:1613:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1608:13:1608:13 | x | | main.rs:1595:5:1595:26 | MyStruct | | main.rs:1608:13:1608:13 | x | T | main.rs:1593:5:1593:13 | S | | main.rs:1608:17:1608:27 | MyStruct(...) | | main.rs:1595:5:1595:26 | MyStruct | @@ -3629,7 +3629,7 @@ inferType | main.rs:1608:26:1608:26 | S | | main.rs:1593:5:1593:13 | S | | main.rs:1609:9:1609:9 | x | | main.rs:1595:5:1595:26 | MyStruct | | main.rs:1609:9:1609:9 | x | T | main.rs:1593:5:1593:13 | S | -| main.rs:1609:9:1609:15 | x.foo() | | file://:0:0:0:0 | & | +| main.rs:1609:9:1609:15 | x.foo() | | {EXTERNAL LOCATION} | & | | main.rs:1609:9:1609:15 | x.foo() | &T | main.rs:1595:5:1595:26 | MyStruct | | main.rs:1609:9:1609:15 | x.foo() | &T.T | main.rs:1593:5:1593:13 | S | | main.rs:1610:13:1610:13 | x | | main.rs:1595:5:1595:26 | MyStruct | @@ -3639,126 +3639,126 @@ inferType | main.rs:1610:26:1610:26 | S | | main.rs:1593:5:1593:13 | S | | main.rs:1612:9:1612:9 | x | | main.rs:1595:5:1595:26 | MyStruct | | main.rs:1612:9:1612:9 | x | T | main.rs:1593:5:1593:13 | S | -| main.rs:1612:9:1612:18 | x.bar(...) | | file://:0:0:0:0 | & | +| main.rs:1612:9:1612:18 | x.bar(...) | | {EXTERNAL LOCATION} | & | | main.rs:1612:9:1612:18 | x.bar(...) | &T | main.rs:1595:5:1595:26 | MyStruct | | main.rs:1612:9:1612:18 | x.bar(...) | &T.T | main.rs:1593:5:1593:13 | S | -| main.rs:1612:15:1612:17 | &... | | file://:0:0:0:0 | & | -| main.rs:1612:15:1612:17 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1612:15:1612:17 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1612:15:1612:17 | &... | &T | {EXTERNAL LOCATION} | & | | main.rs:1612:15:1612:17 | &... | &T.&T | main.rs:1595:5:1595:26 | MyStruct | | main.rs:1612:15:1612:17 | &... | &T.&T.T | main.rs:1593:5:1593:13 | S | -| main.rs:1612:16:1612:17 | &x | | file://:0:0:0:0 | & | +| main.rs:1612:16:1612:17 | &x | | {EXTERNAL LOCATION} | & | | main.rs:1612:16:1612:17 | &x | &T | main.rs:1595:5:1595:26 | MyStruct | | main.rs:1612:16:1612:17 | &x | &T.T | main.rs:1593:5:1593:13 | S | | main.rs:1612:17:1612:17 | x | | main.rs:1595:5:1595:26 | MyStruct | | main.rs:1612:17:1612:17 | x | T | main.rs:1593:5:1593:13 | S | -| main.rs:1623:17:1623:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1623:17:1623:25 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1623:17:1623:25 | SelfParam | &T | main.rs:1617:5:1620:5 | MyFlag | -| main.rs:1623:28:1625:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1624:13:1624:16 | self | | file://:0:0:0:0 | & | +| main.rs:1623:28:1625:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1624:13:1624:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1624:13:1624:16 | self | &T | main.rs:1617:5:1620:5 | MyFlag | | main.rs:1624:13:1624:21 | self.bool | | {EXTERNAL LOCATION} | bool | -| main.rs:1624:13:1624:34 | ... = ... | | file://:0:0:0:0 | () | +| main.rs:1624:13:1624:34 | ... = ... | | {EXTERNAL LOCATION} | () | | main.rs:1624:25:1624:34 | ! ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1624:26:1624:29 | self | | file://:0:0:0:0 | & | +| main.rs:1624:26:1624:29 | self | | {EXTERNAL LOCATION} | & | | main.rs:1624:26:1624:29 | self | &T | main.rs:1617:5:1620:5 | MyFlag | | main.rs:1624:26:1624:34 | self.bool | | {EXTERNAL LOCATION} | bool | -| main.rs:1631:15:1631:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1631:15:1631:19 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1631:15:1631:19 | SelfParam | &T | main.rs:1628:5:1628:13 | S | -| main.rs:1631:31:1633:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1631:31:1633:9 | { ... } | | {EXTERNAL LOCATION} | & | | main.rs:1631:31:1633:9 | { ... } | &T | main.rs:1628:5:1628:13 | S | -| main.rs:1632:13:1632:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1632:13:1632:19 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1632:13:1632:19 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1632:13:1632:19 | &... | &T | {EXTERNAL LOCATION} | & | | main.rs:1632:13:1632:19 | &... | &T | main.rs:1628:5:1628:13 | S | -| main.rs:1632:13:1632:19 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1632:13:1632:19 | &... | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1632:13:1632:19 | &... | &T.&T | {EXTERNAL LOCATION} | & | +| main.rs:1632:13:1632:19 | &... | &T.&T.&T | {EXTERNAL LOCATION} | & | | main.rs:1632:13:1632:19 | &... | &T.&T.&T.&T | main.rs:1628:5:1628:13 | S | -| main.rs:1632:14:1632:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1632:14:1632:19 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1632:14:1632:19 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1632:14:1632:19 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1632:14:1632:19 | &... | &T | {EXTERNAL LOCATION} | & | +| main.rs:1632:14:1632:19 | &... | &T.&T | {EXTERNAL LOCATION} | & | | main.rs:1632:14:1632:19 | &... | &T.&T.&T | main.rs:1628:5:1628:13 | S | -| main.rs:1632:15:1632:19 | &self | | file://:0:0:0:0 | & | -| main.rs:1632:15:1632:19 | &self | &T | file://:0:0:0:0 | & | +| main.rs:1632:15:1632:19 | &self | | {EXTERNAL LOCATION} | & | +| main.rs:1632:15:1632:19 | &self | &T | {EXTERNAL LOCATION} | & | | main.rs:1632:15:1632:19 | &self | &T.&T | main.rs:1628:5:1628:13 | S | -| main.rs:1632:16:1632:19 | self | | file://:0:0:0:0 | & | +| main.rs:1632:16:1632:19 | self | | {EXTERNAL LOCATION} | & | | main.rs:1632:16:1632:19 | self | &T | main.rs:1628:5:1628:13 | S | -| main.rs:1635:15:1635:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1635:15:1635:25 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1635:15:1635:25 | SelfParam | &T | main.rs:1628:5:1628:13 | S | -| main.rs:1635:37:1637:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1635:37:1637:9 | { ... } | | {EXTERNAL LOCATION} | & | | main.rs:1635:37:1637:9 | { ... } | &T | main.rs:1628:5:1628:13 | S | -| main.rs:1636:13:1636:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1636:13:1636:19 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1636:13:1636:19 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1636:13:1636:19 | &... | &T | {EXTERNAL LOCATION} | & | | main.rs:1636:13:1636:19 | &... | &T | main.rs:1628:5:1628:13 | S | -| main.rs:1636:13:1636:19 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1636:13:1636:19 | &... | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1636:13:1636:19 | &... | &T.&T | {EXTERNAL LOCATION} | & | +| main.rs:1636:13:1636:19 | &... | &T.&T.&T | {EXTERNAL LOCATION} | & | | main.rs:1636:13:1636:19 | &... | &T.&T.&T.&T | main.rs:1628:5:1628:13 | S | -| main.rs:1636:14:1636:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1636:14:1636:19 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1636:14:1636:19 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1636:14:1636:19 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1636:14:1636:19 | &... | &T | {EXTERNAL LOCATION} | & | +| main.rs:1636:14:1636:19 | &... | &T.&T | {EXTERNAL LOCATION} | & | | main.rs:1636:14:1636:19 | &... | &T.&T.&T | main.rs:1628:5:1628:13 | S | -| main.rs:1636:15:1636:19 | &self | | file://:0:0:0:0 | & | -| main.rs:1636:15:1636:19 | &self | &T | file://:0:0:0:0 | & | +| main.rs:1636:15:1636:19 | &self | | {EXTERNAL LOCATION} | & | +| main.rs:1636:15:1636:19 | &self | &T | {EXTERNAL LOCATION} | & | | main.rs:1636:15:1636:19 | &self | &T.&T | main.rs:1628:5:1628:13 | S | -| main.rs:1636:16:1636:19 | self | | file://:0:0:0:0 | & | +| main.rs:1636:16:1636:19 | self | | {EXTERNAL LOCATION} | & | | main.rs:1636:16:1636:19 | self | &T | main.rs:1628:5:1628:13 | S | -| main.rs:1639:15:1639:15 | x | | file://:0:0:0:0 | & | +| main.rs:1639:15:1639:15 | x | | {EXTERNAL LOCATION} | & | | main.rs:1639:15:1639:15 | x | &T | main.rs:1628:5:1628:13 | S | -| main.rs:1639:34:1641:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1639:34:1641:9 | { ... } | | {EXTERNAL LOCATION} | & | | main.rs:1639:34:1641:9 | { ... } | &T | main.rs:1628:5:1628:13 | S | -| main.rs:1640:13:1640:13 | x | | file://:0:0:0:0 | & | +| main.rs:1640:13:1640:13 | x | | {EXTERNAL LOCATION} | & | | main.rs:1640:13:1640:13 | x | &T | main.rs:1628:5:1628:13 | S | -| main.rs:1643:15:1643:15 | x | | file://:0:0:0:0 | & | +| main.rs:1643:15:1643:15 | x | | {EXTERNAL LOCATION} | & | | main.rs:1643:15:1643:15 | x | &T | main.rs:1628:5:1628:13 | S | -| main.rs:1643:34:1645:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1643:34:1645:9 | { ... } | | {EXTERNAL LOCATION} | & | | main.rs:1643:34:1645:9 | { ... } | &T | main.rs:1628:5:1628:13 | S | -| main.rs:1644:13:1644:16 | &... | | file://:0:0:0:0 | & | -| main.rs:1644:13:1644:16 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1644:13:1644:16 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1644:13:1644:16 | &... | &T | {EXTERNAL LOCATION} | & | | main.rs:1644:13:1644:16 | &... | &T | main.rs:1628:5:1628:13 | S | -| main.rs:1644:13:1644:16 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1644:13:1644:16 | &... | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1644:13:1644:16 | &... | &T.&T | {EXTERNAL LOCATION} | & | +| main.rs:1644:13:1644:16 | &... | &T.&T.&T | {EXTERNAL LOCATION} | & | | main.rs:1644:13:1644:16 | &... | &T.&T.&T.&T | main.rs:1628:5:1628:13 | S | -| main.rs:1644:14:1644:16 | &... | | file://:0:0:0:0 | & | -| main.rs:1644:14:1644:16 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1644:14:1644:16 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1644:14:1644:16 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1644:14:1644:16 | &... | &T | {EXTERNAL LOCATION} | & | +| main.rs:1644:14:1644:16 | &... | &T.&T | {EXTERNAL LOCATION} | & | | main.rs:1644:14:1644:16 | &... | &T.&T.&T | main.rs:1628:5:1628:13 | S | -| main.rs:1644:15:1644:16 | &x | | file://:0:0:0:0 | & | -| main.rs:1644:15:1644:16 | &x | &T | file://:0:0:0:0 | & | +| main.rs:1644:15:1644:16 | &x | | {EXTERNAL LOCATION} | & | +| main.rs:1644:15:1644:16 | &x | &T | {EXTERNAL LOCATION} | & | | main.rs:1644:15:1644:16 | &x | &T.&T | main.rs:1628:5:1628:13 | S | -| main.rs:1644:16:1644:16 | x | | file://:0:0:0:0 | & | +| main.rs:1644:16:1644:16 | x | | {EXTERNAL LOCATION} | & | | main.rs:1644:16:1644:16 | x | &T | main.rs:1628:5:1628:13 | S | -| main.rs:1648:16:1661:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1648:16:1661:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1649:13:1649:13 | x | | main.rs:1628:5:1628:13 | S | | main.rs:1649:17:1649:20 | S {...} | | main.rs:1628:5:1628:13 | S | | main.rs:1650:9:1650:9 | x | | main.rs:1628:5:1628:13 | S | -| main.rs:1650:9:1650:14 | x.f1() | | file://:0:0:0:0 | & | +| main.rs:1650:9:1650:14 | x.f1() | | {EXTERNAL LOCATION} | & | | main.rs:1650:9:1650:14 | x.f1() | &T | main.rs:1628:5:1628:13 | S | | main.rs:1651:9:1651:9 | x | | main.rs:1628:5:1628:13 | S | -| main.rs:1651:9:1651:14 | x.f2() | | file://:0:0:0:0 | & | +| main.rs:1651:9:1651:14 | x.f2() | | {EXTERNAL LOCATION} | & | | main.rs:1651:9:1651:14 | x.f2() | &T | main.rs:1628:5:1628:13 | S | -| main.rs:1652:9:1652:17 | ...::f3(...) | | file://:0:0:0:0 | & | +| main.rs:1652:9:1652:17 | ...::f3(...) | | {EXTERNAL LOCATION} | & | | main.rs:1652:9:1652:17 | ...::f3(...) | &T | main.rs:1628:5:1628:13 | S | -| main.rs:1652:15:1652:16 | &x | | file://:0:0:0:0 | & | +| main.rs:1652:15:1652:16 | &x | | {EXTERNAL LOCATION} | & | | main.rs:1652:15:1652:16 | &x | &T | main.rs:1628:5:1628:13 | S | | main.rs:1652:16:1652:16 | x | | main.rs:1628:5:1628:13 | S | | main.rs:1654:13:1654:13 | n | | {EXTERNAL LOCATION} | bool | | main.rs:1654:17:1654:24 | * ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1654:18:1654:24 | * ... | | file://:0:0:0:0 | & | +| main.rs:1654:18:1654:24 | * ... | | {EXTERNAL LOCATION} | & | | main.rs:1654:18:1654:24 | * ... | &T | {EXTERNAL LOCATION} | bool | -| main.rs:1654:19:1654:24 | &... | | file://:0:0:0:0 | & | -| main.rs:1654:19:1654:24 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1654:19:1654:24 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1654:19:1654:24 | &... | &T | {EXTERNAL LOCATION} | & | | main.rs:1654:19:1654:24 | &... | &T.&T | {EXTERNAL LOCATION} | bool | -| main.rs:1654:20:1654:24 | &true | | file://:0:0:0:0 | & | +| main.rs:1654:20:1654:24 | &true | | {EXTERNAL LOCATION} | & | | main.rs:1654:20:1654:24 | &true | &T | {EXTERNAL LOCATION} | bool | | main.rs:1654:21:1654:24 | true | | {EXTERNAL LOCATION} | bool | | main.rs:1658:17:1658:20 | flag | | main.rs:1617:5:1620:5 | MyFlag | | main.rs:1658:24:1658:41 | ...::default(...) | | main.rs:1617:5:1620:5 | MyFlag | -| main.rs:1659:9:1659:31 | ...::flip(...) | | file://:0:0:0:0 | () | -| main.rs:1659:22:1659:30 | &mut flag | | file://:0:0:0:0 | & | +| main.rs:1659:9:1659:31 | ...::flip(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1659:22:1659:30 | &mut flag | | {EXTERNAL LOCATION} | & | | main.rs:1659:22:1659:30 | &mut flag | &T | main.rs:1617:5:1620:5 | MyFlag | | main.rs:1659:27:1659:30 | flag | | main.rs:1617:5:1620:5 | MyFlag | -| main.rs:1660:18:1660:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1660:18:1660:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1660:18:1660:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1660:18:1660:29 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1660:18:1660:29 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1660:18:1660:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1660:18:1660:29 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1660:26:1660:29 | flag | | main.rs:1617:5:1620:5 | MyFlag | | main.rs:1675:43:1678:5 | { ... } | | {EXTERNAL LOCATION} | Result | | main.rs:1675:43:1678:5 | { ... } | E | main.rs:1667:5:1668:14 | S1 | @@ -3807,7 +3807,7 @@ inferType | main.rs:1693:17:1693:18 | TryExpr | T | main.rs:1667:5:1668:14 | S1 | | main.rs:1693:17:1693:29 | ... .map(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1693:24:1693:28 | \|...\| s | | {EXTERNAL LOCATION} | dyn FnOnce | -| main.rs:1693:24:1693:28 | \|...\| s | dyn(Args) | file://:0:0:0:0 | (T_1) | +| main.rs:1693:24:1693:28 | \|...\| s | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | main.rs:1694:9:1694:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1694:9:1694:22 | ...::Ok(...) | E | main.rs:1670:5:1671:14 | S2 | | main.rs:1694:9:1694:22 | ...::Ok(...) | T | main.rs:1667:5:1668:14 | S1 | @@ -3830,23 +3830,23 @@ inferType | main.rs:1701:22:1704:10 | ... .and_then(...) | E | main.rs:1667:5:1668:14 | S1 | | main.rs:1701:33:1701:37 | value | | main.rs:1699:20:1699:27 | T | | main.rs:1701:49:1704:9 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | -| main.rs:1701:49:1704:9 | \|...\| ... | dyn(Args) | file://:0:0:0:0 | (T_1) | +| main.rs:1701:49:1704:9 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | main.rs:1701:49:1704:9 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | Result | | main.rs:1701:49:1704:9 | \|...\| ... | dyn(Output).E | main.rs:1667:5:1668:14 | S1 | | main.rs:1701:53:1704:9 | { ... } | | {EXTERNAL LOCATION} | Result | | main.rs:1701:53:1704:9 | { ... } | E | main.rs:1667:5:1668:14 | S1 | -| main.rs:1702:22:1702:27 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1702:22:1702:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1702:22:1702:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1702:22:1702:30 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1702:22:1702:30 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1702:22:1702:30 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1702:22:1702:30 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1703:13:1703:34 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1703:13:1703:34 | ...::Ok::<...>(...) | E | main.rs:1667:5:1668:14 | S1 | | main.rs:1705:9:1705:23 | ...::Err(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1705:9:1705:23 | ...::Err(...) | E | main.rs:1667:5:1668:14 | S1 | | main.rs:1705:9:1705:23 | ...::Err(...) | T | main.rs:1699:20:1699:27 | T | | main.rs:1705:21:1705:22 | S1 | | main.rs:1667:5:1668:14 | S1 | -| main.rs:1709:16:1725:5 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1710:9:1712:9 | if ... {...} | | file://:0:0:0:0 | () | +| main.rs:1709:16:1725:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1710:9:1712:9 | if ... {...} | | {EXTERNAL LOCATION} | () | | main.rs:1710:16:1710:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1710:16:1710:33 | ...::Ok(...) | E | main.rs:1667:5:1668:14 | S1 | | main.rs:1710:16:1710:33 | ...::Ok(...) | T | main.rs:1667:5:1668:14 | S1 | @@ -3854,13 +3854,13 @@ inferType | main.rs:1710:37:1710:52 | try_same_error(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1710:37:1710:52 | try_same_error(...) | E | main.rs:1667:5:1668:14 | S1 | | main.rs:1710:37:1710:52 | try_same_error(...) | T | main.rs:1667:5:1668:14 | S1 | -| main.rs:1710:54:1712:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1711:22:1711:27 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1710:54:1712:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1711:22:1711:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1711:22:1711:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1711:22:1711:35 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1711:22:1711:35 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1711:22:1711:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1711:22:1711:35 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1711:30:1711:35 | result | | main.rs:1667:5:1668:14 | S1 | -| main.rs:1714:9:1716:9 | if ... {...} | | file://:0:0:0:0 | () | +| main.rs:1714:9:1716:9 | if ... {...} | | {EXTERNAL LOCATION} | () | | main.rs:1714:16:1714:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1714:16:1714:33 | ...::Ok(...) | E | main.rs:1670:5:1671:14 | S2 | | main.rs:1714:16:1714:33 | ...::Ok(...) | T | main.rs:1667:5:1668:14 | S1 | @@ -3868,13 +3868,13 @@ inferType | main.rs:1714:37:1714:55 | try_convert_error(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1714:37:1714:55 | try_convert_error(...) | E | main.rs:1670:5:1671:14 | S2 | | main.rs:1714:37:1714:55 | try_convert_error(...) | T | main.rs:1667:5:1668:14 | S1 | -| main.rs:1714:57:1716:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1715:22:1715:27 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1714:57:1716:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1715:22:1715:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1715:22:1715:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1715:22:1715:35 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1715:22:1715:35 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1715:22:1715:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1715:22:1715:35 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1715:30:1715:35 | result | | main.rs:1667:5:1668:14 | S1 | -| main.rs:1718:9:1720:9 | if ... {...} | | file://:0:0:0:0 | () | +| main.rs:1718:9:1720:9 | if ... {...} | | {EXTERNAL LOCATION} | () | | main.rs:1718:16:1718:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1718:16:1718:33 | ...::Ok(...) | E | main.rs:1670:5:1671:14 | S2 | | main.rs:1718:16:1718:33 | ...::Ok(...) | T | main.rs:1667:5:1668:14 | S1 | @@ -3882,13 +3882,13 @@ inferType | main.rs:1718:37:1718:49 | try_chained(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1718:37:1718:49 | try_chained(...) | E | main.rs:1670:5:1671:14 | S2 | | main.rs:1718:37:1718:49 | try_chained(...) | T | main.rs:1667:5:1668:14 | S1 | -| main.rs:1718:51:1720:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1719:22:1719:27 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1718:51:1720:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1719:22:1719:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1719:22:1719:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1719:22:1719:35 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1719:22:1719:35 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1719:22:1719:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1719:22:1719:35 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1719:30:1719:35 | result | | main.rs:1667:5:1668:14 | S1 | -| main.rs:1722:9:1724:9 | if ... {...} | | file://:0:0:0:0 | () | +| main.rs:1722:9:1724:9 | if ... {...} | | {EXTERNAL LOCATION} | () | | main.rs:1722:16:1722:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1722:16:1722:33 | ...::Ok(...) | E | main.rs:1667:5:1668:14 | S1 | | main.rs:1722:16:1722:33 | ...::Ok(...) | T | main.rs:1667:5:1668:14 | S1 | @@ -3900,13 +3900,13 @@ inferType | main.rs:1722:49:1722:62 | ...::Ok(...) | E | main.rs:1667:5:1668:14 | S1 | | main.rs:1722:49:1722:62 | ...::Ok(...) | T | main.rs:1667:5:1668:14 | S1 | | main.rs:1722:60:1722:61 | S1 | | main.rs:1667:5:1668:14 | S1 | -| main.rs:1722:65:1724:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1723:22:1723:27 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1722:65:1724:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1723:22:1723:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1723:22:1723:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1723:22:1723:35 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:1723:22:1723:35 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1723:22:1723:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:1723:22:1723:35 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1723:30:1723:35 | result | | main.rs:1667:5:1668:14 | S1 | -| main.rs:1729:16:1820:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1729:16:1820:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1730:13:1730:13 | x | | {EXTERNAL LOCATION} | i32 | | main.rs:1730:22:1730:22 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:1731:13:1731:13 | y | | {EXTERNAL LOCATION} | i32 | @@ -3920,9 +3920,9 @@ inferType | main.rs:1733:17:1733:23 | x.abs() | | {EXTERNAL LOCATION} | i32 | | main.rs:1734:13:1734:13 | c | | {EXTERNAL LOCATION} | char | | main.rs:1734:17:1734:19 | 'c' | | {EXTERNAL LOCATION} | char | -| main.rs:1735:13:1735:17 | hello | | file://:0:0:0:0 | & | +| main.rs:1735:13:1735:17 | hello | | {EXTERNAL LOCATION} | & | | main.rs:1735:13:1735:17 | hello | &T | {EXTERNAL LOCATION} | str | -| main.rs:1735:21:1735:27 | "Hello" | | file://:0:0:0:0 | & | +| main.rs:1735:21:1735:27 | "Hello" | | {EXTERNAL LOCATION} | & | | main.rs:1735:21:1735:27 | "Hello" | &T | {EXTERNAL LOCATION} | str | | main.rs:1736:13:1736:13 | f | | {EXTERNAL LOCATION} | f64 | | main.rs:1736:17:1736:24 | 123.0f64 | | {EXTERNAL LOCATION} | f64 | @@ -3930,173 +3930,181 @@ inferType | main.rs:1737:17:1737:20 | true | | {EXTERNAL LOCATION} | bool | | main.rs:1738:13:1738:13 | f | | {EXTERNAL LOCATION} | bool | | main.rs:1738:17:1738:21 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1741:26:1741:30 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1741:26:1741:30 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1741:26:1741:30 | SelfParam | &T | main.rs:1740:9:1744:9 | Self [trait MyTrait] | -| main.rs:1747:26:1747:30 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1747:26:1747:30 | SelfParam | &T | file://:0:0:0:0 | [] | +| main.rs:1747:26:1747:30 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1747:26:1747:30 | SelfParam | &T | {EXTERNAL LOCATION} | [;] | | main.rs:1747:26:1747:30 | SelfParam | &T.[T;...] | main.rs:1746:14:1746:23 | T | -| main.rs:1747:39:1749:13 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1747:39:1749:13 | { ... } | | {EXTERNAL LOCATION} | & | | main.rs:1747:39:1749:13 | { ... } | &T | main.rs:1746:14:1746:23 | T | -| main.rs:1748:17:1748:20 | self | | file://:0:0:0:0 | & | -| main.rs:1748:17:1748:20 | self | &T | file://:0:0:0:0 | [] | +| main.rs:1748:17:1748:20 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1748:17:1748:20 | self | &T | {EXTERNAL LOCATION} | [;] | | main.rs:1748:17:1748:20 | self | &T.[T;...] | main.rs:1746:14:1746:23 | T | -| main.rs:1748:17:1748:36 | ... .unwrap() | | file://:0:0:0:0 | & | +| main.rs:1748:17:1748:36 | ... .unwrap() | | {EXTERNAL LOCATION} | & | | main.rs:1748:17:1748:36 | ... .unwrap() | &T | main.rs:1746:14:1746:23 | T | | main.rs:1748:26:1748:26 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:1751:31:1753:13 | { ... } | | main.rs:1746:14:1746:23 | T | | main.rs:1752:17:1752:28 | ...::default(...) | | main.rs:1746:14:1746:23 | T | -| main.rs:1756:13:1756:13 | x | | file://:0:0:0:0 | & | +| main.rs:1756:13:1756:13 | x | | {EXTERNAL LOCATION} | & | | main.rs:1756:13:1756:13 | x | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:1756:17:1756:25 | [...] | | file://:0:0:0:0 | [] | +| main.rs:1756:17:1756:25 | [...] | | {EXTERNAL LOCATION} | [;] | | main.rs:1756:17:1756:25 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:1756:17:1756:37 | ... .my_method() | | file://:0:0:0:0 | & | +| main.rs:1756:17:1756:37 | ... .my_method() | | {EXTERNAL LOCATION} | & | | main.rs:1756:17:1756:37 | ... .my_method() | &T | {EXTERNAL LOCATION} | i32 | | main.rs:1756:18:1756:18 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:1756:21:1756:21 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:1756:24:1756:24 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1757:13:1757:13 | x | | file://:0:0:0:0 | & | +| main.rs:1757:13:1757:13 | x | | {EXTERNAL LOCATION} | & | | main.rs:1757:13:1757:13 | x | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:1757:17:1757:47 | ...::my_method(...) | | file://:0:0:0:0 | & | +| main.rs:1757:17:1757:47 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | | main.rs:1757:17:1757:47 | ...::my_method(...) | &T | {EXTERNAL LOCATION} | i32 | | main.rs:1757:22:1757:22 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1757:37:1757:46 | &... | | file://:0:0:0:0 | & | -| main.rs:1757:37:1757:46 | &... | &T | file://:0:0:0:0 | [] | +| main.rs:1757:37:1757:46 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1757:37:1757:46 | &... | &T | {EXTERNAL LOCATION} | [;] | | main.rs:1757:37:1757:46 | &... | &T.[T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:1757:38:1757:46 | [...] | | file://:0:0:0:0 | [] | +| main.rs:1757:38:1757:46 | [...] | | {EXTERNAL LOCATION} | [;] | | main.rs:1757:38:1757:46 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | | main.rs:1757:39:1757:39 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:1757:42:1757:42 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:1757:45:1757:45 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1758:13:1758:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1758:17:1758:37 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | | main.rs:1758:24:1758:24 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1761:26:1761:30 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1761:26:1761:30 | SelfParam | &T | file://:0:0:0:0 | [] | +| main.rs:1761:26:1761:30 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1761:26:1761:30 | SelfParam | &T | {EXTERNAL LOCATION} | [] | | main.rs:1761:26:1761:30 | SelfParam | &T.[T] | main.rs:1760:14:1760:23 | T | -| main.rs:1761:39:1763:13 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1761:39:1763:13 | { ... } | | {EXTERNAL LOCATION} | & | | main.rs:1761:39:1763:13 | { ... } | &T | main.rs:1760:14:1760:23 | T | -| main.rs:1762:17:1762:20 | self | | file://:0:0:0:0 | & | -| main.rs:1762:17:1762:20 | self | &T | file://:0:0:0:0 | [] | +| main.rs:1762:17:1762:20 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1762:17:1762:20 | self | &T | {EXTERNAL LOCATION} | [] | | main.rs:1762:17:1762:20 | self | &T.[T] | main.rs:1760:14:1760:23 | T | | main.rs:1762:17:1762:27 | self.get(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:1762:17:1762:27 | self.get(...) | T | file://:0:0:0:0 | & | +| main.rs:1762:17:1762:27 | self.get(...) | T | {EXTERNAL LOCATION} | & | | main.rs:1762:17:1762:27 | self.get(...) | T.&T | main.rs:1760:14:1760:23 | T | -| main.rs:1762:17:1762:36 | ... .unwrap() | | file://:0:0:0:0 | & | +| main.rs:1762:17:1762:36 | ... .unwrap() | | {EXTERNAL LOCATION} | & | | main.rs:1762:17:1762:36 | ... .unwrap() | &T | main.rs:1760:14:1760:23 | T | | main.rs:1762:26:1762:26 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:1765:31:1767:13 | { ... } | | main.rs:1760:14:1760:23 | T | | main.rs:1766:17:1766:28 | ...::default(...) | | main.rs:1760:14:1760:23 | T | -| main.rs:1770:13:1770:13 | s | | file://:0:0:0:0 | & | -| main.rs:1770:13:1770:13 | s | &T | file://:0:0:0:0 | [] | +| main.rs:1770:13:1770:13 | s | | {EXTERNAL LOCATION} | & | +| main.rs:1770:13:1770:13 | s | &T | {EXTERNAL LOCATION} | [] | | main.rs:1770:13:1770:13 | s | &T.[T] | {EXTERNAL LOCATION} | i32 | -| main.rs:1770:25:1770:34 | &... | | file://:0:0:0:0 | & | -| main.rs:1770:25:1770:34 | &... | &T | file://:0:0:0:0 | [] | -| main.rs:1770:25:1770:34 | &... | &T | file://:0:0:0:0 | [] | +| main.rs:1770:25:1770:34 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:1770:25:1770:34 | &... | &T | {EXTERNAL LOCATION} | [] | +| main.rs:1770:25:1770:34 | &... | &T | {EXTERNAL LOCATION} | [;] | | main.rs:1770:25:1770:34 | &... | &T.[T;...] | {EXTERNAL LOCATION} | i32 | | main.rs:1770:25:1770:34 | &... | &T.[T] | {EXTERNAL LOCATION} | i32 | -| main.rs:1770:26:1770:34 | [...] | | file://:0:0:0:0 | [] | +| main.rs:1770:26:1770:34 | [...] | | {EXTERNAL LOCATION} | [;] | | main.rs:1770:26:1770:34 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | | main.rs:1770:27:1770:27 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:1770:30:1770:30 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:1770:33:1770:33 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1771:13:1771:13 | x | | file://:0:0:0:0 | & | +| main.rs:1771:13:1771:13 | x | | {EXTERNAL LOCATION} | & | | main.rs:1771:13:1771:13 | x | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:1771:17:1771:17 | s | | file://:0:0:0:0 | & | -| main.rs:1771:17:1771:17 | s | &T | file://:0:0:0:0 | [] | +| main.rs:1771:17:1771:17 | s | | {EXTERNAL LOCATION} | & | +| main.rs:1771:17:1771:17 | s | &T | {EXTERNAL LOCATION} | [] | | main.rs:1771:17:1771:17 | s | &T.[T] | {EXTERNAL LOCATION} | i32 | -| main.rs:1771:17:1771:29 | s.my_method() | | file://:0:0:0:0 | & | +| main.rs:1771:17:1771:29 | s.my_method() | | {EXTERNAL LOCATION} | & | | main.rs:1771:17:1771:29 | s.my_method() | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:1772:13:1772:13 | x | | file://:0:0:0:0 | & | +| main.rs:1772:13:1772:13 | x | | {EXTERNAL LOCATION} | & | | main.rs:1772:13:1772:13 | x | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:1772:17:1772:35 | ...::my_method(...) | | file://:0:0:0:0 | & | +| main.rs:1772:17:1772:35 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | | main.rs:1772:17:1772:35 | ...::my_method(...) | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:1772:34:1772:34 | s | | file://:0:0:0:0 | & | -| main.rs:1772:34:1772:34 | s | &T | file://:0:0:0:0 | [] | +| main.rs:1772:34:1772:34 | s | | {EXTERNAL LOCATION} | & | +| main.rs:1772:34:1772:34 | s | &T | {EXTERNAL LOCATION} | [] | | main.rs:1772:34:1772:34 | s | &T.[T] | {EXTERNAL LOCATION} | i32 | -| main.rs:1776:26:1776:30 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1776:26:1776:30 | SelfParam | &T | file://:0:0:0:0 | (T_2) | +| main.rs:1773:13:1773:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1773:17:1773:34 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:1776:26:1776:30 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1776:26:1776:30 | SelfParam | &T | {EXTERNAL LOCATION} | (T_2) | | main.rs:1776:26:1776:30 | SelfParam | &T.0(2) | main.rs:1775:14:1775:23 | T | | main.rs:1776:26:1776:30 | SelfParam | &T.1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:1776:39:1778:13 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1776:39:1778:13 | { ... } | | {EXTERNAL LOCATION} | & | | main.rs:1776:39:1778:13 | { ... } | &T | main.rs:1775:14:1775:23 | T | -| main.rs:1777:17:1777:23 | &... | | file://:0:0:0:0 | & | +| main.rs:1777:17:1777:23 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1777:17:1777:23 | &... | &T | main.rs:1775:14:1775:23 | T | -| main.rs:1777:18:1777:21 | self | | file://:0:0:0:0 | & | -| main.rs:1777:18:1777:21 | self | &T | file://:0:0:0:0 | (T_2) | +| main.rs:1777:18:1777:21 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1777:18:1777:21 | self | &T | {EXTERNAL LOCATION} | (T_2) | | main.rs:1777:18:1777:21 | self | &T.0(2) | main.rs:1775:14:1775:23 | T | | main.rs:1777:18:1777:21 | self | &T.1(2) | {EXTERNAL LOCATION} | i32 | | main.rs:1777:18:1777:23 | self.0 | | main.rs:1775:14:1775:23 | T | | main.rs:1780:31:1782:13 | { ... } | | main.rs:1775:14:1775:23 | T | | main.rs:1781:17:1781:28 | ...::default(...) | | main.rs:1775:14:1775:23 | T | -| main.rs:1785:13:1785:13 | p | | file://:0:0:0:0 | (T_2) | +| main.rs:1785:13:1785:13 | p | | {EXTERNAL LOCATION} | (T_2) | | main.rs:1785:13:1785:13 | p | 0(2) | {EXTERNAL LOCATION} | i32 | | main.rs:1785:13:1785:13 | p | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:1785:17:1785:23 | TupleExpr | | file://:0:0:0:0 | (T_2) | +| main.rs:1785:17:1785:23 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | | main.rs:1785:17:1785:23 | TupleExpr | 0(2) | {EXTERNAL LOCATION} | i32 | | main.rs:1785:17:1785:23 | TupleExpr | 1(2) | {EXTERNAL LOCATION} | i32 | | main.rs:1785:18:1785:19 | 42 | | {EXTERNAL LOCATION} | i32 | | main.rs:1785:22:1785:22 | 7 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1786:13:1786:13 | x | | file://:0:0:0:0 | & | +| main.rs:1786:13:1786:13 | x | | {EXTERNAL LOCATION} | & | | main.rs:1786:13:1786:13 | x | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:1786:17:1786:17 | p | | file://:0:0:0:0 | (T_2) | +| main.rs:1786:17:1786:17 | p | | {EXTERNAL LOCATION} | (T_2) | | main.rs:1786:17:1786:17 | p | 0(2) | {EXTERNAL LOCATION} | i32 | | main.rs:1786:17:1786:17 | p | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:1786:17:1786:29 | p.my_method() | | file://:0:0:0:0 | & | +| main.rs:1786:17:1786:29 | p.my_method() | | {EXTERNAL LOCATION} | & | | main.rs:1786:17:1786:29 | p.my_method() | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:1787:13:1787:13 | x | | file://:0:0:0:0 | & | +| main.rs:1787:13:1787:13 | x | | {EXTERNAL LOCATION} | & | | main.rs:1787:13:1787:13 | x | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:1787:17:1787:39 | ...::my_method(...) | | file://:0:0:0:0 | & | +| main.rs:1787:17:1787:39 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | | main.rs:1787:17:1787:39 | ...::my_method(...) | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:1787:37:1787:38 | &p | | file://:0:0:0:0 | & | -| main.rs:1787:37:1787:38 | &p | &T | file://:0:0:0:0 | (T_2) | +| main.rs:1787:37:1787:38 | &p | | {EXTERNAL LOCATION} | & | +| main.rs:1787:37:1787:38 | &p | &T | {EXTERNAL LOCATION} | (T_2) | | main.rs:1787:37:1787:38 | &p | &T.0(2) | {EXTERNAL LOCATION} | i32 | | main.rs:1787:37:1787:38 | &p | &T.1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:1787:38:1787:38 | p | | file://:0:0:0:0 | (T_2) | +| main.rs:1787:38:1787:38 | p | | {EXTERNAL LOCATION} | (T_2) | | main.rs:1787:38:1787:38 | p | 0(2) | {EXTERNAL LOCATION} | i32 | | main.rs:1787:38:1787:38 | p | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:1791:26:1791:30 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1791:26:1791:30 | SelfParam | &T | file://:0:0:0:0 | & | +| main.rs:1788:13:1788:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1788:17:1788:39 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:1791:26:1791:30 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:1791:26:1791:30 | SelfParam | &T | {EXTERNAL LOCATION} | & | | main.rs:1791:26:1791:30 | SelfParam | &T.&T | main.rs:1790:14:1790:23 | T | -| main.rs:1791:39:1793:13 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1791:39:1793:13 | { ... } | | {EXTERNAL LOCATION} | & | | main.rs:1791:39:1793:13 | { ... } | &T | main.rs:1790:14:1790:23 | T | -| main.rs:1792:17:1792:21 | * ... | | file://:0:0:0:0 | & | +| main.rs:1792:17:1792:21 | * ... | | {EXTERNAL LOCATION} | & | | main.rs:1792:17:1792:21 | * ... | &T | main.rs:1790:14:1790:23 | T | -| main.rs:1792:18:1792:21 | self | | file://:0:0:0:0 | & | -| main.rs:1792:18:1792:21 | self | &T | file://:0:0:0:0 | & | +| main.rs:1792:18:1792:21 | self | | {EXTERNAL LOCATION} | & | +| main.rs:1792:18:1792:21 | self | &T | {EXTERNAL LOCATION} | & | | main.rs:1792:18:1792:21 | self | &T.&T | main.rs:1790:14:1790:23 | T | | main.rs:1795:31:1797:13 | { ... } | | main.rs:1790:14:1790:23 | T | | main.rs:1796:17:1796:28 | ...::default(...) | | main.rs:1790:14:1790:23 | T | -| main.rs:1800:13:1800:13 | r | | file://:0:0:0:0 | & | +| main.rs:1800:13:1800:13 | r | | {EXTERNAL LOCATION} | & | | main.rs:1800:13:1800:13 | r | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:1800:17:1800:19 | &42 | | file://:0:0:0:0 | & | +| main.rs:1800:17:1800:19 | &42 | | {EXTERNAL LOCATION} | & | | main.rs:1800:17:1800:19 | &42 | &T | {EXTERNAL LOCATION} | i32 | | main.rs:1800:18:1800:19 | 42 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1801:13:1801:13 | x | | file://:0:0:0:0 | & | +| main.rs:1801:13:1801:13 | x | | {EXTERNAL LOCATION} | & | | main.rs:1801:13:1801:13 | x | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:1801:17:1801:17 | r | | file://:0:0:0:0 | & | +| main.rs:1801:17:1801:17 | r | | {EXTERNAL LOCATION} | & | | main.rs:1801:17:1801:17 | r | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:1801:17:1801:29 | r.my_method() | | file://:0:0:0:0 | & | +| main.rs:1801:17:1801:29 | r.my_method() | | {EXTERNAL LOCATION} | & | | main.rs:1801:17:1801:29 | r.my_method() | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:1802:13:1802:13 | x | | file://:0:0:0:0 | & | +| main.rs:1802:13:1802:13 | x | | {EXTERNAL LOCATION} | & | | main.rs:1802:13:1802:13 | x | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:1802:17:1802:35 | ...::my_method(...) | | file://:0:0:0:0 | & | +| main.rs:1802:17:1802:35 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | | main.rs:1802:17:1802:35 | ...::my_method(...) | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:1802:33:1802:34 | &r | | file://:0:0:0:0 | & | -| main.rs:1802:33:1802:34 | &r | &T | file://:0:0:0:0 | & | +| main.rs:1802:33:1802:34 | &r | | {EXTERNAL LOCATION} | & | +| main.rs:1802:33:1802:34 | &r | &T | {EXTERNAL LOCATION} | & | | main.rs:1802:33:1802:34 | &r | &T.&T | {EXTERNAL LOCATION} | i32 | -| main.rs:1802:34:1802:34 | r | | file://:0:0:0:0 | & | +| main.rs:1802:34:1802:34 | r | | {EXTERNAL LOCATION} | & | | main.rs:1802:34:1802:34 | r | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:1806:26:1806:30 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1803:13:1803:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1803:17:1803:33 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:1806:26:1806:30 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1806:26:1806:30 | SelfParam | &T | file://:0:0:0:0 | * | | main.rs:1806:26:1806:30 | SelfParam | &T.*T | main.rs:1805:14:1805:23 | T | -| main.rs:1806:39:1808:13 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1806:39:1808:13 | { ... } | | {EXTERNAL LOCATION} | & | | main.rs:1806:39:1808:13 | { ... } | &T | main.rs:1805:14:1805:23 | T | -| main.rs:1807:17:1807:34 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1807:17:1807:34 | { ... } | | {EXTERNAL LOCATION} | & | | main.rs:1807:17:1807:34 | { ... } | &T | main.rs:1805:14:1805:23 | T | -| main.rs:1807:26:1807:32 | &... | | file://:0:0:0:0 | & | +| main.rs:1807:26:1807:32 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1807:26:1807:32 | &... | &T | main.rs:1805:14:1805:23 | T | | main.rs:1807:27:1807:32 | * ... | | main.rs:1805:14:1805:23 | T | | main.rs:1807:28:1807:32 | * ... | | file://:0:0:0:0 | * | | main.rs:1807:28:1807:32 | * ... | *T | main.rs:1805:14:1805:23 | T | -| main.rs:1807:29:1807:32 | self | | file://:0:0:0:0 | & | +| main.rs:1807:29:1807:32 | self | | {EXTERNAL LOCATION} | & | | main.rs:1807:29:1807:32 | self | &T | file://:0:0:0:0 | * | | main.rs:1807:29:1807:32 | self | &T.*T | main.rs:1805:14:1805:23 | T | | main.rs:1810:31:1812:13 | { ... } | | main.rs:1805:14:1805:23 | T | @@ -4105,29 +4113,31 @@ inferType | main.rs:1815:21:1815:22 | 42 | | {EXTERNAL LOCATION} | i32 | | main.rs:1816:13:1816:13 | p | | file://:0:0:0:0 | * | | main.rs:1816:13:1816:13 | p | *T | {EXTERNAL LOCATION} | i32 | -| main.rs:1816:27:1816:32 | &mut v | | file://:0:0:0:0 | & | +| main.rs:1816:27:1816:32 | &mut v | | {EXTERNAL LOCATION} | & | | main.rs:1816:27:1816:32 | &mut v | &T | {EXTERNAL LOCATION} | i32 | | main.rs:1816:32:1816:32 | v | | {EXTERNAL LOCATION} | i32 | -| main.rs:1817:13:1817:13 | x | | file://:0:0:0:0 | & | +| main.rs:1817:13:1817:13 | x | | {EXTERNAL LOCATION} | & | | main.rs:1817:13:1817:13 | x | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:1817:17:1817:40 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1817:17:1817:40 | { ... } | | {EXTERNAL LOCATION} | & | | main.rs:1817:17:1817:40 | { ... } | &T | {EXTERNAL LOCATION} | i32 | | main.rs:1817:26:1817:26 | p | | file://:0:0:0:0 | * | | main.rs:1817:26:1817:26 | p | *T | {EXTERNAL LOCATION} | i32 | -| main.rs:1817:26:1817:38 | p.my_method() | | file://:0:0:0:0 | & | +| main.rs:1817:26:1817:38 | p.my_method() | | {EXTERNAL LOCATION} | & | | main.rs:1817:26:1817:38 | p.my_method() | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:1818:13:1818:13 | x | | file://:0:0:0:0 | & | +| main.rs:1818:13:1818:13 | x | | {EXTERNAL LOCATION} | & | | main.rs:1818:13:1818:13 | x | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:1818:17:1818:50 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1818:17:1818:50 | { ... } | | {EXTERNAL LOCATION} | & | | main.rs:1818:17:1818:50 | { ... } | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:1818:26:1818:48 | ...::my_method(...) | | file://:0:0:0:0 | & | +| main.rs:1818:26:1818:48 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | | main.rs:1818:26:1818:48 | ...::my_method(...) | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:1818:46:1818:47 | &p | | file://:0:0:0:0 | & | +| main.rs:1818:46:1818:47 | &p | | {EXTERNAL LOCATION} | & | | main.rs:1818:46:1818:47 | &p | &T | file://:0:0:0:0 | * | | main.rs:1818:46:1818:47 | &p | &T.*T | {EXTERNAL LOCATION} | i32 | | main.rs:1818:47:1818:47 | p | | file://:0:0:0:0 | * | | main.rs:1818:47:1818:47 | p | *T | {EXTERNAL LOCATION} | i32 | -| main.rs:1825:16:1837:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1819:13:1819:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1819:17:1819:37 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:1825:16:1837:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1826:13:1826:13 | x | | {EXTERNAL LOCATION} | bool | | main.rs:1826:17:1826:20 | true | | {EXTERNAL LOCATION} | bool | | main.rs:1826:17:1826:29 | ... && ... | | {EXTERNAL LOCATION} | bool | @@ -4141,17 +4151,17 @@ inferType | main.rs:1830:20:1830:21 | 34 | | {EXTERNAL LOCATION} | i32 | | main.rs:1830:20:1830:27 | ... == ... | | {EXTERNAL LOCATION} | bool | | main.rs:1830:26:1830:27 | 33 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1831:9:1835:9 | if cond {...} else {...} | | file://:0:0:0:0 | () | +| main.rs:1831:9:1835:9 | if cond {...} else {...} | | {EXTERNAL LOCATION} | () | | main.rs:1831:12:1831:15 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:1831:17:1833:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1832:17:1832:17 | z | | file://:0:0:0:0 | () | -| main.rs:1832:21:1832:27 | (...) | | file://:0:0:0:0 | () | +| main.rs:1831:17:1833:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1832:17:1832:17 | z | | {EXTERNAL LOCATION} | () | +| main.rs:1832:21:1832:27 | (...) | | {EXTERNAL LOCATION} | () | | main.rs:1832:22:1832:22 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1832:22:1832:26 | ... = ... | | file://:0:0:0:0 | () | +| main.rs:1832:22:1832:26 | ... = ... | | {EXTERNAL LOCATION} | () | | main.rs:1832:26:1832:26 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1833:16:1835:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:1833:16:1835:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1834:13:1834:13 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1834:13:1834:17 | ... = ... | | file://:0:0:0:0 | () | +| main.rs:1834:13:1834:17 | ... = ... | | {EXTERNAL LOCATION} | () | | main.rs:1834:17:1834:17 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:1836:9:1836:9 | a | | {EXTERNAL LOCATION} | i32 | | main.rs:1850:30:1852:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | @@ -4172,20 +4182,20 @@ inferType | main.rs:1861:20:1861:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1861:29:1861:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1861:29:1861:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1868:23:1868:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1868:23:1868:31 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1868:23:1868:31 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1868:34:1868:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:1868:45:1871:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1869:13:1869:16 | self | | file://:0:0:0:0 | & | +| main.rs:1868:45:1871:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1869:13:1869:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1869:13:1869:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1869:13:1869:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1869:13:1869:27 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:1869:13:1869:27 | ... += ... | | {EXTERNAL LOCATION} | () | | main.rs:1869:23:1869:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1869:23:1869:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1870:13:1870:16 | self | | file://:0:0:0:0 | & | +| main.rs:1870:13:1870:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1870:13:1870:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1870:13:1870:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1870:13:1870:27 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:1870:13:1870:27 | ... += ... | | {EXTERNAL LOCATION} | () | | main.rs:1870:23:1870:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1870:23:1870:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1876:16:1876:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | @@ -4202,20 +4212,20 @@ inferType | main.rs:1879:20:1879:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1879:29:1879:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1879:29:1879:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1886:23:1886:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1886:23:1886:31 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1886:23:1886:31 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1886:34:1886:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:1886:45:1889:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1887:13:1887:16 | self | | file://:0:0:0:0 | & | +| main.rs:1886:45:1889:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1887:13:1887:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1887:13:1887:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1887:13:1887:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1887:13:1887:27 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:1887:13:1887:27 | ... -= ... | | {EXTERNAL LOCATION} | () | | main.rs:1887:23:1887:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1887:23:1887:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1888:13:1888:16 | self | | file://:0:0:0:0 | & | +| main.rs:1888:13:1888:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1888:13:1888:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1888:13:1888:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1888:13:1888:27 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:1888:13:1888:27 | ... -= ... | | {EXTERNAL LOCATION} | () | | main.rs:1888:23:1888:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1888:23:1888:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1894:16:1894:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | @@ -4232,20 +4242,20 @@ inferType | main.rs:1897:20:1897:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1897:29:1897:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1897:29:1897:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1903:23:1903:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1903:23:1903:31 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1903:23:1903:31 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1903:34:1903:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:1903:45:1906:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1904:13:1904:16 | self | | file://:0:0:0:0 | & | +| main.rs:1903:45:1906:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1904:13:1904:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1904:13:1904:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1904:13:1904:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1904:13:1904:27 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:1904:13:1904:27 | ... *= ... | | {EXTERNAL LOCATION} | () | | main.rs:1904:23:1904:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1904:23:1904:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1905:13:1905:16 | self | | file://:0:0:0:0 | & | +| main.rs:1905:13:1905:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1905:13:1905:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1905:13:1905:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1905:13:1905:27 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:1905:13:1905:27 | ... *= ... | | {EXTERNAL LOCATION} | () | | main.rs:1905:23:1905:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1905:23:1905:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1911:16:1911:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | @@ -4262,20 +4272,20 @@ inferType | main.rs:1914:20:1914:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1914:29:1914:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1914:29:1914:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1920:23:1920:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1920:23:1920:31 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1920:23:1920:31 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1920:34:1920:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:1920:45:1923:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1921:13:1921:16 | self | | file://:0:0:0:0 | & | +| main.rs:1920:45:1923:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1921:13:1921:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1921:13:1921:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1921:13:1921:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1921:13:1921:27 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:1921:13:1921:27 | ... /= ... | | {EXTERNAL LOCATION} | () | | main.rs:1921:23:1921:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1921:23:1921:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1922:13:1922:16 | self | | file://:0:0:0:0 | & | +| main.rs:1922:13:1922:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1922:13:1922:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1922:13:1922:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1922:13:1922:27 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:1922:13:1922:27 | ... /= ... | | {EXTERNAL LOCATION} | () | | main.rs:1922:23:1922:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1922:23:1922:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1928:16:1928:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | @@ -4292,20 +4302,20 @@ inferType | main.rs:1931:20:1931:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1931:29:1931:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1931:29:1931:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1937:23:1937:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1937:23:1937:31 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1937:23:1937:31 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1937:34:1937:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:1937:45:1940:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1938:13:1938:16 | self | | file://:0:0:0:0 | & | +| main.rs:1937:45:1940:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1938:13:1938:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1938:13:1938:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1938:13:1938:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1938:13:1938:27 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:1938:13:1938:27 | ... %= ... | | {EXTERNAL LOCATION} | () | | main.rs:1938:23:1938:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1938:23:1938:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1939:13:1939:16 | self | | file://:0:0:0:0 | & | +| main.rs:1939:13:1939:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1939:13:1939:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1939:13:1939:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1939:13:1939:27 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:1939:13:1939:27 | ... %= ... | | {EXTERNAL LOCATION} | () | | main.rs:1939:23:1939:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1939:23:1939:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1945:19:1945:22 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | @@ -4322,20 +4332,20 @@ inferType | main.rs:1948:20:1948:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1948:29:1948:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1948:29:1948:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1954:26:1954:34 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1954:26:1954:34 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1954:26:1954:34 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1954:37:1954:39 | rhs | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:1954:48:1957:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1955:13:1955:16 | self | | file://:0:0:0:0 | & | +| main.rs:1954:48:1957:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1955:13:1955:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1955:13:1955:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1955:13:1955:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1955:13:1955:27 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:1955:13:1955:27 | ... &= ... | | {EXTERNAL LOCATION} | () | | main.rs:1955:23:1955:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1955:23:1955:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1956:13:1956:16 | self | | file://:0:0:0:0 | & | +| main.rs:1956:13:1956:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1956:13:1956:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1956:13:1956:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1956:13:1956:27 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:1956:13:1956:27 | ... &= ... | | {EXTERNAL LOCATION} | () | | main.rs:1956:23:1956:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1956:23:1956:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1962:18:1962:21 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | @@ -4352,20 +4362,20 @@ inferType | main.rs:1965:20:1965:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1965:29:1965:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1965:29:1965:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1971:25:1971:33 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1971:25:1971:33 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1971:25:1971:33 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1971:36:1971:38 | rhs | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:1971:47:1974:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1972:13:1972:16 | self | | file://:0:0:0:0 | & | +| main.rs:1971:47:1974:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1972:13:1972:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1972:13:1972:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1972:13:1972:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1972:13:1972:27 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:1972:13:1972:27 | ... \|= ... | | {EXTERNAL LOCATION} | () | | main.rs:1972:23:1972:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1972:23:1972:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1973:13:1973:16 | self | | file://:0:0:0:0 | & | +| main.rs:1973:13:1973:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1973:13:1973:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1973:13:1973:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1973:13:1973:27 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:1973:13:1973:27 | ... \|= ... | | {EXTERNAL LOCATION} | () | | main.rs:1973:23:1973:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1973:23:1973:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1979:19:1979:22 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | @@ -4382,20 +4392,20 @@ inferType | main.rs:1982:20:1982:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1982:29:1982:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1982:29:1982:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1988:26:1988:34 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1988:26:1988:34 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1988:26:1988:34 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1988:37:1988:39 | rhs | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:1988:48:1991:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:1989:13:1989:16 | self | | file://:0:0:0:0 | & | +| main.rs:1988:48:1991:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1989:13:1989:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1989:13:1989:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1989:13:1989:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1989:13:1989:27 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:1989:13:1989:27 | ... ^= ... | | {EXTERNAL LOCATION} | () | | main.rs:1989:23:1989:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1989:23:1989:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1990:13:1990:16 | self | | file://:0:0:0:0 | & | +| main.rs:1990:13:1990:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1990:13:1990:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1990:13:1990:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1990:13:1990:27 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:1990:13:1990:27 | ... ^= ... | | {EXTERNAL LOCATION} | () | | main.rs:1990:23:1990:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1990:23:1990:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1996:16:1996:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | @@ -4410,19 +4420,19 @@ inferType | main.rs:1999:20:1999:25 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1999:20:1999:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1999:30:1999:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2005:23:2005:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2005:23:2005:31 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2005:23:2005:31 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2005:34:2005:36 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2005:44:2008:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2006:13:2006:16 | self | | file://:0:0:0:0 | & | +| main.rs:2005:44:2008:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2006:13:2006:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:2006:13:2006:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2006:13:2006:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2006:13:2006:26 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:2006:13:2006:26 | ... <<= ... | | {EXTERNAL LOCATION} | () | | main.rs:2006:24:2006:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2007:13:2007:16 | self | | file://:0:0:0:0 | & | +| main.rs:2007:13:2007:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:2007:13:2007:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2007:13:2007:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2007:13:2007:26 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:2007:13:2007:26 | ... <<= ... | | {EXTERNAL LOCATION} | () | | main.rs:2007:24:2007:26 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:2013:16:2013:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2013:22:2013:24 | rhs | | {EXTERNAL LOCATION} | u32 | @@ -4436,19 +4446,19 @@ inferType | main.rs:2016:20:2016:25 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2016:20:2016:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | | main.rs:2016:30:2016:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2022:23:2022:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2022:23:2022:31 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2022:23:2022:31 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2022:34:2022:36 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2022:44:2025:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2023:13:2023:16 | self | | file://:0:0:0:0 | & | +| main.rs:2022:44:2025:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2023:13:2023:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:2023:13:2023:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2023:13:2023:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2023:13:2023:26 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:2023:13:2023:26 | ... >>= ... | | {EXTERNAL LOCATION} | () | | main.rs:2023:24:2023:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:2024:13:2024:16 | self | | file://:0:0:0:0 | & | +| main.rs:2024:13:2024:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:2024:13:2024:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2024:13:2024:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2024:13:2024:26 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:2024:13:2024:26 | ... >>= ... | | {EXTERNAL LOCATION} | () | | main.rs:2024:24:2024:26 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:2030:16:2030:19 | SelfParam | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2030:30:2035:9 | { ... } | | main.rs:1843:5:1848:5 | Vec2 | @@ -4468,150 +4478,150 @@ inferType | main.rs:2043:20:2043:26 | ! ... | | {EXTERNAL LOCATION} | i64 | | main.rs:2043:21:2043:24 | self | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2043:21:2043:26 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2049:15:2049:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2049:15:2049:19 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2049:15:2049:19 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:2049:22:2049:26 | other | | file://:0:0:0:0 | & | +| main.rs:2049:22:2049:26 | other | | {EXTERNAL LOCATION} | & | | main.rs:2049:22:2049:26 | other | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2049:44:2051:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:2050:13:2050:16 | self | | file://:0:0:0:0 | & | +| main.rs:2050:13:2050:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:2050:13:2050:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2050:13:2050:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:2050:13:2050:29 | ... == ... | | {EXTERNAL LOCATION} | bool | | main.rs:2050:13:2050:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2050:23:2050:27 | other | | file://:0:0:0:0 | & | +| main.rs:2050:23:2050:27 | other | | {EXTERNAL LOCATION} | & | | main.rs:2050:23:2050:27 | other | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2050:23:2050:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2050:34:2050:37 | self | | file://:0:0:0:0 | & | +| main.rs:2050:34:2050:37 | self | | {EXTERNAL LOCATION} | & | | main.rs:2050:34:2050:37 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2050:34:2050:39 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2050:34:2050:50 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2050:44:2050:48 | other | | file://:0:0:0:0 | & | +| main.rs:2050:44:2050:48 | other | | {EXTERNAL LOCATION} | & | | main.rs:2050:44:2050:48 | other | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2050:44:2050:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2053:15:2053:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2053:15:2053:19 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2053:15:2053:19 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:2053:22:2053:26 | other | | file://:0:0:0:0 | & | +| main.rs:2053:22:2053:26 | other | | {EXTERNAL LOCATION} | & | | main.rs:2053:22:2053:26 | other | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2053:44:2055:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:2054:13:2054:16 | self | | file://:0:0:0:0 | & | +| main.rs:2054:13:2054:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:2054:13:2054:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2054:13:2054:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:2054:13:2054:29 | ... != ... | | {EXTERNAL LOCATION} | bool | | main.rs:2054:13:2054:50 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2054:23:2054:27 | other | | file://:0:0:0:0 | & | +| main.rs:2054:23:2054:27 | other | | {EXTERNAL LOCATION} | & | | main.rs:2054:23:2054:27 | other | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2054:23:2054:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2054:34:2054:37 | self | | file://:0:0:0:0 | & | +| main.rs:2054:34:2054:37 | self | | {EXTERNAL LOCATION} | & | | main.rs:2054:34:2054:37 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2054:34:2054:39 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2054:34:2054:50 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2054:44:2054:48 | other | | file://:0:0:0:0 | & | +| main.rs:2054:44:2054:48 | other | | {EXTERNAL LOCATION} | & | | main.rs:2054:44:2054:48 | other | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2054:44:2054:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2059:24:2059:28 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2059:24:2059:28 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2059:24:2059:28 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:2059:31:2059:35 | other | | file://:0:0:0:0 | & | +| main.rs:2059:31:2059:35 | other | | {EXTERNAL LOCATION} | & | | main.rs:2059:31:2059:35 | other | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2059:75:2061:9 | { ... } | | {EXTERNAL LOCATION} | Option | | main.rs:2059:75:2061:9 | { ... } | T | {EXTERNAL LOCATION} | Ordering | | main.rs:2060:13:2060:29 | (...) | | {EXTERNAL LOCATION} | i64 | | main.rs:2060:13:2060:63 | ... .partial_cmp(...) | | {EXTERNAL LOCATION} | Option | | main.rs:2060:13:2060:63 | ... .partial_cmp(...) | T | {EXTERNAL LOCATION} | Ordering | -| main.rs:2060:14:2060:17 | self | | file://:0:0:0:0 | & | +| main.rs:2060:14:2060:17 | self | | {EXTERNAL LOCATION} | & | | main.rs:2060:14:2060:17 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2060:14:2060:19 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:2060:14:2060:28 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2060:23:2060:26 | self | | file://:0:0:0:0 | & | +| main.rs:2060:23:2060:26 | self | | {EXTERNAL LOCATION} | & | | main.rs:2060:23:2060:26 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2060:23:2060:28 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2060:43:2060:62 | &... | | file://:0:0:0:0 | & | +| main.rs:2060:43:2060:62 | &... | | {EXTERNAL LOCATION} | & | | main.rs:2060:43:2060:62 | &... | &T | {EXTERNAL LOCATION} | i64 | | main.rs:2060:44:2060:62 | (...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2060:45:2060:49 | other | | file://:0:0:0:0 | & | +| main.rs:2060:45:2060:49 | other | | {EXTERNAL LOCATION} | & | | main.rs:2060:45:2060:49 | other | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2060:45:2060:51 | other.x | | {EXTERNAL LOCATION} | i64 | | main.rs:2060:45:2060:61 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2060:55:2060:59 | other | | file://:0:0:0:0 | & | +| main.rs:2060:55:2060:59 | other | | {EXTERNAL LOCATION} | & | | main.rs:2060:55:2060:59 | other | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2060:55:2060:61 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2063:15:2063:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2063:15:2063:19 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2063:15:2063:19 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:2063:22:2063:26 | other | | file://:0:0:0:0 | & | +| main.rs:2063:22:2063:26 | other | | {EXTERNAL LOCATION} | & | | main.rs:2063:22:2063:26 | other | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2063:44:2065:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:2064:13:2064:16 | self | | file://:0:0:0:0 | & | +| main.rs:2064:13:2064:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:2064:13:2064:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2064:13:2064:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:2064:13:2064:28 | ... < ... | | {EXTERNAL LOCATION} | bool | | main.rs:2064:13:2064:48 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2064:22:2064:26 | other | | file://:0:0:0:0 | & | +| main.rs:2064:22:2064:26 | other | | {EXTERNAL LOCATION} | & | | main.rs:2064:22:2064:26 | other | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2064:22:2064:28 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2064:33:2064:36 | self | | file://:0:0:0:0 | & | +| main.rs:2064:33:2064:36 | self | | {EXTERNAL LOCATION} | & | | main.rs:2064:33:2064:36 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2064:33:2064:38 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2064:33:2064:48 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2064:42:2064:46 | other | | file://:0:0:0:0 | & | +| main.rs:2064:42:2064:46 | other | | {EXTERNAL LOCATION} | & | | main.rs:2064:42:2064:46 | other | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2064:42:2064:48 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2067:15:2067:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2067:15:2067:19 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2067:15:2067:19 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:2067:22:2067:26 | other | | file://:0:0:0:0 | & | +| main.rs:2067:22:2067:26 | other | | {EXTERNAL LOCATION} | & | | main.rs:2067:22:2067:26 | other | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2067:44:2069:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:2068:13:2068:16 | self | | file://:0:0:0:0 | & | +| main.rs:2068:13:2068:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:2068:13:2068:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2068:13:2068:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:2068:13:2068:29 | ... <= ... | | {EXTERNAL LOCATION} | bool | | main.rs:2068:13:2068:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2068:23:2068:27 | other | | file://:0:0:0:0 | & | +| main.rs:2068:23:2068:27 | other | | {EXTERNAL LOCATION} | & | | main.rs:2068:23:2068:27 | other | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2068:23:2068:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2068:34:2068:37 | self | | file://:0:0:0:0 | & | +| main.rs:2068:34:2068:37 | self | | {EXTERNAL LOCATION} | & | | main.rs:2068:34:2068:37 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2068:34:2068:39 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2068:34:2068:50 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2068:44:2068:48 | other | | file://:0:0:0:0 | & | +| main.rs:2068:44:2068:48 | other | | {EXTERNAL LOCATION} | & | | main.rs:2068:44:2068:48 | other | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2068:44:2068:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2071:15:2071:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2071:15:2071:19 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2071:15:2071:19 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:2071:22:2071:26 | other | | file://:0:0:0:0 | & | +| main.rs:2071:22:2071:26 | other | | {EXTERNAL LOCATION} | & | | main.rs:2071:22:2071:26 | other | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2071:44:2073:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:2072:13:2072:16 | self | | file://:0:0:0:0 | & | +| main.rs:2072:13:2072:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:2072:13:2072:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2072:13:2072:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:2072:13:2072:28 | ... > ... | | {EXTERNAL LOCATION} | bool | | main.rs:2072:13:2072:48 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2072:22:2072:26 | other | | file://:0:0:0:0 | & | +| main.rs:2072:22:2072:26 | other | | {EXTERNAL LOCATION} | & | | main.rs:2072:22:2072:26 | other | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2072:22:2072:28 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2072:33:2072:36 | self | | file://:0:0:0:0 | & | +| main.rs:2072:33:2072:36 | self | | {EXTERNAL LOCATION} | & | | main.rs:2072:33:2072:36 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2072:33:2072:38 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2072:33:2072:48 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2072:42:2072:46 | other | | file://:0:0:0:0 | & | +| main.rs:2072:42:2072:46 | other | | {EXTERNAL LOCATION} | & | | main.rs:2072:42:2072:46 | other | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2072:42:2072:48 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2075:15:2075:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2075:15:2075:19 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2075:15:2075:19 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:2075:22:2075:26 | other | | file://:0:0:0:0 | & | +| main.rs:2075:22:2075:26 | other | | {EXTERNAL LOCATION} | & | | main.rs:2075:22:2075:26 | other | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2075:44:2077:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:2076:13:2076:16 | self | | file://:0:0:0:0 | & | +| main.rs:2076:13:2076:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:2076:13:2076:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2076:13:2076:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:2076:13:2076:29 | ... >= ... | | {EXTERNAL LOCATION} | bool | | main.rs:2076:13:2076:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2076:23:2076:27 | other | | file://:0:0:0:0 | & | +| main.rs:2076:23:2076:27 | other | | {EXTERNAL LOCATION} | & | | main.rs:2076:23:2076:27 | other | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2076:23:2076:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2076:34:2076:37 | self | | file://:0:0:0:0 | & | +| main.rs:2076:34:2076:37 | self | | {EXTERNAL LOCATION} | & | | main.rs:2076:34:2076:37 | self | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2076:34:2076:39 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2076:34:2076:50 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2076:44:2076:48 | other | | file://:0:0:0:0 | & | +| main.rs:2076:44:2076:48 | other | | {EXTERNAL LOCATION} | & | | main.rs:2076:44:2076:48 | other | &T | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2076:44:2076:50 | other.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2080:26:2080:26 | a | | main.rs:2080:18:2080:23 | T | @@ -4620,7 +4630,7 @@ inferType | main.rs:2081:9:2081:9 | a | | main.rs:2080:18:2080:23 | T | | main.rs:2081:9:2081:13 | ... + ... | | {EXTERNAL LOCATION} | Output | | main.rs:2081:13:2081:13 | b | | main.rs:2080:18:2080:23 | T | -| main.rs:2084:16:2215:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2084:16:2215:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2088:13:2088:18 | i64_eq | | {EXTERNAL LOCATION} | bool | | main.rs:2088:22:2088:35 | (...) | | {EXTERNAL LOCATION} | bool | | main.rs:2088:23:2088:26 | 1i64 | | {EXTERNAL LOCATION} | i64 | @@ -4676,27 +4686,27 @@ inferType | main.rs:2104:17:2104:30 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | | main.rs:2104:34:2104:38 | 23i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2105:9:2105:22 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2105:9:2105:31 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:2105:9:2105:31 | ... += ... | | {EXTERNAL LOCATION} | () | | main.rs:2105:27:2105:31 | 24i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2107:17:2107:30 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | | main.rs:2107:34:2107:38 | 25i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2108:9:2108:22 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2108:9:2108:31 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:2108:9:2108:31 | ... -= ... | | {EXTERNAL LOCATION} | () | | main.rs:2108:27:2108:31 | 26i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2110:17:2110:30 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | | main.rs:2110:34:2110:38 | 27i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2111:9:2111:22 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2111:9:2111:31 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:2111:9:2111:31 | ... *= ... | | {EXTERNAL LOCATION} | () | | main.rs:2111:27:2111:31 | 28i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2113:17:2113:30 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | | main.rs:2113:34:2113:38 | 29i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2114:9:2114:22 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2114:9:2114:31 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:2114:9:2114:31 | ... /= ... | | {EXTERNAL LOCATION} | () | | main.rs:2114:27:2114:31 | 30i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2116:17:2116:30 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | | main.rs:2116:34:2116:38 | 31i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2117:9:2117:22 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2117:9:2117:31 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:2117:9:2117:31 | ... %= ... | | {EXTERNAL LOCATION} | () | | main.rs:2117:27:2117:31 | 32i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2120:13:2120:22 | i64_bitand | | {EXTERNAL LOCATION} | i64 | | main.rs:2120:26:2120:30 | 33i64 | | {EXTERNAL LOCATION} | i64 | @@ -4721,27 +4731,27 @@ inferType | main.rs:2127:17:2127:33 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | | main.rs:2127:37:2127:41 | 43i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2128:9:2128:25 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2128:9:2128:34 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:2128:9:2128:34 | ... &= ... | | {EXTERNAL LOCATION} | () | | main.rs:2128:30:2128:34 | 44i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2130:17:2130:32 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | | main.rs:2130:36:2130:40 | 45i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2131:9:2131:24 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2131:9:2131:33 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:2131:9:2131:33 | ... \|= ... | | {EXTERNAL LOCATION} | () | | main.rs:2131:29:2131:33 | 46i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2133:17:2133:33 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | | main.rs:2133:37:2133:41 | 47i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2134:9:2134:25 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2134:9:2134:34 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:2134:9:2134:34 | ... ^= ... | | {EXTERNAL LOCATION} | () | | main.rs:2134:30:2134:34 | 48i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2136:17:2136:30 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | | main.rs:2136:34:2136:38 | 49i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2137:9:2137:22 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2137:9:2137:32 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:2137:9:2137:32 | ... <<= ... | | {EXTERNAL LOCATION} | () | | main.rs:2137:28:2137:32 | 50i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2139:17:2139:30 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | | main.rs:2139:34:2139:38 | 51i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2140:9:2140:22 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:2140:9:2140:32 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:2140:9:2140:32 | ... >>= ... | | {EXTERNAL LOCATION} | () | | main.rs:2140:28:2140:32 | 52i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2142:13:2142:19 | i64_neg | | {EXTERNAL LOCATION} | i64 | | main.rs:2142:23:2142:28 | - ... | | {EXTERNAL LOCATION} | i64 | @@ -4804,27 +4814,27 @@ inferType | main.rs:2165:17:2165:31 | vec2_add_assign | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2165:35:2165:36 | v1 | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2166:9:2166:23 | vec2_add_assign | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:2166:9:2166:29 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:2166:9:2166:29 | ... += ... | | {EXTERNAL LOCATION} | () | | main.rs:2166:28:2166:29 | v2 | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2168:17:2168:31 | vec2_sub_assign | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2168:35:2168:36 | v1 | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2169:9:2169:23 | vec2_sub_assign | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:2169:9:2169:29 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:2169:9:2169:29 | ... -= ... | | {EXTERNAL LOCATION} | () | | main.rs:2169:28:2169:29 | v2 | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2171:17:2171:31 | vec2_mul_assign | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2171:35:2171:36 | v1 | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2172:9:2172:23 | vec2_mul_assign | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:2172:9:2172:29 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:2172:9:2172:29 | ... *= ... | | {EXTERNAL LOCATION} | () | | main.rs:2172:28:2172:29 | v2 | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2174:17:2174:31 | vec2_div_assign | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2174:35:2174:36 | v1 | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2175:9:2175:23 | vec2_div_assign | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:2175:9:2175:29 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:2175:9:2175:29 | ... /= ... | | {EXTERNAL LOCATION} | () | | main.rs:2175:28:2175:29 | v2 | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2177:17:2177:31 | vec2_rem_assign | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2177:35:2177:36 | v1 | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2178:9:2178:23 | vec2_rem_assign | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:2178:9:2178:29 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:2178:9:2178:29 | ... %= ... | | {EXTERNAL LOCATION} | () | | main.rs:2178:28:2178:29 | v2 | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2181:13:2181:23 | vec2_bitand | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2181:27:2181:28 | v1 | | main.rs:1843:5:1848:5 | Vec2 | @@ -4849,27 +4859,27 @@ inferType | main.rs:2188:17:2188:34 | vec2_bitand_assign | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2188:38:2188:39 | v1 | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2189:9:2189:26 | vec2_bitand_assign | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:2189:9:2189:32 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:2189:9:2189:32 | ... &= ... | | {EXTERNAL LOCATION} | () | | main.rs:2189:31:2189:32 | v2 | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2191:17:2191:33 | vec2_bitor_assign | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2191:37:2191:38 | v1 | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2192:9:2192:25 | vec2_bitor_assign | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:2192:9:2192:31 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:2192:9:2192:31 | ... \|= ... | | {EXTERNAL LOCATION} | () | | main.rs:2192:30:2192:31 | v2 | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2194:17:2194:34 | vec2_bitxor_assign | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2194:38:2194:39 | v1 | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2195:9:2195:26 | vec2_bitxor_assign | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:2195:9:2195:32 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:2195:9:2195:32 | ... ^= ... | | {EXTERNAL LOCATION} | () | | main.rs:2195:31:2195:32 | v2 | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2197:17:2197:31 | vec2_shl_assign | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2197:35:2197:36 | v1 | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2198:9:2198:23 | vec2_shl_assign | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:2198:9:2198:32 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:2198:9:2198:32 | ... <<= ... | | {EXTERNAL LOCATION} | () | | main.rs:2198:29:2198:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | | main.rs:2200:17:2200:31 | vec2_shr_assign | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2200:35:2200:36 | v1 | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2201:9:2201:23 | vec2_shr_assign | | main.rs:1843:5:1848:5 | Vec2 | -| main.rs:2201:9:2201:32 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:2201:9:2201:32 | ... >>= ... | | {EXTERNAL LOCATION} | () | | main.rs:2201:29:2201:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | | main.rs:2204:13:2204:20 | vec2_neg | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2204:24:2204:26 | - ... | | main.rs:1843:5:1848:5 | Vec2 | @@ -4894,7 +4904,7 @@ inferType | main.rs:2214:46:2214:46 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:2214:53:2214:64 | default_vec2 | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2224:18:2224:21 | SelfParam | | main.rs:2221:5:2221:14 | S1 | -| main.rs:2224:24:2224:25 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2224:24:2224:25 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2227:25:2229:5 | { ... } | | main.rs:2221:5:2221:14 | S1 | | main.rs:2228:9:2228:10 | S1 | | main.rs:2221:5:2221:14 | S1 | | main.rs:2231:41:2233:5 | { ... } | | main.rs:2231:16:2231:39 | impl ... | @@ -4903,11 +4913,11 @@ inferType | main.rs:2232:17:2232:18 | S1 | | main.rs:2221:5:2221:14 | S1 | | main.rs:2235:41:2237:5 | { ... } | | main.rs:2235:16:2235:39 | impl ... | | main.rs:2236:9:2236:16 | { ... } | | {EXTERNAL LOCATION} | trait Future | -| main.rs:2236:9:2236:16 | { ... } | Output | file://:0:0:0:0 | () | +| main.rs:2236:9:2236:16 | { ... } | Output | {EXTERNAL LOCATION} | () | | main.rs:2245:13:2245:42 | SelfParam | | {EXTERNAL LOCATION} | Pin | -| main.rs:2245:13:2245:42 | SelfParam | Ptr | file://:0:0:0:0 | & | +| main.rs:2245:13:2245:42 | SelfParam | Ptr | {EXTERNAL LOCATION} | & | | main.rs:2245:13:2245:42 | SelfParam | Ptr.&T | main.rs:2239:5:2239:14 | S2 | -| main.rs:2246:13:2246:15 | _cx | | file://:0:0:0:0 | & | +| main.rs:2246:13:2246:15 | _cx | | {EXTERNAL LOCATION} | & | | main.rs:2246:13:2246:15 | _cx | &T | {EXTERNAL LOCATION} | Context | | main.rs:2247:44:2249:9 | { ... } | | {EXTERNAL LOCATION} | Poll | | main.rs:2247:44:2249:9 | { ... } | T | main.rs:2221:5:2221:14 | S1 | @@ -4917,22 +4927,22 @@ inferType | main.rs:2252:41:2254:5 | { ... } | | main.rs:2252:16:2252:39 | impl ... | | main.rs:2253:9:2253:10 | S2 | | main.rs:2239:5:2239:14 | S2 | | main.rs:2253:9:2253:10 | S2 | | main.rs:2252:16:2252:39 | impl ... | -| main.rs:2256:22:2264:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2256:22:2264:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2257:9:2257:12 | f1(...) | | {EXTERNAL LOCATION} | trait Future | | main.rs:2257:9:2257:12 | f1(...) | Output | main.rs:2221:5:2221:14 | S1 | | main.rs:2257:9:2257:18 | await ... | | main.rs:2221:5:2221:14 | S1 | -| main.rs:2257:9:2257:22 | ... .f() | | file://:0:0:0:0 | () | +| main.rs:2257:9:2257:22 | ... .f() | | {EXTERNAL LOCATION} | () | | main.rs:2258:9:2258:12 | f2(...) | | main.rs:2231:16:2231:39 | impl ... | | main.rs:2258:9:2258:18 | await ... | | main.rs:2221:5:2221:14 | S1 | -| main.rs:2258:9:2258:22 | ... .f() | | file://:0:0:0:0 | () | +| main.rs:2258:9:2258:22 | ... .f() | | {EXTERNAL LOCATION} | () | | main.rs:2259:9:2259:12 | f3(...) | | main.rs:2235:16:2235:39 | impl ... | -| main.rs:2259:9:2259:18 | await ... | | file://:0:0:0:0 | () | +| main.rs:2259:9:2259:18 | await ... | | {EXTERNAL LOCATION} | () | | main.rs:2260:9:2260:12 | f4(...) | | main.rs:2252:16:2252:39 | impl ... | | main.rs:2260:9:2260:18 | await ... | | main.rs:2221:5:2221:14 | S1 | -| main.rs:2260:9:2260:22 | ... .f() | | file://:0:0:0:0 | () | +| main.rs:2260:9:2260:22 | ... .f() | | {EXTERNAL LOCATION} | () | | main.rs:2261:9:2261:10 | S2 | | main.rs:2239:5:2239:14 | S2 | | main.rs:2261:9:2261:16 | await S2 | | main.rs:2221:5:2221:14 | S1 | -| main.rs:2261:9:2261:20 | ... .f() | | file://:0:0:0:0 | () | +| main.rs:2261:9:2261:20 | ... .f() | | {EXTERNAL LOCATION} | () | | main.rs:2262:13:2262:13 | b | | {EXTERNAL LOCATION} | trait Future | | main.rs:2262:13:2262:13 | b | Output | main.rs:2221:5:2221:14 | S1 | | main.rs:2262:17:2262:28 | { ... } | | {EXTERNAL LOCATION} | trait Future | @@ -4941,37 +4951,37 @@ inferType | main.rs:2263:9:2263:9 | b | | {EXTERNAL LOCATION} | trait Future | | main.rs:2263:9:2263:9 | b | Output | main.rs:2221:5:2221:14 | S1 | | main.rs:2263:9:2263:15 | await b | | main.rs:2221:5:2221:14 | S1 | -| main.rs:2263:9:2263:19 | ... .f() | | file://:0:0:0:0 | () | -| main.rs:2274:15:2274:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2263:9:2263:19 | ... .f() | | {EXTERNAL LOCATION} | () | +| main.rs:2274:15:2274:19 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2274:15:2274:19 | SelfParam | &T | main.rs:2273:5:2275:5 | Self [trait Trait1] | -| main.rs:2274:22:2274:23 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2278:15:2278:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2274:22:2274:23 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2278:15:2278:19 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2278:15:2278:19 | SelfParam | &T | main.rs:2277:5:2279:5 | Self [trait Trait2] | -| main.rs:2278:22:2278:23 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2282:15:2282:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2278:22:2278:23 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2282:15:2282:19 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2282:15:2282:19 | SelfParam | &T | main.rs:2268:5:2269:14 | S1 | -| main.rs:2282:22:2282:23 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2286:15:2286:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2282:22:2282:23 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2286:15:2286:19 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2286:15:2286:19 | SelfParam | &T | main.rs:2268:5:2269:14 | S1 | -| main.rs:2286:22:2286:23 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2286:22:2286:23 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2289:37:2291:5 | { ... } | | main.rs:2289:16:2289:35 | impl ... + ... | | main.rs:2290:9:2290:10 | S1 | | main.rs:2268:5:2269:14 | S1 | | main.rs:2290:9:2290:10 | S1 | | main.rs:2289:16:2289:35 | impl ... + ... | -| main.rs:2294:18:2294:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2294:18:2294:22 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2294:18:2294:22 | SelfParam | &T | main.rs:2293:5:2295:5 | Self [trait MyTrait] | -| main.rs:2298:18:2298:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2298:18:2298:22 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2298:18:2298:22 | SelfParam | &T | main.rs:2268:5:2269:14 | S1 | | main.rs:2298:31:2300:9 | { ... } | | main.rs:2270:5:2270:14 | S2 | | main.rs:2299:13:2299:14 | S2 | | main.rs:2270:5:2270:14 | S2 | -| main.rs:2304:18:2304:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2304:18:2304:22 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2304:18:2304:22 | SelfParam | &T | main.rs:2271:5:2271:22 | S3 | | main.rs:2304:18:2304:22 | SelfParam | &T.T3 | main.rs:2303:10:2303:17 | T | | main.rs:2304:30:2307:9 | { ... } | | main.rs:2303:10:2303:17 | T | -| main.rs:2305:17:2305:21 | S3(...) | | file://:0:0:0:0 | & | +| main.rs:2305:17:2305:21 | S3(...) | | {EXTERNAL LOCATION} | & | | main.rs:2305:17:2305:21 | S3(...) | | main.rs:2271:5:2271:22 | S3 | | main.rs:2305:17:2305:21 | S3(...) | &T | main.rs:2271:5:2271:22 | S3 | | main.rs:2305:17:2305:21 | S3(...) | &T.T3 | main.rs:2303:10:2303:17 | T | -| main.rs:2305:25:2305:28 | self | | file://:0:0:0:0 | & | +| main.rs:2305:25:2305:28 | self | | {EXTERNAL LOCATION} | & | | main.rs:2305:25:2305:28 | self | &T | main.rs:2271:5:2271:22 | S3 | | main.rs:2305:25:2305:28 | self | &T.T3 | main.rs:2303:10:2303:17 | T | | main.rs:2306:13:2306:21 | t.clone() | | main.rs:2303:10:2303:17 | T | @@ -5003,12 +5013,12 @@ inferType | main.rs:2323:14:2323:18 | S3(...) | T3 | main.rs:2322:24:2322:31 | T | | main.rs:2323:17:2323:17 | x | | main.rs:2322:24:2322:31 | T | | main.rs:2326:34:2326:34 | x | | main.rs:2326:24:2326:31 | T | -| main.rs:2326:78:2328:5 | { ... } | | file://:0:0:0:0 | (T_2) | +| main.rs:2326:78:2328:5 | { ... } | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2326:78:2328:5 | { ... } | 0(2) | main.rs:2326:44:2326:58 | impl ... | | main.rs:2326:78:2328:5 | { ... } | 0(2).impl(T) | main.rs:2326:24:2326:31 | T | | main.rs:2326:78:2328:5 | { ... } | 1(2) | main.rs:2326:61:2326:75 | impl ... | | main.rs:2326:78:2328:5 | { ... } | 1(2).impl(T) | main.rs:2326:24:2326:31 | T | -| main.rs:2327:9:2327:30 | TupleExpr | | file://:0:0:0:0 | (T_2) | +| main.rs:2327:9:2327:30 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2327:9:2327:30 | TupleExpr | 0(2) | main.rs:2271:5:2271:22 | S3 | | main.rs:2327:9:2327:30 | TupleExpr | 0(2) | main.rs:2326:44:2326:58 | impl ... | | main.rs:2327:9:2327:30 | TupleExpr | 0(2).T3 | main.rs:2326:24:2326:31 | T | @@ -5032,13 +5042,13 @@ inferType | main.rs:2330:51:2332:5 | { ... } | | main.rs:2330:23:2330:23 | A | | main.rs:2331:9:2331:9 | t | | main.rs:2330:29:2330:43 | impl ... | | main.rs:2331:9:2331:17 | t.get_a() | | main.rs:2330:23:2330:23 | A | -| main.rs:2334:16:2348:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2334:16:2348:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2335:13:2335:13 | x | | main.rs:2289:16:2289:35 | impl ... + ... | | main.rs:2335:17:2335:20 | f1(...) | | main.rs:2289:16:2289:35 | impl ... + ... | | main.rs:2336:9:2336:9 | x | | main.rs:2289:16:2289:35 | impl ... + ... | -| main.rs:2336:9:2336:14 | x.f1() | | file://:0:0:0:0 | () | +| main.rs:2336:9:2336:14 | x.f1() | | {EXTERNAL LOCATION} | () | | main.rs:2337:9:2337:9 | x | | main.rs:2289:16:2289:35 | impl ... + ... | -| main.rs:2337:9:2337:14 | x.f2() | | file://:0:0:0:0 | () | +| main.rs:2337:9:2337:14 | x.f2() | | {EXTERNAL LOCATION} | () | | main.rs:2338:13:2338:13 | a | | main.rs:2310:28:2310:43 | impl ... | | main.rs:2338:17:2338:32 | get_a_my_trait(...) | | main.rs:2310:28:2310:43 | impl ... | | main.rs:2339:13:2339:13 | b | | main.rs:2270:5:2270:14 | S2 | @@ -5066,7 +5076,7 @@ inferType | main.rs:2346:17:2346:52 | ... .get_a() | | main.rs:2268:5:2269:14 | S1 | | main.rs:2346:33:2346:34 | S1 | | main.rs:2268:5:2269:14 | S1 | | main.rs:2347:13:2347:13 | g | | main.rs:2268:5:2269:14 | S1 | -| main.rs:2347:17:2347:35 | get_a_my_trait4(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2347:17:2347:35 | get_a_my_trait4(...) | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2347:17:2347:35 | get_a_my_trait4(...) | 0(2) | main.rs:2326:44:2326:58 | impl ... | | main.rs:2347:17:2347:35 | get_a_my_trait4(...) | 0(2).impl(T) | main.rs:2268:5:2269:14 | S1 | | main.rs:2347:17:2347:35 | get_a_my_trait4(...) | 1(2) | main.rs:2326:61:2326:75 | impl ... | @@ -5075,7 +5085,7 @@ inferType | main.rs:2347:17:2347:37 | ... .0 | impl(T) | main.rs:2268:5:2269:14 | S1 | | main.rs:2347:17:2347:45 | ... .get_a() | | main.rs:2268:5:2269:14 | S1 | | main.rs:2347:33:2347:34 | S1 | | main.rs:2268:5:2269:14 | S1 | -| main.rs:2358:16:2358:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2358:16:2358:20 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2358:16:2358:20 | SelfParam | &T | main.rs:2354:5:2355:13 | S | | main.rs:2358:31:2360:9 | { ... } | | main.rs:2354:5:2355:13 | S | | main.rs:2359:13:2359:13 | S | | main.rs:2354:5:2355:13 | S | @@ -5086,28 +5096,28 @@ inferType | main.rs:2370:27:2370:36 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | | main.rs:2370:27:2370:36 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | main.rs:2370:27:2370:36 | ...::new(...) | T | main.rs:2368:10:2368:10 | T | -| main.rs:2373:17:2373:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2373:17:2373:25 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2373:17:2373:25 | SelfParam | &T | main.rs:2363:5:2366:5 | MyVec | | main.rs:2373:17:2373:25 | SelfParam | &T.T | main.rs:2368:10:2368:10 | T | | main.rs:2373:28:2373:32 | value | | main.rs:2368:10:2368:10 | T | -| main.rs:2373:38:2375:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2374:13:2374:16 | self | | file://:0:0:0:0 | & | +| main.rs:2373:38:2375:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2374:13:2374:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:2374:13:2374:16 | self | &T | main.rs:2363:5:2366:5 | MyVec | | main.rs:2374:13:2374:16 | self | &T.T | main.rs:2368:10:2368:10 | T | | main.rs:2374:13:2374:21 | self.data | | {EXTERNAL LOCATION} | Vec | | main.rs:2374:13:2374:21 | self.data | A | {EXTERNAL LOCATION} | Global | | main.rs:2374:13:2374:21 | self.data | T | main.rs:2368:10:2368:10 | T | -| main.rs:2374:13:2374:33 | ... .push(...) | | file://:0:0:0:0 | () | +| main.rs:2374:13:2374:33 | ... .push(...) | | {EXTERNAL LOCATION} | () | | main.rs:2374:28:2374:32 | value | | main.rs:2368:10:2368:10 | T | -| main.rs:2382:18:2382:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2382:18:2382:22 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2382:18:2382:22 | SelfParam | &T | main.rs:2363:5:2366:5 | MyVec | | main.rs:2382:18:2382:22 | SelfParam | &T.T | main.rs:2378:10:2378:10 | T | | main.rs:2382:25:2382:29 | index | | {EXTERNAL LOCATION} | usize | -| main.rs:2382:56:2384:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:2382:56:2384:9 | { ... } | | {EXTERNAL LOCATION} | & | | main.rs:2382:56:2384:9 | { ... } | &T | main.rs:2378:10:2378:10 | T | -| main.rs:2383:13:2383:29 | &... | | file://:0:0:0:0 | & | +| main.rs:2383:13:2383:29 | &... | | {EXTERNAL LOCATION} | & | | main.rs:2383:13:2383:29 | &... | &T | main.rs:2378:10:2378:10 | T | -| main.rs:2383:14:2383:17 | self | | file://:0:0:0:0 | & | +| main.rs:2383:14:2383:17 | self | | {EXTERNAL LOCATION} | & | | main.rs:2383:14:2383:17 | self | &T | main.rs:2363:5:2366:5 | MyVec | | main.rs:2383:14:2383:17 | self | &T.T | main.rs:2378:10:2378:10 | T | | main.rs:2383:14:2383:22 | self.data | | {EXTERNAL LOCATION} | Vec | @@ -5115,13 +5125,13 @@ inferType | main.rs:2383:14:2383:22 | self.data | T | main.rs:2378:10:2378:10 | T | | main.rs:2383:14:2383:29 | ...[index] | | main.rs:2378:10:2378:10 | T | | main.rs:2383:24:2383:28 | index | | {EXTERNAL LOCATION} | usize | -| main.rs:2387:22:2387:26 | slice | | file://:0:0:0:0 | & | -| main.rs:2387:22:2387:26 | slice | &T | file://:0:0:0:0 | [] | +| main.rs:2387:22:2387:26 | slice | | {EXTERNAL LOCATION} | & | +| main.rs:2387:22:2387:26 | slice | &T | {EXTERNAL LOCATION} | [] | | main.rs:2387:22:2387:26 | slice | &T.[T] | main.rs:2354:5:2355:13 | S | -| main.rs:2387:35:2389:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2387:35:2389:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2388:13:2388:13 | x | | main.rs:2354:5:2355:13 | S | -| main.rs:2388:17:2388:21 | slice | | file://:0:0:0:0 | & | -| main.rs:2388:17:2388:21 | slice | &T | file://:0:0:0:0 | [] | +| main.rs:2388:17:2388:21 | slice | | {EXTERNAL LOCATION} | & | +| main.rs:2388:17:2388:21 | slice | &T | {EXTERNAL LOCATION} | [] | | main.rs:2388:17:2388:21 | slice | &T.[T] | main.rs:2354:5:2355:13 | S | | main.rs:2388:17:2388:24 | slice[0] | | main.rs:2354:5:2355:13 | S | | main.rs:2388:17:2388:30 | ... .foo() | | main.rs:2354:5:2355:13 | S | @@ -5132,28 +5142,28 @@ inferType | main.rs:2395:9:2395:9 | a | | main.rs:2391:20:2391:34 | T | | main.rs:2395:9:2395:12 | a[b] | | {EXTERNAL LOCATION} | Output | | main.rs:2395:11:2395:11 | b | | {EXTERNAL LOCATION} | usize | -| main.rs:2398:16:2409:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2398:16:2409:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2399:17:2399:19 | vec | | main.rs:2363:5:2366:5 | MyVec | | main.rs:2399:17:2399:19 | vec | T | main.rs:2354:5:2355:13 | S | | main.rs:2399:23:2399:34 | ...::new(...) | | main.rs:2363:5:2366:5 | MyVec | | main.rs:2399:23:2399:34 | ...::new(...) | T | main.rs:2354:5:2355:13 | S | | main.rs:2400:9:2400:11 | vec | | main.rs:2363:5:2366:5 | MyVec | | main.rs:2400:9:2400:11 | vec | T | main.rs:2354:5:2355:13 | S | -| main.rs:2400:9:2400:19 | vec.push(...) | | file://:0:0:0:0 | () | +| main.rs:2400:9:2400:19 | vec.push(...) | | {EXTERNAL LOCATION} | () | | main.rs:2400:18:2400:18 | S | | main.rs:2354:5:2355:13 | S | | main.rs:2401:9:2401:11 | vec | | main.rs:2363:5:2366:5 | MyVec | | main.rs:2401:9:2401:11 | vec | T | main.rs:2354:5:2355:13 | S | | main.rs:2401:9:2401:14 | vec[0] | | main.rs:2354:5:2355:13 | S | | main.rs:2401:9:2401:20 | ... .foo() | | main.rs:2354:5:2355:13 | S | | main.rs:2401:13:2401:13 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2403:13:2403:14 | xs | | file://:0:0:0:0 | [] | +| main.rs:2403:13:2403:14 | xs | | {EXTERNAL LOCATION} | [;] | | main.rs:2403:13:2403:14 | xs | [T;...] | main.rs:2354:5:2355:13 | S | | main.rs:2403:21:2403:21 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2403:26:2403:28 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2403:26:2403:28 | [...] | | {EXTERNAL LOCATION} | [;] | | main.rs:2403:26:2403:28 | [...] | [T;...] | main.rs:2354:5:2355:13 | S | | main.rs:2403:27:2403:27 | S | | main.rs:2354:5:2355:13 | S | | main.rs:2404:13:2404:13 | x | | main.rs:2354:5:2355:13 | S | -| main.rs:2404:17:2404:18 | xs | | file://:0:0:0:0 | [] | +| main.rs:2404:17:2404:18 | xs | | {EXTERNAL LOCATION} | [;] | | main.rs:2404:17:2404:18 | xs | [T;...] | main.rs:2354:5:2355:13 | S | | main.rs:2404:17:2404:21 | xs[0] | | main.rs:2354:5:2355:13 | S | | main.rs:2404:17:2404:27 | ... .foo() | | main.rs:2354:5:2355:13 | S | @@ -5161,21 +5171,21 @@ inferType | main.rs:2406:29:2406:31 | vec | | main.rs:2363:5:2366:5 | MyVec | | main.rs:2406:29:2406:31 | vec | T | main.rs:2354:5:2355:13 | S | | main.rs:2406:34:2406:34 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2408:9:2408:26 | analyze_slice(...) | | file://:0:0:0:0 | () | -| main.rs:2408:23:2408:25 | &xs | | file://:0:0:0:0 | & | -| main.rs:2408:23:2408:25 | &xs | &T | file://:0:0:0:0 | [] | +| main.rs:2408:9:2408:26 | analyze_slice(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2408:23:2408:25 | &xs | | {EXTERNAL LOCATION} | & | +| main.rs:2408:23:2408:25 | &xs | &T | {EXTERNAL LOCATION} | [;] | | main.rs:2408:23:2408:25 | &xs | &T.[T;...] | main.rs:2354:5:2355:13 | S | -| main.rs:2408:24:2408:25 | xs | | file://:0:0:0:0 | [] | +| main.rs:2408:24:2408:25 | xs | | {EXTERNAL LOCATION} | [;] | | main.rs:2408:24:2408:25 | xs | [T;...] | main.rs:2354:5:2355:13 | S | -| main.rs:2413:16:2415:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2413:16:2415:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2414:13:2414:13 | x | | {EXTERNAL LOCATION} | String | | main.rs:2414:17:2414:46 | MacroExpr | | {EXTERNAL LOCATION} | String | -| main.rs:2414:25:2414:35 | "Hello, {}" | | file://:0:0:0:0 | & | +| main.rs:2414:25:2414:35 | "Hello, {}" | | {EXTERNAL LOCATION} | & | | main.rs:2414:25:2414:35 | "Hello, {}" | &T | {EXTERNAL LOCATION} | str | | main.rs:2414:25:2414:45 | ...::format(...) | | {EXTERNAL LOCATION} | String | | main.rs:2414:25:2414:45 | ...::must_use(...) | | {EXTERNAL LOCATION} | String | | main.rs:2414:25:2414:45 | { ... } | | {EXTERNAL LOCATION} | String | -| main.rs:2414:38:2414:45 | "World!" | | file://:0:0:0:0 | & | +| main.rs:2414:38:2414:45 | "World!" | | {EXTERNAL LOCATION} | & | | main.rs:2414:38:2414:45 | "World!" | &T | {EXTERNAL LOCATION} | str | | main.rs:2423:19:2423:22 | SelfParam | | main.rs:2419:5:2424:5 | Self [trait MyAdd] | | main.rs:2423:25:2423:27 | rhs | | main.rs:2419:17:2419:26 | Rhs | @@ -5184,11 +5194,11 @@ inferType | main.rs:2430:45:2432:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:2431:13:2431:17 | value | | {EXTERNAL LOCATION} | i64 | | main.rs:2439:19:2439:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | -| main.rs:2439:25:2439:29 | value | | file://:0:0:0:0 | & | +| main.rs:2439:25:2439:29 | value | | {EXTERNAL LOCATION} | & | | main.rs:2439:25:2439:29 | value | &T | {EXTERNAL LOCATION} | i64 | | main.rs:2439:46:2441:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:2440:13:2440:18 | * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2440:14:2440:18 | value | | file://:0:0:0:0 | & | +| main.rs:2440:14:2440:18 | value | | {EXTERNAL LOCATION} | & | | main.rs:2440:14:2440:18 | value | &T | {EXTERNAL LOCATION} | i64 | | main.rs:2448:19:2448:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | | main.rs:2448:25:2448:29 | value | | {EXTERNAL LOCATION} | bool | @@ -5233,7 +5243,7 @@ inferType | main.rs:2473:31:2473:35 | other | | main.rs:2468:10:2468:17 | T | | main.rs:2484:19:2484:22 | SelfParam | | main.rs:2457:5:2457:19 | S | | main.rs:2484:19:2484:22 | SelfParam | T | main.rs:2477:14:2477:14 | T | -| main.rs:2484:25:2484:29 | other | | file://:0:0:0:0 | & | +| main.rs:2484:25:2484:29 | other | | {EXTERNAL LOCATION} | & | | main.rs:2484:25:2484:29 | other | &T | main.rs:2477:14:2477:14 | T | | main.rs:2484:55:2486:9 | { ... } | | main.rs:2457:5:2457:19 | S | | main.rs:2485:13:2485:37 | S(...) | | main.rs:2457:5:2457:19 | S | @@ -5241,7 +5251,7 @@ inferType | main.rs:2485:16:2485:19 | self | | main.rs:2457:5:2457:19 | S | | main.rs:2485:16:2485:19 | self | T | main.rs:2477:14:2477:14 | T | | main.rs:2485:16:2485:21 | self.0 | | main.rs:2477:14:2477:14 | T | -| main.rs:2485:31:2485:35 | other | | file://:0:0:0:0 | & | +| main.rs:2485:31:2485:35 | other | | {EXTERNAL LOCATION} | & | | main.rs:2485:31:2485:35 | other | &T | main.rs:2477:14:2477:14 | T | | main.rs:2491:20:2491:24 | value | | main.rs:2489:18:2489:18 | T | | main.rs:2496:20:2496:24 | value | | {EXTERNAL LOCATION} | i64 | @@ -5264,11 +5274,11 @@ inferType | main.rs:2514:31:2514:31 | x | | main.rs:2512:5:2515:5 | Self [trait MyFrom2] | | main.rs:2519:21:2519:25 | value | | {EXTERNAL LOCATION} | i64 | | main.rs:2519:33:2519:33 | _ | | {EXTERNAL LOCATION} | i64 | -| main.rs:2519:48:2521:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2519:48:2521:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2520:13:2520:17 | value | | {EXTERNAL LOCATION} | i64 | | main.rs:2526:21:2526:25 | value | | {EXTERNAL LOCATION} | bool | | main.rs:2526:34:2526:34 | _ | | {EXTERNAL LOCATION} | i64 | -| main.rs:2526:49:2532:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2526:49:2532:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2527:13:2531:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | | main.rs:2527:16:2527:20 | value | | {EXTERNAL LOCATION} | bool | | main.rs:2527:22:2529:13 | { ... } | | {EXTERNAL LOCATION} | i32 | @@ -5294,7 +5304,7 @@ inferType | main.rs:2562:15:2562:15 | x | | {EXTERNAL LOCATION} | bool | | main.rs:2562:32:2564:9 | { ... } | | {EXTERNAL LOCATION} | bool | | main.rs:2563:13:2563:13 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:2567:16:2592:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2567:16:2592:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2568:13:2568:13 | x | | {EXTERNAL LOCATION} | i64 | | main.rs:2568:22:2568:23 | 73 | | {EXTERNAL LOCATION} | i32 | | main.rs:2568:22:2568:23 | 73 | | {EXTERNAL LOCATION} | i64 | @@ -5303,7 +5313,7 @@ inferType | main.rs:2569:18:2569:21 | 5i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2570:9:2570:9 | x | | {EXTERNAL LOCATION} | i64 | | main.rs:2570:9:2570:23 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2570:18:2570:22 | &5i64 | | file://:0:0:0:0 | & | +| main.rs:2570:18:2570:22 | &5i64 | | {EXTERNAL LOCATION} | & | | main.rs:2570:18:2570:22 | &5i64 | &T | {EXTERNAL LOCATION} | i64 | | main.rs:2570:19:2570:22 | 5i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2571:9:2571:9 | x | | {EXTERNAL LOCATION} | i64 | @@ -5324,7 +5334,7 @@ inferType | main.rs:2575:9:2575:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | | main.rs:2575:9:2575:29 | ... .my_add(...) | | main.rs:2457:5:2457:19 | S | | main.rs:2575:11:2575:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2575:24:2575:28 | &3i64 | | file://:0:0:0:0 | & | +| main.rs:2575:24:2575:28 | &3i64 | | {EXTERNAL LOCATION} | & | | main.rs:2575:24:2575:28 | &3i64 | &T | {EXTERNAL LOCATION} | i64 | | main.rs:2575:25:2575:28 | 3i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2577:13:2577:13 | x | | {EXTERNAL LOCATION} | i64 | @@ -5336,13 +5346,13 @@ inferType | main.rs:2579:13:2579:13 | z | | {EXTERNAL LOCATION} | i64 | | main.rs:2579:22:2579:43 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | | main.rs:2579:38:2579:42 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2580:9:2580:34 | ...::my_from2(...) | | file://:0:0:0:0 | () | +| main.rs:2580:9:2580:34 | ...::my_from2(...) | | {EXTERNAL LOCATION} | () | | main.rs:2580:23:2580:27 | 73i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2580:30:2580:33 | 0i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2581:9:2581:33 | ...::my_from2(...) | | file://:0:0:0:0 | () | +| main.rs:2581:9:2581:33 | ...::my_from2(...) | | {EXTERNAL LOCATION} | () | | main.rs:2581:23:2581:26 | true | | {EXTERNAL LOCATION} | bool | | main.rs:2581:29:2581:32 | 0i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2582:9:2582:38 | ...::my_from2(...) | | file://:0:0:0:0 | () | +| main.rs:2582:9:2582:38 | ...::my_from2(...) | | {EXTERNAL LOCATION} | () | | main.rs:2582:27:2582:31 | 73i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2582:34:2582:37 | 0i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2584:9:2584:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | @@ -5363,46 +5373,46 @@ inferType | main.rs:2591:25:2591:28 | true | | {EXTERNAL LOCATION} | bool | | main.rs:2599:26:2601:9 | { ... } | | main.rs:2596:5:2596:24 | MyCallable | | main.rs:2600:13:2600:25 | MyCallable {...} | | main.rs:2596:5:2596:24 | MyCallable | -| main.rs:2603:17:2603:21 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2603:17:2603:21 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2603:17:2603:21 | SelfParam | &T | main.rs:2596:5:2596:24 | MyCallable | | main.rs:2603:31:2605:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:2604:13:2604:13 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2604:13:2604:13 | 1 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2608:16:2715:5 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2611:9:2611:29 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2608:16:2715:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2611:9:2611:29 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2611:13:2611:13 | i | | {EXTERNAL LOCATION} | i32 | -| main.rs:2611:18:2611:26 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2611:18:2611:26 | [...] | | {EXTERNAL LOCATION} | [;] | | main.rs:2611:18:2611:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | | main.rs:2611:19:2611:19 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2611:22:2611:22 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:2611:25:2611:25 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2611:28:2611:29 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2612:9:2612:44 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2612:18:2612:26 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2611:28:2611:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2612:9:2612:44 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2612:18:2612:26 | [...] | | {EXTERNAL LOCATION} | [;] | | main.rs:2612:18:2612:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2612:18:2612:41 | ... .map(...) | | file://:0:0:0:0 | [] | +| main.rs:2612:18:2612:41 | ... .map(...) | | {EXTERNAL LOCATION} | [;] | | main.rs:2612:19:2612:19 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2612:22:2612:22 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:2612:25:2612:25 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:2612:32:2612:40 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | -| main.rs:2612:32:2612:40 | \|...\| ... | dyn(Args) | file://:0:0:0:0 | (T_1) | +| main.rs:2612:32:2612:40 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | main.rs:2612:40:2612:40 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2612:43:2612:44 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2613:9:2613:41 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2612:43:2612:44 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2613:9:2613:41 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2613:13:2613:13 | i | | {EXTERNAL LOCATION} | Item | | main.rs:2613:13:2613:13 | i | | {EXTERNAL LOCATION} | i32 | -| main.rs:2613:18:2613:26 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2613:18:2613:26 | [...] | | {EXTERNAL LOCATION} | [;] | | main.rs:2613:18:2613:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | | main.rs:2613:18:2613:38 | ... .into_iter() | | {EXTERNAL LOCATION} | IntoIter | | main.rs:2613:18:2613:38 | ... .into_iter() | T | {EXTERNAL LOCATION} | i32 | | main.rs:2613:19:2613:19 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2613:22:2613:22 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:2613:25:2613:25 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2613:40:2613:41 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2615:13:2615:17 | vals1 | | file://:0:0:0:0 | [] | +| main.rs:2613:40:2613:41 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2615:13:2615:17 | vals1 | | {EXTERNAL LOCATION} | [;] | | main.rs:2615:13:2615:17 | vals1 | [T;...] | {EXTERNAL LOCATION} | i32 | | main.rs:2615:13:2615:17 | vals1 | [T;...] | {EXTERNAL LOCATION} | u8 | -| main.rs:2615:21:2615:31 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2615:21:2615:31 | [...] | | {EXTERNAL LOCATION} | [;] | | main.rs:2615:21:2615:31 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | | main.rs:2615:21:2615:31 | [...] | [T;...] | {EXTERNAL LOCATION} | u8 | | main.rs:2615:22:2615:24 | 1u8 | | {EXTERNAL LOCATION} | u8 | @@ -5410,28 +5420,28 @@ inferType | main.rs:2615:27:2615:27 | 2 | | {EXTERNAL LOCATION} | u8 | | main.rs:2615:30:2615:30 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:2615:30:2615:30 | 3 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2616:9:2616:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2616:9:2616:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2616:13:2616:13 | u | | {EXTERNAL LOCATION} | i32 | | main.rs:2616:13:2616:13 | u | | {EXTERNAL LOCATION} | u8 | -| main.rs:2616:18:2616:22 | vals1 | | file://:0:0:0:0 | [] | +| main.rs:2616:18:2616:22 | vals1 | | {EXTERNAL LOCATION} | [;] | | main.rs:2616:18:2616:22 | vals1 | [T;...] | {EXTERNAL LOCATION} | i32 | | main.rs:2616:18:2616:22 | vals1 | [T;...] | {EXTERNAL LOCATION} | u8 | -| main.rs:2616:24:2616:25 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2618:13:2618:17 | vals2 | | file://:0:0:0:0 | [] | +| main.rs:2616:24:2616:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2618:13:2618:17 | vals2 | | {EXTERNAL LOCATION} | [;] | | main.rs:2618:13:2618:17 | vals2 | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2618:21:2618:29 | [1u16; 3] | | file://:0:0:0:0 | [] | +| main.rs:2618:21:2618:29 | [1u16; 3] | | {EXTERNAL LOCATION} | [;] | | main.rs:2618:21:2618:29 | [1u16; 3] | [T;...] | {EXTERNAL LOCATION} | u16 | | main.rs:2618:22:2618:25 | 1u16 | | {EXTERNAL LOCATION} | u16 | | main.rs:2618:28:2618:28 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2619:9:2619:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2619:9:2619:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2619:13:2619:13 | u | | {EXTERNAL LOCATION} | u16 | -| main.rs:2619:18:2619:22 | vals2 | | file://:0:0:0:0 | [] | +| main.rs:2619:18:2619:22 | vals2 | | {EXTERNAL LOCATION} | [;] | | main.rs:2619:18:2619:22 | vals2 | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2619:24:2619:25 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2621:13:2621:17 | vals3 | | file://:0:0:0:0 | [] | +| main.rs:2619:24:2619:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2621:13:2621:17 | vals3 | | {EXTERNAL LOCATION} | [;] | | main.rs:2621:13:2621:17 | vals3 | [T;...] | {EXTERNAL LOCATION} | u32 | | main.rs:2621:26:2621:26 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2621:31:2621:39 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2621:31:2621:39 | [...] | | {EXTERNAL LOCATION} | [;] | | main.rs:2621:31:2621:39 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | | main.rs:2621:31:2621:39 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | | main.rs:2621:32:2621:32 | 1 | | {EXTERNAL LOCATION} | i32 | @@ -5440,141 +5450,141 @@ inferType | main.rs:2621:35:2621:35 | 2 | | {EXTERNAL LOCATION} | u32 | | main.rs:2621:38:2621:38 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:2621:38:2621:38 | 3 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2622:9:2622:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2622:9:2622:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2622:13:2622:13 | u | | {EXTERNAL LOCATION} | u32 | -| main.rs:2622:18:2622:22 | vals3 | | file://:0:0:0:0 | [] | +| main.rs:2622:18:2622:22 | vals3 | | {EXTERNAL LOCATION} | [;] | | main.rs:2622:18:2622:22 | vals3 | [T;...] | {EXTERNAL LOCATION} | u32 | -| main.rs:2622:24:2622:25 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2624:13:2624:17 | vals4 | | file://:0:0:0:0 | [] | +| main.rs:2622:24:2622:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2624:13:2624:17 | vals4 | | {EXTERNAL LOCATION} | [;] | | main.rs:2624:13:2624:17 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | | main.rs:2624:26:2624:26 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2624:31:2624:36 | [1; 3] | | file://:0:0:0:0 | [] | +| main.rs:2624:31:2624:36 | [1; 3] | | {EXTERNAL LOCATION} | [;] | | main.rs:2624:31:2624:36 | [1; 3] | [T;...] | {EXTERNAL LOCATION} | i32 | | main.rs:2624:31:2624:36 | [1; 3] | [T;...] | {EXTERNAL LOCATION} | u64 | | main.rs:2624:32:2624:32 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2624:32:2624:32 | 1 | | {EXTERNAL LOCATION} | u64 | | main.rs:2624:35:2624:35 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2625:9:2625:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2625:9:2625:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2625:13:2625:13 | u | | {EXTERNAL LOCATION} | u64 | -| main.rs:2625:18:2625:22 | vals4 | | file://:0:0:0:0 | [] | +| main.rs:2625:18:2625:22 | vals4 | | {EXTERNAL LOCATION} | [;] | | main.rs:2625:18:2625:22 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | -| main.rs:2625:24:2625:25 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2627:17:2627:24 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2627:17:2627:24 | strings1 | [T;...] | file://:0:0:0:0 | & | +| main.rs:2625:24:2625:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2627:17:2627:24 | strings1 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2627:17:2627:24 | strings1 | [T;...] | {EXTERNAL LOCATION} | & | | main.rs:2627:17:2627:24 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2627:28:2627:48 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2627:28:2627:48 | [...] | [T;...] | file://:0:0:0:0 | & | +| main.rs:2627:28:2627:48 | [...] | | {EXTERNAL LOCATION} | [;] | +| main.rs:2627:28:2627:48 | [...] | [T;...] | {EXTERNAL LOCATION} | & | | main.rs:2627:28:2627:48 | [...] | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2627:29:2627:33 | "foo" | | file://:0:0:0:0 | & | +| main.rs:2627:29:2627:33 | "foo" | | {EXTERNAL LOCATION} | & | | main.rs:2627:29:2627:33 | "foo" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2627:36:2627:40 | "bar" | | file://:0:0:0:0 | & | +| main.rs:2627:36:2627:40 | "bar" | | {EXTERNAL LOCATION} | & | | main.rs:2627:36:2627:40 | "bar" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2627:43:2627:47 | "baz" | | file://:0:0:0:0 | & | +| main.rs:2627:43:2627:47 | "baz" | | {EXTERNAL LOCATION} | & | | main.rs:2627:43:2627:47 | "baz" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2628:9:2628:29 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2628:9:2628:29 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2628:13:2628:13 | s | | {EXTERNAL LOCATION} | Item | -| main.rs:2628:13:2628:13 | s | | file://:0:0:0:0 | & | -| main.rs:2628:13:2628:13 | s | &T | file://:0:0:0:0 | & | +| main.rs:2628:13:2628:13 | s | | {EXTERNAL LOCATION} | & | +| main.rs:2628:13:2628:13 | s | &T | {EXTERNAL LOCATION} | & | | main.rs:2628:13:2628:13 | s | &T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2628:18:2628:26 | &strings1 | | file://:0:0:0:0 | & | -| main.rs:2628:18:2628:26 | &strings1 | &T | file://:0:0:0:0 | [] | -| main.rs:2628:18:2628:26 | &strings1 | &T.[T;...] | file://:0:0:0:0 | & | +| main.rs:2628:18:2628:26 | &strings1 | | {EXTERNAL LOCATION} | & | +| main.rs:2628:18:2628:26 | &strings1 | &T | {EXTERNAL LOCATION} | [;] | +| main.rs:2628:18:2628:26 | &strings1 | &T.[T;...] | {EXTERNAL LOCATION} | & | | main.rs:2628:18:2628:26 | &strings1 | &T.[T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2628:19:2628:26 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2628:19:2628:26 | strings1 | [T;...] | file://:0:0:0:0 | & | +| main.rs:2628:19:2628:26 | strings1 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2628:19:2628:26 | strings1 | [T;...] | {EXTERNAL LOCATION} | & | | main.rs:2628:19:2628:26 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2628:28:2628:29 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2629:9:2629:33 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2628:28:2628:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2629:9:2629:33 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2629:13:2629:13 | s | | {EXTERNAL LOCATION} | Item | -| main.rs:2629:13:2629:13 | s | | file://:0:0:0:0 | & | -| main.rs:2629:13:2629:13 | s | &T | file://:0:0:0:0 | & | +| main.rs:2629:13:2629:13 | s | | {EXTERNAL LOCATION} | & | +| main.rs:2629:13:2629:13 | s | &T | {EXTERNAL LOCATION} | & | | main.rs:2629:13:2629:13 | s | &T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2629:18:2629:30 | &mut strings1 | | file://:0:0:0:0 | & | -| main.rs:2629:18:2629:30 | &mut strings1 | &T | file://:0:0:0:0 | [] | -| main.rs:2629:18:2629:30 | &mut strings1 | &T.[T;...] | file://:0:0:0:0 | & | +| main.rs:2629:18:2629:30 | &mut strings1 | | {EXTERNAL LOCATION} | & | +| main.rs:2629:18:2629:30 | &mut strings1 | &T | {EXTERNAL LOCATION} | [;] | +| main.rs:2629:18:2629:30 | &mut strings1 | &T.[T;...] | {EXTERNAL LOCATION} | & | | main.rs:2629:18:2629:30 | &mut strings1 | &T.[T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2629:23:2629:30 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2629:23:2629:30 | strings1 | [T;...] | file://:0:0:0:0 | & | +| main.rs:2629:23:2629:30 | strings1 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2629:23:2629:30 | strings1 | [T;...] | {EXTERNAL LOCATION} | & | | main.rs:2629:23:2629:30 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2629:32:2629:33 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2630:9:2630:28 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2630:13:2630:13 | s | | file://:0:0:0:0 | & | +| main.rs:2629:32:2629:33 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2630:9:2630:28 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2630:13:2630:13 | s | | {EXTERNAL LOCATION} | & | | main.rs:2630:13:2630:13 | s | &T | {EXTERNAL LOCATION} | str | -| main.rs:2630:18:2630:25 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2630:18:2630:25 | strings1 | [T;...] | file://:0:0:0:0 | & | +| main.rs:2630:18:2630:25 | strings1 | | {EXTERNAL LOCATION} | [;] | +| main.rs:2630:18:2630:25 | strings1 | [T;...] | {EXTERNAL LOCATION} | & | | main.rs:2630:18:2630:25 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2630:27:2630:28 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2632:13:2632:20 | strings2 | | file://:0:0:0:0 | [] | +| main.rs:2630:27:2630:28 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2632:13:2632:20 | strings2 | | {EXTERNAL LOCATION} | [;] | | main.rs:2632:13:2632:20 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2633:9:2637:9 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2633:9:2637:9 | [...] | | {EXTERNAL LOCATION} | [;] | | main.rs:2633:9:2637:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | | main.rs:2634:13:2634:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2634:26:2634:30 | "foo" | | file://:0:0:0:0 | & | +| main.rs:2634:26:2634:30 | "foo" | | {EXTERNAL LOCATION} | & | | main.rs:2634:26:2634:30 | "foo" | &T | {EXTERNAL LOCATION} | str | | main.rs:2635:13:2635:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2635:26:2635:30 | "bar" | | file://:0:0:0:0 | & | +| main.rs:2635:26:2635:30 | "bar" | | {EXTERNAL LOCATION} | & | | main.rs:2635:26:2635:30 | "bar" | &T | {EXTERNAL LOCATION} | str | | main.rs:2636:13:2636:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2636:26:2636:30 | "baz" | | file://:0:0:0:0 | & | +| main.rs:2636:26:2636:30 | "baz" | | {EXTERNAL LOCATION} | & | | main.rs:2636:26:2636:30 | "baz" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2638:9:2638:28 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2638:9:2638:28 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2638:13:2638:13 | s | | {EXTERNAL LOCATION} | String | -| main.rs:2638:18:2638:25 | strings2 | | file://:0:0:0:0 | [] | +| main.rs:2638:18:2638:25 | strings2 | | {EXTERNAL LOCATION} | [;] | | main.rs:2638:18:2638:25 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2638:27:2638:28 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2640:13:2640:20 | strings3 | | file://:0:0:0:0 | & | -| main.rs:2640:13:2640:20 | strings3 | &T | file://:0:0:0:0 | [] | +| main.rs:2638:27:2638:28 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2640:13:2640:20 | strings3 | | {EXTERNAL LOCATION} | & | +| main.rs:2640:13:2640:20 | strings3 | &T | {EXTERNAL LOCATION} | [;] | | main.rs:2640:13:2640:20 | strings3 | &T.[T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2641:9:2645:9 | &... | | file://:0:0:0:0 | & | -| main.rs:2641:9:2645:9 | &... | &T | file://:0:0:0:0 | [] | +| main.rs:2641:9:2645:9 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:2641:9:2645:9 | &... | &T | {EXTERNAL LOCATION} | [;] | | main.rs:2641:9:2645:9 | &... | &T.[T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2641:10:2645:9 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2641:10:2645:9 | [...] | | {EXTERNAL LOCATION} | [;] | | main.rs:2641:10:2645:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | | main.rs:2642:13:2642:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2642:26:2642:30 | "foo" | | file://:0:0:0:0 | & | +| main.rs:2642:26:2642:30 | "foo" | | {EXTERNAL LOCATION} | & | | main.rs:2642:26:2642:30 | "foo" | &T | {EXTERNAL LOCATION} | str | | main.rs:2643:13:2643:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2643:26:2643:30 | "bar" | | file://:0:0:0:0 | & | +| main.rs:2643:26:2643:30 | "bar" | | {EXTERNAL LOCATION} | & | | main.rs:2643:26:2643:30 | "bar" | &T | {EXTERNAL LOCATION} | str | | main.rs:2644:13:2644:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2644:26:2644:30 | "baz" | | file://:0:0:0:0 | & | +| main.rs:2644:26:2644:30 | "baz" | | {EXTERNAL LOCATION} | & | | main.rs:2644:26:2644:30 | "baz" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2646:9:2646:28 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2646:9:2646:28 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2646:13:2646:13 | s | | {EXTERNAL LOCATION} | Item | -| main.rs:2646:13:2646:13 | s | | file://:0:0:0:0 | & | +| main.rs:2646:13:2646:13 | s | | {EXTERNAL LOCATION} | & | | main.rs:2646:13:2646:13 | s | &T | {EXTERNAL LOCATION} | String | -| main.rs:2646:18:2646:25 | strings3 | | file://:0:0:0:0 | & | -| main.rs:2646:18:2646:25 | strings3 | &T | file://:0:0:0:0 | [] | +| main.rs:2646:18:2646:25 | strings3 | | {EXTERNAL LOCATION} | & | +| main.rs:2646:18:2646:25 | strings3 | &T | {EXTERNAL LOCATION} | [;] | | main.rs:2646:18:2646:25 | strings3 | &T.[T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2646:27:2646:28 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2648:13:2648:21 | callables | | file://:0:0:0:0 | [] | +| main.rs:2646:27:2646:28 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2648:13:2648:21 | callables | | {EXTERNAL LOCATION} | [;] | | main.rs:2648:13:2648:21 | callables | [T;...] | main.rs:2596:5:2596:24 | MyCallable | -| main.rs:2648:25:2648:81 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2648:25:2648:81 | [...] | | {EXTERNAL LOCATION} | [;] | | main.rs:2648:25:2648:81 | [...] | [T;...] | main.rs:2596:5:2596:24 | MyCallable | | main.rs:2648:26:2648:42 | ...::new(...) | | main.rs:2596:5:2596:24 | MyCallable | | main.rs:2648:45:2648:61 | ...::new(...) | | main.rs:2596:5:2596:24 | MyCallable | | main.rs:2648:64:2648:80 | ...::new(...) | | main.rs:2596:5:2596:24 | MyCallable | -| main.rs:2649:9:2653:9 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2649:9:2653:9 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2649:13:2649:13 | c | | main.rs:2596:5:2596:24 | MyCallable | -| main.rs:2650:12:2650:20 | callables | | file://:0:0:0:0 | [] | +| main.rs:2650:12:2650:20 | callables | | {EXTERNAL LOCATION} | [;] | | main.rs:2650:12:2650:20 | callables | [T;...] | main.rs:2596:5:2596:24 | MyCallable | -| main.rs:2651:9:2653:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2651:9:2653:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2652:17:2652:22 | result | | {EXTERNAL LOCATION} | i64 | | main.rs:2652:26:2652:26 | c | | main.rs:2596:5:2596:24 | MyCallable | | main.rs:2652:26:2652:33 | c.call() | | {EXTERNAL LOCATION} | i64 | -| main.rs:2657:9:2657:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2657:9:2657:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2657:13:2657:13 | i | | {EXTERNAL LOCATION} | Item | | main.rs:2657:13:2657:13 | i | | {EXTERNAL LOCATION} | i32 | | main.rs:2657:18:2657:18 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:2657:18:2657:22 | 0..10 | | {EXTERNAL LOCATION} | Range | | main.rs:2657:18:2657:22 | 0..10 | Idx | {EXTERNAL LOCATION} | i32 | | main.rs:2657:21:2657:22 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2657:24:2657:25 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2658:9:2658:29 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2657:24:2657:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2658:9:2658:29 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2658:13:2658:13 | u | | {EXTERNAL LOCATION} | Range | | main.rs:2658:13:2658:13 | u | Idx | {EXTERNAL LOCATION} | i32 | | main.rs:2658:13:2658:13 | u | Idx | {EXTERNAL LOCATION} | u8 | -| main.rs:2658:18:2658:26 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2658:18:2658:26 | [...] | | {EXTERNAL LOCATION} | [;] | | main.rs:2658:18:2658:26 | [...] | [T;...] | {EXTERNAL LOCATION} | Range | | main.rs:2658:18:2658:26 | [...] | [T;...].Idx | {EXTERNAL LOCATION} | i32 | | main.rs:2658:18:2658:26 | [...] | [T;...].Idx | {EXTERNAL LOCATION} | u8 | @@ -5584,52 +5594,55 @@ inferType | main.rs:2658:19:2658:25 | 0u8..10 | Idx | {EXTERNAL LOCATION} | u8 | | main.rs:2658:24:2658:25 | 10 | | {EXTERNAL LOCATION} | i32 | | main.rs:2658:24:2658:25 | 10 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2658:28:2658:29 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2658:28:2658:29 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2659:13:2659:17 | range | | {EXTERNAL LOCATION} | Range | | main.rs:2659:13:2659:17 | range | Idx | {EXTERNAL LOCATION} | i32 | | main.rs:2659:21:2659:21 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:2659:21:2659:25 | 0..10 | | {EXTERNAL LOCATION} | Range | | main.rs:2659:21:2659:25 | 0..10 | Idx | {EXTERNAL LOCATION} | i32 | | main.rs:2659:24:2659:25 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2660:9:2660:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2660:9:2660:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2660:13:2660:13 | i | | {EXTERNAL LOCATION} | Item | | main.rs:2660:13:2660:13 | i | | {EXTERNAL LOCATION} | i32 | | main.rs:2660:18:2660:22 | range | | {EXTERNAL LOCATION} | Range | | main.rs:2660:18:2660:22 | range | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2660:24:2660:25 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2660:24:2660:25 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2661:13:2661:22 | range_full | | {EXTERNAL LOCATION} | RangeFull | | main.rs:2661:26:2661:27 | .. | | {EXTERNAL LOCATION} | RangeFull | -| main.rs:2662:9:2662:51 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2662:9:2662:51 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2662:13:2662:13 | i | | {EXTERNAL LOCATION} | Item | -| main.rs:2662:18:2662:48 | &... | | file://:0:0:0:0 | & | -| main.rs:2662:19:2662:36 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2662:18:2662:48 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:2662:19:2662:36 | [...] | | {EXTERNAL LOCATION} | [;] | | main.rs:2662:19:2662:36 | [...] | [T;...] | {EXTERNAL LOCATION} | i64 | | main.rs:2662:20:2662:23 | 1i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2662:26:2662:29 | 2i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2662:32:2662:35 | 3i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2662:38:2662:47 | range_full | | {EXTERNAL LOCATION} | RangeFull | -| main.rs:2662:50:2662:51 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2662:50:2662:51 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2664:13:2664:18 | range1 | | {EXTERNAL LOCATION} | Range | | main.rs:2664:13:2664:18 | range1 | Idx | {EXTERNAL LOCATION} | u16 | | main.rs:2665:9:2668:9 | ...::Range {...} | | {EXTERNAL LOCATION} | Range | | main.rs:2665:9:2668:9 | ...::Range {...} | Idx | {EXTERNAL LOCATION} | u16 | | main.rs:2666:20:2666:23 | 0u16 | | {EXTERNAL LOCATION} | u16 | | main.rs:2667:18:2667:22 | 10u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2669:9:2669:26 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2669:9:2669:26 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2669:13:2669:13 | u | | {EXTERNAL LOCATION} | Item | | main.rs:2669:13:2669:13 | u | | {EXTERNAL LOCATION} | u16 | | main.rs:2669:18:2669:23 | range1 | | {EXTERNAL LOCATION} | Range | | main.rs:2669:18:2669:23 | range1 | Idx | {EXTERNAL LOCATION} | u16 | -| main.rs:2669:25:2669:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2669:25:2669:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2673:13:2673:17 | vals3 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2673:21:2673:33 | MacroExpr | | {EXTERNAL LOCATION} | Vec | | main.rs:2673:26:2673:26 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2673:29:2673:29 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:2673:32:2673:32 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2674:9:2674:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2674:24:2674:25 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2674:9:2674:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2674:18:2674:22 | vals3 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2674:24:2674:25 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2676:13:2676:18 | vals4a | | {EXTERNAL LOCATION} | Vec | | main.rs:2676:13:2676:18 | vals4a | A | {EXTERNAL LOCATION} | Global | | main.rs:2676:13:2676:18 | vals4a | T | {EXTERNAL LOCATION} | u16 | -| main.rs:2676:32:2676:43 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2676:32:2676:43 | [...] | | {EXTERNAL LOCATION} | [;] | | main.rs:2676:32:2676:43 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | | main.rs:2676:32:2676:43 | [...] | [T;...] | {EXTERNAL LOCATION} | u16 | | main.rs:2676:32:2676:52 | ... .to_vec() | | {EXTERNAL LOCATION} | Vec | @@ -5638,20 +5651,20 @@ inferType | main.rs:2676:33:2676:36 | 1u16 | | {EXTERNAL LOCATION} | u16 | | main.rs:2676:39:2676:39 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:2676:42:2676:42 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2677:9:2677:26 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2677:9:2677:26 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2677:13:2677:13 | u | | {EXTERNAL LOCATION} | u16 | | main.rs:2677:18:2677:23 | vals4a | | {EXTERNAL LOCATION} | Vec | | main.rs:2677:18:2677:23 | vals4a | A | {EXTERNAL LOCATION} | Global | | main.rs:2677:18:2677:23 | vals4a | T | {EXTERNAL LOCATION} | u16 | -| main.rs:2677:25:2677:26 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2679:22:2679:33 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2677:25:2677:26 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2679:22:2679:33 | [...] | | {EXTERNAL LOCATION} | [;] | | main.rs:2679:22:2679:33 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | | main.rs:2679:22:2679:33 | [...] | [T;...] | {EXTERNAL LOCATION} | u16 | | main.rs:2679:23:2679:26 | 1u16 | | {EXTERNAL LOCATION} | u16 | | main.rs:2679:29:2679:29 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:2679:32:2679:32 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2680:9:2680:26 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2680:25:2680:26 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2680:9:2680:26 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2680:25:2680:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2682:13:2682:17 | vals5 | | {EXTERNAL LOCATION} | Vec | | main.rs:2682:13:2682:17 | vals5 | A | {EXTERNAL LOCATION} | Global | | main.rs:2682:13:2682:17 | vals5 | T | {EXTERNAL LOCATION} | i32 | @@ -5660,42 +5673,42 @@ inferType | main.rs:2682:21:2682:43 | ...::from(...) | A | {EXTERNAL LOCATION} | Global | | main.rs:2682:21:2682:43 | ...::from(...) | T | {EXTERNAL LOCATION} | i32 | | main.rs:2682:21:2682:43 | ...::from(...) | T | {EXTERNAL LOCATION} | u32 | -| main.rs:2682:31:2682:42 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2682:31:2682:42 | [...] | | {EXTERNAL LOCATION} | [;] | | main.rs:2682:31:2682:42 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | | main.rs:2682:31:2682:42 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | | main.rs:2682:32:2682:35 | 1u32 | | {EXTERNAL LOCATION} | u32 | | main.rs:2682:38:2682:38 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:2682:41:2682:41 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2683:9:2683:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2683:9:2683:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2683:13:2683:13 | u | | {EXTERNAL LOCATION} | i32 | | main.rs:2683:13:2683:13 | u | | {EXTERNAL LOCATION} | u32 | | main.rs:2683:18:2683:22 | vals5 | | {EXTERNAL LOCATION} | Vec | | main.rs:2683:18:2683:22 | vals5 | A | {EXTERNAL LOCATION} | Global | | main.rs:2683:18:2683:22 | vals5 | T | {EXTERNAL LOCATION} | i32 | | main.rs:2683:18:2683:22 | vals5 | T | {EXTERNAL LOCATION} | u32 | -| main.rs:2683:24:2683:25 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2683:24:2683:25 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2685:13:2685:17 | vals6 | | {EXTERNAL LOCATION} | Vec | | main.rs:2685:13:2685:17 | vals6 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2685:13:2685:17 | vals6 | T | file://:0:0:0:0 | & | +| main.rs:2685:13:2685:17 | vals6 | T | {EXTERNAL LOCATION} | & | | main.rs:2685:13:2685:17 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 | -| main.rs:2685:32:2685:43 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2685:32:2685:43 | [...] | | {EXTERNAL LOCATION} | [;] | | main.rs:2685:32:2685:43 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | | main.rs:2685:32:2685:43 | [...] | [T;...] | {EXTERNAL LOCATION} | u64 | | main.rs:2685:32:2685:60 | ... .collect() | | {EXTERNAL LOCATION} | Vec | | main.rs:2685:32:2685:60 | ... .collect() | A | {EXTERNAL LOCATION} | Global | -| main.rs:2685:32:2685:60 | ... .collect() | T | file://:0:0:0:0 | & | +| main.rs:2685:32:2685:60 | ... .collect() | T | {EXTERNAL LOCATION} | & | | main.rs:2685:32:2685:60 | ... .collect() | T.&T | {EXTERNAL LOCATION} | u64 | | main.rs:2685:33:2685:36 | 1u64 | | {EXTERNAL LOCATION} | u64 | | main.rs:2685:39:2685:39 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:2685:42:2685:42 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2686:9:2686:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2686:13:2686:13 | u | | file://:0:0:0:0 | & | +| main.rs:2686:9:2686:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2686:13:2686:13 | u | | {EXTERNAL LOCATION} | & | | main.rs:2686:13:2686:13 | u | &T | {EXTERNAL LOCATION} | u64 | | main.rs:2686:18:2686:22 | vals6 | | {EXTERNAL LOCATION} | Vec | | main.rs:2686:18:2686:22 | vals6 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2686:18:2686:22 | vals6 | T | file://:0:0:0:0 | & | +| main.rs:2686:18:2686:22 | vals6 | T | {EXTERNAL LOCATION} | & | | main.rs:2686:18:2686:22 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 | -| main.rs:2686:24:2686:25 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2686:24:2686:25 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2688:17:2688:21 | vals7 | | {EXTERNAL LOCATION} | Vec | | main.rs:2688:17:2688:21 | vals7 | A | {EXTERNAL LOCATION} | Global | | main.rs:2688:17:2688:21 | vals7 | T | {EXTERNAL LOCATION} | u8 | @@ -5705,187 +5718,194 @@ inferType | main.rs:2689:9:2689:13 | vals7 | | {EXTERNAL LOCATION} | Vec | | main.rs:2689:9:2689:13 | vals7 | A | {EXTERNAL LOCATION} | Global | | main.rs:2689:9:2689:13 | vals7 | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2689:9:2689:23 | vals7.push(...) | | file://:0:0:0:0 | () | +| main.rs:2689:9:2689:23 | vals7.push(...) | | {EXTERNAL LOCATION} | () | | main.rs:2689:20:2689:22 | 1u8 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2690:9:2690:25 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2690:9:2690:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2690:13:2690:13 | u | | {EXTERNAL LOCATION} | u8 | | main.rs:2690:18:2690:22 | vals7 | | {EXTERNAL LOCATION} | Vec | | main.rs:2690:18:2690:22 | vals7 | A | {EXTERNAL LOCATION} | Global | | main.rs:2690:18:2690:22 | vals7 | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2690:24:2690:25 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2690:24:2690:25 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2692:13:2692:19 | matrix1 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2692:23:2692:50 | MacroExpr | | {EXTERNAL LOCATION} | Vec | +| main.rs:2692:28:2692:37 | (...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2692:28:2692:37 | MacroExpr | | {EXTERNAL LOCATION} | Vec | | main.rs:2692:33:2692:33 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2692:36:2692:36 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2692:40:2692:49 | (...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2692:40:2692:49 | MacroExpr | | {EXTERNAL LOCATION} | Vec | | main.rs:2692:45:2692:45 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:2692:48:2692:48 | 4 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2694:13:2694:13 | _ | | file://:0:0:0:0 | () | -| main.rs:2694:17:2697:9 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2694:36:2697:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2695:13:2696:13 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2695:29:2696:13 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2694:13:2694:13 | _ | | {EXTERNAL LOCATION} | () | +| main.rs:2694:17:2697:9 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2694:28:2694:34 | matrix1 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2694:36:2697:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2695:13:2696:13 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2695:29:2696:13 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2699:17:2699:20 | map1 | | {EXTERNAL LOCATION} | HashMap | | main.rs:2699:17:2699:20 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2699:17:2699:20 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2699:17:2699:20 | map1 | V | {EXTERNAL LOCATION} | Box | | main.rs:2699:17:2699:20 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2699:17:2699:20 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2699:17:2699:20 | map1 | V.T | {EXTERNAL LOCATION} | & | | main.rs:2699:17:2699:20 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | | main.rs:2699:24:2699:55 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | | main.rs:2699:24:2699:55 | ...::new(...) | K | {EXTERNAL LOCATION} | i32 | | main.rs:2699:24:2699:55 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2699:24:2699:55 | ...::new(...) | V | {EXTERNAL LOCATION} | Box | | main.rs:2699:24:2699:55 | ...::new(...) | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2699:24:2699:55 | ...::new(...) | V.T | file://:0:0:0:0 | & | +| main.rs:2699:24:2699:55 | ...::new(...) | V.T | {EXTERNAL LOCATION} | & | | main.rs:2699:24:2699:55 | ...::new(...) | V.T.&T | {EXTERNAL LOCATION} | str | | main.rs:2700:9:2700:12 | map1 | | {EXTERNAL LOCATION} | HashMap | | main.rs:2700:9:2700:12 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2700:9:2700:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2700:9:2700:12 | map1 | V | {EXTERNAL LOCATION} | Box | | main.rs:2700:9:2700:12 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2700:9:2700:12 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2700:9:2700:12 | map1 | V.T | {EXTERNAL LOCATION} | & | | main.rs:2700:9:2700:12 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | | main.rs:2700:9:2700:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | | main.rs:2700:9:2700:39 | map1.insert(...) | T | {EXTERNAL LOCATION} | Box | | main.rs:2700:9:2700:39 | map1.insert(...) | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2700:9:2700:39 | map1.insert(...) | T.T | file://:0:0:0:0 | & | +| main.rs:2700:9:2700:39 | map1.insert(...) | T.T | {EXTERNAL LOCATION} | & | | main.rs:2700:9:2700:39 | map1.insert(...) | T.T.&T | {EXTERNAL LOCATION} | str | | main.rs:2700:21:2700:21 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2700:24:2700:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | | main.rs:2700:24:2700:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2700:24:2700:38 | ...::new(...) | T | file://:0:0:0:0 | & | +| main.rs:2700:24:2700:38 | ...::new(...) | T | {EXTERNAL LOCATION} | & | | main.rs:2700:24:2700:38 | ...::new(...) | T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2700:33:2700:37 | "one" | | file://:0:0:0:0 | & | +| main.rs:2700:33:2700:37 | "one" | | {EXTERNAL LOCATION} | & | | main.rs:2700:33:2700:37 | "one" | &T | {EXTERNAL LOCATION} | str | | main.rs:2701:9:2701:12 | map1 | | {EXTERNAL LOCATION} | HashMap | | main.rs:2701:9:2701:12 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2701:9:2701:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2701:9:2701:12 | map1 | V | {EXTERNAL LOCATION} | Box | | main.rs:2701:9:2701:12 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2701:9:2701:12 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2701:9:2701:12 | map1 | V.T | {EXTERNAL LOCATION} | & | | main.rs:2701:9:2701:12 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | | main.rs:2701:9:2701:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | | main.rs:2701:9:2701:39 | map1.insert(...) | T | {EXTERNAL LOCATION} | Box | | main.rs:2701:9:2701:39 | map1.insert(...) | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2701:9:2701:39 | map1.insert(...) | T.T | file://:0:0:0:0 | & | +| main.rs:2701:9:2701:39 | map1.insert(...) | T.T | {EXTERNAL LOCATION} | & | | main.rs:2701:9:2701:39 | map1.insert(...) | T.T.&T | {EXTERNAL LOCATION} | str | | main.rs:2701:21:2701:21 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:2701:24:2701:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | | main.rs:2701:24:2701:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2701:24:2701:38 | ...::new(...) | T | file://:0:0:0:0 | & | +| main.rs:2701:24:2701:38 | ...::new(...) | T | {EXTERNAL LOCATION} | & | | main.rs:2701:24:2701:38 | ...::new(...) | T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2701:33:2701:37 | "two" | | file://:0:0:0:0 | & | +| main.rs:2701:33:2701:37 | "two" | | {EXTERNAL LOCATION} | & | | main.rs:2701:33:2701:37 | "two" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2702:9:2702:33 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2702:9:2702:33 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2702:13:2702:15 | key | | {EXTERNAL LOCATION} | Item | -| main.rs:2702:13:2702:15 | key | | file://:0:0:0:0 | & | +| main.rs:2702:13:2702:15 | key | | {EXTERNAL LOCATION} | & | | main.rs:2702:13:2702:15 | key | &T | {EXTERNAL LOCATION} | i32 | | main.rs:2702:20:2702:23 | map1 | | {EXTERNAL LOCATION} | HashMap | | main.rs:2702:20:2702:23 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2702:20:2702:23 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2702:20:2702:23 | map1 | V | {EXTERNAL LOCATION} | Box | | main.rs:2702:20:2702:23 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2702:20:2702:23 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2702:20:2702:23 | map1 | V.T | {EXTERNAL LOCATION} | & | | main.rs:2702:20:2702:23 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | | main.rs:2702:20:2702:30 | map1.keys() | | {EXTERNAL LOCATION} | Keys | | main.rs:2702:20:2702:30 | map1.keys() | K | {EXTERNAL LOCATION} | i32 | | main.rs:2702:20:2702:30 | map1.keys() | V | {EXTERNAL LOCATION} | Box | | main.rs:2702:20:2702:30 | map1.keys() | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2702:20:2702:30 | map1.keys() | V.T | file://:0:0:0:0 | & | +| main.rs:2702:20:2702:30 | map1.keys() | V.T | {EXTERNAL LOCATION} | & | | main.rs:2702:20:2702:30 | map1.keys() | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2702:32:2702:33 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2703:9:2703:37 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2702:32:2702:33 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2703:9:2703:37 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2703:13:2703:17 | value | | {EXTERNAL LOCATION} | Item | -| main.rs:2703:13:2703:17 | value | | file://:0:0:0:0 | & | +| main.rs:2703:13:2703:17 | value | | {EXTERNAL LOCATION} | & | | main.rs:2703:13:2703:17 | value | &T | {EXTERNAL LOCATION} | Box | | main.rs:2703:13:2703:17 | value | &T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2703:13:2703:17 | value | &T.T | file://:0:0:0:0 | & | +| main.rs:2703:13:2703:17 | value | &T.T | {EXTERNAL LOCATION} | & | | main.rs:2703:13:2703:17 | value | &T.T.&T | {EXTERNAL LOCATION} | str | | main.rs:2703:22:2703:25 | map1 | | {EXTERNAL LOCATION} | HashMap | | main.rs:2703:22:2703:25 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2703:22:2703:25 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2703:22:2703:25 | map1 | V | {EXTERNAL LOCATION} | Box | | main.rs:2703:22:2703:25 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2703:22:2703:25 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2703:22:2703:25 | map1 | V.T | {EXTERNAL LOCATION} | & | | main.rs:2703:22:2703:25 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | | main.rs:2703:22:2703:34 | map1.values() | | {EXTERNAL LOCATION} | Values | | main.rs:2703:22:2703:34 | map1.values() | K | {EXTERNAL LOCATION} | i32 | | main.rs:2703:22:2703:34 | map1.values() | V | {EXTERNAL LOCATION} | Box | | main.rs:2703:22:2703:34 | map1.values() | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2703:22:2703:34 | map1.values() | V.T | file://:0:0:0:0 | & | +| main.rs:2703:22:2703:34 | map1.values() | V.T | {EXTERNAL LOCATION} | & | | main.rs:2703:22:2703:34 | map1.values() | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2703:36:2703:37 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2704:9:2704:42 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2704:13:2704:24 | TuplePat | | file://:0:0:0:0 | (T_2) | -| main.rs:2704:13:2704:24 | TuplePat | 0(2) | file://:0:0:0:0 | & | +| main.rs:2703:36:2703:37 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2704:9:2704:42 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2704:13:2704:24 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2704:13:2704:24 | TuplePat | 0(2) | {EXTERNAL LOCATION} | & | | main.rs:2704:13:2704:24 | TuplePat | 0(2).&T | {EXTERNAL LOCATION} | i32 | -| main.rs:2704:13:2704:24 | TuplePat | 1(2) | file://:0:0:0:0 | & | +| main.rs:2704:13:2704:24 | TuplePat | 1(2) | {EXTERNAL LOCATION} | & | | main.rs:2704:13:2704:24 | TuplePat | 1(2).&T | {EXTERNAL LOCATION} | Box | | main.rs:2704:13:2704:24 | TuplePat | 1(2).&T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2704:13:2704:24 | TuplePat | 1(2).&T.T | file://:0:0:0:0 | & | +| main.rs:2704:13:2704:24 | TuplePat | 1(2).&T.T | {EXTERNAL LOCATION} | & | | main.rs:2704:13:2704:24 | TuplePat | 1(2).&T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2704:14:2704:16 | key | | file://:0:0:0:0 | & | +| main.rs:2704:14:2704:16 | key | | {EXTERNAL LOCATION} | & | | main.rs:2704:14:2704:16 | key | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:2704:19:2704:23 | value | | file://:0:0:0:0 | & | +| main.rs:2704:19:2704:23 | value | | {EXTERNAL LOCATION} | & | | main.rs:2704:19:2704:23 | value | &T | {EXTERNAL LOCATION} | Box | | main.rs:2704:19:2704:23 | value | &T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2704:19:2704:23 | value | &T.T | file://:0:0:0:0 | & | +| main.rs:2704:19:2704:23 | value | &T.T | {EXTERNAL LOCATION} | & | | main.rs:2704:19:2704:23 | value | &T.T.&T | {EXTERNAL LOCATION} | str | | main.rs:2704:29:2704:32 | map1 | | {EXTERNAL LOCATION} | HashMap | | main.rs:2704:29:2704:32 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2704:29:2704:32 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2704:29:2704:32 | map1 | V | {EXTERNAL LOCATION} | Box | | main.rs:2704:29:2704:32 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2704:29:2704:32 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2704:29:2704:32 | map1 | V.T | {EXTERNAL LOCATION} | & | | main.rs:2704:29:2704:32 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | | main.rs:2704:29:2704:39 | map1.iter() | | {EXTERNAL LOCATION} | Iter | | main.rs:2704:29:2704:39 | map1.iter() | K | {EXTERNAL LOCATION} | i32 | | main.rs:2704:29:2704:39 | map1.iter() | V | {EXTERNAL LOCATION} | Box | | main.rs:2704:29:2704:39 | map1.iter() | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2704:29:2704:39 | map1.iter() | V.T | file://:0:0:0:0 | & | +| main.rs:2704:29:2704:39 | map1.iter() | V.T | {EXTERNAL LOCATION} | & | | main.rs:2704:29:2704:39 | map1.iter() | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2704:41:2704:42 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2705:9:2705:36 | for ... in ... { ... } | | file://:0:0:0:0 | () | -| main.rs:2705:13:2705:24 | TuplePat | | file://:0:0:0:0 | (T_2) | -| main.rs:2705:13:2705:24 | TuplePat | 0(2) | file://:0:0:0:0 | & | +| main.rs:2704:41:2704:42 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2705:9:2705:36 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2705:13:2705:24 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2705:13:2705:24 | TuplePat | 0(2) | {EXTERNAL LOCATION} | & | | main.rs:2705:13:2705:24 | TuplePat | 0(2).&T | {EXTERNAL LOCATION} | i32 | -| main.rs:2705:13:2705:24 | TuplePat | 1(2) | file://:0:0:0:0 | & | +| main.rs:2705:13:2705:24 | TuplePat | 1(2) | {EXTERNAL LOCATION} | & | | main.rs:2705:13:2705:24 | TuplePat | 1(2).&T | {EXTERNAL LOCATION} | Box | | main.rs:2705:13:2705:24 | TuplePat | 1(2).&T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2705:13:2705:24 | TuplePat | 1(2).&T.T | file://:0:0:0:0 | & | +| main.rs:2705:13:2705:24 | TuplePat | 1(2).&T.T | {EXTERNAL LOCATION} | & | | main.rs:2705:13:2705:24 | TuplePat | 1(2).&T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2705:14:2705:16 | key | | file://:0:0:0:0 | & | +| main.rs:2705:14:2705:16 | key | | {EXTERNAL LOCATION} | & | | main.rs:2705:14:2705:16 | key | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:2705:19:2705:23 | value | | file://:0:0:0:0 | & | +| main.rs:2705:19:2705:23 | value | | {EXTERNAL LOCATION} | & | | main.rs:2705:19:2705:23 | value | &T | {EXTERNAL LOCATION} | Box | | main.rs:2705:19:2705:23 | value | &T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2705:19:2705:23 | value | &T.T | file://:0:0:0:0 | & | +| main.rs:2705:19:2705:23 | value | &T.T | {EXTERNAL LOCATION} | & | | main.rs:2705:19:2705:23 | value | &T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2705:29:2705:33 | &map1 | | file://:0:0:0:0 | & | +| main.rs:2705:29:2705:33 | &map1 | | {EXTERNAL LOCATION} | & | | main.rs:2705:29:2705:33 | &map1 | &T | {EXTERNAL LOCATION} | HashMap | | main.rs:2705:29:2705:33 | &map1 | &T.K | {EXTERNAL LOCATION} | i32 | | main.rs:2705:29:2705:33 | &map1 | &T.S | {EXTERNAL LOCATION} | RandomState | | main.rs:2705:29:2705:33 | &map1 | &T.V | {EXTERNAL LOCATION} | Box | | main.rs:2705:29:2705:33 | &map1 | &T.V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2705:29:2705:33 | &map1 | &T.V.T | file://:0:0:0:0 | & | +| main.rs:2705:29:2705:33 | &map1 | &T.V.T | {EXTERNAL LOCATION} | & | | main.rs:2705:29:2705:33 | &map1 | &T.V.T.&T | {EXTERNAL LOCATION} | str | | main.rs:2705:30:2705:33 | map1 | | {EXTERNAL LOCATION} | HashMap | | main.rs:2705:30:2705:33 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2705:30:2705:33 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2705:30:2705:33 | map1 | V | {EXTERNAL LOCATION} | Box | | main.rs:2705:30:2705:33 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2705:30:2705:33 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2705:30:2705:33 | map1 | V.T | {EXTERNAL LOCATION} | & | | main.rs:2705:30:2705:33 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2705:35:2705:36 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2705:35:2705:36 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2709:17:2709:17 | a | | {EXTERNAL LOCATION} | i64 | | main.rs:2709:26:2709:26 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:2709:26:2709:26 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2711:13:2711:13 | _ | | file://:0:0:0:0 | () | -| main.rs:2711:17:2714:9 | while ... { ... } | | file://:0:0:0:0 | () | +| main.rs:2711:13:2711:13 | _ | | {EXTERNAL LOCATION} | () | +| main.rs:2711:17:2714:9 | while ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2711:23:2711:23 | a | | {EXTERNAL LOCATION} | i64 | | main.rs:2711:23:2711:28 | ... < ... | | {EXTERNAL LOCATION} | bool | | main.rs:2711:27:2711:28 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2712:9:2714:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2712:9:2714:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2713:13:2713:13 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2713:13:2713:18 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:2713:13:2713:18 | ... += ... | | {EXTERNAL LOCATION} | () | | main.rs:2713:18:2713:18 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2725:40:2727:9 | { ... } | | {EXTERNAL LOCATION} | Option | | main.rs:2725:40:2727:9 | { ... } | T | main.rs:2719:5:2719:20 | S1 | @@ -5907,7 +5927,7 @@ inferType | main.rs:2746:15:2746:15 | x | | main.rs:2746:12:2746:12 | T | | main.rs:2746:26:2748:5 | { ... } | | main.rs:2746:12:2746:12 | T | | main.rs:2747:9:2747:9 | x | | main.rs:2746:12:2746:12 | T | -| main.rs:2750:16:2772:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2750:16:2772:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2751:13:2751:14 | x1 | | {EXTERNAL LOCATION} | Option | | main.rs:2751:13:2751:14 | x1 | T | main.rs:2719:5:2719:20 | S1 | | main.rs:2751:13:2751:14 | x1 | T.T | main.rs:2721:5:2722:14 | S2 | @@ -5985,152 +6005,152 @@ inferType | main.rs:2771:13:2771:15 | x15 | T | main.rs:2721:5:2722:14 | S2 | | main.rs:2771:19:2771:37 | ...::default(...) | | main.rs:2719:5:2719:20 | S1 | | main.rs:2771:19:2771:37 | ...::default(...) | T | main.rs:2721:5:2722:14 | S2 | -| main.rs:2780:35:2782:9 | { ... } | | file://:0:0:0:0 | (T_2) | +| main.rs:2780:35:2782:9 | { ... } | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2780:35:2782:9 | { ... } | 0(2) | main.rs:2776:5:2777:16 | S1 | | main.rs:2780:35:2782:9 | { ... } | 1(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2781:13:2781:26 | TupleExpr | | file://:0:0:0:0 | (T_2) | +| main.rs:2781:13:2781:26 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2781:13:2781:26 | TupleExpr | 0(2) | main.rs:2776:5:2777:16 | S1 | | main.rs:2781:13:2781:26 | TupleExpr | 1(2) | main.rs:2776:5:2777:16 | S1 | | main.rs:2781:14:2781:18 | S1 {...} | | main.rs:2776:5:2777:16 | S1 | | main.rs:2781:21:2781:25 | S1 {...} | | main.rs:2776:5:2777:16 | S1 | | main.rs:2783:16:2783:19 | SelfParam | | main.rs:2776:5:2777:16 | S1 | -| main.rs:2783:22:2783:23 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2786:16:2820:5 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2787:13:2787:13 | a | | file://:0:0:0:0 | (T_2) | +| main.rs:2783:22:2783:23 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2786:16:2820:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2787:13:2787:13 | a | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2787:13:2787:13 | a | 0(2) | main.rs:2776:5:2777:16 | S1 | | main.rs:2787:13:2787:13 | a | 1(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2787:17:2787:30 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2787:17:2787:30 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2787:17:2787:30 | ...::get_pair(...) | 0(2) | main.rs:2776:5:2777:16 | S1 | | main.rs:2787:17:2787:30 | ...::get_pair(...) | 1(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2788:17:2788:17 | b | | file://:0:0:0:0 | (T_2) | +| main.rs:2788:17:2788:17 | b | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2788:17:2788:17 | b | 0(2) | main.rs:2776:5:2777:16 | S1 | | main.rs:2788:17:2788:17 | b | 1(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2788:21:2788:34 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2788:21:2788:34 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2788:21:2788:34 | ...::get_pair(...) | 0(2) | main.rs:2776:5:2777:16 | S1 | | main.rs:2788:21:2788:34 | ...::get_pair(...) | 1(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2789:13:2789:18 | TuplePat | | file://:0:0:0:0 | (T_2) | +| main.rs:2789:13:2789:18 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2789:13:2789:18 | TuplePat | 0(2) | main.rs:2776:5:2777:16 | S1 | | main.rs:2789:13:2789:18 | TuplePat | 1(2) | main.rs:2776:5:2777:16 | S1 | | main.rs:2789:14:2789:14 | c | | main.rs:2776:5:2777:16 | S1 | | main.rs:2789:17:2789:17 | d | | main.rs:2776:5:2777:16 | S1 | -| main.rs:2789:22:2789:35 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2789:22:2789:35 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2789:22:2789:35 | ...::get_pair(...) | 0(2) | main.rs:2776:5:2777:16 | S1 | | main.rs:2789:22:2789:35 | ...::get_pair(...) | 1(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2790:13:2790:22 | TuplePat | | file://:0:0:0:0 | (T_2) | +| main.rs:2790:13:2790:22 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2790:13:2790:22 | TuplePat | 0(2) | main.rs:2776:5:2777:16 | S1 | | main.rs:2790:13:2790:22 | TuplePat | 1(2) | main.rs:2776:5:2777:16 | S1 | | main.rs:2790:18:2790:18 | e | | main.rs:2776:5:2777:16 | S1 | | main.rs:2790:21:2790:21 | f | | main.rs:2776:5:2777:16 | S1 | -| main.rs:2790:26:2790:39 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2790:26:2790:39 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2790:26:2790:39 | ...::get_pair(...) | 0(2) | main.rs:2776:5:2777:16 | S1 | | main.rs:2790:26:2790:39 | ...::get_pair(...) | 1(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2791:13:2791:26 | TuplePat | | file://:0:0:0:0 | (T_2) | +| main.rs:2791:13:2791:26 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2791:13:2791:26 | TuplePat | 0(2) | main.rs:2776:5:2777:16 | S1 | | main.rs:2791:13:2791:26 | TuplePat | 1(2) | main.rs:2776:5:2777:16 | S1 | | main.rs:2791:18:2791:18 | g | | main.rs:2776:5:2777:16 | S1 | | main.rs:2791:25:2791:25 | h | | main.rs:2776:5:2777:16 | S1 | -| main.rs:2791:30:2791:43 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2791:30:2791:43 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2791:30:2791:43 | ...::get_pair(...) | 0(2) | main.rs:2776:5:2777:16 | S1 | | main.rs:2791:30:2791:43 | ...::get_pair(...) | 1(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2793:9:2793:9 | a | | file://:0:0:0:0 | (T_2) | +| main.rs:2793:9:2793:9 | a | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2793:9:2793:9 | a | 0(2) | main.rs:2776:5:2777:16 | S1 | | main.rs:2793:9:2793:9 | a | 1(2) | main.rs:2776:5:2777:16 | S1 | | main.rs:2793:9:2793:11 | a.0 | | main.rs:2776:5:2777:16 | S1 | -| main.rs:2793:9:2793:17 | ... .foo() | | file://:0:0:0:0 | () | -| main.rs:2794:9:2794:9 | b | | file://:0:0:0:0 | (T_2) | +| main.rs:2793:9:2793:17 | ... .foo() | | {EXTERNAL LOCATION} | () | +| main.rs:2794:9:2794:9 | b | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2794:9:2794:9 | b | 0(2) | main.rs:2776:5:2777:16 | S1 | | main.rs:2794:9:2794:9 | b | 1(2) | main.rs:2776:5:2777:16 | S1 | | main.rs:2794:9:2794:11 | b.1 | | main.rs:2776:5:2777:16 | S1 | -| main.rs:2794:9:2794:17 | ... .foo() | | file://:0:0:0:0 | () | +| main.rs:2794:9:2794:17 | ... .foo() | | {EXTERNAL LOCATION} | () | | main.rs:2795:9:2795:9 | c | | main.rs:2776:5:2777:16 | S1 | -| main.rs:2795:9:2795:15 | c.foo() | | file://:0:0:0:0 | () | +| main.rs:2795:9:2795:15 | c.foo() | | {EXTERNAL LOCATION} | () | | main.rs:2796:9:2796:9 | d | | main.rs:2776:5:2777:16 | S1 | -| main.rs:2796:9:2796:15 | d.foo() | | file://:0:0:0:0 | () | +| main.rs:2796:9:2796:15 | d.foo() | | {EXTERNAL LOCATION} | () | | main.rs:2797:9:2797:9 | e | | main.rs:2776:5:2777:16 | S1 | -| main.rs:2797:9:2797:15 | e.foo() | | file://:0:0:0:0 | () | +| main.rs:2797:9:2797:15 | e.foo() | | {EXTERNAL LOCATION} | () | | main.rs:2798:9:2798:9 | f | | main.rs:2776:5:2777:16 | S1 | -| main.rs:2798:9:2798:15 | f.foo() | | file://:0:0:0:0 | () | +| main.rs:2798:9:2798:15 | f.foo() | | {EXTERNAL LOCATION} | () | | main.rs:2799:9:2799:9 | g | | main.rs:2776:5:2777:16 | S1 | -| main.rs:2799:9:2799:15 | g.foo() | | file://:0:0:0:0 | () | +| main.rs:2799:9:2799:15 | g.foo() | | {EXTERNAL LOCATION} | () | | main.rs:2800:9:2800:9 | h | | main.rs:2776:5:2777:16 | S1 | -| main.rs:2800:9:2800:15 | h.foo() | | file://:0:0:0:0 | () | +| main.rs:2800:9:2800:15 | h.foo() | | {EXTERNAL LOCATION} | () | | main.rs:2805:13:2805:13 | a | | {EXTERNAL LOCATION} | i64 | | main.rs:2805:17:2805:34 | ...::default(...) | | {EXTERNAL LOCATION} | i64 | | main.rs:2806:13:2806:13 | b | | {EXTERNAL LOCATION} | bool | | main.rs:2806:17:2806:34 | ...::default(...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2807:13:2807:16 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2807:13:2807:16 | pair | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2807:13:2807:16 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | | main.rs:2807:13:2807:16 | pair | 1(2) | {EXTERNAL LOCATION} | bool | -| main.rs:2807:20:2807:25 | TupleExpr | | file://:0:0:0:0 | (T_2) | +| main.rs:2807:20:2807:25 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2807:20:2807:25 | TupleExpr | 0(2) | {EXTERNAL LOCATION} | i64 | | main.rs:2807:20:2807:25 | TupleExpr | 1(2) | {EXTERNAL LOCATION} | bool | | main.rs:2807:21:2807:21 | a | | {EXTERNAL LOCATION} | i64 | | main.rs:2807:24:2807:24 | b | | {EXTERNAL LOCATION} | bool | | main.rs:2808:13:2808:13 | i | | {EXTERNAL LOCATION} | i64 | -| main.rs:2808:22:2808:25 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2808:22:2808:25 | pair | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2808:22:2808:25 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | | main.rs:2808:22:2808:25 | pair | 1(2) | {EXTERNAL LOCATION} | bool | | main.rs:2808:22:2808:27 | pair.0 | | {EXTERNAL LOCATION} | i64 | | main.rs:2809:13:2809:13 | j | | {EXTERNAL LOCATION} | bool | -| main.rs:2809:23:2809:26 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2809:23:2809:26 | pair | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2809:23:2809:26 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | | main.rs:2809:23:2809:26 | pair | 1(2) | {EXTERNAL LOCATION} | bool | | main.rs:2809:23:2809:28 | pair.1 | | {EXTERNAL LOCATION} | bool | -| main.rs:2811:13:2811:16 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2811:13:2811:16 | pair | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2811:13:2811:16 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | | main.rs:2811:13:2811:16 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2811:20:2811:25 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2811:20:2811:25 | [...] | | {EXTERNAL LOCATION} | [;] | | main.rs:2811:20:2811:25 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2811:20:2811:32 | ... .into() | | file://:0:0:0:0 | (T_2) | +| main.rs:2811:20:2811:32 | ... .into() | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2811:20:2811:32 | ... .into() | 0(2) | {EXTERNAL LOCATION} | i32 | | main.rs:2811:20:2811:32 | ... .into() | 1(2) | {EXTERNAL LOCATION} | i32 | | main.rs:2811:21:2811:21 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2811:24:2811:24 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2812:9:2815:9 | match pair { ... } | | file://:0:0:0:0 | () | -| main.rs:2812:15:2812:18 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2812:9:2815:9 | match pair { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2812:15:2812:18 | pair | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2812:15:2812:18 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | | main.rs:2812:15:2812:18 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2813:13:2813:18 | TuplePat | | file://:0:0:0:0 | (T_2) | +| main.rs:2813:13:2813:18 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2813:13:2813:18 | TuplePat | 0(2) | {EXTERNAL LOCATION} | i32 | | main.rs:2813:13:2813:18 | TuplePat | 1(2) | {EXTERNAL LOCATION} | i32 | | main.rs:2813:14:2813:14 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:2813:17:2813:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2813:23:2813:42 | MacroExpr | | file://:0:0:0:0 | () | -| main.rs:2813:30:2813:41 | "unexpected" | | file://:0:0:0:0 | & | +| main.rs:2813:23:2813:42 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:2813:30:2813:41 | "unexpected" | | {EXTERNAL LOCATION} | & | | main.rs:2813:30:2813:41 | "unexpected" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2813:30:2813:41 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:2813:30:2813:41 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2814:13:2814:13 | _ | | file://:0:0:0:0 | (T_2) | +| main.rs:2813:30:2813:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2813:30:2813:41 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2814:13:2814:13 | _ | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2814:13:2814:13 | _ | 0(2) | {EXTERNAL LOCATION} | i32 | | main.rs:2814:13:2814:13 | _ | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2814:18:2814:35 | MacroExpr | | file://:0:0:0:0 | () | -| main.rs:2814:25:2814:34 | "expected" | | file://:0:0:0:0 | & | +| main.rs:2814:18:2814:35 | MacroExpr | | {EXTERNAL LOCATION} | () | +| main.rs:2814:25:2814:34 | "expected" | | {EXTERNAL LOCATION} | & | | main.rs:2814:25:2814:34 | "expected" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2814:25:2814:34 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:2814:25:2814:34 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2814:25:2814:34 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2814:25:2814:34 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2816:13:2816:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2816:17:2816:20 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2816:17:2816:20 | pair | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2816:17:2816:20 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | | main.rs:2816:17:2816:20 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | | main.rs:2816:17:2816:22 | pair.0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2818:13:2818:13 | y | | file://:0:0:0:0 | & | -| main.rs:2818:13:2818:13 | y | &T | file://:0:0:0:0 | (T_2) | +| main.rs:2818:13:2818:13 | y | | {EXTERNAL LOCATION} | & | +| main.rs:2818:13:2818:13 | y | &T | {EXTERNAL LOCATION} | (T_2) | | main.rs:2818:13:2818:13 | y | &T.0(2) | main.rs:2776:5:2777:16 | S1 | | main.rs:2818:13:2818:13 | y | &T.1(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2818:17:2818:31 | &... | | file://:0:0:0:0 | & | -| main.rs:2818:17:2818:31 | &... | &T | file://:0:0:0:0 | (T_2) | +| main.rs:2818:17:2818:31 | &... | | {EXTERNAL LOCATION} | & | +| main.rs:2818:17:2818:31 | &... | &T | {EXTERNAL LOCATION} | (T_2) | | main.rs:2818:17:2818:31 | &... | &T.0(2) | main.rs:2776:5:2777:16 | S1 | | main.rs:2818:17:2818:31 | &... | &T.1(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2818:18:2818:31 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2818:18:2818:31 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2818:18:2818:31 | ...::get_pair(...) | 0(2) | main.rs:2776:5:2777:16 | S1 | | main.rs:2818:18:2818:31 | ...::get_pair(...) | 1(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2819:9:2819:9 | y | | file://:0:0:0:0 | & | -| main.rs:2819:9:2819:9 | y | &T | file://:0:0:0:0 | (T_2) | +| main.rs:2819:9:2819:9 | y | | {EXTERNAL LOCATION} | & | +| main.rs:2819:9:2819:9 | y | &T | {EXTERNAL LOCATION} | (T_2) | | main.rs:2819:9:2819:9 | y | &T.0(2) | main.rs:2776:5:2777:16 | S1 | | main.rs:2819:9:2819:9 | y | &T.1(2) | main.rs:2776:5:2777:16 | S1 | | main.rs:2819:9:2819:11 | y.0 | | main.rs:2776:5:2777:16 | S1 | -| main.rs:2819:9:2819:17 | ... .foo() | | file://:0:0:0:0 | () | -| main.rs:2825:27:2847:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2819:9:2819:17 | ... .foo() | | {EXTERNAL LOCATION} | () | +| main.rs:2825:27:2847:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2826:13:2826:23 | boxed_value | | {EXTERNAL LOCATION} | Box | | main.rs:2826:13:2826:23 | boxed_value | A | {EXTERNAL LOCATION} | Global | | main.rs:2826:13:2826:23 | boxed_value | T | {EXTERNAL LOCATION} | i32 | @@ -6138,7 +6158,7 @@ inferType | main.rs:2826:27:2826:42 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | main.rs:2826:27:2826:42 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | | main.rs:2826:36:2826:41 | 100i32 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2829:9:2837:9 | match boxed_value { ... } | | file://:0:0:0:0 | () | +| main.rs:2829:9:2837:9 | match boxed_value { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2829:15:2829:25 | boxed_value | | {EXTERNAL LOCATION} | Box | | main.rs:2829:15:2829:25 | boxed_value | A | {EXTERNAL LOCATION} | Global | | main.rs:2829:15:2829:25 | boxed_value | T | {EXTERNAL LOCATION} | i32 | @@ -6146,19 +6166,19 @@ inferType | main.rs:2830:13:2830:19 | box 100 | A | {EXTERNAL LOCATION} | Global | | main.rs:2830:13:2830:19 | box 100 | T | {EXTERNAL LOCATION} | i32 | | main.rs:2830:17:2830:19 | 100 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2830:24:2832:13 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2831:26:2831:36 | "Boxed 100\\n" | | file://:0:0:0:0 | & | +| main.rs:2830:24:2832:13 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2831:26:2831:36 | "Boxed 100\\n" | | {EXTERNAL LOCATION} | & | | main.rs:2831:26:2831:36 | "Boxed 100\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2831:26:2831:36 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:2831:26:2831:36 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2831:26:2831:36 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2831:26:2831:36 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2833:13:2833:17 | box ... | | {EXTERNAL LOCATION} | Box | | main.rs:2833:13:2833:17 | box ... | A | {EXTERNAL LOCATION} | Global | | main.rs:2833:13:2833:17 | box ... | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2833:22:2836:13 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2835:26:2835:42 | "Boxed value: {}\\n" | | file://:0:0:0:0 | & | +| main.rs:2833:22:2836:13 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2835:26:2835:42 | "Boxed value: {}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:2835:26:2835:42 | "Boxed value: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2835:26:2835:51 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:2835:26:2835:51 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2835:26:2835:51 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2835:26:2835:51 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2840:13:2840:22 | nested_box | | {EXTERNAL LOCATION} | Box | | main.rs:2840:13:2840:22 | nested_box | A | {EXTERNAL LOCATION} | Global | | main.rs:2840:13:2840:22 | nested_box | T | {EXTERNAL LOCATION} | Box | @@ -6173,7 +6193,7 @@ inferType | main.rs:2840:35:2840:49 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | main.rs:2840:35:2840:49 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | | main.rs:2840:44:2840:48 | 42i32 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2841:9:2846:9 | match nested_box { ... } | | file://:0:0:0:0 | () | +| main.rs:2841:9:2846:9 | match nested_box { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2841:15:2841:24 | nested_box | | {EXTERNAL LOCATION} | Box | | main.rs:2841:15:2841:24 | nested_box | A | {EXTERNAL LOCATION} | Global | | main.rs:2841:15:2841:24 | nested_box | T | {EXTERNAL LOCATION} | Box | @@ -6184,73 +6204,73 @@ inferType | main.rs:2842:13:2842:21 | box ... | T | {EXTERNAL LOCATION} | Box | | main.rs:2842:13:2842:21 | box ... | T.A | {EXTERNAL LOCATION} | Global | | main.rs:2842:13:2842:21 | box ... | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2842:26:2845:13 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2844:26:2844:43 | "Nested boxed: {}\\n" | | file://:0:0:0:0 | & | +| main.rs:2842:26:2845:13 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2844:26:2844:43 | "Nested boxed: {}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:2844:26:2844:43 | "Nested boxed: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2844:26:2844:59 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:2844:26:2844:59 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2844:26:2844:59 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2844:26:2844:59 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2856:36:2858:9 | { ... } | | main.rs:2853:5:2853:22 | Path | | main.rs:2857:13:2857:19 | Path {...} | | main.rs:2853:5:2853:22 | Path | -| main.rs:2860:29:2860:33 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2860:29:2860:33 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2860:29:2860:33 | SelfParam | &T | main.rs:2853:5:2853:22 | Path | | main.rs:2860:59:2862:9 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:2860:59:2862:9 | { ... } | E | file://:0:0:0:0 | () | +| main.rs:2860:59:2862:9 | { ... } | E | {EXTERNAL LOCATION} | () | | main.rs:2860:59:2862:9 | { ... } | T | main.rs:2865:5:2865:25 | PathBuf | | main.rs:2861:13:2861:30 | Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:2861:13:2861:30 | Ok(...) | E | file://:0:0:0:0 | () | +| main.rs:2861:13:2861:30 | Ok(...) | E | {EXTERNAL LOCATION} | () | | main.rs:2861:13:2861:30 | Ok(...) | T | main.rs:2865:5:2865:25 | PathBuf | | main.rs:2861:16:2861:29 | ...::new(...) | | main.rs:2865:5:2865:25 | PathBuf | | main.rs:2868:39:2870:9 | { ... } | | main.rs:2865:5:2865:25 | PathBuf | | main.rs:2869:13:2869:22 | PathBuf {...} | | main.rs:2865:5:2865:25 | PathBuf | -| main.rs:2878:18:2878:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2878:18:2878:22 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2878:18:2878:22 | SelfParam | &T | main.rs:2865:5:2865:25 | PathBuf | -| main.rs:2878:34:2882:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:2878:34:2882:9 | { ... } | | {EXTERNAL LOCATION} | & | | main.rs:2878:34:2882:9 | { ... } | &T | main.rs:2853:5:2853:22 | Path | | main.rs:2880:33:2880:43 | ...::new(...) | | main.rs:2853:5:2853:22 | Path | -| main.rs:2881:13:2881:17 | &path | | file://:0:0:0:0 | & | +| main.rs:2881:13:2881:17 | &path | | {EXTERNAL LOCATION} | & | | main.rs:2881:13:2881:17 | &path | &T | main.rs:2853:5:2853:22 | Path | | main.rs:2881:14:2881:17 | path | | main.rs:2853:5:2853:22 | Path | -| main.rs:2885:16:2893:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2885:16:2893:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2886:13:2886:17 | path1 | | main.rs:2853:5:2853:22 | Path | | main.rs:2886:21:2886:31 | ...::new(...) | | main.rs:2853:5:2853:22 | Path | | main.rs:2887:13:2887:17 | path2 | | {EXTERNAL LOCATION} | Result | -| main.rs:2887:13:2887:17 | path2 | E | file://:0:0:0:0 | () | +| main.rs:2887:13:2887:17 | path2 | E | {EXTERNAL LOCATION} | () | | main.rs:2887:13:2887:17 | path2 | T | main.rs:2865:5:2865:25 | PathBuf | | main.rs:2887:21:2887:25 | path1 | | main.rs:2853:5:2853:22 | Path | | main.rs:2887:21:2887:40 | path1.canonicalize() | | {EXTERNAL LOCATION} | Result | -| main.rs:2887:21:2887:40 | path1.canonicalize() | E | file://:0:0:0:0 | () | +| main.rs:2887:21:2887:40 | path1.canonicalize() | E | {EXTERNAL LOCATION} | () | | main.rs:2887:21:2887:40 | path1.canonicalize() | T | main.rs:2865:5:2865:25 | PathBuf | | main.rs:2888:13:2888:17 | path3 | | main.rs:2865:5:2865:25 | PathBuf | | main.rs:2888:21:2888:25 | path2 | | {EXTERNAL LOCATION} | Result | -| main.rs:2888:21:2888:25 | path2 | E | file://:0:0:0:0 | () | +| main.rs:2888:21:2888:25 | path2 | E | {EXTERNAL LOCATION} | () | | main.rs:2888:21:2888:25 | path2 | T | main.rs:2865:5:2865:25 | PathBuf | | main.rs:2888:21:2888:34 | path2.unwrap() | | main.rs:2865:5:2865:25 | PathBuf | | main.rs:2890:13:2890:20 | pathbuf1 | | main.rs:2865:5:2865:25 | PathBuf | | main.rs:2890:24:2890:37 | ...::new(...) | | main.rs:2865:5:2865:25 | PathBuf | | main.rs:2891:24:2891:31 | pathbuf1 | | main.rs:2865:5:2865:25 | PathBuf | -| main.rs:2898:14:2898:18 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2898:14:2898:18 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2898:14:2898:18 | SelfParam | &T | main.rs:2897:5:2899:5 | Self [trait MyTrait] | -| main.rs:2905:14:2905:18 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2905:14:2905:18 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2905:14:2905:18 | SelfParam | &T | main.rs:2901:5:2902:19 | S | | main.rs:2905:14:2905:18 | SelfParam | &T.T | {EXTERNAL LOCATION} | i32 | | main.rs:2905:28:2907:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2906:13:2906:16 | self | | file://:0:0:0:0 | & | +| main.rs:2906:13:2906:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:2906:13:2906:16 | self | &T | main.rs:2901:5:2902:19 | S | | main.rs:2906:13:2906:16 | self | &T.T | {EXTERNAL LOCATION} | i32 | | main.rs:2906:13:2906:18 | self.0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2911:14:2911:18 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2911:14:2911:18 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2911:14:2911:18 | SelfParam | &T | main.rs:2901:5:2902:19 | S | | main.rs:2911:14:2911:18 | SelfParam | &T.T | main.rs:2901:5:2902:19 | S | | main.rs:2911:14:2911:18 | SelfParam | &T.T.T | {EXTERNAL LOCATION} | i32 | | main.rs:2911:28:2913:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2912:13:2912:16 | self | | file://:0:0:0:0 | & | +| main.rs:2912:13:2912:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:2912:13:2912:16 | self | &T | main.rs:2901:5:2902:19 | S | | main.rs:2912:13:2912:16 | self | &T.T | main.rs:2901:5:2902:19 | S | | main.rs:2912:13:2912:16 | self | &T.T.T | {EXTERNAL LOCATION} | i32 | | main.rs:2912:13:2912:18 | self.0 | | main.rs:2901:5:2902:19 | S | | main.rs:2912:13:2912:18 | self.0 | T | {EXTERNAL LOCATION} | i32 | | main.rs:2912:13:2912:21 | ... .0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2917:15:2917:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2917:15:2917:19 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2917:15:2917:19 | SelfParam | &T | main.rs:2901:5:2902:19 | S | | main.rs:2917:15:2917:19 | SelfParam | &T.T | main.rs:2916:10:2916:16 | T | | main.rs:2917:33:2919:9 | { ... } | | main.rs:2901:5:2902:19 | S | @@ -6261,7 +6281,7 @@ inferType | main.rs:2918:13:2918:24 | S(...) | T.T | main.rs:2916:10:2916:16 | T | | main.rs:2918:15:2918:23 | S(...) | | main.rs:2901:5:2902:19 | S | | main.rs:2918:15:2918:23 | S(...) | T | main.rs:2916:10:2916:16 | T | -| main.rs:2918:17:2918:20 | self | | file://:0:0:0:0 | & | +| main.rs:2918:17:2918:20 | self | | {EXTERNAL LOCATION} | & | | main.rs:2918:17:2918:20 | self | &T | main.rs:2901:5:2902:19 | S | | main.rs:2918:17:2918:20 | self | &T.T | main.rs:2916:10:2916:16 | T | | main.rs:2918:17:2918:22 | self.0 | | main.rs:2916:10:2916:16 | T | @@ -6341,7 +6361,7 @@ inferType | main.rs:2937:13:2937:23 | ...::new(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | | main.rs:2937:22:2937:22 | x | | main.rs:2901:5:2902:19 | S | | main.rs:2937:22:2937:22 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2943:22:2947:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2943:22:2947:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2944:18:2944:18 | x | | {EXTERNAL LOCATION} | i32 | | main.rs:2944:33:2946:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:2945:13:2945:13 | x | | {EXTERNAL LOCATION} | i32 | @@ -6349,37 +6369,37 @@ inferType | main.rs:2945:17:2945:17 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2952:11:2952:14 | cond | | {EXTERNAL LOCATION} | bool | | main.rs:2952:30:2960:5 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2954:13:2954:13 | a | | file://:0:0:0:0 | () | -| main.rs:2954:17:2958:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2955:13:2957:13 | if cond {...} | | file://:0:0:0:0 | () | +| main.rs:2954:13:2954:13 | a | | {EXTERNAL LOCATION} | () | +| main.rs:2954:17:2958:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2955:13:2957:13 | if cond {...} | | {EXTERNAL LOCATION} | () | | main.rs:2955:16:2955:19 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:2955:21:2957:13 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2955:21:2957:13 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2956:24:2956:25 | 12 | | {EXTERNAL LOCATION} | i32 | | main.rs:2959:9:2959:9 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:2963:20:2970:5 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:2966:26:2966:27 | 12 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2968:18:2968:26 | "b: {:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:2968:18:2968:26 | "b: {:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:2968:18:2968:26 | "b: {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2968:18:2968:29 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:2968:18:2968:29 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2968:18:2968:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2968:18:2968:29 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2969:9:2969:9 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:2972:20:2974:5 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:2973:16:2973:16 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:2977:11:2977:14 | cond | | {EXTERNAL LOCATION} | bool | | main.rs:2977:30:2985:5 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2978:13:2978:13 | a | | file://:0:0:0:0 | () | -| main.rs:2978:17:2982:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2979:13:2981:13 | if cond {...} | | file://:0:0:0:0 | () | +| main.rs:2978:13:2978:13 | a | | {EXTERNAL LOCATION} | () | +| main.rs:2978:17:2982:9 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2979:13:2981:13 | if cond {...} | | {EXTERNAL LOCATION} | () | | main.rs:2979:16:2979:19 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:2979:21:2981:13 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2979:21:2981:13 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2980:24:2980:25 | 12 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2983:18:2983:26 | "a: {:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:2983:18:2983:26 | "a: {:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:2983:18:2983:26 | "a: {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2983:18:2983:29 | ...::_print(...) | | file://:0:0:0:0 | () | -| main.rs:2983:18:2983:29 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2983:29:2983:29 | a | | file://:0:0:0:0 | () | +| main.rs:2983:18:2983:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2983:18:2983:29 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2983:29:2983:29 | a | | {EXTERNAL LOCATION} | () | | main.rs:2984:9:2984:9 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2989:16:3036:5 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2989:16:3036:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2990:13:2990:13 | x | | {EXTERNAL LOCATION} | Option | | main.rs:2990:13:2990:13 | x | T | {EXTERNAL LOCATION} | i32 | | main.rs:2990:17:2990:20 | None | | {EXTERNAL LOCATION} | Option | @@ -6399,12 +6419,12 @@ inferType | main.rs:2995:26:2995:28 | opt | | {EXTERNAL LOCATION} | Option | | main.rs:2995:26:2995:28 | opt | T | main.rs:2995:23:2995:23 | T | | main.rs:2995:42:2995:42 | x | | main.rs:2995:23:2995:23 | T | -| main.rs:2995:48:2995:49 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2995:48:2995:49 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2997:13:2997:13 | x | | {EXTERNAL LOCATION} | Option | | main.rs:2997:13:2997:13 | x | T | {EXTERNAL LOCATION} | i32 | | main.rs:2997:17:2997:20 | None | | {EXTERNAL LOCATION} | Option | | main.rs:2997:17:2997:20 | None | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2998:9:2998:24 | pin_option(...) | | file://:0:0:0:0 | () | +| main.rs:2998:9:2998:24 | pin_option(...) | | {EXTERNAL LOCATION} | () | | main.rs:2998:20:2998:20 | x | | {EXTERNAL LOCATION} | Option | | main.rs:2998:20:2998:20 | x | T | {EXTERNAL LOCATION} | i32 | | main.rs:2998:23:2998:23 | 0 | | {EXTERNAL LOCATION} | i32 | @@ -6439,7 +6459,7 @@ inferType | main.rs:3013:29:3013:29 | e | T1 | main.rs:3013:26:3013:26 | T | | main.rs:3013:29:3013:29 | e | T2 | {EXTERNAL LOCATION} | String | | main.rs:3013:53:3013:53 | x | | main.rs:3013:26:3013:26 | T | -| main.rs:3013:59:3013:60 | { ... } | | file://:0:0:0:0 | () | +| main.rs:3013:59:3013:60 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:3016:13:3016:13 | x | | main.rs:3000:9:3003:9 | MyEither | | main.rs:3016:13:3016:13 | x | T1 | {EXTERNAL LOCATION} | i32 | | main.rs:3016:13:3016:13 | x | T2 | {EXTERNAL LOCATION} | String | @@ -6447,7 +6467,7 @@ inferType | main.rs:3016:17:3018:9 | ...::B {...} | T1 | {EXTERNAL LOCATION} | i32 | | main.rs:3016:17:3018:9 | ...::B {...} | T2 | {EXTERNAL LOCATION} | String | | main.rs:3017:20:3017:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | -| main.rs:3019:9:3019:27 | pin_my_either(...) | | file://:0:0:0:0 | () | +| main.rs:3019:9:3019:27 | pin_my_either(...) | | {EXTERNAL LOCATION} | () | | main.rs:3019:23:3019:23 | x | | main.rs:3000:9:3003:9 | MyEither | | main.rs:3019:23:3019:23 | x | T1 | {EXTERNAL LOCATION} | i32 | | main.rs:3019:23:3019:23 | x | T2 | {EXTERNAL LOCATION} | String | @@ -6483,7 +6503,7 @@ inferType | main.rs:3026:29:3026:31 | res | E | main.rs:3026:26:3026:26 | E | | main.rs:3026:29:3026:31 | res | T | main.rs:3026:23:3026:23 | T | | main.rs:3026:48:3026:48 | x | | main.rs:3026:26:3026:26 | E | -| main.rs:3026:54:3026:55 | { ... } | | file://:0:0:0:0 | () | +| main.rs:3026:54:3026:55 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:3028:13:3028:13 | x | | {EXTERNAL LOCATION} | Result | | main.rs:3028:13:3028:13 | x | E | {EXTERNAL LOCATION} | bool | | main.rs:3028:13:3028:13 | x | T | {EXTERNAL LOCATION} | i32 | @@ -6491,7 +6511,7 @@ inferType | main.rs:3028:17:3028:29 | ...::Ok(...) | E | {EXTERNAL LOCATION} | bool | | main.rs:3028:17:3028:29 | ...::Ok(...) | T | {EXTERNAL LOCATION} | i32 | | main.rs:3028:28:3028:28 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:3029:9:3029:28 | pin_result(...) | | file://:0:0:0:0 | () | +| main.rs:3029:9:3029:28 | pin_result(...) | | {EXTERNAL LOCATION} | () | | main.rs:3029:20:3029:20 | x | | {EXTERNAL LOCATION} | Result | | main.rs:3029:20:3029:20 | x | E | {EXTERNAL LOCATION} | bool | | main.rs:3029:20:3029:20 | x | T | {EXTERNAL LOCATION} | i32 | @@ -6505,188 +6525,188 @@ inferType | main.rs:3032:9:3032:9 | x | | {EXTERNAL LOCATION} | Vec | | main.rs:3032:9:3032:9 | x | A | {EXTERNAL LOCATION} | Global | | main.rs:3032:9:3032:9 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3032:9:3032:17 | x.push(...) | | file://:0:0:0:0 | () | +| main.rs:3032:9:3032:17 | x.push(...) | | {EXTERNAL LOCATION} | () | | main.rs:3032:16:3032:16 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:3034:13:3034:13 | y | | {EXTERNAL LOCATION} | i32 | | main.rs:3034:17:3034:34 | ...::default(...) | | {EXTERNAL LOCATION} | i32 | | main.rs:3035:9:3035:9 | x | | {EXTERNAL LOCATION} | Vec | | main.rs:3035:9:3035:9 | x | A | {EXTERNAL LOCATION} | Global | | main.rs:3035:9:3035:9 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:3035:9:3035:17 | x.push(...) | | file://:0:0:0:0 | () | +| main.rs:3035:9:3035:17 | x.push(...) | | {EXTERNAL LOCATION} | () | | main.rs:3035:16:3035:16 | y | | {EXTERNAL LOCATION} | i32 | -| main.rs:3044:11:3079:1 | { ... } | | file://:0:0:0:0 | () | -| main.rs:3045:5:3045:21 | ...::f(...) | | file://:0:0:0:0 | () | +| main.rs:3044:11:3079:1 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:3045:5:3045:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | | main.rs:3046:5:3046:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | | main.rs:3047:5:3047:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | | main.rs:3047:20:3047:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | | main.rs:3047:41:3047:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:3048:5:3048:35 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:3049:5:3049:41 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:3050:5:3050:45 | ...::test(...) | | file://:0:0:0:0 | () | -| main.rs:3051:5:3051:30 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:3052:5:3052:33 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:3053:5:3053:21 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:3054:5:3054:27 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:3055:5:3055:32 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:3056:5:3056:23 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:3057:5:3057:36 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:3058:5:3058:35 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:3059:5:3059:29 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:3060:5:3060:23 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:3061:5:3061:24 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:3062:5:3062:17 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:3063:5:3063:18 | ...::f(...) | | file://:0:0:0:0 | () | +| main.rs:3048:5:3048:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3049:5:3049:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3050:5:3050:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3051:5:3051:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3052:5:3052:33 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3053:5:3053:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3054:5:3054:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3055:5:3055:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3056:5:3056:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3057:5:3057:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3058:5:3058:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3059:5:3059:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3060:5:3060:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3061:5:3061:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3062:5:3062:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3063:5:3063:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | | main.rs:3064:5:3064:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future | -| main.rs:3064:5:3064:15 | ...::f(...) | Output | file://:0:0:0:0 | () | -| main.rs:3065:5:3065:19 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:3066:5:3066:17 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:3067:5:3067:14 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:3068:5:3068:27 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:3069:5:3069:15 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:3070:5:3070:43 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:3071:5:3071:15 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:3072:5:3072:17 | ...::f(...) | | file://:0:0:0:0 | () | -| main.rs:3073:5:3073:23 | ...::test(...) | | file://:0:0:0:0 | () | -| main.rs:3074:5:3074:41 | ...::test_all_patterns(...) | | file://:0:0:0:0 | () | -| main.rs:3075:5:3075:49 | ...::box_patterns(...) | | file://:0:0:0:0 | () | -| main.rs:3076:5:3076:20 | ...::test(...) | | file://:0:0:0:0 | () | +| main.rs:3064:5:3064:15 | ...::f(...) | Output | {EXTERNAL LOCATION} | () | +| main.rs:3065:5:3065:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3066:5:3066:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3067:5:3067:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3068:5:3068:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3069:5:3069:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3070:5:3070:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3071:5:3071:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3072:5:3072:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3073:5:3073:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3074:5:3074:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3075:5:3075:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:3076:5:3076:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | | main.rs:3077:5:3077:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | | main.rs:3077:5:3077:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | | main.rs:3077:5:3077:20 | ...::f(...) | T | main.rs:2897:5:2899:5 | dyn MyTrait | | main.rs:3077:5:3077:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | | main.rs:3077:16:3077:19 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:3078:5:3078:23 | ...::f(...) | | file://:0:0:0:0 | () | +| main.rs:3078:5:3078:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:13:26:133:1 | { ... } | | {EXTERNAL LOCATION} | Option | -| pattern_matching.rs:13:26:133:1 | { ... } | T | file://:0:0:0:0 | () | +| pattern_matching.rs:13:26:133:1 | { ... } | T | {EXTERNAL LOCATION} | () | | pattern_matching.rs:14:9:14:13 | value | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:14:9:14:13 | value | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:14:17:14:24 | Some(...) | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:14:17:14:24 | Some(...) | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:14:22:14:23 | 42 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:15:5:18:5 | if ... {...} | | file://:0:0:0:0 | () | +| pattern_matching.rs:15:5:18:5 | if ... {...} | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:15:12:15:21 | Some(...) | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:15:12:15:21 | Some(...) | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:15:17:15:20 | mesg | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:15:25:15:29 | value | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:15:25:15:29 | value | T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:15:31:18:5 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:15:31:18:5 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:16:13:16:16 | mesg | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:16:20:16:23 | mesg | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:17:18:17:25 | "{mesg}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:17:18:17:25 | "{mesg}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:17:18:17:25 | "{mesg}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:17:18:17:25 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:17:18:17:25 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:17:18:17:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:17:18:17:25 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:17:20:17:23 | mesg | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:19:5:25:5 | match value { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:19:5:25:5 | match value { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:19:11:19:15 | value | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:19:11:19:15 | value | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:20:9:20:18 | Some(...) | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:20:9:20:18 | Some(...) | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:20:14:20:17 | mesg | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:20:23:23:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:20:23:23:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:21:17:21:20 | mesg | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:21:24:21:27 | mesg | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:22:22:22:29 | "{mesg}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:22:22:22:29 | "{mesg}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:22:22:22:29 | "{mesg}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:22:22:22:29 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:22:22:22:29 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:22:22:22:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:22:22:22:29 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:22:24:22:27 | mesg | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:24:9:24:12 | None | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:24:9:24:12 | None | T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:24:17:24:18 | TupleExpr | | file://:0:0:0:0 | () | +| pattern_matching.rs:24:17:24:18 | TupleExpr | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:26:9:26:12 | mesg | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:26:16:26:20 | value | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:26:16:26:20 | value | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:26:16:26:29 | value.unwrap() | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:27:9:27:12 | mesg | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:27:16:27:19 | mesg | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:28:14:28:21 | "{mesg}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:28:14:28:21 | "{mesg}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:28:14:28:21 | "{mesg}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:28:14:28:21 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:28:14:28:21 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:28:14:28:21 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:28:14:28:21 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:28:16:28:19 | mesg | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:29:9:29:12 | mesg | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:29:16:29:20 | value | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:29:16:29:20 | value | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:29:16:29:21 | TryExpr | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:30:14:30:21 | "{mesg}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:30:14:30:21 | "{mesg}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:30:14:30:21 | "{mesg}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:30:14:30:21 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:30:14:30:21 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:30:14:30:21 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:30:14:30:21 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:30:16:30:19 | mesg | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:32:9:32:14 | value2 | | file://:0:0:0:0 | & | +| pattern_matching.rs:32:9:32:14 | value2 | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:32:9:32:14 | value2 | &T | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:32:9:32:14 | value2 | &T.T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:32:18:32:26 | &... | | file://:0:0:0:0 | & | +| pattern_matching.rs:32:18:32:26 | &... | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:32:18:32:26 | &... | &T | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:32:18:32:26 | &... | &T.T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:32:19:32:26 | Some(...) | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:32:19:32:26 | Some(...) | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:32:24:32:25 | 42 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:33:5:36:5 | if ... {...} | | file://:0:0:0:0 | () | -| pattern_matching.rs:33:12:33:22 | &... | | file://:0:0:0:0 | & | +| pattern_matching.rs:33:5:36:5 | if ... {...} | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:33:12:33:22 | &... | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:33:12:33:22 | &... | &T | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:33:12:33:22 | &... | &T.T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:33:13:33:22 | Some(...) | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:33:13:33:22 | Some(...) | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:33:18:33:21 | mesg | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:33:26:33:31 | value2 | | file://:0:0:0:0 | & | +| pattern_matching.rs:33:26:33:31 | value2 | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:33:26:33:31 | value2 | &T | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:33:26:33:31 | value2 | &T.T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:33:33:36:5 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:33:33:36:5 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:34:13:34:16 | mesg | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:34:20:34:23 | mesg | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:35:18:35:25 | "{mesg}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:35:18:35:25 | "{mesg}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:35:18:35:25 | "{mesg}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:35:18:35:25 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:35:18:35:25 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:35:18:35:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:35:18:35:25 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:35:20:35:23 | mesg | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:38:9:38:14 | value3 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:38:18:38:19 | 42 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:39:5:42:5 | if ... {...} | | file://:0:0:0:0 | () | -| pattern_matching.rs:39:16:39:19 | mesg | | file://:0:0:0:0 | & | +| pattern_matching.rs:39:5:42:5 | if ... {...} | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:39:16:39:19 | mesg | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:39:16:39:19 | mesg | &T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:39:23:39:28 | value3 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:39:30:42:5 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:40:13:40:16 | mesg | | file://:0:0:0:0 | & | +| pattern_matching.rs:39:30:42:5 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:40:13:40:16 | mesg | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:40:13:40:16 | mesg | &T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:40:20:40:23 | mesg | | file://:0:0:0:0 | & | +| pattern_matching.rs:40:20:40:23 | mesg | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:40:20:40:23 | mesg | &T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:41:18:41:25 | "{mesg}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:41:18:41:25 | "{mesg}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:41:18:41:25 | "{mesg}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:41:18:41:25 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:41:18:41:25 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:41:20:41:23 | mesg | | file://:0:0:0:0 | & | +| pattern_matching.rs:41:18:41:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:41:18:41:25 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:41:20:41:23 | mesg | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:41:20:41:23 | mesg | &T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:44:9:44:14 | value4 | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:44:9:44:14 | value4 | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:44:18:44:25 | Some(...) | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:44:18:44:25 | Some(...) | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:44:23:44:24 | 42 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:45:5:48:5 | if ... {...} | | file://:0:0:0:0 | () | +| pattern_matching.rs:45:5:48:5 | if ... {...} | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:45:12:45:25 | Some(...) | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:45:12:45:25 | Some(...) | T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:45:21:45:24 | mesg | | file://:0:0:0:0 | & | +| pattern_matching.rs:45:21:45:24 | mesg | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:45:21:45:24 | mesg | &T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:45:29:45:34 | value4 | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:45:29:45:34 | value4 | T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:45:36:48:5 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:46:13:46:16 | mesg | | file://:0:0:0:0 | & | +| pattern_matching.rs:45:36:48:5 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:46:13:46:16 | mesg | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:46:13:46:16 | mesg | &T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:46:20:46:23 | mesg | | file://:0:0:0:0 | & | +| pattern_matching.rs:46:20:46:23 | mesg | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:46:20:46:23 | mesg | &T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:47:18:47:25 | "{mesg}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:47:18:47:25 | "{mesg}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:47:18:47:25 | "{mesg}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:47:18:47:25 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:47:18:47:25 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:47:20:47:23 | mesg | | file://:0:0:0:0 | & | +| pattern_matching.rs:47:18:47:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:47:18:47:25 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:47:20:47:23 | mesg | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:47:20:47:23 | mesg | &T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:50:13:50:18 | value5 | | file://:0:0:0:0 | & | +| pattern_matching.rs:50:13:50:18 | value5 | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:50:13:50:18 | value5 | &T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:50:22:50:23 | 42 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:51:9:51:9 | x | | file://:0:0:0:0 | & | +| pattern_matching.rs:51:9:51:9 | x | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:51:9:51:9 | x | &T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:51:13:51:18 | value5 | | file://:0:0:0:0 | & | +| pattern_matching.rs:51:13:51:18 | value5 | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:51:13:51:18 | value5 | &T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:53:9:53:24 | my_record_struct | | pattern_matching.rs:1:1:4:1 | MyRecordStruct | | pattern_matching.rs:53:9:53:24 | my_record_struct | T1 | {EXTERNAL LOCATION} | i32 | @@ -6696,7 +6716,7 @@ inferType | pattern_matching.rs:53:28:56:5 | MyRecordStruct {...} | T2 | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:54:17:54:18 | 42 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:55:17:55:21 | false | | {EXTERNAL LOCATION} | bool | -| pattern_matching.rs:57:5:61:5 | if ... {...} | | file://:0:0:0:0 | () | +| pattern_matching.rs:57:5:61:5 | if ... {...} | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:57:12:57:44 | MyRecordStruct {...} | | pattern_matching.rs:1:1:4:1 | MyRecordStruct | | pattern_matching.rs:57:12:57:44 | MyRecordStruct {...} | T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:57:12:57:44 | MyRecordStruct {...} | T2 | {EXTERNAL LOCATION} | bool | @@ -6705,12 +6725,12 @@ inferType | pattern_matching.rs:57:48:57:63 | my_record_struct | | pattern_matching.rs:1:1:4:1 | MyRecordStruct | | pattern_matching.rs:57:48:57:63 | my_record_struct | T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:57:48:57:63 | my_record_struct | T2 | {EXTERNAL LOCATION} | bool | -| pattern_matching.rs:57:65:61:5 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:57:65:61:5 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:58:13:58:13 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:58:17:58:22 | value1 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:59:13:59:13 | y | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:59:17:59:22 | value2 | | {EXTERNAL LOCATION} | bool | -| pattern_matching.rs:60:9:60:10 | TupleExpr | | file://:0:0:0:0 | () | +| pattern_matching.rs:60:9:60:10 | TupleExpr | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:63:9:63:23 | my_tuple_struct | | pattern_matching.rs:6:1:6:37 | MyTupleStruct | | pattern_matching.rs:63:9:63:23 | my_tuple_struct | T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:63:9:63:23 | my_tuple_struct | T2 | {EXTERNAL LOCATION} | bool | @@ -6719,7 +6739,7 @@ inferType | pattern_matching.rs:63:27:63:50 | MyTupleStruct(...) | T2 | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:63:41:63:42 | 42 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:63:45:63:49 | false | | {EXTERNAL LOCATION} | bool | -| pattern_matching.rs:64:5:68:5 | if ... {...} | | file://:0:0:0:0 | () | +| pattern_matching.rs:64:5:68:5 | if ... {...} | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:64:12:64:40 | MyTupleStruct(...) | | pattern_matching.rs:6:1:6:37 | MyTupleStruct | | pattern_matching.rs:64:12:64:40 | MyTupleStruct(...) | T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:64:12:64:40 | MyTupleStruct(...) | T2 | {EXTERNAL LOCATION} | bool | @@ -6728,12 +6748,12 @@ inferType | pattern_matching.rs:64:44:64:58 | my_tuple_struct | | pattern_matching.rs:6:1:6:37 | MyTupleStruct | | pattern_matching.rs:64:44:64:58 | my_tuple_struct | T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:64:44:64:58 | my_tuple_struct | T2 | {EXTERNAL LOCATION} | bool | -| pattern_matching.rs:64:60:68:5 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:64:60:68:5 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:65:13:65:13 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:65:17:65:22 | value1 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:66:13:66:13 | y | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:66:17:66:22 | value2 | | {EXTERNAL LOCATION} | bool | -| pattern_matching.rs:67:9:67:10 | TupleExpr | | file://:0:0:0:0 | () | +| pattern_matching.rs:67:9:67:10 | TupleExpr | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:70:9:70:16 | my_enum1 | | pattern_matching.rs:8:1:11:1 | MyEnum | | pattern_matching.rs:70:9:70:16 | my_enum1 | T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:70:9:70:16 | my_enum1 | T2 | {EXTERNAL LOCATION} | bool | @@ -6742,7 +6762,7 @@ inferType | pattern_matching.rs:70:20:73:5 | ...::Variant1 {...} | T2 | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:71:17:71:18 | 42 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:72:17:72:21 | false | | {EXTERNAL LOCATION} | bool | -| pattern_matching.rs:74:5:85:5 | match my_enum1 { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:74:5:85:5 | match my_enum1 { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:74:11:74:18 | my_enum1 | | pattern_matching.rs:8:1:11:1 | MyEnum | | pattern_matching.rs:74:11:74:18 | my_enum1 | T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:74:11:74:18 | my_enum1 | T2 | {EXTERNAL LOCATION} | bool | @@ -6751,591 +6771,591 @@ inferType | pattern_matching.rs:75:9:75:43 | ...::Variant1 {...} | T2 | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:75:28:75:33 | value1 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:75:36:75:41 | value2 | | {EXTERNAL LOCATION} | bool | -| pattern_matching.rs:75:48:79:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:75:48:79:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:76:17:76:17 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:76:21:76:26 | value1 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:77:17:77:17 | y | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:77:21:77:26 | value2 | | {EXTERNAL LOCATION} | bool | -| pattern_matching.rs:78:13:78:14 | TupleExpr | | file://:0:0:0:0 | () | +| pattern_matching.rs:78:13:78:14 | TupleExpr | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:80:9:80:40 | ...::Variant2(...) | | pattern_matching.rs:8:1:11:1 | MyEnum | | pattern_matching.rs:80:9:80:40 | ...::Variant2(...) | T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:80:9:80:40 | ...::Variant2(...) | T2 | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:80:26:80:31 | value1 | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:80:34:80:39 | value2 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:80:45:84:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:80:45:84:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:81:17:81:17 | x | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:81:21:81:26 | value1 | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:82:17:82:17 | y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:82:21:82:26 | value2 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:83:13:83:14 | TupleExpr | | file://:0:0:0:0 | () | +| pattern_matching.rs:83:13:83:14 | TupleExpr | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:87:9:87:22 | my_nested_enum | | pattern_matching.rs:8:1:11:1 | MyEnum | | pattern_matching.rs:87:9:87:22 | my_nested_enum | T1 | pattern_matching.rs:1:1:4:1 | MyRecordStruct | | pattern_matching.rs:87:9:87:22 | my_nested_enum | T1.T1 | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:87:9:87:22 | my_nested_enum | T1.T2 | file://:0:0:0:0 | & | +| pattern_matching.rs:87:9:87:22 | my_nested_enum | T1.T2 | {EXTERNAL LOCATION} | & | | pattern_matching.rs:87:9:87:22 | my_nested_enum | T1.T2.&T | {EXTERNAL LOCATION} | str | | pattern_matching.rs:87:9:87:22 | my_nested_enum | T2 | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:87:26:93:5 | ...::Variant2(...) | | pattern_matching.rs:8:1:11:1 | MyEnum | | pattern_matching.rs:87:26:93:5 | ...::Variant2(...) | T1 | pattern_matching.rs:1:1:4:1 | MyRecordStruct | | pattern_matching.rs:87:26:93:5 | ...::Variant2(...) | T1.T1 | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:87:26:93:5 | ...::Variant2(...) | T1.T2 | file://:0:0:0:0 | & | +| pattern_matching.rs:87:26:93:5 | ...::Variant2(...) | T1.T2 | {EXTERNAL LOCATION} | & | | pattern_matching.rs:87:26:93:5 | ...::Variant2(...) | T1.T2.&T | {EXTERNAL LOCATION} | str | | pattern_matching.rs:87:26:93:5 | ...::Variant2(...) | T2 | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:88:9:88:13 | false | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:89:9:92:9 | MyRecordStruct {...} | | pattern_matching.rs:1:1:4:1 | MyRecordStruct | | pattern_matching.rs:89:9:92:9 | MyRecordStruct {...} | T1 | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:89:9:92:9 | MyRecordStruct {...} | T2 | file://:0:0:0:0 | & | +| pattern_matching.rs:89:9:92:9 | MyRecordStruct {...} | T2 | {EXTERNAL LOCATION} | & | | pattern_matching.rs:89:9:92:9 | MyRecordStruct {...} | T2.&T | {EXTERNAL LOCATION} | str | | pattern_matching.rs:90:21:90:22 | 42 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:91:21:91:28 | "string" | | file://:0:0:0:0 | & | +| pattern_matching.rs:91:21:91:28 | "string" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:91:21:91:28 | "string" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:95:5:109:5 | match my_nested_enum { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:95:5:109:5 | match my_nested_enum { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:95:11:95:24 | my_nested_enum | | pattern_matching.rs:8:1:11:1 | MyEnum | | pattern_matching.rs:95:11:95:24 | my_nested_enum | T1 | pattern_matching.rs:1:1:4:1 | MyRecordStruct | | pattern_matching.rs:95:11:95:24 | my_nested_enum | T1.T1 | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:95:11:95:24 | my_nested_enum | T1.T2 | file://:0:0:0:0 | & | +| pattern_matching.rs:95:11:95:24 | my_nested_enum | T1.T2 | {EXTERNAL LOCATION} | & | | pattern_matching.rs:95:11:95:24 | my_nested_enum | T1.T2.&T | {EXTERNAL LOCATION} | str | | pattern_matching.rs:95:11:95:24 | my_nested_enum | T2 | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:96:9:102:9 | ...::Variant2(...) | | pattern_matching.rs:8:1:11:1 | MyEnum | | pattern_matching.rs:96:9:102:9 | ...::Variant2(...) | T1 | pattern_matching.rs:1:1:4:1 | MyRecordStruct | | pattern_matching.rs:96:9:102:9 | ...::Variant2(...) | T1.T1 | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:96:9:102:9 | ...::Variant2(...) | T1.T2 | file://:0:0:0:0 | & | +| pattern_matching.rs:96:9:102:9 | ...::Variant2(...) | T1.T2 | {EXTERNAL LOCATION} | & | | pattern_matching.rs:96:9:102:9 | ...::Variant2(...) | T1.T2.&T | {EXTERNAL LOCATION} | str | | pattern_matching.rs:96:9:102:9 | ...::Variant2(...) | T2 | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:97:13:97:18 | value1 | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:98:13:101:13 | MyRecordStruct {...} | | pattern_matching.rs:1:1:4:1 | MyRecordStruct | | pattern_matching.rs:98:13:101:13 | MyRecordStruct {...} | T1 | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:98:13:101:13 | MyRecordStruct {...} | T2 | file://:0:0:0:0 | & | +| pattern_matching.rs:98:13:101:13 | MyRecordStruct {...} | T2 | {EXTERNAL LOCATION} | & | | pattern_matching.rs:98:13:101:13 | MyRecordStruct {...} | T2.&T | {EXTERNAL LOCATION} | str | | pattern_matching.rs:99:25:99:25 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:100:25:100:25 | y | | file://:0:0:0:0 | & | +| pattern_matching.rs:100:25:100:25 | y | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:100:25:100:25 | y | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:102:14:107:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:102:14:107:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:103:17:103:17 | a | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:103:21:103:26 | value1 | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:104:17:104:17 | b | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:104:21:104:21 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:105:17:105:17 | c | | file://:0:0:0:0 | & | +| pattern_matching.rs:105:17:105:17 | c | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:105:17:105:17 | c | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:105:21:105:21 | y | | file://:0:0:0:0 | & | +| pattern_matching.rs:105:21:105:21 | y | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:105:21:105:21 | y | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:106:13:106:14 | TupleExpr | | file://:0:0:0:0 | () | +| pattern_matching.rs:106:13:106:14 | TupleExpr | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:108:9:108:9 | _ | | pattern_matching.rs:8:1:11:1 | MyEnum | | pattern_matching.rs:108:9:108:9 | _ | T1 | pattern_matching.rs:1:1:4:1 | MyRecordStruct | | pattern_matching.rs:108:9:108:9 | _ | T1.T1 | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:108:9:108:9 | _ | T1.T2 | file://:0:0:0:0 | & | +| pattern_matching.rs:108:9:108:9 | _ | T1.T2 | {EXTERNAL LOCATION} | & | | pattern_matching.rs:108:9:108:9 | _ | T1.T2.&T | {EXTERNAL LOCATION} | str | | pattern_matching.rs:108:9:108:9 | _ | T2 | {EXTERNAL LOCATION} | bool | -| pattern_matching.rs:108:14:108:15 | TupleExpr | | file://:0:0:0:0 | () | +| pattern_matching.rs:108:14:108:15 | TupleExpr | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:111:9:111:12 | opt1 | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:111:9:111:12 | opt1 | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:111:16:111:39 | Some(...) | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:111:16:111:39 | Some(...) | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:111:21:111:38 | ...::default(...) | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:113:9:113:9 | _ | | file://:0:0:0:0 | () | -| pattern_matching.rs:113:13:116:5 | if ... {...} | | file://:0:0:0:0 | () | +| pattern_matching.rs:113:9:113:9 | _ | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:113:13:116:5 | if ... {...} | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:113:20:113:33 | Some::<...>(...) | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:113:20:113:33 | Some::<...>(...) | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:113:32:113:32 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:113:37:113:40 | opt1 | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:113:37:113:40 | opt1 | T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:114:5:116:5 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:114:5:116:5 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:115:9:115:9 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:118:9:118:12 | opt2 | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:118:9:118:12 | opt2 | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:118:16:118:39 | Some(...) | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:118:16:118:39 | Some(...) | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:118:21:118:38 | ...::default(...) | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:120:9:120:9 | _ | | file://:0:0:0:0 | () | -| pattern_matching.rs:120:13:123:5 | if ... {...} | | file://:0:0:0:0 | () | +| pattern_matching.rs:120:9:120:9 | _ | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:120:13:123:5 | if ... {...} | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:120:20:120:41 | ...::Some::<...>(...) | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:120:20:120:41 | ...::Some::<...>(...) | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:120:40:120:40 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:120:45:120:48 | opt2 | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:120:45:120:48 | opt2 | T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:121:5:123:5 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:121:5:123:5 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:122:9:122:9 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:125:9:125:12 | opt3 | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:125:9:125:12 | opt3 | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:125:16:125:39 | Some(...) | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:125:16:125:39 | Some(...) | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:125:21:125:38 | ...::default(...) | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:127:9:127:9 | _ | | file://:0:0:0:0 | () | -| pattern_matching.rs:127:13:130:5 | if ... {...} | | file://:0:0:0:0 | () | +| pattern_matching.rs:127:9:127:9 | _ | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:127:13:130:5 | if ... {...} | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:127:20:127:41 | ...::Some(...) | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:127:20:127:41 | ...::Some(...) | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:127:40:127:40 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:127:45:127:48 | opt3 | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:127:45:127:48 | opt3 | T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:128:5:130:5 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:128:5:130:5 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:129:9:129:9 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:132:5:132:8 | None | | {EXTERNAL LOCATION} | Option | -| pattern_matching.rs:132:5:132:8 | None | T | file://:0:0:0:0 | () | -| pattern_matching.rs:168:27:217:1 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:132:5:132:8 | None | T | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:168:27:217:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:169:9:169:13 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:169:17:169:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:171:5:186:5 | match value { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:171:5:186:5 | match value { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:171:11:171:15 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:173:9:173:10 | 42 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:173:15:176:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:173:15:176:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:174:17:174:29 | literal_match | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:174:33:174:37 | value | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:175:22:175:42 | "Literal pattern: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:175:22:175:42 | "Literal pattern: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:175:22:175:42 | "Literal pattern: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:175:22:175:57 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:175:22:175:57 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:175:22:175:57 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:175:22:175:57 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:175:45:175:57 | literal_match | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:177:10:177:10 | 1 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:177:15:180:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:177:15:180:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:178:17:178:32 | negative_literal | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:178:36:178:40 | value | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:179:22:179:43 | "Negative literal: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:179:22:179:43 | "Negative literal: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:179:22:179:43 | "Negative literal: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:179:22:179:61 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:179:22:179:61 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:179:22:179:61 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:179:22:179:61 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:179:46:179:61 | negative_literal | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:181:9:181:9 | 0 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:181:14:184:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:181:14:184:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:182:17:182:28 | zero_literal | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:182:32:182:36 | value | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:183:22:183:39 | "Zero literal: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:183:22:183:39 | "Zero literal: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:183:22:183:39 | "Zero literal: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:183:22:183:53 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:183:22:183:53 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:183:22:183:53 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:183:22:183:53 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:183:42:183:53 | zero_literal | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:185:9:185:9 | _ | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:185:14:185:15 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:185:14:185:15 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:188:9:188:17 | float_val | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:188:21:188:27 | 3.14f64 | | {EXTERNAL LOCATION} | f64 | -| pattern_matching.rs:189:5:195:5 | match float_val { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:189:5:195:5 | match float_val { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:189:11:189:19 | float_val | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:190:9:190:12 | 3.14 | | {EXTERNAL LOCATION} | f64 | -| pattern_matching.rs:190:17:193:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:190:17:193:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:191:17:191:24 | pi_match | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:191:28:191:36 | float_val | | {EXTERNAL LOCATION} | f64 | -| pattern_matching.rs:192:22:192:37 | "Pi matched: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:192:22:192:37 | "Pi matched: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:192:22:192:37 | "Pi matched: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:192:22:192:47 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:192:22:192:47 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:192:22:192:47 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:192:22:192:47 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:192:40:192:47 | pi_match | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:194:9:194:9 | _ | | {EXTERNAL LOCATION} | f64 | -| pattern_matching.rs:194:14:194:15 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:197:9:197:18 | string_val | | file://:0:0:0:0 | & | +| pattern_matching.rs:194:14:194:15 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:197:9:197:18 | string_val | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:197:9:197:18 | string_val | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:197:22:197:28 | "hello" | | file://:0:0:0:0 | & | +| pattern_matching.rs:197:22:197:28 | "hello" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:197:22:197:28 | "hello" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:198:5:204:5 | match string_val { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:198:11:198:20 | string_val | | file://:0:0:0:0 | & | +| pattern_matching.rs:198:5:204:5 | match string_val { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:198:11:198:20 | string_val | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:198:11:198:20 | string_val | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:199:9:199:15 | "hello" | | file://:0:0:0:0 | & | +| pattern_matching.rs:199:9:199:15 | "hello" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:199:9:199:15 | "hello" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:199:20:202:9 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:200:17:200:27 | hello_match | | file://:0:0:0:0 | & | +| pattern_matching.rs:199:20:202:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:200:17:200:27 | hello_match | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:200:17:200:27 | hello_match | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:200:31:200:40 | string_val | | file://:0:0:0:0 | & | +| pattern_matching.rs:200:31:200:40 | string_val | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:200:31:200:40 | string_val | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:201:22:201:41 | "String literal: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:201:22:201:41 | "String literal: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:201:22:201:41 | "String literal: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:201:22:201:54 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:201:22:201:54 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:201:44:201:54 | hello_match | | file://:0:0:0:0 | & | +| pattern_matching.rs:201:22:201:54 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:201:22:201:54 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:201:44:201:54 | hello_match | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:201:44:201:54 | hello_match | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:203:9:203:9 | _ | | file://:0:0:0:0 | & | +| pattern_matching.rs:203:9:203:9 | _ | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:203:9:203:9 | _ | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:203:14:203:15 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:203:14:203:15 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:206:9:206:16 | bool_val | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:206:20:206:23 | true | | {EXTERNAL LOCATION} | bool | -| pattern_matching.rs:207:5:216:5 | match bool_val { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:207:5:216:5 | match bool_val { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:207:11:207:18 | bool_val | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:208:9:208:12 | true | | {EXTERNAL LOCATION} | bool | -| pattern_matching.rs:208:17:211:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:208:17:211:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:209:17:209:26 | true_match | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:209:30:209:37 | bool_val | | {EXTERNAL LOCATION} | bool | -| pattern_matching.rs:210:22:210:39 | "True literal: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:210:22:210:39 | "True literal: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:210:22:210:39 | "True literal: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:210:22:210:51 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:210:22:210:51 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:210:22:210:51 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:210:22:210:51 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:210:42:210:51 | true_match | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:212:9:212:13 | false | | {EXTERNAL LOCATION} | bool | -| pattern_matching.rs:212:18:215:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:212:18:215:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:213:17:213:27 | false_match | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:213:31:213:38 | bool_val | | {EXTERNAL LOCATION} | bool | -| pattern_matching.rs:214:22:214:40 | "False literal: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:214:22:214:40 | "False literal: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:214:22:214:40 | "False literal: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:214:22:214:53 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:214:22:214:53 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:214:22:214:53 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:214:22:214:53 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:214:43:214:53 | false_match | | {EXTERNAL LOCATION} | bool | -| pattern_matching.rs:219:30:277:1 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:219:30:277:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:220:9:220:13 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:220:17:220:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:223:5:228:5 | match value { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:223:5:228:5 | match value { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:223:11:223:15 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:224:9:224:9 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:224:14:227:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:224:14:227:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:225:17:225:27 | bound_value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:225:31:225:31 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:226:22:226:45 | "Identifier pattern: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:226:22:226:45 | "Identifier pattern: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:226:22:226:45 | "Identifier pattern: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:226:22:226:58 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:226:22:226:58 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:226:22:226:58 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:226:22:226:58 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:226:48:226:58 | bound_value | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:231:5:236:5 | match ... { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:231:11:231:16 | &value | | file://:0:0:0:0 | & | +| pattern_matching.rs:231:5:236:5 | match ... { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:231:11:231:16 | &value | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:231:11:231:16 | &value | &T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:231:12:231:16 | value | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:232:13:232:13 | x | | file://:0:0:0:0 | & | -| pattern_matching.rs:232:13:232:13 | x | &T | file://:0:0:0:0 | & | +| pattern_matching.rs:232:13:232:13 | x | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:232:13:232:13 | x | &T | {EXTERNAL LOCATION} | & | | pattern_matching.rs:232:13:232:13 | x | &T.&T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:232:18:235:9 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:233:17:233:25 | ref_bound | | file://:0:0:0:0 | & | -| pattern_matching.rs:233:17:233:25 | ref_bound | &T | file://:0:0:0:0 | & | +| pattern_matching.rs:232:18:235:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:233:17:233:25 | ref_bound | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:233:17:233:25 | ref_bound | &T | {EXTERNAL LOCATION} | & | | pattern_matching.rs:233:17:233:25 | ref_bound | &T.&T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:233:29:233:29 | x | | file://:0:0:0:0 | & | -| pattern_matching.rs:233:29:233:29 | x | &T | file://:0:0:0:0 | & | +| pattern_matching.rs:233:29:233:29 | x | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:233:29:233:29 | x | &T | {EXTERNAL LOCATION} | & | | pattern_matching.rs:233:29:233:29 | x | &T.&T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:234:22:234:49 | "Reference identifier: {:?}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:234:22:234:49 | "Reference identifier: {:?}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:234:22:234:49 | "Reference identifier: {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:234:22:234:60 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:234:22:234:60 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:234:52:234:60 | ref_bound | | file://:0:0:0:0 | & | -| pattern_matching.rs:234:52:234:60 | ref_bound | &T | file://:0:0:0:0 | & | +| pattern_matching.rs:234:22:234:60 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:234:22:234:60 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:234:52:234:60 | ref_bound | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:234:52:234:60 | ref_bound | &T | {EXTERNAL LOCATION} | & | | pattern_matching.rs:234:52:234:60 | ref_bound | &T.&T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:239:13:239:25 | mutable_value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:239:29:239:33 | 10i32 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:240:5:246:5 | match mutable_value { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:240:5:246:5 | match mutable_value { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:240:11:240:23 | mutable_value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:241:13:241:13 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:241:18:245:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:241:18:245:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:242:17:242:25 | mut_bound | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:242:29:242:29 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:243:13:243:13 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:243:13:243:18 | ... += ... | | file://:0:0:0:0 | () | +| pattern_matching.rs:243:13:243:18 | ... += ... | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:243:18:243:18 | 1 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:244:22:244:45 | "Mutable identifier: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:244:22:244:45 | "Mutable identifier: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:244:22:244:45 | "Mutable identifier: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:244:22:244:56 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:244:22:244:56 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:244:22:244:56 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:244:22:244:56 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:244:48:244:56 | mut_bound | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:249:9:249:20 | option_value | | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:249:9:249:20 | option_value | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:249:24:249:44 | ...::Some(...) | | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:249:24:249:44 | ...::Some(...) | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:249:39:249:43 | 42i32 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:250:5:266:5 | match option_value { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:250:5:266:5 | match option_value { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:250:11:250:22 | option_value | | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:250:11:250:22 | option_value | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:251:9:251:30 | ...::Some(...) | | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:251:9:251:30 | ...::Some(...) | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:251:24:251:24 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:251:28:251:29 | 42 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:251:35:254:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:251:35:254:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:252:17:252:24 | at_bound | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:252:28:252:28 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:253:22:253:49 | "@ pattern with literal: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:253:22:253:49 | "@ pattern with literal: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:253:22:253:49 | "@ pattern with literal: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:253:22:253:59 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:253:22:253:59 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:253:22:253:59 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:253:22:253:59 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:253:52:253:59 | at_bound | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:255:9:255:35 | ...::Some(...) | | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:255:9:255:35 | ...::Some(...) | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:255:24:255:24 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:255:28:255:28 | 1 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:255:32:255:34 | 100 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:255:40:258:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:255:40:258:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:256:17:256:30 | range_at_bound | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:256:34:256:34 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:257:22:257:47 | "@ pattern with range: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:257:22:257:47 | "@ pattern with range: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:257:22:257:47 | "@ pattern with range: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:257:22:257:63 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:257:22:257:63 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:257:22:257:63 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:257:22:257:63 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:257:50:257:63 | range_at_bound | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:259:9:259:25 | ...::Some(...) | | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:259:9:259:25 | ...::Some(...) | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:259:24:259:24 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:259:30:262:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:259:30:262:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:260:17:260:26 | some_bound | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:260:30:260:30 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:261:22:261:37 | "Some value: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:261:22:261:37 | "Some value: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:261:22:261:37 | "Some value: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:261:22:261:49 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:261:22:261:49 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:261:22:261:49 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:261:22:261:49 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:261:40:261:49 | some_bound | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:263:9:263:22 | ...::None | | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:263:9:263:22 | ...::None | T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:263:27:265:9 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:264:22:264:33 | "None value\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:263:27:265:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:264:22:264:33 | "None value\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:264:22:264:33 | "None value\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:264:22:264:33 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:264:22:264:33 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:264:22:264:33 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:264:22:264:33 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:269:13:269:23 | ref_mut_val | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:269:27:269:30 | 5i32 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:270:5:276:5 | match ... { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:270:11:270:26 | &mut ref_mut_val | | file://:0:0:0:0 | & | +| pattern_matching.rs:270:5:276:5 | match ... { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:270:11:270:26 | &mut ref_mut_val | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:270:11:270:26 | &mut ref_mut_val | &T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:270:16:270:26 | ref_mut_val | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:271:17:271:17 | x | | file://:0:0:0:0 | & | -| pattern_matching.rs:271:17:271:17 | x | &T | file://:0:0:0:0 | & | +| pattern_matching.rs:271:17:271:17 | x | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:271:17:271:17 | x | &T | {EXTERNAL LOCATION} | & | | pattern_matching.rs:271:17:271:17 | x | &T.&T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:271:22:275:9 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:272:17:272:29 | ref_mut_bound | | file://:0:0:0:0 | & | -| pattern_matching.rs:272:17:272:29 | ref_mut_bound | &T | file://:0:0:0:0 | & | +| pattern_matching.rs:271:22:275:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:272:17:272:29 | ref_mut_bound | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:272:17:272:29 | ref_mut_bound | &T | {EXTERNAL LOCATION} | & | | pattern_matching.rs:272:17:272:29 | ref_mut_bound | &T.&T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:272:33:272:33 | x | | file://:0:0:0:0 | & | -| pattern_matching.rs:272:33:272:33 | x | &T | file://:0:0:0:0 | & | +| pattern_matching.rs:272:33:272:33 | x | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:272:33:272:33 | x | &T | {EXTERNAL LOCATION} | & | | pattern_matching.rs:272:33:272:33 | x | &T.&T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:273:13:273:27 | * ... | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:273:13:273:32 | ... += ... | | file://:0:0:0:0 | () | -| pattern_matching.rs:273:14:273:27 | * ... | | file://:0:0:0:0 | & | +| pattern_matching.rs:273:13:273:32 | ... += ... | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:273:14:273:27 | * ... | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:273:14:273:27 | * ... | &T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:273:15:273:27 | ref_mut_bound | | file://:0:0:0:0 | & | -| pattern_matching.rs:273:15:273:27 | ref_mut_bound | &T | file://:0:0:0:0 | & | +| pattern_matching.rs:273:15:273:27 | ref_mut_bound | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:273:15:273:27 | ref_mut_bound | &T | {EXTERNAL LOCATION} | & | | pattern_matching.rs:273:15:273:27 | ref_mut_bound | &T.&T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:273:32:273:32 | 1 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:274:22:274:38 | "Ref mut pattern\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:274:22:274:38 | "Ref mut pattern\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:274:22:274:38 | "Ref mut pattern\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:274:22:274:38 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:274:22:274:38 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:279:28:290:1 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:274:22:274:38 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:274:22:274:38 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:279:28:290:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:280:9:280:13 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:280:17:280:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:282:5:289:5 | match value { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:282:5:289:5 | match value { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:282:11:282:15 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:283:9:283:10 | 42 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:283:15:283:40 | MacroExpr | | file://:0:0:0:0 | () | -| pattern_matching.rs:283:24:283:39 | "Specific match\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:283:15:283:40 | MacroExpr | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:283:24:283:39 | "Specific match\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:283:24:283:39 | "Specific match\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:283:24:283:39 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:283:24:283:39 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:283:24:283:39 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:283:24:283:39 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:285:9:285:9 | _ | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:285:14:288:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:285:14:288:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:286:17:286:32 | wildcard_context | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:286:36:286:40 | value | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:287:22:287:47 | "Wildcard pattern for: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:287:22:287:47 | "Wildcard pattern for: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:287:22:287:47 | "Wildcard pattern for: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:287:22:287:65 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:287:22:287:65 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:287:22:287:65 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:287:22:287:65 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:287:50:287:65 | wildcard_context | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:292:25:324:1 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:292:25:324:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:293:9:293:13 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:293:17:293:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:295:5:310:5 | match value { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:295:5:310:5 | match value { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:295:11:295:15 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:297:9:297:9 | 1 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:297:9:297:14 | RangePat | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:297:13:297:14 | 10 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:297:19:300:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:297:19:300:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:298:17:298:31 | range_inclusive | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:298:35:298:39 | value | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:299:22:299:42 | "Range inclusive: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:299:22:299:42 | "Range inclusive: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:299:22:299:42 | "Range inclusive: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:299:22:299:59 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:299:22:299:59 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:299:22:299:59 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:299:22:299:59 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:299:45:299:59 | range_inclusive | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:301:9:301:10 | 11 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:301:9:301:12 | RangePat | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:301:17:304:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:301:17:304:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:302:17:302:26 | range_from | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:302:30:302:34 | value | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:303:22:303:40 | "Range from 11: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:303:22:303:40 | "Range from 11: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:303:22:303:40 | "Range from 11: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:303:22:303:52 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:303:22:303:52 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:303:22:303:52 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:303:22:303:52 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:303:43:303:52 | range_from | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:305:9:305:12 | RangePat | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:305:12:305:12 | 0 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:305:17:308:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:305:17:308:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:306:17:306:34 | range_to_inclusive | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:306:38:306:42 | value | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:307:22:307:47 | "Range to 0 inclusive: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:307:22:307:47 | "Range to 0 inclusive: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:307:22:307:47 | "Range to 0 inclusive: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:307:22:307:67 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:307:22:307:67 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:307:22:307:67 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:307:22:307:67 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:307:50:307:67 | range_to_inclusive | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:309:9:309:9 | _ | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:309:14:309:15 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:309:14:309:15 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:312:9:312:16 | char_val | | {EXTERNAL LOCATION} | char | | pattern_matching.rs:312:20:312:22 | 'c' | | {EXTERNAL LOCATION} | char | -| pattern_matching.rs:313:5:323:5 | match char_val { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:313:5:323:5 | match char_val { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:313:11:313:18 | char_val | | {EXTERNAL LOCATION} | char | | pattern_matching.rs:314:9:314:11 | 'a' | | {EXTERNAL LOCATION} | char | | pattern_matching.rs:314:9:314:17 | RangePat | | {EXTERNAL LOCATION} | char | | pattern_matching.rs:314:15:314:17 | 'z' | | {EXTERNAL LOCATION} | char | -| pattern_matching.rs:314:22:317:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:314:22:317:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:315:17:315:30 | lowercase_char | | {EXTERNAL LOCATION} | char | | pattern_matching.rs:315:34:315:41 | char_val | | {EXTERNAL LOCATION} | char | -| pattern_matching.rs:316:22:316:41 | "Lowercase char: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:316:22:316:41 | "Lowercase char: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:316:22:316:41 | "Lowercase char: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:316:22:316:57 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:316:22:316:57 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:316:22:316:57 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:316:22:316:57 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:316:44:316:57 | lowercase_char | | {EXTERNAL LOCATION} | char | | pattern_matching.rs:318:9:318:11 | 'A' | | {EXTERNAL LOCATION} | char | | pattern_matching.rs:318:9:318:17 | RangePat | | {EXTERNAL LOCATION} | char | | pattern_matching.rs:318:15:318:17 | 'Z' | | {EXTERNAL LOCATION} | char | -| pattern_matching.rs:318:22:321:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:318:22:321:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:319:17:319:30 | uppercase_char | | {EXTERNAL LOCATION} | char | | pattern_matching.rs:319:34:319:41 | char_val | | {EXTERNAL LOCATION} | char | -| pattern_matching.rs:320:22:320:41 | "Uppercase char: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:320:22:320:41 | "Uppercase char: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:320:22:320:41 | "Uppercase char: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:320:22:320:57 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:320:22:320:57 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:320:22:320:57 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:320:22:320:57 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:320:44:320:57 | uppercase_char | | {EXTERNAL LOCATION} | char | | pattern_matching.rs:322:9:322:9 | _ | | {EXTERNAL LOCATION} | char | -| pattern_matching.rs:322:14:322:15 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:326:29:355:1 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:322:14:322:15 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:326:29:355:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:327:9:327:13 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:327:17:327:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:328:13:328:25 | mutable_value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:328:29:328:33 | 10i32 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:331:5:340:5 | match ... { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:331:11:331:16 | &value | | file://:0:0:0:0 | & | +| pattern_matching.rs:331:5:340:5 | match ... { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:331:11:331:16 | &value | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:331:11:331:16 | &value | &T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:331:12:331:16 | value | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:332:9:332:11 | &42 | | file://:0:0:0:0 | & | +| pattern_matching.rs:332:9:332:11 | &42 | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:332:9:332:11 | &42 | &T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:332:10:332:11 | 42 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:332:16:335:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:332:16:335:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:333:17:333:27 | deref_match | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:333:31:333:35 | value | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:334:22:334:45 | "Dereferenced match: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:334:22:334:45 | "Dereferenced match: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:334:22:334:45 | "Dereferenced match: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:334:22:334:58 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:334:22:334:58 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:334:22:334:58 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:334:22:334:58 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:334:48:334:58 | deref_match | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:336:9:336:10 | &... | | file://:0:0:0:0 | & | +| pattern_matching.rs:336:9:336:10 | &... | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:336:9:336:10 | &... | &T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:336:10:336:10 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:336:15:339:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:336:15:339:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:337:17:337:27 | deref_bound | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:337:31:337:31 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:338:22:338:47 | "Dereferenced binding: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:338:22:338:47 | "Dereferenced binding: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:338:22:338:47 | "Dereferenced binding: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:338:22:338:60 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:338:22:338:60 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:338:22:338:60 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:338:22:338:60 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:338:50:338:60 | deref_bound | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:342:5:347:5 | match ... { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:342:11:342:28 | &mut mutable_value | | file://:0:0:0:0 | & | +| pattern_matching.rs:342:5:347:5 | match ... { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:342:11:342:28 | &mut mutable_value | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:342:11:342:28 | &mut mutable_value | &T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:342:16:342:28 | mutable_value | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:343:9:343:18 | &mut ... | | file://:0:0:0:0 | & | +| pattern_matching.rs:343:9:343:18 | &mut ... | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:343:9:343:18 | &mut ... | &T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:343:18:343:18 | x | | file://:0:0:0:0 | & | +| pattern_matching.rs:343:18:343:18 | x | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:343:18:343:18 | x | &T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:343:23:346:9 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:344:17:344:29 | mut_ref_bound | | file://:0:0:0:0 | & | +| pattern_matching.rs:343:23:346:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:344:17:344:29 | mut_ref_bound | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:344:17:344:29 | mut_ref_bound | &T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:344:33:344:33 | x | | file://:0:0:0:0 | & | +| pattern_matching.rs:344:33:344:33 | x | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:344:33:344:33 | x | &T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:345:22:345:46 | "Mutable ref pattern: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:345:22:345:46 | "Mutable ref pattern: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:345:22:345:46 | "Mutable ref pattern: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:345:22:345:61 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:345:22:345:61 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:345:49:345:61 | mut_ref_bound | | file://:0:0:0:0 | & | +| pattern_matching.rs:345:22:345:61 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:345:22:345:61 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:345:49:345:61 | mut_ref_bound | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:345:49:345:61 | mut_ref_bound | &T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:349:5:354:5 | match ... { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:349:11:349:16 | &value | | file://:0:0:0:0 | & | +| pattern_matching.rs:349:5:354:5 | match ... { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:349:11:349:16 | &value | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:349:11:349:16 | &value | &T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:349:12:349:16 | value | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:350:13:350:13 | x | | file://:0:0:0:0 | & | -| pattern_matching.rs:350:13:350:13 | x | &T | file://:0:0:0:0 | & | +| pattern_matching.rs:350:13:350:13 | x | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:350:13:350:13 | x | &T | {EXTERNAL LOCATION} | & | | pattern_matching.rs:350:13:350:13 | x | &T.&T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:350:18:353:9 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:351:17:351:27 | ref_pattern | | file://:0:0:0:0 | & | -| pattern_matching.rs:351:17:351:27 | ref_pattern | &T | file://:0:0:0:0 | & | +| pattern_matching.rs:350:18:353:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:351:17:351:27 | ref_pattern | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:351:17:351:27 | ref_pattern | &T | {EXTERNAL LOCATION} | & | | pattern_matching.rs:351:17:351:27 | ref_pattern | &T.&T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:351:31:351:31 | x | | file://:0:0:0:0 | & | -| pattern_matching.rs:351:31:351:31 | x | &T | file://:0:0:0:0 | & | +| pattern_matching.rs:351:31:351:31 | x | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:351:31:351:31 | x | &T | {EXTERNAL LOCATION} | & | | pattern_matching.rs:351:31:351:31 | x | &T.&T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:352:22:352:44 | "Reference pattern: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:352:22:352:44 | "Reference pattern: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:352:22:352:44 | "Reference pattern: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:352:22:352:57 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:352:22:352:57 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:352:47:352:57 | ref_pattern | | file://:0:0:0:0 | & | -| pattern_matching.rs:352:47:352:57 | ref_pattern | &T | file://:0:0:0:0 | & | +| pattern_matching.rs:352:22:352:57 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:352:22:352:57 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:352:47:352:57 | ref_pattern | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:352:47:352:57 | ref_pattern | &T | {EXTERNAL LOCATION} | & | | pattern_matching.rs:352:47:352:57 | ref_pattern | &T.&T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:357:26:398:1 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:357:26:398:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:358:9:358:13 | point | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:358:17:358:38 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:358:28:358:29 | 10 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:358:35:358:36 | 20 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:361:5:380:5 | match point { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:361:5:380:5 | match point { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:361:11:361:15 | point | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:362:9:362:28 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:362:20:362:20 | 0 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:362:26:362:26 | 0 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:362:33:365:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:362:33:365:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:363:17:363:22 | origin | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:363:26:363:30 | point | | pattern_matching.rs:135:1:140:1 | Point | -| pattern_matching.rs:364:22:364:41 | "Origin point: {:?}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:364:22:364:41 | "Origin point: {:?}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:364:22:364:41 | "Origin point: {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:364:22:364:49 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:364:22:364:49 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:364:22:364:49 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:364:22:364:49 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:364:44:364:49 | origin | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:366:9:366:25 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:366:17:366:17 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:366:23:366:23 | 0 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:366:30:370:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:366:30:370:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:367:17:367:24 | x_axis_x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:367:28:367:28 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:368:17:368:28 | x_axis_point | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:368:32:368:36 | point | | pattern_matching.rs:135:1:140:1 | Point | -| pattern_matching.rs:369:22:369:56 | "Point on x-axis: x={}, point=... | | file://:0:0:0:0 | & | +| pattern_matching.rs:369:22:369:56 | "Point on x-axis: x={}, point=... | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:369:22:369:56 | "Point on x-axis: x={}, point=... | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:369:22:369:80 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:369:22:369:80 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:369:22:369:80 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:369:22:369:80 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:369:59:369:66 | x_axis_x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:369:69:369:80 | x_axis_point | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:371:9:371:27 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:371:20:371:21 | 10 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:371:32:374:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:371:32:374:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:372:17:372:27 | ten_x_point | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:372:31:372:35 | point | | pattern_matching.rs:135:1:140:1 | Point | -| pattern_matching.rs:373:22:373:44 | "Point with x=10: {:?}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:373:22:373:44 | "Point with x=10: {:?}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:373:22:373:44 | "Point with x=10: {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:373:22:373:57 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:373:22:373:57 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:373:22:373:57 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:373:22:373:57 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:373:47:373:57 | ten_x_point | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:375:9:375:22 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:375:17:375:17 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:375:20:375:20 | y | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:375:27:379:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:375:27:379:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:376:17:376:25 | general_x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:376:29:376:29 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:377:17:377:25 | general_y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:377:29:377:29 | y | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:378:22:378:46 | "General point: ({}, {})\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:378:22:378:46 | "General point: ({}, {})\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:378:22:378:46 | "General point: ({}, {})\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:378:22:378:68 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:378:22:378:68 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:378:22:378:68 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:378:22:378:68 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:378:49:378:57 | general_x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:378:60:378:68 | general_y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:383:9:383:13 | shape | | pattern_matching.rs:145:1:150:1 | Shape | | pattern_matching.rs:383:17:386:5 | ...::Rectangle {...} | | pattern_matching.rs:145:1:150:1 | Shape | | pattern_matching.rs:384:16:384:19 | 10.0 | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:385:17:385:20 | 20.0 | | {EXTERNAL LOCATION} | f64 | -| pattern_matching.rs:387:5:397:5 | match shape { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:387:5:397:5 | match shape { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:387:11:387:15 | shape | | pattern_matching.rs:145:1:150:1 | Shape | | pattern_matching.rs:388:9:391:9 | ...::Rectangle {...} | | pattern_matching.rs:145:1:150:1 | Shape | | pattern_matching.rs:389:20:389:20 | w | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:390:21:390:21 | h | | {EXTERNAL LOCATION} | f64 | -| pattern_matching.rs:391:14:395:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:391:14:395:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:392:17:392:26 | rect_width | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:392:30:392:30 | w | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:393:17:393:27 | rect_height | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:393:31:393:31 | h | | {EXTERNAL LOCATION} | f64 | -| pattern_matching.rs:394:22:394:39 | "Rectangle: {}x{}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:394:22:394:39 | "Rectangle: {}x{}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:394:22:394:39 | "Rectangle: {}x{}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:394:22:394:64 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:394:22:394:64 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:394:22:394:64 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:394:22:394:64 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:394:42:394:51 | rect_width | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:394:54:394:64 | rect_height | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:396:9:396:9 | _ | | pattern_matching.rs:145:1:150:1 | Shape | -| pattern_matching.rs:396:14:396:15 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:400:32:441:1 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:396:14:396:15 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:400:32:441:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:401:9:401:13 | color | | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:401:17:401:34 | Color(...) | | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:401:23:401:25 | 255 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:401:28:401:30 | 128 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:401:33:401:33 | 0 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:404:5:418:5 | match color { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:404:5:418:5 | match color { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:404:11:404:15 | color | | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:405:9:405:24 | Color(...) | | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:405:15:405:17 | 255 | | {EXTERNAL LOCATION} | i32 | @@ -7344,80 +7364,80 @@ inferType | pattern_matching.rs:405:20:405:20 | 0 | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:405:23:405:23 | 0 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:405:23:405:23 | 0 | | {EXTERNAL LOCATION} | u8 | -| pattern_matching.rs:405:29:408:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:405:29:408:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:406:17:406:25 | red_color | | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:406:29:406:33 | color | | pattern_matching.rs:142:1:143:25 | Color | -| pattern_matching.rs:407:22:407:37 | "Pure red: {:?}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:407:22:407:37 | "Pure red: {:?}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:407:22:407:37 | "Pure red: {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:407:22:407:48 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:407:22:407:48 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:407:22:407:48 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:407:22:407:48 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:407:40:407:48 | red_color | | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:409:9:409:22 | Color(...) | | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:409:15:409:15 | r | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:409:18:409:18 | g | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:409:21:409:21 | b | | {EXTERNAL LOCATION} | u8 | -| pattern_matching.rs:409:27:417:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:409:27:417:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:410:17:410:29 | red_component | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:410:33:410:33 | r | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:411:17:411:31 | green_component | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:411:35:411:35 | g | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:412:17:412:30 | blue_component | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:412:34:412:34 | b | | {EXTERNAL LOCATION} | u8 | -| pattern_matching.rs:414:17:414:37 | "Color: ({}, {}, {})\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:414:17:414:37 | "Color: ({}, {}, {})\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:414:17:414:37 | "Color: ({}, {}, {})\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:414:17:415:62 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:414:17:415:62 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:414:17:415:62 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:414:17:415:62 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:415:17:415:29 | red_component | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:415:32:415:46 | green_component | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:415:49:415:62 | blue_component | | {EXTERNAL LOCATION} | u8 | -| pattern_matching.rs:421:5:430:5 | match color { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:421:5:430:5 | match color { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:421:11:421:15 | color | | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:422:9:422:22 | Color(...) | | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:422:15:422:17 | 255 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:422:15:422:17 | 255 | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:422:20:422:21 | .. | | {EXTERNAL LOCATION} | u8 | -| pattern_matching.rs:422:27:425:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:422:27:425:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:423:17:423:29 | reddish_color | | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:423:33:423:37 | color | | pattern_matching.rs:142:1:143:25 | Color | -| pattern_matching.rs:424:22:424:42 | "Reddish color: {:?}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:424:22:424:42 | "Reddish color: {:?}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:424:22:424:42 | "Reddish color: {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:424:22:424:57 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:424:22:424:57 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:424:22:424:57 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:424:22:424:57 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:424:45:424:57 | reddish_color | | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:426:9:426:20 | Color(...) | | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:426:15:426:15 | r | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:426:18:426:19 | .. | | {EXTERNAL LOCATION} | u8 | -| pattern_matching.rs:426:25:429:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:426:25:429:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:427:17:427:23 | any_red | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:427:27:427:27 | r | | {EXTERNAL LOCATION} | u8 | -| pattern_matching.rs:428:22:428:45 | "Any color with red: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:428:22:428:45 | "Any color with red: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:428:22:428:45 | "Any color with red: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:428:22:428:54 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:428:22:428:54 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:428:22:428:54 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:428:22:428:54 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:428:48:428:54 | any_red | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:434:9:434:15 | wrapper | | pattern_matching.rs:432:5:433:24 | Wrapper | | pattern_matching.rs:434:19:434:29 | Wrapper(...) | | pattern_matching.rs:432:5:433:24 | Wrapper | | pattern_matching.rs:434:27:434:28 | 42 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:435:5:440:5 | match wrapper { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:435:5:440:5 | match wrapper { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:435:11:435:17 | wrapper | | pattern_matching.rs:432:5:433:24 | Wrapper | | pattern_matching.rs:436:9:436:18 | Wrapper(...) | | pattern_matching.rs:432:5:433:24 | Wrapper | | pattern_matching.rs:436:17:436:17 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:436:23:439:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:436:23:439:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:437:17:437:29 | wrapped_value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:437:33:437:33 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:438:22:438:34 | "Wrapped: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:438:22:438:34 | "Wrapped: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:438:22:438:34 | "Wrapped: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:438:22:438:49 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:438:22:438:49 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:438:22:438:49 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:438:22:438:49 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:438:37:438:49 | wrapped_value | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:443:25:498:1 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:444:9:444:13 | tuple | | file://:0:0:0:0 | (T_3) | +| pattern_matching.rs:443:25:498:1 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:444:9:444:13 | tuple | | {EXTERNAL LOCATION} | (T_3) | | pattern_matching.rs:444:9:444:13 | tuple | 0(3) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:444:9:444:13 | tuple | 1(3) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:444:9:444:13 | tuple | 1(3) | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:444:9:444:13 | tuple | 2(3) | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:444:9:444:13 | tuple | 2(3) | {EXTERNAL LOCATION} | f64 | -| pattern_matching.rs:444:17:444:36 | TupleExpr | | file://:0:0:0:0 | (T_3) | +| pattern_matching.rs:444:17:444:36 | TupleExpr | | {EXTERNAL LOCATION} | (T_3) | | pattern_matching.rs:444:17:444:36 | TupleExpr | 0(3) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:444:17:444:36 | TupleExpr | 1(3) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:444:17:444:36 | TupleExpr | 1(3) | {EXTERNAL LOCATION} | i64 | @@ -7426,14 +7446,14 @@ inferType | pattern_matching.rs:444:18:444:21 | 1i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:444:24:444:27 | 2i64 | | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:444:30:444:35 | 3.0f32 | | {EXTERNAL LOCATION} | f32 | -| pattern_matching.rs:447:5:458:5 | match tuple { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:447:11:447:15 | tuple | | file://:0:0:0:0 | (T_3) | +| pattern_matching.rs:447:5:458:5 | match tuple { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:447:11:447:15 | tuple | | {EXTERNAL LOCATION} | (T_3) | | pattern_matching.rs:447:11:447:15 | tuple | 0(3) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:447:11:447:15 | tuple | 1(3) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:447:11:447:15 | tuple | 1(3) | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:447:11:447:15 | tuple | 2(3) | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:447:11:447:15 | tuple | 2(3) | {EXTERNAL LOCATION} | f64 | -| pattern_matching.rs:448:9:448:19 | TuplePat | | file://:0:0:0:0 | (T_3) | +| pattern_matching.rs:448:9:448:19 | TuplePat | | {EXTERNAL LOCATION} | (T_3) | | pattern_matching.rs:448:9:448:19 | TuplePat | 0(3) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:448:9:448:19 | TuplePat | 1(3) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:448:9:448:19 | TuplePat | 1(3) | {EXTERNAL LOCATION} | i64 | @@ -7444,30 +7464,30 @@ inferType | pattern_matching.rs:448:13:448:13 | 2 | | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:448:16:448:18 | 3.0 | | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:448:16:448:18 | 3.0 | | {EXTERNAL LOCATION} | f64 | -| pattern_matching.rs:448:24:451:9 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:449:17:449:27 | exact_tuple | | file://:0:0:0:0 | (T_3) | +| pattern_matching.rs:448:24:451:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:449:17:449:27 | exact_tuple | | {EXTERNAL LOCATION} | (T_3) | | pattern_matching.rs:449:17:449:27 | exact_tuple | 0(3) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:449:17:449:27 | exact_tuple | 1(3) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:449:17:449:27 | exact_tuple | 1(3) | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:449:17:449:27 | exact_tuple | 2(3) | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:449:17:449:27 | exact_tuple | 2(3) | {EXTERNAL LOCATION} | f64 | -| pattern_matching.rs:449:31:449:35 | tuple | | file://:0:0:0:0 | (T_3) | +| pattern_matching.rs:449:31:449:35 | tuple | | {EXTERNAL LOCATION} | (T_3) | | pattern_matching.rs:449:31:449:35 | tuple | 0(3) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:449:31:449:35 | tuple | 1(3) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:449:31:449:35 | tuple | 1(3) | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:449:31:449:35 | tuple | 2(3) | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:449:31:449:35 | tuple | 2(3) | {EXTERNAL LOCATION} | f64 | -| pattern_matching.rs:450:22:450:40 | "Exact tuple: {:?}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:450:22:450:40 | "Exact tuple: {:?}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:450:22:450:40 | "Exact tuple: {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:450:22:450:53 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:450:22:450:53 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:450:43:450:53 | exact_tuple | | file://:0:0:0:0 | (T_3) | +| pattern_matching.rs:450:22:450:53 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:450:22:450:53 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:450:43:450:53 | exact_tuple | | {EXTERNAL LOCATION} | (T_3) | | pattern_matching.rs:450:43:450:53 | exact_tuple | 0(3) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:450:43:450:53 | exact_tuple | 1(3) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:450:43:450:53 | exact_tuple | 1(3) | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:450:43:450:53 | exact_tuple | 2(3) | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:450:43:450:53 | exact_tuple | 2(3) | {EXTERNAL LOCATION} | f64 | -| pattern_matching.rs:452:9:452:17 | TuplePat | | file://:0:0:0:0 | (T_3) | +| pattern_matching.rs:452:9:452:17 | TuplePat | | {EXTERNAL LOCATION} | (T_3) | | pattern_matching.rs:452:9:452:17 | TuplePat | 0(3) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:452:9:452:17 | TuplePat | 1(3) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:452:9:452:17 | TuplePat | 1(3) | {EXTERNAL LOCATION} | i64 | @@ -7478,7 +7498,7 @@ inferType | pattern_matching.rs:452:13:452:13 | b | | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:452:16:452:16 | c | | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:452:16:452:16 | c | | {EXTERNAL LOCATION} | f64 | -| pattern_matching.rs:452:22:457:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:452:22:457:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:453:17:453:26 | first_elem | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:453:30:453:30 | a | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:454:17:454:27 | second_elem | | {EXTERNAL LOCATION} | i32 | @@ -7489,285 +7509,285 @@ inferType | pattern_matching.rs:455:17:455:26 | third_elem | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:455:30:455:30 | c | | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:455:30:455:30 | c | | {EXTERNAL LOCATION} | f64 | -| pattern_matching.rs:456:22:456:42 | "Tuple: ({}, {}, {})\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:456:22:456:42 | "Tuple: ({}, {}, {})\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:456:22:456:42 | "Tuple: ({}, {}, {})\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:456:22:456:79 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:456:22:456:79 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:456:22:456:79 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:456:22:456:79 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:456:45:456:54 | first_elem | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:456:57:456:67 | second_elem | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:456:57:456:67 | second_elem | | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:456:70:456:79 | third_elem | | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:456:70:456:79 | third_elem | | {EXTERNAL LOCATION} | f64 | -| pattern_matching.rs:461:5:466:5 | match tuple { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:461:11:461:15 | tuple | | file://:0:0:0:0 | (T_3) | +| pattern_matching.rs:461:5:466:5 | match tuple { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:461:11:461:15 | tuple | | {EXTERNAL LOCATION} | (T_3) | | pattern_matching.rs:461:11:461:15 | tuple | 0(3) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:461:11:461:15 | tuple | 1(3) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:461:11:461:15 | tuple | 1(3) | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:461:11:461:15 | tuple | 2(3) | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:461:11:461:15 | tuple | 2(3) | {EXTERNAL LOCATION} | f64 | -| pattern_matching.rs:462:9:462:19 | TuplePat | | file://:0:0:0:0 | (T_3) | +| pattern_matching.rs:462:9:462:19 | TuplePat | | {EXTERNAL LOCATION} | (T_3) | | pattern_matching.rs:462:9:462:19 | TuplePat | 0(3) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:462:9:462:19 | TuplePat | 1(3) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:462:9:462:19 | TuplePat | 1(3) | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:462:9:462:19 | TuplePat | 2(3) | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:462:9:462:19 | TuplePat | 2(3) | {EXTERNAL LOCATION} | f64 | -| pattern_matching.rs:462:24:465:9 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:464:22:464:40 | "First element: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:462:24:465:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:464:22:464:40 | "First element: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:464:22:464:40 | "First element: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:464:22:464:53 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:464:22:464:53 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:469:9:469:12 | unit | | file://:0:0:0:0 | () | -| pattern_matching.rs:469:16:469:17 | TupleExpr | | file://:0:0:0:0 | () | -| pattern_matching.rs:470:5:475:5 | match unit { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:470:11:470:14 | unit | | file://:0:0:0:0 | () | -| pattern_matching.rs:471:9:471:10 | TuplePat | | file://:0:0:0:0 | () | -| pattern_matching.rs:471:15:474:9 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:472:17:472:26 | unit_value | | file://:0:0:0:0 | () | -| pattern_matching.rs:472:30:472:33 | unit | | file://:0:0:0:0 | () | -| pattern_matching.rs:473:22:473:39 | "Unit value: {:?}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:464:22:464:53 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:464:22:464:53 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:469:9:469:12 | unit | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:469:16:469:17 | TupleExpr | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:470:5:475:5 | match unit { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:470:11:470:14 | unit | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:471:9:471:10 | TuplePat | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:471:15:474:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:472:17:472:26 | unit_value | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:472:30:472:33 | unit | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:473:22:473:39 | "Unit value: {:?}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:473:22:473:39 | "Unit value: {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:473:22:473:51 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:473:22:473:51 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:473:42:473:51 | unit_value | | file://:0:0:0:0 | () | -| pattern_matching.rs:478:9:478:14 | single | | file://:0:0:0:0 | (T_1) | +| pattern_matching.rs:473:22:473:51 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:473:22:473:51 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:473:42:473:51 | unit_value | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:478:9:478:14 | single | | {EXTERNAL LOCATION} | (T_1) | | pattern_matching.rs:478:9:478:14 | single | 0(1) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:478:18:478:25 | TupleExpr | | file://:0:0:0:0 | (T_1) | +| pattern_matching.rs:478:18:478:25 | TupleExpr | | {EXTERNAL LOCATION} | (T_1) | | pattern_matching.rs:478:18:478:25 | TupleExpr | 0(1) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:478:19:478:23 | 42i32 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:479:5:484:5 | match single { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:479:11:479:16 | single | | file://:0:0:0:0 | (T_1) | +| pattern_matching.rs:479:5:484:5 | match single { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:479:11:479:16 | single | | {EXTERNAL LOCATION} | (T_1) | | pattern_matching.rs:479:11:479:16 | single | 0(1) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:480:9:480:12 | TuplePat | | file://:0:0:0:0 | (T_1) | +| pattern_matching.rs:480:9:480:12 | TuplePat | | {EXTERNAL LOCATION} | (T_1) | | pattern_matching.rs:480:9:480:12 | TuplePat | 0(1) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:480:10:480:10 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:480:17:483:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:480:17:483:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:481:17:481:27 | single_elem | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:481:31:481:31 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:482:22:482:47 | "Single element tuple: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:482:22:482:47 | "Single element tuple: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:482:22:482:47 | "Single element tuple: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:482:22:482:60 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:482:22:482:60 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:482:22:482:60 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:482:22:482:60 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:482:50:482:60 | single_elem | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:487:9:487:18 | ref_tuple1 | | file://:0:0:0:0 | & | -| pattern_matching.rs:487:9:487:18 | ref_tuple1 | &T | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:487:9:487:18 | ref_tuple1 | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:487:9:487:18 | ref_tuple1 | &T | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:487:9:487:18 | ref_tuple1 | &T.0(2) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:487:9:487:18 | ref_tuple1 | &T.1(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:487:35:487:41 | &... | | file://:0:0:0:0 | & | -| pattern_matching.rs:487:35:487:41 | &... | &T | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:487:35:487:41 | &... | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:487:35:487:41 | &... | &T | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:487:35:487:41 | &... | &T.0(2) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:487:35:487:41 | &... | &T.1(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:487:36:487:41 | TupleExpr | | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:487:36:487:41 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:487:36:487:41 | TupleExpr | 0(2) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:487:36:487:41 | TupleExpr | 1(2) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:487:37:487:37 | 1 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:487:40:487:40 | 2 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:488:5:491:5 | if ... {...} | | file://:0:0:0:0 | () | -| pattern_matching.rs:488:12:488:17 | TuplePat | | file://:0:0:0:0 | (T_2) | -| pattern_matching.rs:488:21:488:30 | ref_tuple1 | | file://:0:0:0:0 | & | -| pattern_matching.rs:488:21:488:30 | ref_tuple1 | &T | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:488:5:491:5 | if ... {...} | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:488:12:488:17 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:488:21:488:30 | ref_tuple1 | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:488:21:488:30 | ref_tuple1 | &T | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:488:21:488:30 | ref_tuple1 | &T.0(2) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:488:21:488:30 | ref_tuple1 | &T.1(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:488:32:491:5 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:489:18:489:24 | "n: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:488:32:491:5 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:489:18:489:24 | "n: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:489:18:489:24 | "n: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:489:18:489:27 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:489:18:489:27 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:490:18:490:24 | "m: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:489:18:489:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:489:18:489:27 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:490:18:490:24 | "m: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:490:18:490:24 | "m: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:490:18:490:27 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:490:18:490:27 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:494:9:494:18 | ref_tuple2 | | file://:0:0:0:0 | & | -| pattern_matching.rs:494:9:494:18 | ref_tuple2 | &T | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:490:18:490:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:490:18:490:27 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:494:9:494:18 | ref_tuple2 | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:494:9:494:18 | ref_tuple2 | &T | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:494:9:494:18 | ref_tuple2 | &T.0(2) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:494:9:494:18 | ref_tuple2 | &T.1(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:494:35:494:41 | &... | | file://:0:0:0:0 | & | -| pattern_matching.rs:494:35:494:41 | &... | &T | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:494:35:494:41 | &... | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:494:35:494:41 | &... | &T | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:494:35:494:41 | &... | &T.0(2) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:494:35:494:41 | &... | &T.1(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:494:36:494:41 | TupleExpr | | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:494:36:494:41 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:494:36:494:41 | TupleExpr | 0(2) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:494:36:494:41 | TupleExpr | 1(2) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:494:37:494:37 | 1 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:494:40:494:40 | 2 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:495:9:495:14 | TuplePat | | file://:0:0:0:0 | (T_2) | -| pattern_matching.rs:495:18:495:27 | ref_tuple2 | | file://:0:0:0:0 | & | -| pattern_matching.rs:495:18:495:27 | ref_tuple2 | &T | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:495:9:495:14 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:495:18:495:27 | ref_tuple2 | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:495:18:495:27 | ref_tuple2 | &T | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:495:18:495:27 | ref_tuple2 | &T.0(2) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:495:18:495:27 | ref_tuple2 | &T.1(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:496:14:496:20 | "n: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:496:14:496:20 | "n: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:496:14:496:20 | "n: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:496:14:496:23 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:496:14:496:23 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:497:14:497:20 | "m: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:496:14:496:23 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:496:14:496:23 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:497:14:497:20 | "m: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:497:14:497:20 | "m: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:497:14:497:23 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:497:14:497:23 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:500:33:520:1 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:497:14:497:23 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:497:14:497:23 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:500:33:520:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:501:9:501:13 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:501:17:501:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:504:5:509:5 | match value { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:504:5:509:5 | match value { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:504:11:504:15 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:505:9:505:11 | (...) | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:505:10:505:10 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:505:16:508:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:505:16:508:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:506:17:506:27 | paren_bound | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:506:31:506:31 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:507:22:507:48 | "Parenthesized pattern: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:507:22:507:48 | "Parenthesized pattern: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:507:22:507:48 | "Parenthesized pattern: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:507:22:507:61 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:507:22:507:61 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:507:22:507:61 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:507:22:507:61 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:507:51:507:61 | paren_bound | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:512:9:512:13 | tuple | | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:512:9:512:13 | tuple | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:512:9:512:13 | tuple | 0(2) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:512:9:512:13 | tuple | 1(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:512:17:512:28 | TupleExpr | | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:512:17:512:28 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:512:17:512:28 | TupleExpr | 0(2) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:512:17:512:28 | TupleExpr | 1(2) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:512:18:512:21 | 1i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:512:24:512:27 | 2i32 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:513:5:519:5 | match tuple { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:513:11:513:15 | tuple | | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:513:5:519:5 | match tuple { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:513:11:513:15 | tuple | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:513:11:513:15 | tuple | 0(2) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:513:11:513:15 | tuple | 1(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:514:9:514:16 | TuplePat | | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:514:9:514:16 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:514:9:514:16 | TuplePat | 0(2) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:514:9:514:16 | TuplePat | 1(2) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:514:10:514:10 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:514:13:514:15 | (...) | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:514:14:514:14 | y | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:514:21:518:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:514:21:518:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:515:17:515:23 | paren_x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:515:27:515:27 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:516:17:516:23 | paren_y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:516:27:516:27 | y | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:517:22:517:53 | "Parenthesized in tuple: {}, {... | | file://:0:0:0:0 | & | +| pattern_matching.rs:517:22:517:53 | "Parenthesized in tuple: {}, {... | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:517:22:517:53 | "Parenthesized in tuple: {}, {... | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:517:22:517:71 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:517:22:517:71 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:517:22:517:71 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:517:22:517:71 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:517:56:517:62 | paren_x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:517:65:517:71 | paren_y | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:522:25:563:1 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:523:9:523:13 | slice | | file://:0:0:0:0 | & | -| pattern_matching.rs:523:9:523:13 | slice | &T | file://:0:0:0:0 | [] | +| pattern_matching.rs:522:25:563:1 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:523:9:523:13 | slice | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:523:9:523:13 | slice | &T | {EXTERNAL LOCATION} | [] | | pattern_matching.rs:523:9:523:13 | slice | &T.[T] | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:523:25:523:40 | &... | | file://:0:0:0:0 | & | -| pattern_matching.rs:523:25:523:40 | &... | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:523:25:523:40 | &... | &T | file://:0:0:0:0 | [] | +| pattern_matching.rs:523:25:523:40 | &... | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:523:25:523:40 | &... | &T | {EXTERNAL LOCATION} | [] | +| pattern_matching.rs:523:25:523:40 | &... | &T | {EXTERNAL LOCATION} | [;] | | pattern_matching.rs:523:25:523:40 | &... | &T.[T;...] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:523:25:523:40 | &... | &T.[T] | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:523:26:523:40 | [...] | | file://:0:0:0:0 | [] | +| pattern_matching.rs:523:26:523:40 | [...] | | {EXTERNAL LOCATION} | [;] | | pattern_matching.rs:523:26:523:40 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:523:27:523:27 | 1 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:523:30:523:30 | 2 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:523:33:523:33 | 3 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:523:36:523:36 | 4 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:523:39:523:39 | 5 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:526:5:551:5 | match slice { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:526:11:526:15 | slice | | file://:0:0:0:0 | & | -| pattern_matching.rs:526:11:526:15 | slice | &T | file://:0:0:0:0 | [] | +| pattern_matching.rs:526:5:551:5 | match slice { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:526:11:526:15 | slice | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:526:11:526:15 | slice | &T | {EXTERNAL LOCATION} | [] | | pattern_matching.rs:526:11:526:15 | slice | &T.[T] | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:527:9:527:10 | SlicePat | | file://:0:0:0:0 | & | -| pattern_matching.rs:527:9:527:10 | SlicePat | &T | file://:0:0:0:0 | [] | +| pattern_matching.rs:527:9:527:10 | SlicePat | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:527:9:527:10 | SlicePat | &T | {EXTERNAL LOCATION} | [] | | pattern_matching.rs:527:9:527:10 | SlicePat | &T.[T] | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:527:15:530:9 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:528:17:528:27 | empty_slice | | file://:0:0:0:0 | & | -| pattern_matching.rs:528:17:528:27 | empty_slice | &T | file://:0:0:0:0 | [] | +| pattern_matching.rs:527:15:530:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:528:17:528:27 | empty_slice | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:528:17:528:27 | empty_slice | &T | {EXTERNAL LOCATION} | [] | | pattern_matching.rs:528:17:528:27 | empty_slice | &T.[T] | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:528:31:528:35 | slice | | file://:0:0:0:0 | & | -| pattern_matching.rs:528:31:528:35 | slice | &T | file://:0:0:0:0 | [] | +| pattern_matching.rs:528:31:528:35 | slice | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:528:31:528:35 | slice | &T | {EXTERNAL LOCATION} | [] | | pattern_matching.rs:528:31:528:35 | slice | &T.[T] | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:529:22:529:40 | "Empty slice: {:?}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:529:22:529:40 | "Empty slice: {:?}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:529:22:529:40 | "Empty slice: {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:529:22:529:53 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:529:22:529:53 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:529:43:529:53 | empty_slice | | file://:0:0:0:0 | & | -| pattern_matching.rs:529:43:529:53 | empty_slice | &T | file://:0:0:0:0 | [] | +| pattern_matching.rs:529:22:529:53 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:529:22:529:53 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:529:43:529:53 | empty_slice | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:529:43:529:53 | empty_slice | &T | {EXTERNAL LOCATION} | [] | | pattern_matching.rs:529:43:529:53 | empty_slice | &T.[T] | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:531:9:531:11 | SlicePat | | file://:0:0:0:0 | & | -| pattern_matching.rs:531:9:531:11 | SlicePat | &T | file://:0:0:0:0 | [] | +| pattern_matching.rs:531:9:531:11 | SlicePat | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:531:9:531:11 | SlicePat | &T | {EXTERNAL LOCATION} | [] | | pattern_matching.rs:531:9:531:11 | SlicePat | &T.[T] | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:531:16:534:9 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:533:22:533:41 | "Single element: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:531:16:534:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:533:22:533:41 | "Single element: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:533:22:533:41 | "Single element: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:533:22:533:54 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:533:22:533:54 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:535:9:535:23 | SlicePat | | file://:0:0:0:0 | & | -| pattern_matching.rs:535:9:535:23 | SlicePat | &T | file://:0:0:0:0 | [] | +| pattern_matching.rs:533:22:533:54 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:533:22:533:54 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:535:9:535:23 | SlicePat | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:535:9:535:23 | SlicePat | &T | {EXTERNAL LOCATION} | [] | | pattern_matching.rs:535:9:535:23 | SlicePat | &T.[T] | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:535:28:539:9 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:538:22:538:43 | "Two elements: {}, {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:535:28:539:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:538:22:538:43 | "Two elements: {}, {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:538:22:538:43 | "Two elements: {}, {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:538:22:538:70 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:538:22:538:70 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:540:9:540:34 | SlicePat | | file://:0:0:0:0 | & | -| pattern_matching.rs:540:9:540:34 | SlicePat | &T | file://:0:0:0:0 | [] | +| pattern_matching.rs:538:22:538:70 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:538:22:538:70 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:540:9:540:34 | SlicePat | | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:540:9:540:34 | SlicePat | &T | {EXTERNAL LOCATION} | [] | | pattern_matching.rs:540:9:540:34 | SlicePat | &T.[T] | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:540:39:550:9 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:545:17:545:53 | "First: {}, last: {}, middle l... | | file://:0:0:0:0 | & | +| pattern_matching.rs:540:39:550:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:545:17:545:53 | "First: {}, last: {}, middle l... | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:545:17:545:53 | "First: {}, last: {}, middle l... | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:545:17:548:34 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:545:17:548:34 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:554:9:554:13 | array | | file://:0:0:0:0 | [] | +| pattern_matching.rs:545:17:548:34 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:545:17:548:34 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:554:9:554:13 | array | | {EXTERNAL LOCATION} | [;] | | pattern_matching.rs:554:9:554:13 | array | [T;...] | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:554:17:554:28 | [...] | | file://:0:0:0:0 | [] | +| pattern_matching.rs:554:17:554:28 | [...] | | {EXTERNAL LOCATION} | [;] | | pattern_matching.rs:554:17:554:28 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:554:18:554:21 | 1i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:554:24:554:24 | 2 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:554:27:554:27 | 3 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:555:5:562:5 | match array { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:555:11:555:15 | array | | file://:0:0:0:0 | [] | +| pattern_matching.rs:555:5:562:5 | match array { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:555:11:555:15 | array | | {EXTERNAL LOCATION} | [;] | | pattern_matching.rs:555:11:555:15 | array | [T;...] | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:556:9:556:17 | SlicePat | | file://:0:0:0:0 | [] | +| pattern_matching.rs:556:9:556:17 | SlicePat | | {EXTERNAL LOCATION} | [;] | | pattern_matching.rs:556:9:556:17 | SlicePat | [T;...] | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:556:22:561:9 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:560:22:560:49 | "Array elements: {}, {}, {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:556:22:561:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:560:22:560:49 | "Array elements: {}, {}, {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:560:22:560:49 | "Array elements: {}, {}, {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:560:22:560:70 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:560:22:560:70 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:565:24:601:1 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:560:22:560:70 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:560:22:560:70 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:565:24:601:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:567:27:567:28 | 42 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:568:9:568:13 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:568:17:568:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:570:5:576:5 | match value { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:570:5:576:5 | match value { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:570:11:570:15 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:571:9:571:16 | CONSTANT | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:571:21:574:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:571:21:574:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:572:17:572:27 | const_match | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:572:31:572:35 | value | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:573:22:573:43 | "Matches constant: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:573:22:573:43 | "Matches constant: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:573:22:573:43 | "Matches constant: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:573:22:573:56 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:573:22:573:56 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:573:22:573:56 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:573:22:573:56 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:573:46:573:56 | const_match | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:575:9:575:9 | _ | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:575:14:575:15 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:575:14:575:15 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:579:9:579:14 | option | | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:579:9:579:14 | option | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:579:18:579:38 | ...::Some(...) | | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:579:18:579:38 | ...::Some(...) | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:579:33:579:37 | 10i32 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:580:5:588:5 | match option { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:580:5:588:5 | match option { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:580:11:580:16 | option | | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:580:11:580:16 | option | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:581:9:581:22 | ...::None | | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:581:9:581:22 | ...::None | T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:581:27:583:9 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:582:22:582:35 | "None variant\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:581:27:583:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:582:22:582:35 | "None variant\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:582:22:582:35 | "None variant\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:582:22:582:35 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:582:22:582:35 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:582:22:582:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:582:22:582:35 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:584:9:584:25 | ...::Some(...) | | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:584:9:584:25 | ...::Some(...) | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:584:24:584:24 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:584:30:587:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:584:30:587:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:585:17:585:26 | some_value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:585:30:585:30 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:586:22:586:37 | "Some value: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:586:22:586:37 | "Some value: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:586:22:586:37 | "Some value: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:586:22:586:49 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:586:22:586:49 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:586:22:586:49 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:586:22:586:49 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:586:40:586:49 | some_value | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:591:5:600:5 | match ... { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:591:5:600:5 | match ... { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:591:11:591:51 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | | pattern_matching.rs:591:11:591:51 | ...::Ok::<...>(...) | E | {EXTERNAL LOCATION} | usize | | pattern_matching.rs:591:11:591:51 | ...::Ok::<...>(...) | T | {EXTERNAL LOCATION} | i32 | @@ -7776,61 +7796,61 @@ inferType | pattern_matching.rs:592:9:592:34 | ...::Ok(...) | E | {EXTERNAL LOCATION} | usize | | pattern_matching.rs:592:9:592:34 | ...::Ok(...) | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:592:33:592:33 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:592:39:595:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:592:39:595:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:593:17:593:24 | ok_value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:593:28:593:28 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:594:22:594:35 | "Ok value: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:594:22:594:35 | "Ok value: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:594:22:594:35 | "Ok value: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:594:22:594:45 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:594:22:594:45 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:594:22:594:45 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:594:22:594:45 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:594:38:594:45 | ok_value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:596:9:596:35 | ...::Err(...) | | {EXTERNAL LOCATION} | Result | | pattern_matching.rs:596:9:596:35 | ...::Err(...) | E | {EXTERNAL LOCATION} | usize | | pattern_matching.rs:596:9:596:35 | ...::Err(...) | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:596:34:596:34 | e | | {EXTERNAL LOCATION} | usize | -| pattern_matching.rs:596:40:599:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:596:40:599:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:597:17:597:25 | err_value | | {EXTERNAL LOCATION} | usize | | pattern_matching.rs:597:29:597:29 | e | | {EXTERNAL LOCATION} | usize | -| pattern_matching.rs:598:22:598:32 | "Error: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:598:22:598:32 | "Error: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:598:22:598:32 | "Error: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:598:22:598:43 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:598:22:598:43 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:598:22:598:43 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:598:22:598:43 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:598:35:598:43 | err_value | | {EXTERNAL LOCATION} | usize | -| pattern_matching.rs:603:22:638:1 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:603:22:638:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:604:9:604:13 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:604:17:604:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:607:5:617:5 | match value { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:607:5:617:5 | match value { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:607:11:607:15 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:608:9:608:9 | 1 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:608:9:608:17 | 1 \| 2 \| 3 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:608:13:608:13 | 2 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:608:17:608:17 | 3 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:608:22:611:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:608:22:611:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:609:17:609:25 | small_num | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:609:29:609:33 | value | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:610:22:610:39 | "Small number: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:610:22:610:39 | "Small number: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:610:22:610:39 | "Small number: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:610:22:610:50 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:610:22:610:50 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:610:22:610:50 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:610:22:610:50 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:610:42:610:50 | small_num | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:612:9:612:10 | 10 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:612:9:612:15 | 10 \| 20 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:612:14:612:15 | 20 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:612:20:615:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:612:20:615:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:613:17:613:25 | round_num | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:613:29:613:33 | value | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:614:22:614:39 | "Round number: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:614:22:614:39 | "Round number: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:614:22:614:39 | "Round number: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:614:22:614:50 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:614:22:614:50 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:614:22:614:50 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:614:22:614:50 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:614:42:614:50 | round_num | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:616:9:616:9 | _ | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:616:14:616:15 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:616:14:616:15 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:620:9:620:13 | point | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:620:17:620:36 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:620:28:620:28 | 0 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:620:34:620:34 | 5 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:621:5:628:5 | match point { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:621:5:628:5 | match point { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:621:11:621:15 | point | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:622:9:622:29 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:622:9:622:53 | ... \| ... | | pattern_matching.rs:135:1:140:1 | Point | @@ -7841,20 +7861,20 @@ inferType | pattern_matching.rs:622:41:622:41 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:622:47:622:47 | y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:622:51:622:51 | 0 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:622:58:626:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:622:58:626:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:623:17:623:22 | axis_x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:623:26:623:26 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:624:17:624:22 | axis_y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:624:26:624:26 | y | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:625:22:625:46 | "Point on axis: ({}, {})\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:625:22:625:46 | "Point on axis: ({}, {})\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:625:22:625:46 | "Point on axis: ({}, {})\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:625:22:625:62 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:625:22:625:62 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:625:22:625:62 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:625:22:625:62 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:625:49:625:54 | axis_x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:625:57:625:62 | axis_y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:627:9:627:9 | _ | | pattern_matching.rs:135:1:140:1 | Point | -| pattern_matching.rs:627:14:627:15 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:631:5:637:5 | match value { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:627:14:627:15 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:631:5:637:5 | match value { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:631:11:631:15 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:632:9:632:9 | 1 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:632:9:632:14 | RangePat | | {EXTERNAL LOCATION} | i32 | @@ -7863,23 +7883,23 @@ inferType | pattern_matching.rs:632:18:632:19 | 90 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:632:18:632:25 | RangePat | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:632:23:632:25 | 100 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:632:30:635:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:632:30:635:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:633:17:633:30 | range_or_value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:633:34:633:38 | value | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:634:22:634:35 | "In range: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:634:22:634:35 | "In range: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:634:22:634:35 | "In range: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:634:22:634:51 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:634:22:634:51 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:634:22:634:51 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:634:22:634:51 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:634:38:634:51 | range_or_value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:636:9:636:9 | _ | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:636:14:636:15 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:640:24:674:1 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:641:9:641:13 | tuple | | file://:0:0:0:0 | (T_4) | +| pattern_matching.rs:636:14:636:15 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:640:24:674:1 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:641:9:641:13 | tuple | | {EXTERNAL LOCATION} | (T_4) | | pattern_matching.rs:641:9:641:13 | tuple | 0(4) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:641:9:641:13 | tuple | 1(4) | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:641:9:641:13 | tuple | 2(4) | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:641:9:641:13 | tuple | 3(4) | {EXTERNAL LOCATION} | u8 | -| pattern_matching.rs:641:17:641:41 | TupleExpr | | file://:0:0:0:0 | (T_4) | +| pattern_matching.rs:641:17:641:41 | TupleExpr | | {EXTERNAL LOCATION} | (T_4) | | pattern_matching.rs:641:17:641:41 | TupleExpr | 0(4) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:641:17:641:41 | TupleExpr | 1(4) | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:641:17:641:41 | TupleExpr | 2(4) | {EXTERNAL LOCATION} | f32 | @@ -7888,91 +7908,91 @@ inferType | pattern_matching.rs:641:24:641:27 | 2i64 | | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:641:30:641:35 | 3.0f32 | | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:641:38:641:40 | 4u8 | | {EXTERNAL LOCATION} | u8 | -| pattern_matching.rs:644:5:649:5 | match tuple { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:644:11:644:15 | tuple | | file://:0:0:0:0 | (T_4) | +| pattern_matching.rs:644:5:649:5 | match tuple { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:644:11:644:15 | tuple | | {EXTERNAL LOCATION} | (T_4) | | pattern_matching.rs:644:11:644:15 | tuple | 0(4) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:644:11:644:15 | tuple | 1(4) | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:644:11:644:15 | tuple | 2(4) | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:644:11:644:15 | tuple | 3(4) | {EXTERNAL LOCATION} | u8 | -| pattern_matching.rs:645:9:645:19 | TuplePat | | file://:0:0:0:0 | (T_4) | +| pattern_matching.rs:645:9:645:19 | TuplePat | | {EXTERNAL LOCATION} | (T_4) | | pattern_matching.rs:645:9:645:19 | TuplePat | 0(4) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:645:9:645:19 | TuplePat | 1(4) | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:645:9:645:19 | TuplePat | 2(4) | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:645:9:645:19 | TuplePat | 3(4) | {EXTERNAL LOCATION} | u8 | -| pattern_matching.rs:645:24:648:9 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:647:22:647:42 | "First with rest: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:645:24:648:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:647:22:647:42 | "First with rest: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:647:22:647:42 | "First with rest: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:647:22:647:54 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:647:22:647:54 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:651:5:656:5 | match tuple { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:651:11:651:15 | tuple | | file://:0:0:0:0 | (T_4) | +| pattern_matching.rs:647:22:647:54 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:647:22:647:54 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:651:5:656:5 | match tuple { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:651:11:651:15 | tuple | | {EXTERNAL LOCATION} | (T_4) | | pattern_matching.rs:651:11:651:15 | tuple | 0(4) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:651:11:651:15 | tuple | 1(4) | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:651:11:651:15 | tuple | 2(4) | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:651:11:651:15 | tuple | 3(4) | {EXTERNAL LOCATION} | u8 | -| pattern_matching.rs:652:9:652:18 | TuplePat | | file://:0:0:0:0 | (T_4) | +| pattern_matching.rs:652:9:652:18 | TuplePat | | {EXTERNAL LOCATION} | (T_4) | | pattern_matching.rs:652:9:652:18 | TuplePat | 0(4) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:652:9:652:18 | TuplePat | 1(4) | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:652:9:652:18 | TuplePat | 2(4) | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:652:9:652:18 | TuplePat | 3(4) | {EXTERNAL LOCATION} | u8 | -| pattern_matching.rs:652:23:655:9 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:654:22:654:41 | "Last with rest: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:652:23:655:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:654:22:654:41 | "Last with rest: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:654:22:654:41 | "Last with rest: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:654:22:654:52 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:654:22:654:52 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:658:5:664:5 | match tuple { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:658:11:658:15 | tuple | | file://:0:0:0:0 | (T_4) | +| pattern_matching.rs:654:22:654:52 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:654:22:654:52 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:658:5:664:5 | match tuple { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:658:11:658:15 | tuple | | {EXTERNAL LOCATION} | (T_4) | | pattern_matching.rs:658:11:658:15 | tuple | 0(4) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:658:11:658:15 | tuple | 1(4) | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:658:11:658:15 | tuple | 2(4) | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:658:11:658:15 | tuple | 3(4) | {EXTERNAL LOCATION} | u8 | -| pattern_matching.rs:659:9:659:25 | TuplePat | | file://:0:0:0:0 | (T_4) | +| pattern_matching.rs:659:9:659:25 | TuplePat | | {EXTERNAL LOCATION} | (T_4) | | pattern_matching.rs:659:9:659:25 | TuplePat | 0(4) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:659:9:659:25 | TuplePat | 1(4) | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:659:9:659:25 | TuplePat | 2(4) | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:659:9:659:25 | TuplePat | 3(4) | {EXTERNAL LOCATION} | u8 | -| pattern_matching.rs:659:30:663:9 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:662:22:662:45 | "First and last: {}, {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:659:30:663:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:662:22:662:45 | "First and last: {}, {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:662:22:662:45 | "First and last: {}, {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:662:22:662:67 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:662:22:662:67 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:662:22:662:67 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:662:22:662:67 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:667:9:667:13 | point | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:667:17:667:38 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:667:28:667:29 | 10 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:667:35:667:36 | 20 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:668:5:673:5 | match point { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:668:5:673:5 | match point { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:668:11:668:15 | point | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:669:9:669:23 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:669:17:669:17 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:669:28:672:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:669:28:672:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:670:17:670:22 | rest_x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:670:26:670:26 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:671:22:671:39 | "X coordinate: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:671:22:671:39 | "X coordinate: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:671:22:671:39 | "X coordinate: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:671:22:671:47 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:671:22:671:47 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:671:22:671:47 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:671:22:671:47 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:671:42:671:47 | rest_x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:676:25:696:1 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:676:25:696:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:678:17:678:18 | 42 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:678:17:678:18 | match 42i32 { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:679:17:679:17 | match 42i32 { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:678:17:678:18 | match 42i32 { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:679:17:679:17 | match 42i32 { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:679:17:679:17 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:694:21:694:25 | 42i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:694:21:694:25 | 42i32 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:694:21:694:25 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:694:21:694:29 | match 42i32 { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:694:21:694:25 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:694:21:694:29 | match 42i32 { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:694:28:694:29 | 42 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:695:21:695:25 | 10i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:695:21:695:25 | 10i32 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:695:21:695:25 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:695:21:695:28 | match 10i32 { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:695:21:695:25 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:695:21:695:28 | match 10i32 { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:695:28:695:28 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:698:34:724:1 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:700:9:700:20 | complex_data | | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:698:34:724:1 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:700:9:700:20 | complex_data | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:700:9:700:20 | complex_data | 0(2) | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:700:9:700:20 | complex_data | 1(2) | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:700:9:700:20 | complex_data | 1(2).T | pattern_matching.rs:142:1:143:25 | Color | -| pattern_matching.rs:700:24:700:79 | TupleExpr | | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:700:24:700:79 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:700:24:700:79 | TupleExpr | 0(2) | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:700:24:700:79 | TupleExpr | 1(2) | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:700:24:700:79 | TupleExpr | 1(2).T | pattern_matching.rs:142:1:143:25 | Color | @@ -7985,12 +8005,12 @@ inferType | pattern_matching.rs:700:68:700:70 | 255 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:700:73:700:73 | 0 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:700:76:700:76 | 0 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:702:5:723:5 | match complex_data { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:702:11:702:22 | complex_data | | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:702:5:723:5 | match complex_data { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:702:11:702:22 | complex_data | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:702:11:702:22 | complex_data | 0(2) | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:702:11:702:22 | complex_data | 1(2) | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:702:11:702:22 | complex_data | 1(2).T | pattern_matching.rs:142:1:143:25 | Color | -| pattern_matching.rs:704:9:704:61 | TuplePat | | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:704:9:704:61 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:704:9:704:61 | TuplePat | 0(2) | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:704:9:704:61 | TuplePat | 1(2) | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:704:9:704:61 | TuplePat | 1(2).T | pattern_matching.rs:142:1:143:25 | Color | @@ -8004,25 +8024,25 @@ inferType | pattern_matching.rs:704:50:704:52 | 255 | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:704:55:704:55 | g | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:704:58:704:58 | b | | {EXTERNAL LOCATION} | u8 | -| pattern_matching.rs:704:66:712:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:704:66:712:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:705:17:705:24 | nested_y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:705:28:705:28 | y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:706:17:706:24 | nested_g | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:706:28:706:28 | g | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:707:17:707:24 | nested_b | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:707:28:707:28 | b | | {EXTERNAL LOCATION} | u8 | -| pattern_matching.rs:709:17:709:57 | "Complex nested: y={}, green={... | | file://:0:0:0:0 | & | +| pattern_matching.rs:709:17:709:57 | "Complex nested: y={}, green={... | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:709:17:709:57 | "Complex nested: y={}, green={... | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:709:17:710:44 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:709:17:710:44 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:709:17:710:44 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:709:17:710:44 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:710:17:710:24 | nested_y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:710:27:710:34 | nested_g | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:710:37:710:44 | nested_b | | {EXTERNAL LOCATION} | u8 | -| pattern_matching.rs:714:9:714:41 | TuplePat | | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:714:9:714:41 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:714:9:714:41 | TuplePat | 0(2) | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:714:9:714:41 | TuplePat | 1(2) | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:714:9:714:41 | TuplePat | 1(2).T | pattern_matching.rs:142:1:143:25 | Color | -| pattern_matching.rs:714:9:714:71 | ... \| ... | | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:714:9:714:71 | ... \| ... | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:714:9:714:71 | ... \| ... | 0(2) | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:714:9:714:71 | ... \| ... | 1(2) | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:714:9:714:71 | ... \| ... | 1(2).T | pattern_matching.rs:142:1:143:25 | Color | @@ -8030,7 +8050,7 @@ inferType | pattern_matching.rs:714:18:714:18 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:714:27:714:40 | ...::None | | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:714:27:714:40 | ...::None | T | pattern_matching.rs:142:1:143:25 | Color | -| pattern_matching.rs:714:45:714:71 | TuplePat | | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:714:45:714:71 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:714:45:714:71 | TuplePat | 0(2) | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:714:45:714:71 | TuplePat | 1(2) | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:714:45:714:71 | TuplePat | 1(2).T | pattern_matching.rs:142:1:143:25 | Color | @@ -8039,36 +8059,36 @@ inferType | pattern_matching.rs:714:61:714:61 | 0 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:714:70:714:70 | _ | | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:714:70:714:70 | _ | T | pattern_matching.rs:142:1:143:25 | Color | -| pattern_matching.rs:714:76:717:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:714:76:717:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:715:17:715:29 | alt_complex_x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:715:33:715:33 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:716:22:716:50 | "Alternative complex: x={:?}\\n... | | file://:0:0:0:0 | & | +| pattern_matching.rs:716:22:716:50 | "Alternative complex: x={:?}\\n... | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:716:22:716:50 | "Alternative complex: x={:?}\\n... | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:716:22:716:65 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:716:22:716:65 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:716:22:716:65 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:716:22:716:65 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:716:53:716:65 | alt_complex_x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:719:9:719:13 | other | | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:719:9:719:13 | other | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:719:9:719:13 | other | 0(2) | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:719:9:719:13 | other | 1(2) | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:719:9:719:13 | other | 1(2).T | pattern_matching.rs:142:1:143:25 | Color | -| pattern_matching.rs:719:18:722:9 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:720:17:720:29 | other_complex | | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:719:18:722:9 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:720:17:720:29 | other_complex | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:720:17:720:29 | other_complex | 0(2) | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:720:17:720:29 | other_complex | 1(2) | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:720:17:720:29 | other_complex | 1(2).T | pattern_matching.rs:142:1:143:25 | Color | -| pattern_matching.rs:720:33:720:37 | other | | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:720:33:720:37 | other | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:720:33:720:37 | other | 0(2) | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:720:33:720:37 | other | 1(2) | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:720:33:720:37 | other | 1(2).T | pattern_matching.rs:142:1:143:25 | Color | -| pattern_matching.rs:721:22:721:47 | "Other complex data: {:?}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:721:22:721:47 | "Other complex data: {:?}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:721:22:721:47 | "Other complex data: {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:721:22:721:62 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:721:22:721:62 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:721:50:721:62 | other_complex | | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:721:22:721:62 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:721:22:721:62 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:721:50:721:62 | other_complex | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:721:50:721:62 | other_complex | 0(2) | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:721:50:721:62 | other_complex | 1(2) | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:721:50:721:62 | other_complex | 1(2).T | pattern_matching.rs:142:1:143:25 | Color | -| pattern_matching.rs:726:37:758:1 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:726:37:758:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:728:9:728:13 | point | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:728:17:728:38 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:728:28:728:29 | 10 | | {EXTERNAL LOCATION} | i32 | @@ -8081,25 +8101,25 @@ inferType | pattern_matching.rs:730:17:730:17 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:731:9:731:13 | let_y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:731:17:731:17 | y | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:733:9:733:13 | tuple | | file://:0:0:0:0 | (T_3) | +| pattern_matching.rs:733:9:733:13 | tuple | | {EXTERNAL LOCATION} | (T_3) | | pattern_matching.rs:733:9:733:13 | tuple | 0(3) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:733:9:733:13 | tuple | 1(3) | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:733:9:733:13 | tuple | 2(3) | {EXTERNAL LOCATION} | f32 | -| pattern_matching.rs:733:17:733:36 | TupleExpr | | file://:0:0:0:0 | (T_3) | +| pattern_matching.rs:733:17:733:36 | TupleExpr | | {EXTERNAL LOCATION} | (T_3) | | pattern_matching.rs:733:17:733:36 | TupleExpr | 0(3) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:733:17:733:36 | TupleExpr | 1(3) | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:733:17:733:36 | TupleExpr | 2(3) | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:733:18:733:21 | 1i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:733:24:733:27 | 2i64 | | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:733:30:733:35 | 3.0f32 | | {EXTERNAL LOCATION} | f32 | -| pattern_matching.rs:734:9:734:17 | TuplePat | | file://:0:0:0:0 | (T_3) | +| pattern_matching.rs:734:9:734:17 | TuplePat | | {EXTERNAL LOCATION} | (T_3) | | pattern_matching.rs:734:9:734:17 | TuplePat | 0(3) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:734:9:734:17 | TuplePat | 1(3) | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:734:9:734:17 | TuplePat | 2(3) | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:734:10:734:10 | a | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:734:13:734:13 | b | | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:734:16:734:16 | c | | {EXTERNAL LOCATION} | f32 | -| pattern_matching.rs:734:21:734:25 | tuple | | file://:0:0:0:0 | (T_3) | +| pattern_matching.rs:734:21:734:25 | tuple | | {EXTERNAL LOCATION} | (T_3) | | pattern_matching.rs:734:21:734:25 | tuple | 0(3) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:734:21:734:25 | tuple | 1(3) | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:734:21:734:25 | tuple | 2(3) | {EXTERNAL LOCATION} | f32 | @@ -8109,18 +8129,18 @@ inferType | pattern_matching.rs:736:17:736:17 | b | | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:737:9:737:13 | let_c | | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:737:17:737:17 | c | | {EXTERNAL LOCATION} | f32 | -| pattern_matching.rs:739:9:739:13 | array | | file://:0:0:0:0 | [] | +| pattern_matching.rs:739:9:739:13 | array | | {EXTERNAL LOCATION} | [;] | | pattern_matching.rs:739:9:739:13 | array | [T;...] | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:739:17:739:34 | [...] | | file://:0:0:0:0 | [] | +| pattern_matching.rs:739:17:739:34 | [...] | | {EXTERNAL LOCATION} | [;] | | pattern_matching.rs:739:17:739:34 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:739:18:739:21 | 1i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:739:24:739:24 | 2 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:739:27:739:27 | 3 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:739:30:739:30 | 4 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:739:33:739:33 | 5 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:740:9:740:25 | SlicePat | | file://:0:0:0:0 | [] | +| pattern_matching.rs:740:9:740:25 | SlicePat | | {EXTERNAL LOCATION} | [;] | | pattern_matching.rs:740:9:740:25 | SlicePat | [T;...] | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:740:29:740:33 | array | | file://:0:0:0:0 | [] | +| pattern_matching.rs:740:29:740:33 | array | | {EXTERNAL LOCATION} | [;] | | pattern_matching.rs:740:29:740:33 | array | [T;...] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:744:9:744:13 | color | | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:744:17:744:34 | Color(...) | | pattern_matching.rs:142:1:143:25 | Color | @@ -8140,29 +8160,29 @@ inferType | pattern_matching.rs:748:17:748:17 | b | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:751:9:751:13 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:751:17:751:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:752:13:752:19 | ref_val | | file://:0:0:0:0 | & | +| pattern_matching.rs:752:13:752:19 | ref_val | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:752:13:752:19 | ref_val | &T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:752:23:752:27 | value | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:753:9:753:15 | let_ref | | file://:0:0:0:0 | & | +| pattern_matching.rs:753:9:753:15 | let_ref | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:753:9:753:15 | let_ref | &T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:753:19:753:25 | ref_val | | file://:0:0:0:0 | & | +| pattern_matching.rs:753:19:753:25 | ref_val | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:753:19:753:25 | ref_val | &T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:756:13:756:19 | mut_val | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:756:23:756:27 | 10i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:757:9:757:15 | let_mut | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:757:19:757:25 | mut_val | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:760:42:789:1 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:760:42:789:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:763:22:763:35 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:763:30:763:30 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:763:33:763:33 | y | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:763:59:767:5 | { ... } | | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:763:59:767:5 | { ... } | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:763:59:767:5 | { ... } | 0(2) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:763:59:767:5 | { ... } | 1(2) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:764:13:764:19 | param_x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:764:23:764:23 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:765:13:765:19 | param_y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:765:23:765:23 | y | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:766:9:766:26 | TupleExpr | | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:766:9:766:26 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:766:9:766:26 | TupleExpr | 0(2) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:766:9:766:26 | TupleExpr | 1(2) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:766:10:766:16 | param_x | | {EXTERNAL LOCATION} | i32 | @@ -8175,21 +8195,21 @@ inferType | pattern_matching.rs:770:13:770:19 | param_r | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:770:23:770:23 | r | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:771:9:771:15 | param_r | | {EXTERNAL LOCATION} | u8 | -| pattern_matching.rs:774:22:774:38 | TuplePat | | file://:0:0:0:0 | (T_3) | +| pattern_matching.rs:774:22:774:38 | TuplePat | | {EXTERNAL LOCATION} | (T_3) | | pattern_matching.rs:774:22:774:38 | TuplePat | 0(3) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:774:22:774:38 | TuplePat | 1(3) | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:774:22:774:38 | TuplePat | 2(3) | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:774:23:774:27 | first | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:774:30:774:30 | _ | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:774:33:774:37 | third | | {EXTERNAL LOCATION} | bool | -| pattern_matching.rs:774:74:778:5 | { ... } | | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:774:74:778:5 | { ... } | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:774:74:778:5 | { ... } | 0(2) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:774:74:778:5 | { ... } | 1(2) | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:775:13:775:23 | param_first | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:775:27:775:31 | first | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:776:13:776:23 | param_third | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:776:27:776:31 | third | | {EXTERNAL LOCATION} | bool | -| pattern_matching.rs:777:9:777:34 | TupleExpr | | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:777:9:777:34 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:777:9:777:34 | TupleExpr | 0(2) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:777:9:777:34 | TupleExpr | 1(2) | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:777:10:777:20 | param_first | | {EXTERNAL LOCATION} | i32 | @@ -8198,10 +8218,10 @@ inferType | pattern_matching.rs:781:17:781:37 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:781:28:781:28 | 5 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:781:34:781:35 | 10 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:782:9:782:17 | extracted | | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:782:9:782:17 | extracted | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:782:9:782:17 | extracted | 0(2) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:782:9:782:17 | extracted | 1(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:782:21:782:40 | extract_point(...) | | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:782:21:782:40 | extract_point(...) | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:782:21:782:40 | extract_point(...) | 0(2) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:782:21:782:40 | extract_point(...) | 1(2) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:782:35:782:39 | point | | pattern_matching.rs:135:1:140:1 | Point | @@ -8213,28 +8233,30 @@ inferType | pattern_matching.rs:785:9:785:11 | red | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:785:15:785:34 | extract_color(...) | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:785:29:785:33 | color | | pattern_matching.rs:142:1:143:25 | Color | -| pattern_matching.rs:787:9:787:13 | tuple | | file://:0:0:0:0 | (T_3) | +| pattern_matching.rs:787:9:787:13 | tuple | | {EXTERNAL LOCATION} | (T_3) | | pattern_matching.rs:787:9:787:13 | tuple | 0(3) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:787:9:787:13 | tuple | 1(3) | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:787:9:787:13 | tuple | 2(3) | {EXTERNAL LOCATION} | bool | -| pattern_matching.rs:787:17:787:38 | TupleExpr | | file://:0:0:0:0 | (T_3) | +| pattern_matching.rs:787:17:787:38 | TupleExpr | | {EXTERNAL LOCATION} | (T_3) | | pattern_matching.rs:787:17:787:38 | TupleExpr | 0(3) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:787:17:787:38 | TupleExpr | 1(3) | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:787:17:787:38 | TupleExpr | 2(3) | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:787:18:787:22 | 42i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:787:25:787:31 | 3.14f64 | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:787:34:787:37 | true | | {EXTERNAL LOCATION} | bool | -| pattern_matching.rs:788:9:788:23 | tuple_extracted | | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:788:9:788:23 | tuple_extracted | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:788:9:788:23 | tuple_extracted | 0(2) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:788:9:788:23 | tuple_extracted | 1(2) | {EXTERNAL LOCATION} | bool | -| pattern_matching.rs:788:27:788:46 | extract_tuple(...) | | file://:0:0:0:0 | (T_2) | +| pattern_matching.rs:788:27:788:46 | extract_tuple(...) | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:788:27:788:46 | extract_tuple(...) | 0(2) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:788:27:788:46 | extract_tuple(...) | 1(2) | {EXTERNAL LOCATION} | bool | -| pattern_matching.rs:788:41:788:45 | tuple | | file://:0:0:0:0 | (T_3) | +| pattern_matching.rs:788:41:788:45 | tuple | | {EXTERNAL LOCATION} | (T_3) | | pattern_matching.rs:788:41:788:45 | tuple | 0(3) | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:788:41:788:45 | tuple | 1(3) | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:788:41:788:45 | tuple | 2(3) | {EXTERNAL LOCATION} | bool | -| pattern_matching.rs:792:35:824:1 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:792:35:824:1 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:794:9:794:14 | points | | {EXTERNAL LOCATION} | Vec | +| pattern_matching.rs:794:18:794:65 | MacroExpr | | {EXTERNAL LOCATION} | Vec | | pattern_matching.rs:794:23:794:42 | (...) | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:794:23:794:42 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:794:34:794:34 | 1 | | {EXTERNAL LOCATION} | i32 | @@ -8243,19 +8265,20 @@ inferType | pattern_matching.rs:794:45:794:64 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:794:56:794:56 | 3 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:794:62:794:62 | 4 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:795:5:799:5 | for ... in ... { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:795:5:799:5 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:795:9:795:22 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:795:17:795:17 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:795:20:795:20 | y | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:795:34:799:5 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:795:27:795:32 | points | | {EXTERNAL LOCATION} | Vec | +| pattern_matching.rs:795:34:799:5 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:796:13:796:18 | loop_x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:796:22:796:22 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:797:13:797:18 | loop_y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:797:22:797:22 | y | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:798:18:798:42 | "Point in loop: ({}, {})\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:798:18:798:42 | "Point in loop: ({}, {})\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:798:18:798:42 | "Point in loop: ({}, {})\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:798:18:798:58 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:798:18:798:58 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:798:18:798:58 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:798:18:798:58 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:798:45:798:50 | loop_x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:798:53:798:58 | loop_y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:802:9:802:20 | option_value | | pattern_matching.rs:152:1:156:1 | MyOption | @@ -8263,20 +8286,20 @@ inferType | pattern_matching.rs:802:24:802:44 | ...::Some(...) | | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:802:24:802:44 | ...::Some(...) | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:802:39:802:43 | 42i32 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:803:5:806:5 | if ... {...} | | file://:0:0:0:0 | () | +| pattern_matching.rs:803:5:806:5 | if ... {...} | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:803:12:803:33 | ...::Some(...) | | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:803:12:803:33 | ...::Some(...) | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:803:27:803:27 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:803:31:803:32 | 42 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:803:37:803:48 | option_value | | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:803:37:803:48 | option_value | T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:803:50:806:5 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:803:50:806:5 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:804:13:804:20 | if_let_x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:804:24:804:24 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:805:18:805:44 | "If let with @ pattern: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:805:18:805:44 | "If let with @ pattern: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:805:18:805:44 | "If let with @ pattern: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:805:18:805:54 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:805:18:805:54 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:805:18:805:54 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:805:18:805:54 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:805:47:805:54 | if_let_x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:809:13:809:17 | stack | | {EXTERNAL LOCATION} | Vec | | pattern_matching.rs:809:13:809:17 | stack | A | {EXTERNAL LOCATION} | Global | @@ -8287,7 +8310,7 @@ inferType | pattern_matching.rs:809:36:809:39 | 1i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:809:42:809:42 | 2 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:809:45:809:45 | 3 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:810:5:813:5 | while ... { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:810:5:813:5 | while ... { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:810:15:810:21 | Some(...) | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:810:15:810:21 | Some(...) | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:810:20:810:20 | x | | {EXTERNAL LOCATION} | i32 | @@ -8296,51 +8319,51 @@ inferType | pattern_matching.rs:810:25:810:29 | stack | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:810:25:810:35 | stack.pop() | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:810:25:810:35 | stack.pop() | T | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:810:37:813:5 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:810:37:813:5 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:811:13:811:23 | while_let_x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:811:27:811:27 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:812:18:812:29 | "Popped: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:812:18:812:29 | "Popped: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:812:18:812:29 | "Popped: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:812:18:812:42 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:812:18:812:42 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:812:18:812:42 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:812:18:812:42 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:812:32:812:42 | while_let_x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:816:9:816:13 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:816:17:816:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:817:5:823:5 | match value { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:817:5:823:5 | match value { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:817:11:817:15 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:818:9:818:9 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:818:14:818:14 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:818:14:818:18 | ... > ... | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:818:18:818:18 | 0 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:818:23:821:9 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:818:23:821:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:819:17:819:23 | guard_x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:819:27:819:27 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:820:22:820:35 | "Positive: {}\\n" | | file://:0:0:0:0 | & | +| pattern_matching.rs:820:22:820:35 | "Positive: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:820:22:820:35 | "Positive: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:820:22:820:44 | ...::_print(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:820:22:820:44 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:820:22:820:44 | ...::_print(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:820:22:820:44 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:820:38:820:44 | guard_x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:822:9:822:9 | _ | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:822:14:822:15 | { ... } | | file://:0:0:0:0 | () | -| pattern_matching.rs:826:28:846:1 | { ... } | | file://:0:0:0:0 | () | +| pattern_matching.rs:822:14:822:15 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:826:28:846:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:827:5:827:7 | f(...) | | {EXTERNAL LOCATION} | Option | -| pattern_matching.rs:827:5:827:7 | f(...) | T | file://:0:0:0:0 | () | -| pattern_matching.rs:828:5:828:22 | literal_patterns(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:829:5:829:25 | identifier_patterns(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:830:5:830:23 | wildcard_patterns(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:831:5:831:20 | range_patterns(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:832:5:832:24 | reference_patterns(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:833:5:833:21 | record_patterns(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:834:5:834:27 | tuple_struct_patterns(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:835:5:835:20 | tuple_patterns(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:836:5:836:28 | parenthesized_patterns(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:837:5:837:20 | slice_patterns(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:838:5:838:19 | path_patterns(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:839:5:839:17 | or_patterns(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:840:5:840:19 | rest_patterns(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:841:5:841:20 | macro_patterns(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:842:5:842:29 | complex_nested_patterns(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:843:5:843:32 | patterns_in_let_statements(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:844:5:844:37 | patterns_in_function_parameters(...) | | file://:0:0:0:0 | () | -| pattern_matching.rs:845:5:845:30 | patterns_in_control_flow(...) | | file://:0:0:0:0 | () | +| pattern_matching.rs:827:5:827:7 | f(...) | T | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:828:5:828:22 | literal_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:829:5:829:25 | identifier_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:830:5:830:23 | wildcard_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:831:5:831:20 | range_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:832:5:832:24 | reference_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:833:5:833:21 | record_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:834:5:834:27 | tuple_struct_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:835:5:835:20 | tuple_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:836:5:836:28 | parenthesized_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:837:5:837:20 | slice_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:838:5:838:19 | path_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:839:5:839:17 | or_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:840:5:840:19 | rest_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:841:5:841:20 | macro_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:842:5:842:29 | complex_nested_patterns(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:843:5:843:32 | patterns_in_let_statements(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:844:5:844:37 | patterns_in_function_parameters(...) | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:845:5:845:30 | patterns_in_control_flow(...) | | {EXTERNAL LOCATION} | () | testFailures diff --git a/rust/ql/test/library-tests/type-inference/type-inference.ql b/rust/ql/test/library-tests/type-inference/type-inference.ql index 0843b2fa6ab..01af646007d 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.ql +++ b/rust/ql/test/library-tests/type-inference/type-inference.ql @@ -60,9 +60,10 @@ module TypeTest implements TestSig { exists(AstNode n, TypePath path, Type t | t = TypeInference::inferType(n, path) and ( - if t = TypeInference::CertainTypeInference::inferCertainType(n, path) - then tag = "certainType" - else tag = "type" + tag = "type" + or + t = TypeInference::CertainTypeInference::inferCertainType(n, path) and + tag = "certainType" ) and location = n.getLocation() and ( diff --git a/rust/tools/builtins/types.rs b/rust/tools/builtins/types.rs index 91989b5262b..56a8a502e4c 100644 --- a/rust/tools/builtins/types.rs +++ b/rust/tools/builtins/types.rs @@ -23,3 +23,125 @@ pub struct isize; // floating-point types pub struct f32; pub struct f64; + +pub struct Slice; +pub struct Array; +pub struct Ref; // todo: add mut variant +pub struct Ptr; // todo: add mut variant + +// tuples +pub struct Tuple0; +pub struct Tuple1(T); +pub struct Tuple2(T1, T2); +pub struct Tuple3(T1, T2, T3); +pub struct Tuple4(T1, T2, T3, T4); +pub struct Tuple5(T1, T2, T3, T4, T5); +pub struct Tuple6(T1, T2, T3, T4, T5, T6); +pub struct Tuple7(T1, T2, T3, T4, T5, T6, T7); +pub struct Tuple8(T1, T2, T3, T4, T5, T6, T7, T8); +pub struct Tuple9(T1, T2, T3, T4, T5, T6, T7, T8, T9); +pub struct Tuple10( + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8, + T9, + T10, +); +pub struct Tuple11( + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8, + T9, + T10, + T11, +); +pub struct Tuple12( + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8, + T9, + T10, + T11, + T12, +); +pub struct Tuple13( + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8, + T9, + T10, + T11, + T12, + T13, +); +pub struct Tuple14( + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8, + T9, + T10, + T11, + T12, + T13, + T14, +); +pub struct Tuple15( + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8, + T9, + T10, + T11, + T12, + T13, + T14, + T15, +); +pub struct Tuple16( + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8, + T9, + T10, + T11, + T12, + T13, + T14, + T15, + T16, +); From bf0dc3c4d17412761d6c0bec6de048d3a8848be1 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 13 Nov 2025 14:30:16 +0100 Subject: [PATCH 068/127] Rust: Use `useUniversalConditions() { none() }` --- rust/ql/lib/codeql/rust/internal/TypeInference.qll | 6 ++++++ .../library-tests/type-inference/type-inference.expected | 6 ------ .../codeql/typeinference/internal/TypeInference.qll | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index 0c54481b504..46df7547b2e 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -3074,6 +3074,8 @@ private module AwaitSatisfiesConstraintInput implements SatisfiesConstraintInput exists(term) and constraint.(TraitType).getTrait() instanceof FutureTrait } + + predicate useUniversalConditions() { none() } } pragma[nomagic] @@ -3249,6 +3251,8 @@ private module ForIterableSatisfiesConstraintInput implements t instanceof IntoIteratorTrait ) } + + predicate useUniversalConditions() { none() } } pragma[nomagic] @@ -3303,6 +3307,8 @@ private module InvokedClosureSatisfiesConstraintInput implements exists(term) and constraint.(TraitType).getTrait() instanceof FnOnceTrait } + + predicate useUniversalConditions() { none() } } /** Gets the type of `ce` when viewed as an implementation of `FnOnce`. */ 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 5b73cb2e29d..641294130b1 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -5399,7 +5399,6 @@ inferType | main.rs:2612:40:2612:40 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2612:43:2612:44 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2613:9:2613:41 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2613:13:2613:13 | i | | {EXTERNAL LOCATION} | Item | | main.rs:2613:13:2613:13 | i | | {EXTERNAL LOCATION} | i32 | | main.rs:2613:18:2613:26 | [...] | | {EXTERNAL LOCATION} | [;] | | main.rs:2613:18:2613:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | @@ -5573,7 +5572,6 @@ inferType | main.rs:2652:26:2652:26 | c | | main.rs:2596:5:2596:24 | MyCallable | | main.rs:2652:26:2652:33 | c.call() | | {EXTERNAL LOCATION} | i64 | | main.rs:2657:9:2657:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2657:13:2657:13 | i | | {EXTERNAL LOCATION} | Item | | main.rs:2657:13:2657:13 | i | | {EXTERNAL LOCATION} | i32 | | main.rs:2657:18:2657:18 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:2657:18:2657:22 | 0..10 | | {EXTERNAL LOCATION} | Range | @@ -5602,7 +5600,6 @@ inferType | main.rs:2659:21:2659:25 | 0..10 | Idx | {EXTERNAL LOCATION} | i32 | | main.rs:2659:24:2659:25 | 10 | | {EXTERNAL LOCATION} | i32 | | main.rs:2660:9:2660:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2660:13:2660:13 | i | | {EXTERNAL LOCATION} | Item | | main.rs:2660:13:2660:13 | i | | {EXTERNAL LOCATION} | i32 | | main.rs:2660:18:2660:22 | range | | {EXTERNAL LOCATION} | Range | | main.rs:2660:18:2660:22 | range | Idx | {EXTERNAL LOCATION} | i32 | @@ -5626,7 +5623,6 @@ inferType | main.rs:2666:20:2666:23 | 0u16 | | {EXTERNAL LOCATION} | u16 | | main.rs:2667:18:2667:22 | 10u16 | | {EXTERNAL LOCATION} | u16 | | main.rs:2669:9:2669:26 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2669:13:2669:13 | u | | {EXTERNAL LOCATION} | Item | | main.rs:2669:13:2669:13 | u | | {EXTERNAL LOCATION} | u16 | | main.rs:2669:18:2669:23 | range1 | | {EXTERNAL LOCATION} | Range | | main.rs:2669:18:2669:23 | range1 | Idx | {EXTERNAL LOCATION} | u16 | @@ -5795,7 +5791,6 @@ inferType | main.rs:2701:33:2701:37 | "two" | | {EXTERNAL LOCATION} | & | | main.rs:2701:33:2701:37 | "two" | &T | {EXTERNAL LOCATION} | str | | main.rs:2702:9:2702:33 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2702:13:2702:15 | key | | {EXTERNAL LOCATION} | Item | | main.rs:2702:13:2702:15 | key | | {EXTERNAL LOCATION} | & | | main.rs:2702:13:2702:15 | key | &T | {EXTERNAL LOCATION} | i32 | | main.rs:2702:20:2702:23 | map1 | | {EXTERNAL LOCATION} | HashMap | @@ -5813,7 +5808,6 @@ inferType | main.rs:2702:20:2702:30 | map1.keys() | V.T.&T | {EXTERNAL LOCATION} | str | | main.rs:2702:32:2702:33 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2703:9:2703:37 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2703:13:2703:17 | value | | {EXTERNAL LOCATION} | Item | | main.rs:2703:13:2703:17 | value | | {EXTERNAL LOCATION} | & | | main.rs:2703:13:2703:17 | value | &T | {EXTERNAL LOCATION} | Box | | main.rs:2703:13:2703:17 | value | &T.A | {EXTERNAL LOCATION} | Global | diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index a03af8f4ffe..7669c252c78 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -992,7 +992,7 @@ module Make1 Input1> { TypeMention constraintMention ) { exists(Type type | hasTypeConstraint(tt, type, constraint) | - useUniversalConditions() and + useUniversalConditions() and // todo: remove, and instead check constraints not exists(countConstraintImplementations(type, constraint)) and conditionSatisfiesConstraintTypeAt(abs, condition, constraintMention, _, _) and resolveTypeMentionRoot(condition) = abs.getATypeParameter() and From f1b12203f60dde4f2e1a14581a4b64879ac88857 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 17 Nov 2025 14:10:08 +0100 Subject: [PATCH 069/127] C#: Add compilation errors to the debug log in BMN. --- .../Extractor/Analyser.cs | 17 +++++++++++++++++ .../Extractor/StandaloneAnalyser.cs | 9 +++++++++ .../Extractor/TracingAnalyser.cs | 15 ++------------- 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs index 1ba8827c9d2..6701f993ac6 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs @@ -360,5 +360,22 @@ namespace Semmle.Extraction.CSharp return versionString.InformationalVersion; } } + + private static readonly HashSet errorsToIgnore = new HashSet + { + "CS7027", // Code signing failure + "CS1589", // XML referencing not supported + "CS1569" // Error writing XML documentation + }; + + /// + /// Retrieves the diagnostics from the compilation, filtering out those that should be ignored. + /// + protected List GetFilteredDiagnostics() => + compilation is not null + ? compilation.GetDiagnostics() + .Where(e => e.Severity >= DiagnosticSeverity.Error && !errorsToIgnore.Contains(e.Id)) + .ToList() + : []; } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/StandaloneAnalyser.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/StandaloneAnalyser.cs index ff3c2889bc9..b940b02cb5c 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/StandaloneAnalyser.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/StandaloneAnalyser.cs @@ -13,6 +13,14 @@ namespace Semmle.Extraction.CSharp { } + private void LogDiagnostics() + { + foreach (var error in GetFilteredDiagnostics()) + { + Logger.LogDebug($" Compilation error: {error}"); + } + } + public void Initialize(string outputPath, IEnumerable<(string, string)> compilationInfos, CSharpCompilation compilationIn, CommonOptions options) { compilation = compilationIn; @@ -20,6 +28,7 @@ namespace Semmle.Extraction.CSharp this.options = options; LogExtractorInfo(); SetReferencePaths(); + LogDiagnostics(); } } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/TracingAnalyser.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/TracingAnalyser.cs index 8a9856f1d31..9f2a1256f1a 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/TracingAnalyser.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/TracingAnalyser.cs @@ -136,11 +136,7 @@ namespace Semmle.Extraction.CSharp private int LogDiagnostics() { - var filteredDiagnostics = compilation! - .GetDiagnostics() - .Where(e => e.Severity >= DiagnosticSeverity.Error && !errorsToIgnore.Contains(e.Id)) - .ToList(); - + var filteredDiagnostics = GetFilteredDiagnostics(); foreach (var error in filteredDiagnostics) { Logger.LogError($" Compilation error: {error}"); @@ -148,7 +144,7 @@ namespace Semmle.Extraction.CSharp if (filteredDiagnostics.Count != 0) { - foreach (var reference in compilation.References) + foreach (var reference in compilation!.References) { Logger.LogInfo($" Resolved reference {reference.Display}"); } @@ -156,12 +152,5 @@ namespace Semmle.Extraction.CSharp return filteredDiagnostics.Count; } - - private static readonly HashSet errorsToIgnore = new HashSet - { - "CS7027", // Code signing failure - "CS1589", // XML referencing not supported - "CS1569" // Error writing XML documentation - }; } } From 9f69ff22d324076dfd60b8b7bdf8382bb3915852 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 17 Nov 2025 14:12:19 +0100 Subject: [PATCH 070/127] C#: Add change-note. --- csharp/ql/lib/change-notes/2025-11-17-compiler-error-debug.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 csharp/ql/lib/change-notes/2025-11-17-compiler-error-debug.md diff --git a/csharp/ql/lib/change-notes/2025-11-17-compiler-error-debug.md b/csharp/ql/lib/change-notes/2025-11-17-compiler-error-debug.md new file mode 100644 index 00000000000..082f4562615 --- /dev/null +++ b/csharp/ql/lib/change-notes/2025-11-17-compiler-error-debug.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Compilation errors are now included in the debug log when using build-mode none. From 12f1bd8ffdce8a7bcce4530d033b9453ca3ec1fa Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Mon, 17 Nov 2025 15:00:30 +0100 Subject: [PATCH 071/127] C#: add missing `*` to change note --- .../change-notes/2025-10-24-insecure-cookie-query-promote.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/csharp/ql/src/change-notes/2025-10-24-insecure-cookie-query-promote.md b/csharp/ql/src/change-notes/2025-10-24-insecure-cookie-query-promote.md index 1a15c0494bd..6b3d8d5b259 100644 --- a/csharp/ql/src/change-notes/2025-10-24-insecure-cookie-query-promote.md +++ b/csharp/ql/src/change-notes/2025-10-24-insecure-cookie-query-promote.md @@ -1,4 +1,4 @@ --- category: newQuery --- -The `cs/web/cookie-secure-not-set` and `cs/web/cookie-httponly-not-set` queries have been promoted from experimental to the main query pack. \ No newline at end of file +* The `cs/web/cookie-secure-not-set` and `cs/web/cookie-httponly-not-set` queries have been promoted from experimental to the main query pack. From 18fa6799ce464a0f77f6ebeb573986eeea93967b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 17 Nov 2025 16:38:07 +0000 Subject: [PATCH 072/127] Release preparation for version 2.23.6 --- actions/ql/lib/CHANGELOG.md | 4 +++ .../ql/lib/change-notes/released/0.4.21.md | 3 ++ actions/ql/lib/codeql-pack.release.yml | 2 +- actions/ql/lib/qlpack.yml | 2 +- actions/ql/src/CHANGELOG.md | 4 +++ .../ql/src/change-notes/released/0.6.13.md | 3 ++ actions/ql/src/codeql-pack.release.yml | 2 +- actions/ql/src/qlpack.yml | 2 +- cpp/ql/lib/CHANGELOG.md | 30 ++++++++++------ .../2025-11-11-range-analysis-performance.md | 4 --- .../6.1.0.md} | 11 ++++-- cpp/ql/lib/codeql-pack.release.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/CHANGELOG.md | 4 +++ cpp/ql/src/change-notes/released/1.5.4.md | 3 ++ cpp/ql/src/codeql-pack.release.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- .../ql/campaigns/Solorigate/lib/CHANGELOG.md | 4 +++ .../lib/change-notes/released/1.7.52.md | 3 ++ .../Solorigate/lib/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +- .../ql/campaigns/Solorigate/src/CHANGELOG.md | 4 +++ .../src/change-notes/released/1.7.52.md | 3 ++ .../Solorigate/src/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/CHANGELOG.md | 36 +++++++++++++------ .../2025-10-04-deprecate-controlsblock.md | 4 --- ...0-30-overlay-compilation-and-extraction.md | 5 --- .../2025-11-03-roslyn-and-binlog.md | 4 --- csharp/ql/lib/change-notes/released/5.4.0.md | 13 +++++++ csharp/ql/lib/codeql-pack.release.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/CHANGELOG.md | 16 +++++++-- ...025-10-24-insecure-cookie-query-promote.md | 4 --- .../1.5.0.md} | 11 ++++-- csharp/ql/src/codeql-pack.release.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/CHANGELOG.md | 4 +++ .../change-notes/released/1.0.35.md | 3 ++ .../codeql-pack.release.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/CHANGELOG.md | 9 +++++ .../5.0.2.md} | 7 ++-- go/ql/lib/codeql-pack.release.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/CHANGELOG.md | 4 +++ go/ql/src/change-notes/released/1.4.9.md | 3 ++ go/ql/src/codeql-pack.release.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/lib/CHANGELOG.md | 4 +++ java/ql/lib/change-notes/released/7.7.4.md | 3 ++ java/ql/lib/codeql-pack.release.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/CHANGELOG.md | 7 ++++ .../1.10.0.md} | 9 ++--- java/ql/src/codeql-pack.release.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/CHANGELOG.md | 4 +++ .../ql/lib/change-notes/released/2.6.15.md | 3 ++ javascript/ql/lib/codeql-pack.release.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/CHANGELOG.md | 7 ++++ .../2.2.0.md} | 9 ++--- javascript/ql/src/codeql-pack.release.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/CHANGELOG.md | 4 +++ .../change-notes/released/1.0.35.md | 3 ++ misc/suite-helpers/codeql-pack.release.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/CHANGELOG.md | 6 ++++ .../5.0.0.md} | 6 ++-- python/ql/lib/codeql-pack.release.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/CHANGELOG.md | 6 ++++ .../2025-10-22-adjust-query-severity.md | 4 --- python/ql/src/change-notes/released/1.7.0.md | 5 +++ python/ql/src/codeql-pack.release.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/CHANGELOG.md | 4 +++ ruby/ql/lib/change-notes/released/5.1.3.md | 3 ++ ruby/ql/lib/codeql-pack.release.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/CHANGELOG.md | 6 ++++ .../2025-10-22-adjust-query-severity.md | 4 --- ruby/ql/src/change-notes/released/1.5.0.md | 5 +++ ruby/ql/src/codeql-pack.release.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- rust/ql/lib/CHANGELOG.md | 6 ++++ .../0.1.20.md} | 7 ++-- rust/ql/lib/codeql-pack.release.yml | 2 +- rust/ql/lib/qlpack.yml | 2 +- rust/ql/src/CHANGELOG.md | 6 ++++ .../0.1.20.md} | 7 ++-- rust/ql/src/codeql-pack.release.yml | 2 +- rust/ql/src/qlpack.yml | 2 +- shared/concepts/CHANGELOG.md | 4 +++ .../concepts/change-notes/released/0.0.9.md | 3 ++ shared/concepts/codeql-pack.release.yml | 2 +- shared/concepts/qlpack.yml | 2 +- shared/controlflow/CHANGELOG.md | 4 +++ .../change-notes/released/2.0.19.md | 3 ++ shared/controlflow/codeql-pack.release.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/CHANGELOG.md | 4 +++ .../dataflow/change-notes/released/2.0.19.md | 3 ++ shared/dataflow/codeql-pack.release.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/CHANGELOG.md | 4 +++ shared/mad/change-notes/released/1.0.35.md | 3 ++ shared/mad/codeql-pack.release.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/quantum/CHANGELOG.md | 4 +++ .../quantum/change-notes/released/0.0.13.md | 3 ++ shared/quantum/codeql-pack.release.yml | 2 +- shared/quantum/qlpack.yml | 2 +- shared/rangeanalysis/CHANGELOG.md | 4 +++ .../change-notes/released/1.0.35.md | 3 ++ shared/rangeanalysis/codeql-pack.release.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/CHANGELOG.md | 4 +++ shared/regex/change-notes/released/1.0.35.md | 3 ++ shared/regex/codeql-pack.release.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/CHANGELOG.md | 4 +++ shared/ssa/change-notes/released/2.0.11.md | 3 ++ shared/ssa/codeql-pack.release.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/CHANGELOG.md | 4 +++ .../change-notes/released/1.0.35.md | 3 ++ shared/threat-models/codeql-pack.release.yml | 2 +- shared/threat-models/qlpack.yml | 2 +- shared/tutorial/CHANGELOG.md | 4 +++ .../tutorial/change-notes/released/1.0.35.md | 3 ++ shared/tutorial/codeql-pack.release.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typeflow/CHANGELOG.md | 4 +++ .../typeflow/change-notes/released/1.0.35.md | 3 ++ shared/typeflow/codeql-pack.release.yml | 2 +- shared/typeflow/qlpack.yml | 2 +- shared/typeinference/CHANGELOG.md | 4 +++ .../change-notes/released/0.0.16.md | 3 ++ shared/typeinference/codeql-pack.release.yml | 2 +- shared/typeinference/qlpack.yml | 2 +- shared/typetracking/CHANGELOG.md | 4 +++ .../change-notes/released/2.0.19.md | 3 ++ shared/typetracking/codeql-pack.release.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/CHANGELOG.md | 4 +++ shared/typos/change-notes/released/1.0.35.md | 3 ++ shared/typos/codeql-pack.release.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/CHANGELOG.md | 4 +++ shared/util/change-notes/released/2.0.22.md | 3 ++ shared/util/codeql-pack.release.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/xml/CHANGELOG.md | 4 +++ shared/xml/change-notes/released/1.0.35.md | 3 ++ shared/xml/codeql-pack.release.yml | 2 +- shared/xml/qlpack.yml | 2 +- shared/yaml/CHANGELOG.md | 4 +++ shared/yaml/change-notes/released/1.0.35.md | 3 ++ shared/yaml/codeql-pack.release.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/CHANGELOG.md | 6 ++++ .../6.1.0.md} | 7 ++-- swift/ql/lib/codeql-pack.release.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/CHANGELOG.md | 4 +++ swift/ql/src/change-notes/released/1.2.9.md | 3 ++ swift/ql/src/codeql-pack.release.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 171 files changed, 470 insertions(+), 164 deletions(-) create mode 100644 actions/ql/lib/change-notes/released/0.4.21.md create mode 100644 actions/ql/src/change-notes/released/0.6.13.md delete mode 100644 cpp/ql/lib/change-notes/2025-11-11-range-analysis-performance.md rename cpp/ql/lib/change-notes/{2025-11-13-expanded.md => released/6.1.0.md} (52%) create mode 100644 cpp/ql/src/change-notes/released/1.5.4.md create mode 100644 csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.52.md create mode 100644 csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.52.md delete mode 100644 csharp/ql/lib/change-notes/2025-10-04-deprecate-controlsblock.md delete mode 100644 csharp/ql/lib/change-notes/2025-10-30-overlay-compilation-and-extraction.md delete mode 100644 csharp/ql/lib/change-notes/2025-11-03-roslyn-and-binlog.md create mode 100644 csharp/ql/lib/change-notes/released/5.4.0.md delete mode 100644 csharp/ql/src/change-notes/2025-10-24-insecure-cookie-query-promote.md rename csharp/ql/src/change-notes/{2025-11-14-guards-disjunctive.md => released/1.5.0.md} (58%) create mode 100644 go/ql/consistency-queries/change-notes/released/1.0.35.md rename go/ql/lib/change-notes/{2025-11-11-path-transformer.md => released/5.0.2.md} (94%) create mode 100644 go/ql/src/change-notes/released/1.4.9.md create mode 100644 java/ql/lib/change-notes/released/7.7.4.md rename java/ql/src/change-notes/{2025-10-22-adjust-query-severity.md => released/1.10.0.md} (66%) create mode 100644 javascript/ql/lib/change-notes/released/2.6.15.md rename javascript/ql/src/change-notes/{2025-10-22-adjust-query-severity.md => released/2.2.0.md} (66%) create mode 100644 misc/suite-helpers/change-notes/released/1.0.35.md rename python/ql/lib/change-notes/{2025-10-30-remove-points-to-from-cfg-and-expr.md => released/5.0.0.md} (87%) delete mode 100644 python/ql/src/change-notes/2025-10-22-adjust-query-severity.md create mode 100644 python/ql/src/change-notes/released/1.7.0.md create mode 100644 ruby/ql/lib/change-notes/released/5.1.3.md delete mode 100644 ruby/ql/src/change-notes/2025-10-22-adjust-query-severity.md create mode 100644 ruby/ql/src/change-notes/released/1.5.0.md rename rust/ql/lib/change-notes/{2025-11-05-poem.md => released/0.1.20.md} (55%) rename rust/ql/src/change-notes/{2025-10-31-barriers.md => released/0.1.20.md} (80%) create mode 100644 shared/concepts/change-notes/released/0.0.9.md create mode 100644 shared/controlflow/change-notes/released/2.0.19.md create mode 100644 shared/dataflow/change-notes/released/2.0.19.md create mode 100644 shared/mad/change-notes/released/1.0.35.md create mode 100644 shared/quantum/change-notes/released/0.0.13.md create mode 100644 shared/rangeanalysis/change-notes/released/1.0.35.md create mode 100644 shared/regex/change-notes/released/1.0.35.md create mode 100644 shared/ssa/change-notes/released/2.0.11.md create mode 100644 shared/threat-models/change-notes/released/1.0.35.md create mode 100644 shared/tutorial/change-notes/released/1.0.35.md create mode 100644 shared/typeflow/change-notes/released/1.0.35.md create mode 100644 shared/typeinference/change-notes/released/0.0.16.md create mode 100644 shared/typetracking/change-notes/released/2.0.19.md create mode 100644 shared/typos/change-notes/released/1.0.35.md create mode 100644 shared/util/change-notes/released/2.0.22.md create mode 100644 shared/xml/change-notes/released/1.0.35.md create mode 100644 shared/yaml/change-notes/released/1.0.35.md rename swift/ql/lib/change-notes/{2025-10-22-swift-6.2.1.md => released/6.1.0.md} (51%) create mode 100644 swift/ql/src/change-notes/released/1.2.9.md diff --git a/actions/ql/lib/CHANGELOG.md b/actions/ql/lib/CHANGELOG.md index ffe1cba8281..0ae66461fc7 100644 --- a/actions/ql/lib/CHANGELOG.md +++ b/actions/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.4.21 + +No user-facing changes. + ## 0.4.20 No user-facing changes. diff --git a/actions/ql/lib/change-notes/released/0.4.21.md b/actions/ql/lib/change-notes/released/0.4.21.md new file mode 100644 index 00000000000..4457437acf2 --- /dev/null +++ b/actions/ql/lib/change-notes/released/0.4.21.md @@ -0,0 +1,3 @@ +## 0.4.21 + +No user-facing changes. diff --git a/actions/ql/lib/codeql-pack.release.yml b/actions/ql/lib/codeql-pack.release.yml index 380b2d09423..eb3b038a715 100644 --- a/actions/ql/lib/codeql-pack.release.yml +++ b/actions/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.4.20 +lastReleaseVersion: 0.4.21 diff --git a/actions/ql/lib/qlpack.yml b/actions/ql/lib/qlpack.yml index 295d925c318..22e1d6db0fc 100644 --- a/actions/ql/lib/qlpack.yml +++ b/actions/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-all -version: 0.4.21-dev +version: 0.4.21 library: true warnOnImplicitThis: true dependencies: diff --git a/actions/ql/src/CHANGELOG.md b/actions/ql/src/CHANGELOG.md index c7253227b7c..b26f2472b1d 100644 --- a/actions/ql/src/CHANGELOG.md +++ b/actions/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.6.13 + +No user-facing changes. + ## 0.6.12 No user-facing changes. diff --git a/actions/ql/src/change-notes/released/0.6.13.md b/actions/ql/src/change-notes/released/0.6.13.md new file mode 100644 index 00000000000..0dad2009c46 --- /dev/null +++ b/actions/ql/src/change-notes/released/0.6.13.md @@ -0,0 +1,3 @@ +## 0.6.13 + +No user-facing changes. diff --git a/actions/ql/src/codeql-pack.release.yml b/actions/ql/src/codeql-pack.release.yml index 28c22ccab7c..4568aee7f4f 100644 --- a/actions/ql/src/codeql-pack.release.yml +++ b/actions/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.6.12 +lastReleaseVersion: 0.6.13 diff --git a/actions/ql/src/qlpack.yml b/actions/ql/src/qlpack.yml index b612696b816..78ca2aa2073 100644 --- a/actions/ql/src/qlpack.yml +++ b/actions/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-queries -version: 0.6.13-dev +version: 0.6.13 library: false warnOnImplicitThis: true groups: [actions, queries] diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index 0f158cd3fb5..450185adf89 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,13 @@ +## 6.1.0 + +### New Features + +* New predicates `getAnExpandedArgument` and `getExpandedArgument` were added to the `Compilation` class, yielding compilation arguments after expansion of response files. + +### Bug Fixes + +* Improve performance of the range analysis in cases where it would otherwise take an exorbitant amount of time. + ## 6.0.1 No user-facing changes. @@ -259,8 +269,8 @@ No user-facing changes. ### Breaking Changes -* Deleted many deprecated taint-tracking configurations based on `TaintTracking::Configuration`. -* Deleted many deprecated dataflow configurations based on `DataFlow::Configuration`. +* Deleted many deprecated taint-tracking configurations based on `TaintTracking::Configuration`. +* Deleted many deprecated dataflow configurations based on `DataFlow::Configuration`. * Deleted the deprecated `hasQualifiedName` and `isDefined` predicates from the `Declaration` class, use `hasGlobalName` and `hasDefinition` respectively instead. * Deleted the `getFullSignature` predicate from the `Function` class, use `getIdentityString(Declaration)` from `semmle.code.cpp.Print` instead. * Deleted the deprecated `freeCall` predicate from `Alloc.qll`. Use `DeallocationExpr` instead. @@ -294,7 +304,7 @@ No user-facing changes. * A `getTemplateClass` predicate was added to the `DeductionGuide` class to get the class template for which the deduction guide is a guide. * An `isExplicit` predicate was added to the `Function` class that determines whether the function was declared as explicit. * A `getExplicitExpr` predicate was added to the `Function` class that yields the constant boolean expression (if any) that conditionally determines whether the function is explicit. -* A `isDestroyingDeleteDeallocation` predicate was added to the `NewOrNewArrayExpr` and `DeleteOrDeleteArrayExpr` classes to indicate whether the deallocation function is a destroying delete. +* A `isDestroyingDeleteDeallocation` predicate was added to the `NewOrNewArrayExpr` and `DeleteOrDeleteArrayExpr` classes to indicate whether the deallocation function is a destroying delete. ### Minor Analysis Improvements @@ -372,9 +382,9 @@ No user-facing changes. ### New Features * Added a `TaintInheritingContent` class that can be extended to model taint flowing from a qualifier to a field. -* Added a predicate `GuardCondition.comparesEq/4` to query whether an expression is compared to a constant. +* Added a predicate `GuardCondition.comparesEq/4` to query whether an expression is compared to a constant. * Added a predicate `GuardCondition.ensuresEq/4` to query whether a basic block is guarded by an expression being equal to a constant. -* Added a predicate `GuardCondition.comparesLt/4` to query whether an expression is compared to a constant. +* Added a predicate `GuardCondition.comparesLt/4` to query whether an expression is compared to a constant. * Added a predicate `GuardCondition.ensuresLt/4` to query whether a basic block is guarded by an expression being less than a constant. * Added a predicate `GuardCondition.valueControls` to query whether a basic block is guarded by a particular `case` of a `switch` statement. @@ -490,7 +500,7 @@ No user-facing changes. * Functions that do not return due to calling functions that don't return (e.g. `exit`) are now detected as non-returning in the IR and dataflow. * Treat functions that reach the end of the function as returning in the IR. - They used to be treated as unreachable but it is allowed in C. + They used to be treated as unreachable but it is allowed in C. * The `DataFlow::asDefiningArgument` predicate now takes its argument from the range starting at `1` instead of `2`. Queries that depend on the single-parameter version of `DataFlow::asDefiningArgument` should have their arguments updated accordingly. ## 0.9.3 @@ -539,7 +549,7 @@ No user-facing changes. ### New Features -* The `DataFlow::StateConfigSig` signature module has gained default implementations for `isBarrier/2` and `isAdditionalFlowStep/4`. +* The `DataFlow::StateConfigSig` signature module has gained default implementations for `isBarrier/2` and `isAdditionalFlowStep/4`. Hence it is no longer needed to provide `none()` implementations of these predicates if they are not needed. ### Minor Analysis Improvements @@ -733,7 +743,7 @@ No user-facing changes. ### Deprecated APIs -* Some classes/modules with upper-case acronyms in their name have been renamed to follow our style-guide. +* Some classes/modules with upper-case acronyms in their name have been renamed to follow our style-guide. The old name still exists as a deprecated alias. ### New Features @@ -750,7 +760,7 @@ No user-facing changes. ### Deprecated APIs -* Many classes/predicates/modules with upper-case acronyms in their name have been renamed to follow our style-guide. +* Many classes/predicates/modules with upper-case acronyms in their name have been renamed to follow our style-guide. The old name still exists as a deprecated alias. ### New Features @@ -849,7 +859,7 @@ No user-facing changes. ### Deprecated APIs -* Many classes/predicates/modules that had upper-case acronyms have been renamed to follow our style-guide. +* Many classes/predicates/modules that had upper-case acronyms have been renamed to follow our style-guide. The old name still exists as a deprecated alias. ### New Features diff --git a/cpp/ql/lib/change-notes/2025-11-11-range-analysis-performance.md b/cpp/ql/lib/change-notes/2025-11-11-range-analysis-performance.md deleted file mode 100644 index f24ab4b87fe..00000000000 --- a/cpp/ql/lib/change-notes/2025-11-11-range-analysis-performance.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Improve performance of the range analysis in cases where it would otherwise take an exorbitant amount of time. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2025-11-13-expanded.md b/cpp/ql/lib/change-notes/released/6.1.0.md similarity index 52% rename from cpp/ql/lib/change-notes/2025-11-13-expanded.md rename to cpp/ql/lib/change-notes/released/6.1.0.md index 82d0a1f5105..a904793a03f 100644 --- a/cpp/ql/lib/change-notes/2025-11-13-expanded.md +++ b/cpp/ql/lib/change-notes/released/6.1.0.md @@ -1,4 +1,9 @@ ---- -category: feature ---- +## 6.1.0 + +### New Features + * New predicates `getAnExpandedArgument` and `getExpandedArgument` were added to the `Compilation` class, yielding compilation arguments after expansion of response files. + +### Bug Fixes + +* Improve performance of the range analysis in cases where it would otherwise take an exorbitant amount of time. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index d1f3c68c812..22247782f3e 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 6.0.1 +lastReleaseVersion: 6.1.0 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 8b211353323..c2f8cc98819 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 6.0.2-dev +version: 6.1.0 groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index 880cab8a58d..58677d61a2a 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.5.4 + +No user-facing changes. + ## 1.5.3 No user-facing changes. diff --git a/cpp/ql/src/change-notes/released/1.5.4.md b/cpp/ql/src/change-notes/released/1.5.4.md new file mode 100644 index 00000000000..5ff5ac8ebb7 --- /dev/null +++ b/cpp/ql/src/change-notes/released/1.5.4.md @@ -0,0 +1,3 @@ +## 1.5.4 + +No user-facing changes. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 232224b0e26..c216828ee1c 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.5.3 +lastReleaseVersion: 1.5.4 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 39cdb717ca7..8e062d290b5 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.5.4-dev +version: 1.5.4 groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index a25c349e35e..de67deb4d32 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.52 + +No user-facing changes. + ## 1.7.51 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.52.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.52.md new file mode 100644 index 00000000000..07bec2a826a --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.52.md @@ -0,0 +1,3 @@ +## 1.7.52 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml index 26376c0cebb..31d9cd574dd 100644 --- a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.51 +lastReleaseVersion: 1.7.52 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 7877ad717e2..80e9343408f 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.52-dev +version: 1.7.52 groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index a25c349e35e..de67deb4d32 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.52 + +No user-facing changes. + ## 1.7.51 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.52.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.52.md new file mode 100644 index 00000000000..07bec2a826a --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.52.md @@ -0,0 +1,3 @@ +## 1.7.52 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml index 26376c0cebb..31d9cd574dd 100644 --- a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.51 +lastReleaseVersion: 1.7.52 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 6427ecbb935..f107eb7dee6 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.52-dev +version: 1.7.52 groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 20b1c03d722..962b6ecd184 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,17 @@ +## 5.4.0 + +### Deprecated APIs + +* `ControlFlowElement.controlsBlock` has been deprecated in favor of the Guards library. + +### New Features + +* Initial support for incremental C# databases via `codeql database create --overlay-base`/`--overlay-changes`. + +### Minor Analysis Improvements + +* Updated *roslyn* and *binlog* dependencies in the extractor, which may improve database and analysis quality. + ## 5.3.0 ### Deprecated APIs @@ -6,7 +20,7 @@ ### Major Analysis Improvements -* The representation of the C# control-flow graph has been significantly changed. This has minor effects on a wide range of queries including both minor improvements and minor regressions. For example, improved precision has been observed for `cs/inefficient-containskey` and `cs/stringbuilder-creation-in-loop`. Two queries stand out as being significantly affected with great improvements: `cs/dereferenced-value-may-be-null` has been completely rewritten which removes a very significant number of false positives. Furthermore, `cs/constant-condition` has been updated to report many new results - these new results are primarily expected to be true positives, but a few new false positives are expected as well. As part of these changes, `cs/dereferenced-value-may-be-null` has been changed from a `path-problem` query to a `problem` query, so paths are no longer reported for this query. +* The representation of the C# control-flow graph has been significantly changed. This has minor effects on a wide range of queries including both minor improvements and minor regressions, for example, improved precision has been observed for `cs/inefficient-containskey` and `cs/stringbuilder-creation-in-loop`. Two queries stand out as being significantly affected with great improvements: `cs/dereferenced-value-may-be-null` has been completely rewritten which removes a very significant number of false positives. Furthermore, `cs/constant-condition` has been updated to report many new results - these new results are primarily expected to be true positives, but a few new false positives are expected as well. As part of these changes, `cs/dereferenced-value-may-be-null` has been changed from a `path-problem` query to a `problem` query, so paths are no longer reported for this query. ### Minor Analysis Improvements @@ -143,7 +157,7 @@ No user-facing changes. * Added `remote` flow source models for properties of Blazor components annotated with any of the following attributes from `Microsoft.AspNetCore.Components`: - `[SupplyParameterFromForm]` - `[SupplyParameterFromQuery]` -* Added the constructor and explicit cast operator of `Microsoft.AspNetCore.Components.MarkupString` as an `html-injection` sink. This will help catch cross-site scripting resulting from using `MarkupString`. +* Added the constructor and explicit cast operator of `Microsoft.AspNetCore.Components.MarkupString` as an `html-injection` sink. This will help catch cross-site scripting resulting from using `MarkupString`. * Added flow summaries for the `Microsoft.AspNetCore.Mvc.Controller::View` method. * The data flow library has been updated to track types in a slightly different way: The type of the tainted data (which may be stored into fields, etc.) is tracked more precisely, while the types of intermediate containers for nested contents is tracked less precisely. This may have a slight effect on false positives for complex flow paths. * The C# extractor now supports *basic* extraction of .NET 9 projects. There might be limited support for extraction of code using the new C# 13 language features. @@ -163,7 +177,7 @@ No user-facing changes. - `System.Web.HttpUtility::ParseQueryString` - `Microsoft.AspNetCore.WebUtilities.QueryHelpers::ParseQuery` - `Microsoft.AspNetCore.WebUtilities.QueryHelpers::ParseNullableQuery` -* Added `js-interop` sinks for the `InvokeAsync` and `InvokeVoidAsync` methods of `Microsoft.JSInterop.IJSRuntime`, which can run arbitrary JavaScript. +* Added `js-interop` sinks for the `InvokeAsync` and `InvokeVoidAsync` methods of `Microsoft.JSInterop.IJSRuntime`, which can run arbitrary JavaScript. ## 3.1.1 @@ -201,8 +215,8 @@ No user-facing changes. ### Breaking Changes -* Deleted many deprecated taint-tracking configurations based on `TaintTracking::Configuration`. -* Deleted many deprecated dataflow configurations based on `DataFlow::Configuration`. +* Deleted many deprecated taint-tracking configurations based on `TaintTracking::Configuration`. +* Deleted many deprecated dataflow configurations based on `DataFlow::Configuration`. * Deleted the deprecated `explorationLimit` predicate from `DataFlow::Configuration`, use `FlowExploration` instead. ### Minor Analysis Improvements @@ -451,7 +465,7 @@ No user-facing changes. ### New Features -* The `DataFlow::StateConfigSig` signature module has gained default implementations for `isBarrier/2` and `isAdditionalFlowStep/4`. +* The `DataFlow::StateConfigSig` signature module has gained default implementations for `isBarrier/2` and `isAdditionalFlowStep/4`. Hence it is no longer needed to provide `none()` implementations of these predicates if they are not needed. ### Minor Analysis Improvements @@ -586,7 +600,7 @@ No user-facing changes. * Attributes on methods in CIL are now extracted (Bugfix). * Support for `static virtual` and `static abstract` interface members. -* Support for *operators* in interface definitions. +* Support for *operators* in interface definitions. * C# 11: Added support for the unsigned right shift `>>>` and unsigned right shift assignment `>>>=` operators. * Query id's have been aligned such that they are prefixed with `cs` instead of `csharp`. @@ -626,13 +640,13 @@ No user-facing changes. ### Minor Analysis Improvements * `DateTime` expressions are now considered simple type sanitizers. This affects a wide range of security queries. -* ASP.NET Core controller definition has been made more precise. The amount of introduced taint sources or eliminated false positives should be low though, since the most common pattern is to derive all user defined ASP.NET Core controllers from the standard Controller class, which is not affected. +* ASP.NET Core controller definition has been made more precise. The amount of introduced taint sources or eliminated false positives should be low though, since the most common pattern is to derive all user defined ASP.NET Core controllers from the standard Controller class, which is not affected. ## 0.4.0 ### Deprecated APIs -* Some classes/modules with upper-case acronyms in their name have been renamed to follow our style-guide. +* Some classes/modules with upper-case acronyms in their name have been renamed to follow our style-guide. The old name still exists as a deprecated alias. ### Bug Fixes @@ -645,7 +659,7 @@ No user-facing changes. ### Deprecated APIs -* Many classes/predicates/modules with upper-case acronyms in their name have been renamed to follow our style-guide. +* Many classes/predicates/modules with upper-case acronyms in their name have been renamed to follow our style-guide. The old name still exists as a deprecated alias. ### Minor Analysis Improvements @@ -692,7 +706,7 @@ No user-facing changes. ### Deprecated APIs -* Many classes/predicates/modules that had upper-case acronyms have been renamed to follow our style-guide. +* Many classes/predicates/modules that had upper-case acronyms have been renamed to follow our style-guide. The old name still exists as a deprecated alias. ### New Features diff --git a/csharp/ql/lib/change-notes/2025-10-04-deprecate-controlsblock.md b/csharp/ql/lib/change-notes/2025-10-04-deprecate-controlsblock.md deleted file mode 100644 index a3c69932917..00000000000 --- a/csharp/ql/lib/change-notes/2025-10-04-deprecate-controlsblock.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: deprecated ---- -* `ControlFlowElement.controlsBlock` has been deprecated in favor of the Guards library. diff --git a/csharp/ql/lib/change-notes/2025-10-30-overlay-compilation-and-extraction.md b/csharp/ql/lib/change-notes/2025-10-30-overlay-compilation-and-extraction.md deleted file mode 100644 index 0f5005a22a2..00000000000 --- a/csharp/ql/lib/change-notes/2025-10-30-overlay-compilation-and-extraction.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: feature ---- - -* Initial support for incremental C# databases via `codeql database create --overlay-base`/`--overlay-changes`. diff --git a/csharp/ql/lib/change-notes/2025-11-03-roslyn-and-binlog.md b/csharp/ql/lib/change-notes/2025-11-03-roslyn-and-binlog.md deleted file mode 100644 index 92231d3be2f..00000000000 --- a/csharp/ql/lib/change-notes/2025-11-03-roslyn-and-binlog.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Updated *roslyn* and *binlog* dependencies in the extractor, which may improve database and analysis quality. diff --git a/csharp/ql/lib/change-notes/released/5.4.0.md b/csharp/ql/lib/change-notes/released/5.4.0.md new file mode 100644 index 00000000000..478e6deb414 --- /dev/null +++ b/csharp/ql/lib/change-notes/released/5.4.0.md @@ -0,0 +1,13 @@ +## 5.4.0 + +### Deprecated APIs + +* `ControlFlowElement.controlsBlock` has been deprecated in favor of the Guards library. + +### New Features + +* Initial support for incremental C# databases via `codeql database create --overlay-base`/`--overlay-changes`. + +### Minor Analysis Improvements + +* Updated *roslyn* and *binlog* dependencies in the extractor, which may improve database and analysis quality. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index b0a1c83e5bc..afb2156eaa2 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 5.3.0 +lastReleaseVersion: 5.4.0 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 3ecdad08291..3c3ae516a56 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 5.3.1-dev +version: 5.4.0 groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index 8993b453543..b7bef32f207 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,8 +1,18 @@ +## 1.5.0 + +### New Queries + +* The `cs/web/cookie-secure-not-set` and `cs/web/cookie-httponly-not-set` queries have been promoted from experimental to the main query pack. + +### Minor Analysis Improvements + +* An improvement to the Guards library for recognizing disjunctions means improved precision for `cs/constant-condition`, `cs/inefficient-containskey`, and `cs/dereferenced-value-may-be-null`. The two former can have additional findings, and the latter will have fewer false positives. + ## 1.4.3 ### Minor Analysis Improvements -* The `cs/web/missing-x-frame-options` query now correctly handles configuration nested in root `` elements. +* the `cs/web/missing-x-frame-options` query now correctly handles configuration nested in root `` elements. ## 1.4.2 @@ -170,7 +180,7 @@ No user-facing changes. ### Minor Analysis Improvements -* C#: The method `string.ReplaceLineEndings(string)` is now considered a sanitizer for the `cs/log-forging` query. +* C#: The method `string.ReplaceLineEndings(string)` is now considered a sanitizer for the `cs/log-forging` query. ## 1.0.10 @@ -284,7 +294,7 @@ No user-facing changes. ### Minor Analysis Improvements -* Fixed a Log forging false positive when using `String.Replace` to sanitize the input. +* Fixed a Log forging false positive when using `String.Replace` to sanitize the input. * Fixed a URL redirection from remote source false positive when guarding a redirect with `HttpRequestBase.IsUrlLocalToHost()` ## 0.8.5 diff --git a/csharp/ql/src/change-notes/2025-10-24-insecure-cookie-query-promote.md b/csharp/ql/src/change-notes/2025-10-24-insecure-cookie-query-promote.md deleted file mode 100644 index 6b3d8d5b259..00000000000 --- a/csharp/ql/src/change-notes/2025-10-24-insecure-cookie-query-promote.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* The `cs/web/cookie-secure-not-set` and `cs/web/cookie-httponly-not-set` queries have been promoted from experimental to the main query pack. diff --git a/csharp/ql/src/change-notes/2025-11-14-guards-disjunctive.md b/csharp/ql/src/change-notes/released/1.5.0.md similarity index 58% rename from csharp/ql/src/change-notes/2025-11-14-guards-disjunctive.md rename to csharp/ql/src/change-notes/released/1.5.0.md index 015f16f8d09..16106aaca11 100644 --- a/csharp/ql/src/change-notes/2025-11-14-guards-disjunctive.md +++ b/csharp/ql/src/change-notes/released/1.5.0.md @@ -1,4 +1,9 @@ ---- -category: minorAnalysis ---- +## 1.5.0 + +### New Queries + +* The `cs/web/cookie-secure-not-set` and `cs/web/cookie-httponly-not-set` queries have been promoted from experimental to the main query pack. + +### Minor Analysis Improvements + * An improvement to the Guards library for recognizing disjunctions means improved precision for `cs/constant-condition`, `cs/inefficient-containskey`, and `cs/dereferenced-value-may-be-null`. The two former can have additional findings, and the latter will have fewer false positives. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index 08f88b689fb..639f80c4341 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.4.3 +lastReleaseVersion: 1.5.0 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 2597e99f55b..4834c59d8fa 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.4.4-dev +version: 1.5.0 groups: - csharp - queries diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index 870695d684c..c27711a0c4c 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.35 + +No user-facing changes. + ## 1.0.34 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/1.0.35.md b/go/ql/consistency-queries/change-notes/released/1.0.35.md new file mode 100644 index 00000000000..c539ed2d3b1 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/1.0.35.md @@ -0,0 +1,3 @@ +## 1.0.35 + +No user-facing changes. diff --git a/go/ql/consistency-queries/codeql-pack.release.yml b/go/ql/consistency-queries/codeql-pack.release.yml index b736654032c..9493cf42a28 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.34 +lastReleaseVersion: 1.0.35 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index be82fc786d2..ce049f78027 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 1.0.35-dev +version: 1.0.35 groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index e2d2a71f6bd..553cccf4eab 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,12 @@ +## 5.0.2 + +### Bug Fixes + +* Some fixes relating to use of path transformers when extracting a database: + * Fixed a problem where the path transformer would be ignored when extracting older codebases that predate the use of Go modules. + * The environment variable `CODEQL_PATH_TRANSFORMER` is now recognized, in addition to `SEMMLE_PATH_TRANSFORMER`. + * Fixed some cases where the extractor emitted paths without applying the path transformer. + ## 5.0.1 No user-facing changes. diff --git a/go/ql/lib/change-notes/2025-11-11-path-transformer.md b/go/ql/lib/change-notes/released/5.0.2.md similarity index 94% rename from go/ql/lib/change-notes/2025-11-11-path-transformer.md rename to go/ql/lib/change-notes/released/5.0.2.md index c36cf8fb83e..1c95b433dac 100644 --- a/go/ql/lib/change-notes/2025-11-11-path-transformer.md +++ b/go/ql/lib/change-notes/released/5.0.2.md @@ -1,6 +1,7 @@ ---- -category: fix ---- +## 5.0.2 + +### Bug Fixes + * Some fixes relating to use of path transformers when extracting a database: * Fixed a problem where the path transformer would be ignored when extracting older codebases that predate the use of Go modules. * The environment variable `CODEQL_PATH_TRANSFORMER` is now recognized, in addition to `SEMMLE_PATH_TRANSFORMER`. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index ae7df5e18b7..3940dee0f32 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 5.0.1 +lastReleaseVersion: 5.0.2 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 058e65978f2..ec804b7aee5 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 5.0.2-dev +version: 5.0.2 groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index 786164b5fe4..82f6633fef9 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.4.9 + +No user-facing changes. + ## 1.4.8 No user-facing changes. diff --git a/go/ql/src/change-notes/released/1.4.9.md b/go/ql/src/change-notes/released/1.4.9.md new file mode 100644 index 00000000000..23b8222662c --- /dev/null +++ b/go/ql/src/change-notes/released/1.4.9.md @@ -0,0 +1,3 @@ +## 1.4.9 + +No user-facing changes. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index 16e6425ae7e..c1bf629045f 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.4.8 +lastReleaseVersion: 1.4.9 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 4a0baaa7836..d273ea1ddfc 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.4.9-dev +version: 1.4.9 groups: - go - queries diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index e261dbee59e..10dfe5ce35b 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 7.7.4 + +No user-facing changes. + ## 7.7.3 No user-facing changes. diff --git a/java/ql/lib/change-notes/released/7.7.4.md b/java/ql/lib/change-notes/released/7.7.4.md new file mode 100644 index 00000000000..47cd244f789 --- /dev/null +++ b/java/ql/lib/change-notes/released/7.7.4.md @@ -0,0 +1,3 @@ +## 7.7.4 + +No user-facing changes. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index 6856106e771..7b894469209 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 7.7.3 +lastReleaseVersion: 7.7.4 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index bcfc194a4cb..8a3414dcb12 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 7.7.4-dev +version: 7.7.4 groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index ed02fdc5bb2..9e82554241e 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,10 @@ +## 1.10.0 + +### Query Metadata Changes + +* Reduced the `security-severity` score of the `java/overly-large-range` query from 5.0 to 4.0 to better reflect its impact. +* Reduced the `security-severity` score of the `java/insecure-cookie` query from 5.0 to 4.0 to better reflect its impact. + ## 1.9.0 ### New Queries diff --git a/java/ql/src/change-notes/2025-10-22-adjust-query-severity.md b/java/ql/src/change-notes/released/1.10.0.md similarity index 66% rename from java/ql/src/change-notes/2025-10-22-adjust-query-severity.md rename to java/ql/src/change-notes/released/1.10.0.md index 61cc9402a78..6cfa49bc2c4 100644 --- a/java/ql/src/change-notes/2025-10-22-adjust-query-severity.md +++ b/java/ql/src/change-notes/released/1.10.0.md @@ -1,5 +1,6 @@ ---- -category: queryMetadata ---- +## 1.10.0 + +### Query Metadata Changes + * Reduced the `security-severity` score of the `java/overly-large-range` query from 5.0 to 4.0 to better reflect its impact. -* Reduced the `security-severity` score of the `java/insecure-cookie` query from 5.0 to 4.0 to better reflect its impact. \ No newline at end of file +* Reduced the `security-severity` score of the `java/insecure-cookie` query from 5.0 to 4.0 to better reflect its impact. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index df17dc3a366..753e9ac2844 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.9.0 +lastReleaseVersion: 1.10.0 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 98f0bdd5710..3a4bf16b232 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.9.1-dev +version: 1.10.0 groups: - java - queries diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index 9f27fdae99c..7ec6b99fd99 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.6.15 + +No user-facing changes. + ## 2.6.14 No user-facing changes. diff --git a/javascript/ql/lib/change-notes/released/2.6.15.md b/javascript/ql/lib/change-notes/released/2.6.15.md new file mode 100644 index 00000000000..f69028c6891 --- /dev/null +++ b/javascript/ql/lib/change-notes/released/2.6.15.md @@ -0,0 +1,3 @@ +## 2.6.15 + +No user-facing changes. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index 022aeff4e02..cafb64b8792 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.6.14 +lastReleaseVersion: 2.6.15 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index bd19febdfaa..de43ec0c7ad 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 2.6.15-dev +version: 2.6.15 groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index 4a453506818..f52156dc1b9 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,3 +1,10 @@ +## 2.2.0 + +### Query Metadata Changes + +* Increased the `security-severity` score of the `js/xss-through-dom` query from 6.1 to 7.8 to align with other XSS queries. +* Reduced the `security-severity` score of the `js/overly-large-range` query from 5.0 to 4.0 to better reflect its impact. + ## 2.1.3 No user-facing changes. diff --git a/javascript/ql/src/change-notes/2025-10-22-adjust-query-severity.md b/javascript/ql/src/change-notes/released/2.2.0.md similarity index 66% rename from javascript/ql/src/change-notes/2025-10-22-adjust-query-severity.md rename to javascript/ql/src/change-notes/released/2.2.0.md index ca81037f44b..6a60b337eef 100644 --- a/javascript/ql/src/change-notes/2025-10-22-adjust-query-severity.md +++ b/javascript/ql/src/change-notes/released/2.2.0.md @@ -1,5 +1,6 @@ ---- -category: queryMetadata ---- +## 2.2.0 + +### Query Metadata Changes + * Increased the `security-severity` score of the `js/xss-through-dom` query from 6.1 to 7.8 to align with other XSS queries. -* Reduced the `security-severity` score of the `js/overly-large-range` query from 5.0 to 4.0 to better reflect its impact. \ No newline at end of file +* Reduced the `security-severity` score of the `js/overly-large-range` query from 5.0 to 4.0 to better reflect its impact. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index 345fb0c73a4..2f308354195 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.1.3 +lastReleaseVersion: 2.2.0 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 93dd9cf7ae7..d3adb5a5207 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 2.1.4-dev +version: 2.2.0 groups: - javascript - queries diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index 203d289a673..b273c2953fd 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.35 + +No user-facing changes. + ## 1.0.34 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/1.0.35.md b/misc/suite-helpers/change-notes/released/1.0.35.md new file mode 100644 index 00000000000..c539ed2d3b1 --- /dev/null +++ b/misc/suite-helpers/change-notes/released/1.0.35.md @@ -0,0 +1,3 @@ +## 1.0.35 + +No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index b736654032c..9493cf42a28 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.34 +lastReleaseVersion: 1.0.35 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index e3283b5dc3f..b3316643de4 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.35-dev +version: 1.0.35 groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index df8a66ca0e6..67b8cece821 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 5.0.0 + +### Breaking Changes + +- The classes `ControlFlowNode`, `Expr`, and `Module` no longer expose predicates that invoke the points-to analysis. To access these predicates, import the module `LegacyPointsTo` and follow the instructions given therein. + ## 4.1.0 ### New Features diff --git a/python/ql/lib/change-notes/2025-10-30-remove-points-to-from-cfg-and-expr.md b/python/ql/lib/change-notes/released/5.0.0.md similarity index 87% rename from python/ql/lib/change-notes/2025-10-30-remove-points-to-from-cfg-and-expr.md rename to python/ql/lib/change-notes/released/5.0.0.md index 9b8eef6bcba..ae6a34880e0 100644 --- a/python/ql/lib/change-notes/2025-10-30-remove-points-to-from-cfg-and-expr.md +++ b/python/ql/lib/change-notes/released/5.0.0.md @@ -1,5 +1,5 @@ ---- -category: breaking ---- +## 5.0.0 + +### Breaking Changes - The classes `ControlFlowNode`, `Expr`, and `Module` no longer expose predicates that invoke the points-to analysis. To access these predicates, import the module `LegacyPointsTo` and follow the instructions given therein. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index d5b1bf88d10..c9e54136ca5 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 4.1.0 +lastReleaseVersion: 5.0.0 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index bb28a8f6315..fd765f7c385 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 4.1.1-dev +version: 5.0.0 groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index 65fd05e047b..1496c93adc7 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.7.0 + +### Query Metadata Changes + +* Reduced the `security-severity` score of the `py/overly-large-range` query from 5.0 to 4.0 to better reflect its impact. + ## 1.6.8 ### Minor Analysis Improvements diff --git a/python/ql/src/change-notes/2025-10-22-adjust-query-severity.md b/python/ql/src/change-notes/2025-10-22-adjust-query-severity.md deleted file mode 100644 index bc314358a6f..00000000000 --- a/python/ql/src/change-notes/2025-10-22-adjust-query-severity.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: queryMetadata ---- -* Reduced the `security-severity` score of the `py/overly-large-range` query from 5.0 to 4.0 to better reflect its impact. \ No newline at end of file diff --git a/python/ql/src/change-notes/released/1.7.0.md b/python/ql/src/change-notes/released/1.7.0.md new file mode 100644 index 00000000000..92850b2e464 --- /dev/null +++ b/python/ql/src/change-notes/released/1.7.0.md @@ -0,0 +1,5 @@ +## 1.7.0 + +### Query Metadata Changes + +* Reduced the `security-severity` score of the `py/overly-large-range` query from 5.0 to 4.0 to better reflect its impact. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index fbc11aa62b7..d1184cc6750 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.6.8 +lastReleaseVersion: 1.7.0 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index 7280bbcb67c..0c4bd654b0b 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.6.9-dev +version: 1.7.0 groups: - python - queries diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index a99e4017789..1a4f011d531 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 5.1.3 + +No user-facing changes. + ## 5.1.2 No user-facing changes. diff --git a/ruby/ql/lib/change-notes/released/5.1.3.md b/ruby/ql/lib/change-notes/released/5.1.3.md new file mode 100644 index 00000000000..9af1eab14f3 --- /dev/null +++ b/ruby/ql/lib/change-notes/released/5.1.3.md @@ -0,0 +1,3 @@ +## 5.1.3 + +No user-facing changes. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index d21c12fbe7f..8ffbc76d58a 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 5.1.2 +lastReleaseVersion: 5.1.3 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 3a400018dec..dba4b173bf2 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 5.1.3-dev +version: 5.1.3 groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index 282fd284635..300aa213b5d 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.5.0 + +### Query Metadata Changes + +* Reduced the `security-severity` score of the `rb/overly-large-range` query from 5.0 to 4.0 to better reflect its impact. + ## 1.4.8 No user-facing changes. diff --git a/ruby/ql/src/change-notes/2025-10-22-adjust-query-severity.md b/ruby/ql/src/change-notes/2025-10-22-adjust-query-severity.md deleted file mode 100644 index 4da73769e27..00000000000 --- a/ruby/ql/src/change-notes/2025-10-22-adjust-query-severity.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: queryMetadata ---- -* Reduced the `security-severity` score of the `rb/overly-large-range` query from 5.0 to 4.0 to better reflect its impact. \ No newline at end of file diff --git a/ruby/ql/src/change-notes/released/1.5.0.md b/ruby/ql/src/change-notes/released/1.5.0.md new file mode 100644 index 00000000000..491a3bf9ee4 --- /dev/null +++ b/ruby/ql/src/change-notes/released/1.5.0.md @@ -0,0 +1,5 @@ +## 1.5.0 + +### Query Metadata Changes + +* Reduced the `security-severity` score of the `rb/overly-large-range` query from 5.0 to 4.0 to better reflect its impact. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index 16e6425ae7e..639f80c4341 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.4.8 +lastReleaseVersion: 1.5.0 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 37c9e4be522..a581cc8866d 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.4.9-dev +version: 1.5.0 groups: - ruby - queries diff --git a/rust/ql/lib/CHANGELOG.md b/rust/ql/lib/CHANGELOG.md index 7e8575b03be..7dd8b44f124 100644 --- a/rust/ql/lib/CHANGELOG.md +++ b/rust/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.1.20 + +### Minor Analysis Improvements + +* Added models for cookie methods in the `poem` crate. + ## 0.1.19 ### Major Analysis Improvements diff --git a/rust/ql/lib/change-notes/2025-11-05-poem.md b/rust/ql/lib/change-notes/released/0.1.20.md similarity index 55% rename from rust/ql/lib/change-notes/2025-11-05-poem.md rename to rust/ql/lib/change-notes/released/0.1.20.md index b71e52a8139..12d4a7a3d5a 100644 --- a/rust/ql/lib/change-notes/2025-11-05-poem.md +++ b/rust/ql/lib/change-notes/released/0.1.20.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 0.1.20 + +### Minor Analysis Improvements + * Added models for cookie methods in the `poem` crate. diff --git a/rust/ql/lib/codeql-pack.release.yml b/rust/ql/lib/codeql-pack.release.yml index de6e4c49068..9910e8d039f 100644 --- a/rust/ql/lib/codeql-pack.release.yml +++ b/rust/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.19 +lastReleaseVersion: 0.1.20 diff --git a/rust/ql/lib/qlpack.yml b/rust/ql/lib/qlpack.yml index 3c045cd83e5..0a00fef81b0 100644 --- a/rust/ql/lib/qlpack.yml +++ b/rust/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-all -version: 0.1.20-dev +version: 0.1.20 groups: rust extractor: rust dbscheme: rust.dbscheme diff --git a/rust/ql/src/CHANGELOG.md b/rust/ql/src/CHANGELOG.md index 2b0c54fc057..d292205bfdc 100644 --- a/rust/ql/src/CHANGELOG.md +++ b/rust/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.1.20 + +### Minor Analysis Improvements + +* Taint flow barriers have been added to the `rust/regex-injection`, `rust/sql-injection` and `rust/log-injection`, reducing the frequency of false positive results for these queries. + ## 0.1.19 ### Minor Analysis Improvements diff --git a/rust/ql/src/change-notes/2025-10-31-barriers.md b/rust/ql/src/change-notes/released/0.1.20.md similarity index 80% rename from rust/ql/src/change-notes/2025-10-31-barriers.md rename to rust/ql/src/change-notes/released/0.1.20.md index 1504380d8d0..a29940bfb7c 100644 --- a/rust/ql/src/change-notes/2025-10-31-barriers.md +++ b/rust/ql/src/change-notes/released/0.1.20.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 0.1.20 + +### Minor Analysis Improvements + * Taint flow barriers have been added to the `rust/regex-injection`, `rust/sql-injection` and `rust/log-injection`, reducing the frequency of false positive results for these queries. diff --git a/rust/ql/src/codeql-pack.release.yml b/rust/ql/src/codeql-pack.release.yml index de6e4c49068..9910e8d039f 100644 --- a/rust/ql/src/codeql-pack.release.yml +++ b/rust/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.19 +lastReleaseVersion: 0.1.20 diff --git a/rust/ql/src/qlpack.yml b/rust/ql/src/qlpack.yml index a26c9d35de5..fcf86c7e21f 100644 --- a/rust/ql/src/qlpack.yml +++ b/rust/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-queries -version: 0.1.20-dev +version: 0.1.20 groups: - rust - queries diff --git a/shared/concepts/CHANGELOG.md b/shared/concepts/CHANGELOG.md index 4d0898b90e4..ab7c158c25b 100644 --- a/shared/concepts/CHANGELOG.md +++ b/shared/concepts/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.9 + +No user-facing changes. + ## 0.0.8 No user-facing changes. diff --git a/shared/concepts/change-notes/released/0.0.9.md b/shared/concepts/change-notes/released/0.0.9.md new file mode 100644 index 00000000000..c9e17c6d6cf --- /dev/null +++ b/shared/concepts/change-notes/released/0.0.9.md @@ -0,0 +1,3 @@ +## 0.0.9 + +No user-facing changes. diff --git a/shared/concepts/codeql-pack.release.yml b/shared/concepts/codeql-pack.release.yml index 58fdc6b45de..ecdd64fbab8 100644 --- a/shared/concepts/codeql-pack.release.yml +++ b/shared/concepts/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.8 +lastReleaseVersion: 0.0.9 diff --git a/shared/concepts/qlpack.yml b/shared/concepts/qlpack.yml index f76c1f2ae45..289b9d531da 100644 --- a/shared/concepts/qlpack.yml +++ b/shared/concepts/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/concepts -version: 0.0.9-dev +version: 0.0.9 groups: shared library: true dependencies: diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index c5b9b9d696a..d2961b51483 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.19 + +No user-facing changes. + ## 2.0.18 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/2.0.19.md b/shared/controlflow/change-notes/released/2.0.19.md new file mode 100644 index 00000000000..b37b6798b12 --- /dev/null +++ b/shared/controlflow/change-notes/released/2.0.19.md @@ -0,0 +1,3 @@ +## 2.0.19 + +No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index 16342205c73..4aecf1e1f86 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.18 +lastReleaseVersion: 2.0.19 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index fdf7de8e6a7..a046376584b 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 2.0.19-dev +version: 2.0.19 groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index f963117ea88..ff6b9243d64 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.19 + +No user-facing changes. + ## 2.0.18 No user-facing changes. diff --git a/shared/dataflow/change-notes/released/2.0.19.md b/shared/dataflow/change-notes/released/2.0.19.md new file mode 100644 index 00000000000..b37b6798b12 --- /dev/null +++ b/shared/dataflow/change-notes/released/2.0.19.md @@ -0,0 +1,3 @@ +## 2.0.19 + +No user-facing changes. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index 16342205c73..4aecf1e1f86 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.18 +lastReleaseVersion: 2.0.19 diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 7f969fdef42..d1cddb65806 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 2.0.19-dev +version: 2.0.19 groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index b0b444f8c41..b5ca37028e4 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.35 + +No user-facing changes. + ## 1.0.34 No user-facing changes. diff --git a/shared/mad/change-notes/released/1.0.35.md b/shared/mad/change-notes/released/1.0.35.md new file mode 100644 index 00000000000..c539ed2d3b1 --- /dev/null +++ b/shared/mad/change-notes/released/1.0.35.md @@ -0,0 +1,3 @@ +## 1.0.35 + +No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index b736654032c..9493cf42a28 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.34 +lastReleaseVersion: 1.0.35 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 13a5b8507b3..54662518ac6 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.35-dev +version: 1.0.35 groups: shared library: true dependencies: diff --git a/shared/quantum/CHANGELOG.md b/shared/quantum/CHANGELOG.md index 83a42fb0551..29ece641a7e 100644 --- a/shared/quantum/CHANGELOG.md +++ b/shared/quantum/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.13 + +No user-facing changes. + ## 0.0.12 No user-facing changes. diff --git a/shared/quantum/change-notes/released/0.0.13.md b/shared/quantum/change-notes/released/0.0.13.md new file mode 100644 index 00000000000..f679eaf0313 --- /dev/null +++ b/shared/quantum/change-notes/released/0.0.13.md @@ -0,0 +1,3 @@ +## 0.0.13 + +No user-facing changes. diff --git a/shared/quantum/codeql-pack.release.yml b/shared/quantum/codeql-pack.release.yml index 997fb8da83c..044e54e4f7e 100644 --- a/shared/quantum/codeql-pack.release.yml +++ b/shared/quantum/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.12 +lastReleaseVersion: 0.0.13 diff --git a/shared/quantum/qlpack.yml b/shared/quantum/qlpack.yml index 0cc0fbad906..7aa341ed298 100644 --- a/shared/quantum/qlpack.yml +++ b/shared/quantum/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/quantum -version: 0.0.13-dev +version: 0.0.13 groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index 640d26270e1..f433c424cfe 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.35 + +No user-facing changes. + ## 1.0.34 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/1.0.35.md b/shared/rangeanalysis/change-notes/released/1.0.35.md new file mode 100644 index 00000000000..c539ed2d3b1 --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/1.0.35.md @@ -0,0 +1,3 @@ +## 1.0.35 + +No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index b736654032c..9493cf42a28 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.34 +lastReleaseVersion: 1.0.35 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index 24b697d1f49..acfe26c3d74 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.35-dev +version: 1.0.35 groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index 1e3fb3c306c..69cf5cdad0e 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.35 + +No user-facing changes. + ## 1.0.34 No user-facing changes. diff --git a/shared/regex/change-notes/released/1.0.35.md b/shared/regex/change-notes/released/1.0.35.md new file mode 100644 index 00000000000..c539ed2d3b1 --- /dev/null +++ b/shared/regex/change-notes/released/1.0.35.md @@ -0,0 +1,3 @@ +## 1.0.35 + +No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index b736654032c..9493cf42a28 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.34 +lastReleaseVersion: 1.0.35 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index f66b9d743f6..7c883c5a348 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.35-dev +version: 1.0.35 groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index 2d8087cd96c..5cbc5a2ebca 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.11 + +No user-facing changes. + ## 2.0.10 No user-facing changes. diff --git a/shared/ssa/change-notes/released/2.0.11.md b/shared/ssa/change-notes/released/2.0.11.md new file mode 100644 index 00000000000..b3d110bcba5 --- /dev/null +++ b/shared/ssa/change-notes/released/2.0.11.md @@ -0,0 +1,3 @@ +## 2.0.11 + +No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index 96ea0220a69..3cbe73b4cad 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.10 +lastReleaseVersion: 2.0.11 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 0aada9508ee..9c7f6f2ac2a 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 2.0.11-dev +version: 2.0.11 groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index 870695d684c..c27711a0c4c 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.35 + +No user-facing changes. + ## 1.0.34 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/1.0.35.md b/shared/threat-models/change-notes/released/1.0.35.md new file mode 100644 index 00000000000..c539ed2d3b1 --- /dev/null +++ b/shared/threat-models/change-notes/released/1.0.35.md @@ -0,0 +1,3 @@ +## 1.0.35 + +No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index b736654032c..9493cf42a28 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.34 +lastReleaseVersion: 1.0.35 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 4bb9cb4cb5f..02bfe21bf76 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.35-dev +version: 1.0.35 library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index 23fd78f42e5..33db936cccc 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.35 + +No user-facing changes. + ## 1.0.34 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/1.0.35.md b/shared/tutorial/change-notes/released/1.0.35.md new file mode 100644 index 00000000000..c539ed2d3b1 --- /dev/null +++ b/shared/tutorial/change-notes/released/1.0.35.md @@ -0,0 +1,3 @@ +## 1.0.35 + +No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index b736654032c..9493cf42a28 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.34 +lastReleaseVersion: 1.0.35 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index fa53c0be99f..658dbc8c816 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 1.0.35-dev +version: 1.0.35 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/CHANGELOG.md b/shared/typeflow/CHANGELOG.md index d95faf69864..04ce591c7d2 100644 --- a/shared/typeflow/CHANGELOG.md +++ b/shared/typeflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.35 + +No user-facing changes. + ## 1.0.34 No user-facing changes. diff --git a/shared/typeflow/change-notes/released/1.0.35.md b/shared/typeflow/change-notes/released/1.0.35.md new file mode 100644 index 00000000000..c539ed2d3b1 --- /dev/null +++ b/shared/typeflow/change-notes/released/1.0.35.md @@ -0,0 +1,3 @@ +## 1.0.35 + +No user-facing changes. diff --git a/shared/typeflow/codeql-pack.release.yml b/shared/typeflow/codeql-pack.release.yml index b736654032c..9493cf42a28 100644 --- a/shared/typeflow/codeql-pack.release.yml +++ b/shared/typeflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.34 +lastReleaseVersion: 1.0.35 diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index 94cae6f26a6..b0d79695965 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.35-dev +version: 1.0.35 groups: shared library: true dependencies: diff --git a/shared/typeinference/CHANGELOG.md b/shared/typeinference/CHANGELOG.md index 4f4b3189bb4..28235d47f61 100644 --- a/shared/typeinference/CHANGELOG.md +++ b/shared/typeinference/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.16 + +No user-facing changes. + ## 0.0.15 No user-facing changes. diff --git a/shared/typeinference/change-notes/released/0.0.16.md b/shared/typeinference/change-notes/released/0.0.16.md new file mode 100644 index 00000000000..62b5521ea01 --- /dev/null +++ b/shared/typeinference/change-notes/released/0.0.16.md @@ -0,0 +1,3 @@ +## 0.0.16 + +No user-facing changes. diff --git a/shared/typeinference/codeql-pack.release.yml b/shared/typeinference/codeql-pack.release.yml index dff35216fc6..a49f7be4cff 100644 --- a/shared/typeinference/codeql-pack.release.yml +++ b/shared/typeinference/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.15 +lastReleaseVersion: 0.0.16 diff --git a/shared/typeinference/qlpack.yml b/shared/typeinference/qlpack.yml index 00008849702..485c6284030 100644 --- a/shared/typeinference/qlpack.yml +++ b/shared/typeinference/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeinference -version: 0.0.16-dev +version: 0.0.16 groups: shared library: true dependencies: diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index 4edafe87290..0d3ff4a1df1 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.19 + +No user-facing changes. + ## 2.0.18 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/2.0.19.md b/shared/typetracking/change-notes/released/2.0.19.md new file mode 100644 index 00000000000..b37b6798b12 --- /dev/null +++ b/shared/typetracking/change-notes/released/2.0.19.md @@ -0,0 +1,3 @@ +## 2.0.19 + +No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index 16342205c73..4aecf1e1f86 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.18 +lastReleaseVersion: 2.0.19 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index 0c588182911..d804fa00748 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 2.0.19-dev +version: 2.0.19 groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index 9fbdb39d493..e38e1645eb5 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.35 + +No user-facing changes. + ## 1.0.34 No user-facing changes. diff --git a/shared/typos/change-notes/released/1.0.35.md b/shared/typos/change-notes/released/1.0.35.md new file mode 100644 index 00000000000..c539ed2d3b1 --- /dev/null +++ b/shared/typos/change-notes/released/1.0.35.md @@ -0,0 +1,3 @@ +## 1.0.35 + +No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index b736654032c..9493cf42a28 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.34 +lastReleaseVersion: 1.0.35 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index b876c84bbe3..94ec6653e8b 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.35-dev +version: 1.0.35 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index 88679dd6846..13de50b7321 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.22 + +No user-facing changes. + ## 2.0.21 No user-facing changes. diff --git a/shared/util/change-notes/released/2.0.22.md b/shared/util/change-notes/released/2.0.22.md new file mode 100644 index 00000000000..8a2611adad2 --- /dev/null +++ b/shared/util/change-notes/released/2.0.22.md @@ -0,0 +1,3 @@ +## 2.0.22 + +No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index a572e88bffd..980bdfe195b 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.21 +lastReleaseVersion: 2.0.22 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index 4d4b671071e..aefbed94437 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 2.0.22-dev +version: 2.0.22 groups: shared library: true dependencies: null diff --git a/shared/xml/CHANGELOG.md b/shared/xml/CHANGELOG.md index ff67592d22b..25cba5db417 100644 --- a/shared/xml/CHANGELOG.md +++ b/shared/xml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.35 + +No user-facing changes. + ## 1.0.34 No user-facing changes. diff --git a/shared/xml/change-notes/released/1.0.35.md b/shared/xml/change-notes/released/1.0.35.md new file mode 100644 index 00000000000..c539ed2d3b1 --- /dev/null +++ b/shared/xml/change-notes/released/1.0.35.md @@ -0,0 +1,3 @@ +## 1.0.35 + +No user-facing changes. diff --git a/shared/xml/codeql-pack.release.yml b/shared/xml/codeql-pack.release.yml index b736654032c..9493cf42a28 100644 --- a/shared/xml/codeql-pack.release.yml +++ b/shared/xml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.34 +lastReleaseVersion: 1.0.35 diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index 40a7eadd828..7fa5e1d171e 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.35-dev +version: 1.0.35 groups: shared library: true dependencies: diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index fb623a1f26c..daf8d92d00a 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.35 + +No user-facing changes. + ## 1.0.34 No user-facing changes. diff --git a/shared/yaml/change-notes/released/1.0.35.md b/shared/yaml/change-notes/released/1.0.35.md new file mode 100644 index 00000000000..c539ed2d3b1 --- /dev/null +++ b/shared/yaml/change-notes/released/1.0.35.md @@ -0,0 +1,3 @@ +## 1.0.35 + +No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index b736654032c..9493cf42a28 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.34 +lastReleaseVersion: 1.0.35 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index a1af32ac079..fd6a84b1693 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.35-dev +version: 1.0.35 groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index b1b958708e0..a1224ca4a8c 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 6.1.0 + +### Major Analysis Improvements + +* Upgraded to allow analysis of Swift 6.2.1. + ## 6.0.0 ### Breaking Changes diff --git a/swift/ql/lib/change-notes/2025-10-22-swift-6.2.1.md b/swift/ql/lib/change-notes/released/6.1.0.md similarity index 51% rename from swift/ql/lib/change-notes/2025-10-22-swift-6.2.1.md rename to swift/ql/lib/change-notes/released/6.1.0.md index 42a738ff746..2c16ed106e6 100644 --- a/swift/ql/lib/change-notes/2025-10-22-swift-6.2.1.md +++ b/swift/ql/lib/change-notes/released/6.1.0.md @@ -1,4 +1,5 @@ ---- -category: majorAnalysis ---- +## 6.1.0 + +### Major Analysis Improvements + * Upgraded to allow analysis of Swift 6.2.1. diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index f8c4fa43ccb..22247782f3e 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 6.0.0 +lastReleaseVersion: 6.1.0 diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index ba8c8aac044..84ff9e5061a 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 6.0.1-dev +version: 6.1.0 groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index 99b5491b9db..ac02b32dc56 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.2.9 + +No user-facing changes. + ## 1.2.8 No user-facing changes. diff --git a/swift/ql/src/change-notes/released/1.2.9.md b/swift/ql/src/change-notes/released/1.2.9.md new file mode 100644 index 00000000000..a928703e4be --- /dev/null +++ b/swift/ql/src/change-notes/released/1.2.9.md @@ -0,0 +1,3 @@ +## 1.2.9 + +No user-facing changes. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index a49a92ee5ab..96443e87f0d 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.2.8 +lastReleaseVersion: 1.2.9 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index d5a55b365f1..cf2c5ccfc84 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.2.9-dev +version: 1.2.9 groups: - swift - queries From 47ac4dd1dcdaab4f6cbd0312a63df060225747e0 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 17 Nov 2025 19:21:37 +0000 Subject: [PATCH 073/127] C++: Add 'nomagic' to 'getParameter'. --- cpp/ql/lib/semmle/code/cpp/Function.qll | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/Function.qll b/cpp/ql/lib/semmle/code/cpp/Function.qll index 8ddb07a868e..10b156e3fb6 100644 --- a/cpp/ql/lib/semmle/code/cpp/Function.qll +++ b/cpp/ql/lib/semmle/code/cpp/Function.qll @@ -171,12 +171,14 @@ class Function extends Declaration, ControlFlowNode, AccessHolder, @function { * Gets the nth parameter of this function. There is no result for the * implicit `this` parameter, and there is no `...` varargs pseudo-parameter. */ + pragma[nomagic] Parameter getParameter(int n) { params(unresolveElement(result), underlyingElement(this), n, _) } /** * Gets a parameter of this function. There is no result for the implicit * `this` parameter, and there is no `...` varargs pseudo-parameter. */ + pragma[nomagic] Parameter getAParameter() { params(unresolveElement(result), underlyingElement(this), _, _) } /** From 63390be18583b27cd03f47d09eedf5df87f113bc Mon Sep 17 00:00:00 2001 From: Jon Janego Date: Mon, 17 Nov 2025 14:24:35 -0600 Subject: [PATCH 074/127] Changedocs for 2.23.5 --- .../codeql-changelog/codeql-cli-2.23.1.rst | 4 +- .../codeql-changelog/codeql-cli-2.23.5.rst | 134 ++++++++++++++++++ .../codeql-changelog/index.rst | 1 + 3 files changed, 137 insertions(+), 2 deletions(-) create mode 100644 docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.5.rst diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst index ff22a3f647c..27f1eee84ed 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst @@ -88,7 +88,7 @@ JavaScript/TypeScript * Data flow is now tracked through the :code:`Promise.try` and :code:`Array.prototype.with` functions. * Query :code:`js/index-out-of-bounds` no longer produces a false-positive when a strictly-less-than check overrides a previous less-than-or-equal test. * The query :code:`js/remote-property-injection` now detects property injection vulnerabilities through object enumeration patterns such as :code:`Object.keys()`. -* The query "Permissive CORS configuration" (:code:`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. Thank you to @maikypedia who `submitted the original experimental query `__! +* The query "Permissive CORS configuration" (:code:`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. Thank you to @maikypedia who `submitted the original experimental query `__\ ! Python """""" @@ -126,7 +126,7 @@ Golang """""" * The second argument of the :code:`CreateTemp` function, from the :code:`os` package, is no longer a path-injection sink due to proper sanitization by Go. -* The query "Uncontrolled data used in path expression" (:code:`go/path-injection`) now detects sanitizing a path by adding :code:`os.PathSeparator` or ``\`` to the beginning. +* The query "Uncontrolled data used in path expression" (:code:`go/path-injection`) now detects sanitizing a path by adding :code:`os.PathSeparator` or :code:`\` to the beginning. Java/Kotlin """"""""""" diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.5.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.5.rst new file mode 100644 index 00000000000..9022a09444f --- /dev/null +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.5.rst @@ -0,0 +1,134 @@ +.. _codeql-cli-2.23.5: + +========================== +CodeQL 2.23.5 (2025-11-13) +========================== + +.. contents:: Contents + :depth: 2 + :local: + :backlinks: none + +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. + +Security Coverage +----------------- + +CodeQL 2.23.5 runs a total of 483 security queries when configured with the Default suite (covering 166 CWE). The Extended suite enables an additional 135 queries (covering 35 more CWE). 3 security queries have been added with this release. + +CodeQL CLI +---------- + +Breaking Changes +~~~~~~~~~~~~~~~~ + +* In order to make a :code:`@kind path-problem` query diff-informed, the :code:`getASelectedSourceLocation` and :code:`getASelectedSinkLocation` predicates in the dataflow configuration now need to be overridden to always return the location of the source/sink *in addition to* any other locations that are selected by the query. See the `QLdoc `__ for more details. + +Query Packs +----------- + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C# +"" + +* the :code:`cs/web/missing-x-frame-options` query now correctly handles configuration nested in root :code:`` elements. + +Java/Kotlin +""""""""""" + +* Calls to :code:`String.matches` are now treated as sanitizers for the :code:`java/ssrf` query. + +Python +"""""" + +* The :code:`py/insecure-cookie` query has been split into multiple queries; with :code:`py/insecure-cookie` checking for cases in which :code:`Secure` flag is not set, :code:`py/client-exposed-cookie` checking for cases in which the :code:`HttpOnly` flag is not set, and the :code:`py/samesite-none` query checking for cases in which the :code:`SameSite` attribute is set to :code:`None`. These queries also now only alert for cases in which the cookie is detected to contain sensitive data. + +Rust +"""" + +* The "Low Rust analysis quality" query (:code:`rust/diagnostic/database-quality`), used by the tool status page, has been extended with a measure of successful type inference. + +New Queries +~~~~~~~~~~~ + +Java/Kotlin +""""""""""" + +* The :code:`java/sensitive-cookie-not-httponly` query has been promoted from experimental to the main query pack. +* Added a new query, :code:`java/escaping`, to detect values escaping from classes marked as :code:`@ThreadSafe`. +* Added a new query, :code:`java/not-threadsafe`, to detect data races in classes marked as :code:`@ThreadSafe`. +* Added a new query, :code:`java/safe-publication`, to detect unsafe publication in classes marked as :code:`@ThreadSafe`. + +Language Libraries +------------------ + +Breaking Changes +~~~~~~~~~~~~~~~~ + +Swift +""""" + +* The :code:`OpenedArchetypeType` class has been renamed as :code:`ExistentialArchetypeType`. +* The :code:`OtherAvailabilitySpec` class has been removed. Use :code:`AvailabilitySpec::isWildcard` instead. +* The :code:`PlatformVersionAvailabilitySpec` has been removed. Use :code:`AvailabilitySpec::getPlatform` and :code:`AvailabilitySpec::getVersion` instead. + +Major Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C# +"" + +* The representation of the C# control-flow graph has been significantly changed. This has minor effects on a wide range of queries including both minor improvements and minor regressions, for example, improved precision has been observed for :code:`cs/inefficient-containskey` and :code:`cs/stringbuilder-creation-in-loop`. Two queries stand out as being significantly affected with great improvements: :code:`cs/dereferenced-value-may-be-null` has been completely rewritten which removes a very significant number of false positives. Furthermore, :code:`cs/constant-condition` has been updated to report many new results - these new results are primarily expected to be true positives, but a few new false positives are expected as well. As part of these changes, :code:`cs/dereferenced-value-may-be-null` has been changed from a :code:`path-problem` query to a :code:`problem` query, so paths are no longer reported for this query. + +Swift +""""" + +* Upgraded to allow analysis of Swift 6.2. +* Support for experimental Embedded Swift has been dropped. + +Rust +"""" + +* Resolution of calls to functions has been improved in a number of ways, to make it more aligned with the behavior of the Rust compiler. This may impact queries that rely on call resolution, such as data flow queries. +* Added basic models for the :code:`actix-web` web framework. + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C# +"" + +* Added tracer support for macOS and Linux when the .NET CLI (:code:`dotnet`) directly invokes the C# compiler (:code:`csc`). This enhancement provides basic tracing and extraction capabilities for .NET 10 RC2 on these platforms. +* The extraction of location information for source code entities has been updated to use star IDs (:code:`*` IDs). This change should be transparent to end-users but may improve extraction performance in some cases by reducing TRAP file size and eliminating overhead from location de-duplication. + +Rust +"""" + +* Added :code:`ExtractedFile::hasSemantics` and :code:`ExtractedFile::isSkippedByCompilation` predicates. +* Generalized some existing models to improve data flow. +* Added models for the :code:`mysql` and :code:`mysql_async` libraries. + +Deprecated APIs +~~~~~~~~~~~~~~~ + +C# +"" + +* The class :code:`AbstractValue` in the :code:`Guards` library has been deprecated and replaced with the class :code:`GuardValue`. + +New Features +~~~~~~~~~~~~ + +Python +"""""" + +* Initial support for incremental Python databases via :code:`codeql database create --overlay-base`\ /\ :code:`--overlay-changes`. + +Swift +""""" + +* Added AST nodes :code:`UsingDecl`, :code:`UnsafeExpr`, and :code:`InlineArrayType` that correspond to new nodes in Swift 6.2. +* Added new predicates :code:`isDistributedGet`, :code:`isRead2`, :code:`isModify2`, and :code:`isInit` to the :code:`Accessor` class that correspond to new accessors in Swift 6.2. +* Added a new predicate :code:`isApply` to the :code:`KeyPathComponent` class that corresponds to method and initializer key path components in Swift 6.2. diff --git a/docs/codeql/codeql-overview/codeql-changelog/index.rst b/docs/codeql/codeql-overview/codeql-changelog/index.rst index 4b3e1f5bb98..e48181dc026 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/index.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/index.rst @@ -11,6 +11,7 @@ A list of queries for each suite and language `is available here Date: Mon, 17 Nov 2025 14:30:45 -0600 Subject: [PATCH 075/127] adding in 2.23.1 changes so they stay the same --- .../codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst index 27f1eee84ed..78e5e367bce 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst @@ -88,7 +88,7 @@ JavaScript/TypeScript * Data flow is now tracked through the :code:`Promise.try` and :code:`Array.prototype.with` functions. * Query :code:`js/index-out-of-bounds` no longer produces a false-positive when a strictly-less-than check overrides a previous less-than-or-equal test. * The query :code:`js/remote-property-injection` now detects property injection vulnerabilities through object enumeration patterns such as :code:`Object.keys()`. -* The query "Permissive CORS configuration" (:code:`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. Thank you to @maikypedia who `submitted the original experimental query `__\ ! +* The query "Permissive CORS configuration" (:code:`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. Thank you to @maikypedia who `submitted the original experimental query `__ ! Python """""" @@ -126,7 +126,7 @@ Golang """""" * The second argument of the :code:`CreateTemp` function, from the :code:`os` package, is no longer a path-injection sink due to proper sanitization by Go. -* The query "Uncontrolled data used in path expression" (:code:`go/path-injection`) now detects sanitizing a path by adding :code:`os.PathSeparator` or :code:`\` to the beginning. +* The query "Uncontrolled data used in path expression" (:code:`go/path-injection`) now detects sanitizing a path by adding :code:`os.PathSeparator` or ``\`` to the beginning. Java/Kotlin """"""""""" From d685e666b4ee597daba921ae12c3a4e10a3a0640 Mon Sep 17 00:00:00 2001 From: Jon Janego Date: Mon, 17 Nov 2025 14:32:04 -0600 Subject: [PATCH 076/127] missing space --- .../codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst index 78e5e367bce..ff22a3f647c 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst @@ -88,7 +88,7 @@ JavaScript/TypeScript * Data flow is now tracked through the :code:`Promise.try` and :code:`Array.prototype.with` functions. * Query :code:`js/index-out-of-bounds` no longer produces a false-positive when a strictly-less-than check overrides a previous less-than-or-equal test. * The query :code:`js/remote-property-injection` now detects property injection vulnerabilities through object enumeration patterns such as :code:`Object.keys()`. -* The query "Permissive CORS configuration" (:code:`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. Thank you to @maikypedia who `submitted the original experimental query `__ ! +* The query "Permissive CORS configuration" (:code:`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. Thank you to @maikypedia who `submitted the original experimental query `__! Python """""" From 1c81c4d4c9c8abfeb5e4c9d6adeeae729fd93d7c Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 18 Nov 2025 10:01:36 +0100 Subject: [PATCH 077/127] C#: make some tweaks to change logs --- csharp/ql/lib/CHANGELOG.md | 2 +- csharp/ql/lib/change-notes/released/5.3.0.md | 2 +- csharp/ql/src/change-notes/released/1.0.11.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 962b6ecd184..dbaa58119a4 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -20,7 +20,7 @@ ### Major Analysis Improvements -* The representation of the C# control-flow graph has been significantly changed. This has minor effects on a wide range of queries including both minor improvements and minor regressions, for example, improved precision has been observed for `cs/inefficient-containskey` and `cs/stringbuilder-creation-in-loop`. Two queries stand out as being significantly affected with great improvements: `cs/dereferenced-value-may-be-null` has been completely rewritten which removes a very significant number of false positives. Furthermore, `cs/constant-condition` has been updated to report many new results - these new results are primarily expected to be true positives, but a few new false positives are expected as well. As part of these changes, `cs/dereferenced-value-may-be-null` has been changed from a `path-problem` query to a `problem` query, so paths are no longer reported for this query. +* The representation of the C# control-flow graph has been significantly changed. This has minor effects on a wide range of queries including both minor improvements and minor regressions. For example, improved precision has been observed for `cs/inefficient-containskey` and `cs/stringbuilder-creation-in-loop`. Two queries stand out as being significantly affected with great improvements: `cs/dereferenced-value-may-be-null` has been completely rewritten which removes a very significant number of false positives. Furthermore, `cs/constant-condition` has been updated to report many new results - these new results are primarily expected to be true positives, but a few new false positives are expected as well. As part of these changes, `cs/dereferenced-value-may-be-null` has been changed from a `path-problem` query to a `problem` query, so paths are no longer reported for this query. ### Minor Analysis Improvements diff --git a/csharp/ql/lib/change-notes/released/5.3.0.md b/csharp/ql/lib/change-notes/released/5.3.0.md index 144f8bf2633..fa305362575 100644 --- a/csharp/ql/lib/change-notes/released/5.3.0.md +++ b/csharp/ql/lib/change-notes/released/5.3.0.md @@ -6,7 +6,7 @@ ### Major Analysis Improvements -* The representation of the C# control-flow graph has been significantly changed. This has minor effects on a wide range of queries including both minor improvements and minor regressions, for example, improved precision has been observed for `cs/inefficient-containskey` and `cs/stringbuilder-creation-in-loop`. Two queries stand out as being significantly affected with great improvements: `cs/dereferenced-value-may-be-null` has been completely rewritten which removes a very significant number of false positives. Furthermore, `cs/constant-condition` has been updated to report many new results - these new results are primarily expected to be true positives, but a few new false positives are expected as well. As part of these changes, `cs/dereferenced-value-may-be-null` has been changed from a `path-problem` query to a `problem` query, so paths are no longer reported for this query. +* The representation of the C# control-flow graph has been significantly changed. This has minor effects on a wide range of queries including both minor improvements and minor regressions. For example, improved precision has been observed for `cs/inefficient-containskey` and `cs/stringbuilder-creation-in-loop`. Two queries stand out as being significantly affected with great improvements: `cs/dereferenced-value-may-be-null` has been completely rewritten which removes a very significant number of false positives. Furthermore, `cs/constant-condition` has been updated to report many new results - these new results are primarily expected to be true positives, but a few new false positives are expected as well. As part of these changes, `cs/dereferenced-value-may-be-null` has been changed from a `path-problem` query to a `problem` query, so paths are no longer reported for this query. ### Minor Analysis Improvements diff --git a/csharp/ql/src/change-notes/released/1.0.11.md b/csharp/ql/src/change-notes/released/1.0.11.md index 9d2720380a0..d5c9f149c41 100644 --- a/csharp/ql/src/change-notes/released/1.0.11.md +++ b/csharp/ql/src/change-notes/released/1.0.11.md @@ -2,4 +2,4 @@ ### Minor Analysis Improvements -* C#: The method `string.ReplaceLineEndings(string)` is now considered a sanitizer for the `cs/log-forging` query. +* C#: The method `string.ReplaceLineEndings(string)` is now considered a sanitizer for the `cs/log-forging` query. From 4c1f2b840eedfbfdf779147aec2cf6c0c9eecf13 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 18 Nov 2025 10:06:19 +0100 Subject: [PATCH 078/127] C#: change capitalization --- csharp/ql/src/CHANGELOG.md | 2 +- csharp/ql/src/change-notes/released/1.4.3.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index b7bef32f207..fcf727fac49 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -12,7 +12,7 @@ ### Minor Analysis Improvements -* the `cs/web/missing-x-frame-options` query now correctly handles configuration nested in root `` elements. +* The `cs/web/missing-x-frame-options` query now correctly handles configuration nested in root `` elements. ## 1.4.2 diff --git a/csharp/ql/src/change-notes/released/1.4.3.md b/csharp/ql/src/change-notes/released/1.4.3.md index 1a022f2462d..b3427ec8906 100644 --- a/csharp/ql/src/change-notes/released/1.4.3.md +++ b/csharp/ql/src/change-notes/released/1.4.3.md @@ -2,4 +2,4 @@ ### Minor Analysis Improvements -* the `cs/web/missing-x-frame-options` query now correctly handles configuration nested in root `` elements. +* The `cs/web/missing-x-frame-options` query now correctly handles configuration nested in root `` elements. From 5ee45af3aa96998305f2b97d03b74188040e10d7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 18 Nov 2025 09:53:12 +0000 Subject: [PATCH 079/127] Post-release preparation for codeql-cli-2.23.6 --- actions/ql/lib/qlpack.yml | 2 +- actions/ql/src/qlpack.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- rust/ql/lib/qlpack.yml | 2 +- rust/ql/src/qlpack.yml | 2 +- shared/concepts/qlpack.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/quantum/qlpack.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/qlpack.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typeflow/qlpack.yml | 2 +- shared/typeinference/qlpack.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/xml/qlpack.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 41 files changed, 41 insertions(+), 41 deletions(-) diff --git a/actions/ql/lib/qlpack.yml b/actions/ql/lib/qlpack.yml index 22e1d6db0fc..7671d59ddc0 100644 --- a/actions/ql/lib/qlpack.yml +++ b/actions/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-all -version: 0.4.21 +version: 0.4.22-dev library: true warnOnImplicitThis: true dependencies: diff --git a/actions/ql/src/qlpack.yml b/actions/ql/src/qlpack.yml index 78ca2aa2073..b11eab521eb 100644 --- a/actions/ql/src/qlpack.yml +++ b/actions/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-queries -version: 0.6.13 +version: 0.6.14-dev library: false warnOnImplicitThis: true groups: [actions, queries] diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index c2f8cc98819..febb297cb8d 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 6.1.0 +version: 6.1.1-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 8e062d290b5..1e30e25da03 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.5.4 +version: 1.5.5-dev groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 80e9343408f..177b79ef6b8 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.52 +version: 1.7.53-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index f107eb7dee6..7b065e193b6 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.52 +version: 1.7.53-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 3c3ae516a56..7ea21611edc 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 5.4.0 +version: 5.4.1-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 4834c59d8fa..a4033c362f0 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.5.0 +version: 1.5.1-dev groups: - csharp - queries diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index ce049f78027..e7707ebbfe0 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 1.0.35 +version: 1.0.36-dev groups: - go - queries diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index ec804b7aee5..97c351dfe8a 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 5.0.2 +version: 5.0.3-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index d273ea1ddfc..1a6c47319a2 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.4.9 +version: 1.4.10-dev groups: - go - queries diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 8a3414dcb12..5d14d9b313a 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 7.7.4 +version: 7.7.5-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 3a4bf16b232..f1a422dcfa9 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.10.0 +version: 1.10.1-dev groups: - java - queries diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index de43ec0c7ad..b0c7e2e1e12 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 2.6.15 +version: 2.6.16-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index d3adb5a5207..3716fa82c2f 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 2.2.0 +version: 2.2.1-dev groups: - javascript - queries diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index b3316643de4..350d555bf57 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.35 +version: 1.0.36-dev groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index fd765f7c385..7f4e67a5cbf 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 5.0.0 +version: 5.0.1-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index 0c4bd654b0b..40cb22f102a 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.7.0 +version: 1.7.1-dev groups: - python - queries diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index dba4b173bf2..99ffc1da075 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 5.1.3 +version: 5.1.4-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index a581cc8866d..81ee5e4f379 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.5.0 +version: 1.5.1-dev groups: - ruby - queries diff --git a/rust/ql/lib/qlpack.yml b/rust/ql/lib/qlpack.yml index 0a00fef81b0..bbd3b4da4b5 100644 --- a/rust/ql/lib/qlpack.yml +++ b/rust/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-all -version: 0.1.20 +version: 0.1.21-dev groups: rust extractor: rust dbscheme: rust.dbscheme diff --git a/rust/ql/src/qlpack.yml b/rust/ql/src/qlpack.yml index fcf86c7e21f..557990e8f36 100644 --- a/rust/ql/src/qlpack.yml +++ b/rust/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-queries -version: 0.1.20 +version: 0.1.21-dev groups: - rust - queries diff --git a/shared/concepts/qlpack.yml b/shared/concepts/qlpack.yml index 289b9d531da..a6f2253b712 100644 --- a/shared/concepts/qlpack.yml +++ b/shared/concepts/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/concepts -version: 0.0.9 +version: 0.0.10-dev groups: shared library: true dependencies: diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index a046376584b..aa9beb00dc7 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 2.0.19 +version: 2.0.20-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index d1cddb65806..ba23cda97ca 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 2.0.19 +version: 2.0.20-dev groups: shared library: true dependencies: diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 54662518ac6..579802e08f3 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.35 +version: 1.0.36-dev groups: shared library: true dependencies: diff --git a/shared/quantum/qlpack.yml b/shared/quantum/qlpack.yml index 7aa341ed298..bd398ce4e03 100644 --- a/shared/quantum/qlpack.yml +++ b/shared/quantum/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/quantum -version: 0.0.13 +version: 0.0.14-dev groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index acfe26c3d74..1483733e8e3 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.35 +version: 1.0.36-dev groups: shared library: true dependencies: diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 7c883c5a348..8d95fbccbda 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.35 +version: 1.0.36-dev groups: shared library: true dependencies: diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 9c7f6f2ac2a..4fa7f6e6422 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 2.0.11 +version: 2.0.12-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 02bfe21bf76..33680c17c7a 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.35 +version: 1.0.36-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 658dbc8c816..225922fa95a 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 1.0.35 +version: 1.0.36-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index b0d79695965..baec0554bd8 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.35 +version: 1.0.36-dev groups: shared library: true dependencies: diff --git a/shared/typeinference/qlpack.yml b/shared/typeinference/qlpack.yml index 485c6284030..4bd6beec446 100644 --- a/shared/typeinference/qlpack.yml +++ b/shared/typeinference/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeinference -version: 0.0.16 +version: 0.0.17-dev groups: shared library: true dependencies: diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index d804fa00748..bd32acdd76e 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 2.0.19 +version: 2.0.20-dev groups: shared library: true dependencies: diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 94ec6653e8b..752d11a2bc8 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.35 +version: 1.0.36-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index aefbed94437..47b84b65ff2 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 2.0.22 +version: 2.0.23-dev groups: shared library: true dependencies: null diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index 7fa5e1d171e..744b7a72909 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.35 +version: 1.0.36-dev groups: shared library: true dependencies: diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index fd6a84b1693..f905e7abee4 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.35 +version: 1.0.36-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 84ff9e5061a..a35a1836ed1 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 6.1.0 +version: 6.1.1-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index cf2c5ccfc84..d7584e3ed16 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.2.9 +version: 1.2.10-dev groups: - swift - queries From 1ebc16e2d3700960a129e729a2cfb6da7feeb390 Mon Sep 17 00:00:00 2001 From: Jon Janego Date: Mon, 17 Nov 2025 14:39:35 -0600 Subject: [PATCH 080/127] Merge pull request #20855 from github/changedocs-2.23.5 Changedocs 2.23.5 (cherry picked from commit f27271d216a472339e38cdd62398220c97d068ef) --- .../codeql-changelog/codeql-cli-2.23.5.rst | 134 ++++++++++++++++++ .../codeql-changelog/index.rst | 1 + 2 files changed, 135 insertions(+) create mode 100644 docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.5.rst diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.5.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.5.rst new file mode 100644 index 00000000000..9022a09444f --- /dev/null +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.5.rst @@ -0,0 +1,134 @@ +.. _codeql-cli-2.23.5: + +========================== +CodeQL 2.23.5 (2025-11-13) +========================== + +.. contents:: Contents + :depth: 2 + :local: + :backlinks: none + +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. + +Security Coverage +----------------- + +CodeQL 2.23.5 runs a total of 483 security queries when configured with the Default suite (covering 166 CWE). The Extended suite enables an additional 135 queries (covering 35 more CWE). 3 security queries have been added with this release. + +CodeQL CLI +---------- + +Breaking Changes +~~~~~~~~~~~~~~~~ + +* In order to make a :code:`@kind path-problem` query diff-informed, the :code:`getASelectedSourceLocation` and :code:`getASelectedSinkLocation` predicates in the dataflow configuration now need to be overridden to always return the location of the source/sink *in addition to* any other locations that are selected by the query. See the `QLdoc `__ for more details. + +Query Packs +----------- + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C# +"" + +* the :code:`cs/web/missing-x-frame-options` query now correctly handles configuration nested in root :code:`` elements. + +Java/Kotlin +""""""""""" + +* Calls to :code:`String.matches` are now treated as sanitizers for the :code:`java/ssrf` query. + +Python +"""""" + +* The :code:`py/insecure-cookie` query has been split into multiple queries; with :code:`py/insecure-cookie` checking for cases in which :code:`Secure` flag is not set, :code:`py/client-exposed-cookie` checking for cases in which the :code:`HttpOnly` flag is not set, and the :code:`py/samesite-none` query checking for cases in which the :code:`SameSite` attribute is set to :code:`None`. These queries also now only alert for cases in which the cookie is detected to contain sensitive data. + +Rust +"""" + +* The "Low Rust analysis quality" query (:code:`rust/diagnostic/database-quality`), used by the tool status page, has been extended with a measure of successful type inference. + +New Queries +~~~~~~~~~~~ + +Java/Kotlin +""""""""""" + +* The :code:`java/sensitive-cookie-not-httponly` query has been promoted from experimental to the main query pack. +* Added a new query, :code:`java/escaping`, to detect values escaping from classes marked as :code:`@ThreadSafe`. +* Added a new query, :code:`java/not-threadsafe`, to detect data races in classes marked as :code:`@ThreadSafe`. +* Added a new query, :code:`java/safe-publication`, to detect unsafe publication in classes marked as :code:`@ThreadSafe`. + +Language Libraries +------------------ + +Breaking Changes +~~~~~~~~~~~~~~~~ + +Swift +""""" + +* The :code:`OpenedArchetypeType` class has been renamed as :code:`ExistentialArchetypeType`. +* The :code:`OtherAvailabilitySpec` class has been removed. Use :code:`AvailabilitySpec::isWildcard` instead. +* The :code:`PlatformVersionAvailabilitySpec` has been removed. Use :code:`AvailabilitySpec::getPlatform` and :code:`AvailabilitySpec::getVersion` instead. + +Major Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C# +"" + +* The representation of the C# control-flow graph has been significantly changed. This has minor effects on a wide range of queries including both minor improvements and minor regressions, for example, improved precision has been observed for :code:`cs/inefficient-containskey` and :code:`cs/stringbuilder-creation-in-loop`. Two queries stand out as being significantly affected with great improvements: :code:`cs/dereferenced-value-may-be-null` has been completely rewritten which removes a very significant number of false positives. Furthermore, :code:`cs/constant-condition` has been updated to report many new results - these new results are primarily expected to be true positives, but a few new false positives are expected as well. As part of these changes, :code:`cs/dereferenced-value-may-be-null` has been changed from a :code:`path-problem` query to a :code:`problem` query, so paths are no longer reported for this query. + +Swift +""""" + +* Upgraded to allow analysis of Swift 6.2. +* Support for experimental Embedded Swift has been dropped. + +Rust +"""" + +* Resolution of calls to functions has been improved in a number of ways, to make it more aligned with the behavior of the Rust compiler. This may impact queries that rely on call resolution, such as data flow queries. +* Added basic models for the :code:`actix-web` web framework. + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C# +"" + +* Added tracer support for macOS and Linux when the .NET CLI (:code:`dotnet`) directly invokes the C# compiler (:code:`csc`). This enhancement provides basic tracing and extraction capabilities for .NET 10 RC2 on these platforms. +* The extraction of location information for source code entities has been updated to use star IDs (:code:`*` IDs). This change should be transparent to end-users but may improve extraction performance in some cases by reducing TRAP file size and eliminating overhead from location de-duplication. + +Rust +"""" + +* Added :code:`ExtractedFile::hasSemantics` and :code:`ExtractedFile::isSkippedByCompilation` predicates. +* Generalized some existing models to improve data flow. +* Added models for the :code:`mysql` and :code:`mysql_async` libraries. + +Deprecated APIs +~~~~~~~~~~~~~~~ + +C# +"" + +* The class :code:`AbstractValue` in the :code:`Guards` library has been deprecated and replaced with the class :code:`GuardValue`. + +New Features +~~~~~~~~~~~~ + +Python +"""""" + +* Initial support for incremental Python databases via :code:`codeql database create --overlay-base`\ /\ :code:`--overlay-changes`. + +Swift +""""" + +* Added AST nodes :code:`UsingDecl`, :code:`UnsafeExpr`, and :code:`InlineArrayType` that correspond to new nodes in Swift 6.2. +* Added new predicates :code:`isDistributedGet`, :code:`isRead2`, :code:`isModify2`, and :code:`isInit` to the :code:`Accessor` class that correspond to new accessors in Swift 6.2. +* Added a new predicate :code:`isApply` to the :code:`KeyPathComponent` class that corresponds to method and initializer key path components in Swift 6.2. diff --git a/docs/codeql/codeql-overview/codeql-changelog/index.rst b/docs/codeql/codeql-overview/codeql-changelog/index.rst index 4b3e1f5bb98..e48181dc026 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/index.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/index.rst @@ -11,6 +11,7 @@ A list of queries for each suite and language `is available here Date: Tue, 18 Nov 2025 13:20:07 +0100 Subject: [PATCH 081/127] Ripunzip: build on older ubuntu --- .github/workflows/build-ripunzip.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-ripunzip.yml b/.github/workflows/build-ripunzip.yml index 08547268e3b..041d34bd046 100644 --- a/.github/workflows/build-ripunzip.yml +++ b/.github/workflows/build-ripunzip.yml @@ -46,7 +46,10 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-24.04, macos-15, windows-2025] + os: + - ubuntu-22.04 # keep at lowest supported ubuntu version for broader glibc compatibility + - macos-15 + - windows-2025 runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v5 From a0965f33e3ed4bda3a46748933ee50c5f8167757 Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 18 Nov 2025 13:29:00 +0100 Subject: [PATCH 082/127] JS: Also discard JSON, YAML, and XML --- javascript/ql/lib/semmle/javascript/internal/Overlay.qll | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/internal/Overlay.qll b/javascript/ql/lib/semmle/javascript/internal/Overlay.qll index f3eed619f0d..efba0daeca7 100644 --- a/javascript/ql/lib/semmle/javascript/internal/Overlay.qll +++ b/javascript/ql/lib/semmle/javascript/internal/Overlay.qll @@ -7,7 +7,14 @@ private predicate isOverlay() { databaseMetadata("isOverlay", "true") } overlay[local] private string getFileFromEntity(@locatable node) { exists(@location loc | - hasLocation(node, loc) and + hasLocation(node, loc) + or + json_locations(node, loc) + or + yaml_locations(node, loc) + or + xmllocations(node, loc) + | result = getFileFromLocation(loc) ) } From f3742008deccd551992b4d837a12c296ddbff888 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 18 Nov 2025 12:35:31 +0000 Subject: [PATCH 083/127] Update ripunzip binaries to version v2.0.3 --- misc/ripunzip/ripunzip-Linux.tar.zst | 4 ++-- misc/ripunzip/ripunzip-Windows.tar.zst | 4 ++-- misc/ripunzip/ripunzip-macOS.tar.zst | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/misc/ripunzip/ripunzip-Linux.tar.zst b/misc/ripunzip/ripunzip-Linux.tar.zst index 94530212daf..c9a5ff1e590 100644 --- a/misc/ripunzip/ripunzip-Linux.tar.zst +++ b/misc/ripunzip/ripunzip-Linux.tar.zst @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e6df3e70fa425f5640aba1b319ed21f0a12d3e5d39d5da8cb4820396149c95bd -size 4740396 +oid sha256:252a54114fde9932d2bf3e7a1592bc6767611682a913519585402b9c51d6e2c7 +size 4707184 diff --git a/misc/ripunzip/ripunzip-Windows.tar.zst b/misc/ripunzip/ripunzip-Windows.tar.zst index 81f156c41b5..80e41538135 100644 --- a/misc/ripunzip/ripunzip-Windows.tar.zst +++ b/misc/ripunzip/ripunzip-Windows.tar.zst @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a85c91867649a0ca0bbfddd2c88a3f3da7e0a44edd293571d72ee8492bc9b81b -size 1765497 +oid sha256:3a4388816c72e0bc8c30741aaae05dc91b46174db406133cad40c783acf4fad6 +size 1765498 diff --git a/misc/ripunzip/ripunzip-macOS.tar.zst b/misc/ripunzip/ripunzip-macOS.tar.zst index 2f5e111c78e..3ff3253ca5d 100644 --- a/misc/ripunzip/ripunzip-macOS.tar.zst +++ b/misc/ripunzip/ripunzip-macOS.tar.zst @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9fbc5326b12fa6b9e06d48c60fb9cd363fff9a0c87a81ed93c29facbe9d2e4f2 +oid sha256:5a5d8ca7ed78b0da3a572b91556fbf03431c99770072060743c63e2d581d8580 size 3796231 From ec15085c34a66e23a9d87244b05aa60181a5d4c1 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 18 Nov 2025 13:18:29 +0100 Subject: [PATCH 084/127] Address review comments --- .../codeql/rust/dataflow/internal/Content.qll | 12 +- .../codeql/rust/internal/PathResolution.qll | 3 +- rust/ql/lib/codeql/rust/internal/Type.qll | 30 +- .../builtintypes/BuiltinTypes.expected | 4 - .../type-inference/dereference.rs | 10 +- .../test/library-tests/type-inference/main.rs | 68 +- .../type-inference/pattern_matching.rs | 30 +- .../type-inference/type-inference.expected | 2928 ++++++++--------- rust/tools/builtins/types.rs | 115 +- 9 files changed, 1546 insertions(+), 1654 deletions(-) diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/Content.qll b/rust/ql/lib/codeql/rust/dataflow/internal/Content.qll index 9457a0a7a50..67fed2d2def 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/Content.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/Content.qll @@ -29,7 +29,11 @@ abstract class FieldContent extends Content { class TupleFieldContent extends FieldContent, TTupleFieldContent { private TupleField field; - TupleFieldContent() { this = TTupleFieldContent(field) } + TupleFieldContent() { + this = TTupleFieldContent(field) and + // tuples are handled using the special `TupleContent` type + not field = any(TupleType tt).getATupleField() + } /** Holds if this field belongs to an enum variant. */ predicate isVariantField(Variant v, int pos) { field.isVariantField(v, pos) } @@ -37,11 +41,7 @@ class TupleFieldContent extends FieldContent, TTupleFieldContent { /** Holds if this field belongs to a struct. */ predicate isStructField(Struct s, int pos) { field.isStructField(s, pos) } - override FieldExprCfgNode getAnAccess() { - field = result.getFieldExpr().getTupleField() and - // tuples are handled using the special `TupleContent` type - not field = any(TupleType tt).getATupleField() - } + override FieldExprCfgNode getAnAccess() { field = result.getFieldExpr().getTupleField() } final override string toString() { exists(Variant v, int pos, string vname | diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index 69874a6e570..54df4a3ca0c 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -2172,8 +2172,7 @@ private predicate builtin(string name, ItemNode i) { exists(BuiltinSourceFile builtins | builtins.getFile().getBaseName() = "types.rs" and i = builtins.getASuccessor(name) and - not name = ["Slice", "Array", "Ref", "Ptr"] and - not name.matches("Tuple%") + i.isPublic() ) } diff --git a/rust/ql/lib/codeql/rust/internal/Type.qll b/rust/ql/lib/codeql/rust/internal/Type.qll index c6b475b62d7..ccf5c754363 100644 --- a/rust/ql/lib/codeql/rust/internal/Type.qll +++ b/rust/ql/lib/codeql/rust/internal/Type.qll @@ -208,8 +208,7 @@ class UnionType extends Type, TUnion { /** * An array type. * - * Array types like `[i64; 5]` are modeled as normal generic types - * with a single type argument. + * Array types like `[i64; 5]` are modeled as normal generic types. */ class ArrayType extends StructType { ArrayType() { this.getStruct() instanceof Builtins::ArrayType } @@ -401,32 +400,7 @@ class TypeParamTypeParameter extends TypeParameter, TTypeParamTypeParameter { TypeParam getTypeParam() { result = typeParam } - override string toString() { - this = any(SliceType st).getATypeParameter() and - result = "[T]" - or - this = any(ArrayType at).getATypeParameter() and - result = "[T;...]" - or - this = any(RefType rt).getATypeParameter() and - result = "&T" - or - this = any(PtrType pt).getATypeParameter() and - result = "*T" - or - exists(TupleType tt, int arity, int i | - this = tt.getPositionalTypeParameter(i) and - arity = tt.getArity() and - result = i + "(" + arity + ")" - ) - or - not this = any(SliceType st).getATypeParameter() and - not this = any(ArrayType at).getATypeParameter() and - not this = any(RefType rt).getATypeParameter() and - not this = any(PtrType pt).getATypeParameter() and - not this = any(TupleType tt).getATypeParameter() and - result = typeParam.toString() - } + override string toString() { result = typeParam.toString() } override Location getLocation() { result = typeParam.getLocation() } } diff --git a/rust/ql/test/library-tests/elements/builtintypes/BuiltinTypes.expected b/rust/ql/test/library-tests/elements/builtintypes/BuiltinTypes.expected index 0a993bf6842..cfab22cd61c 100644 --- a/rust/ql/test/library-tests/elements/builtintypes/BuiltinTypes.expected +++ b/rust/ql/test/library-tests/elements/builtintypes/BuiltinTypes.expected @@ -15,10 +15,6 @@ | struct Tuple10 | | | struct Tuple11 | | | struct Tuple12 | | -| struct Tuple13 | | -| struct Tuple14 | | -| struct Tuple15 | | -| struct Tuple16 | | | struct bool | | | struct char | | | struct f32 | FloatingPointType, NumericType | diff --git a/rust/ql/test/library-tests/type-inference/dereference.rs b/rust/ql/test/library-tests/type-inference/dereference.rs index bdc42180a63..f84d03a3a4e 100644 --- a/rust/ql/test/library-tests/type-inference/dereference.rs +++ b/rust/ql/test/library-tests/type-inference/dereference.rs @@ -38,7 +38,7 @@ impl S { fn explicit_monomorphic_dereference() { // Dereference with method call let a1 = MyIntPointer { value: 34i64 }; - let _b1 = a1.deref(); // $ target=MyIntPointer::deref type=_b1:&T.i64 + let _b1 = a1.deref(); // $ target=MyIntPointer::deref type=_b1:TRef.i64 // Dereference with overloaded dereference operator let a2 = MyIntPointer { value: 34i64 }; @@ -52,7 +52,7 @@ fn explicit_monomorphic_dereference() { fn explicit_polymorphic_dereference() { // Explicit dereference with type parameter let c1 = MySmartPointer { value: 'a' }; - let _d1 = c1.deref(); // $ target=MySmartPointer::deref type=_d1:&T.char + let _d1 = c1.deref(); // $ target=MySmartPointer::deref type=_d1:TRef.char // Explicit dereference with type parameter let c2 = MySmartPointer { value: 'a' }; @@ -66,7 +66,7 @@ fn explicit_polymorphic_dereference() { fn explicit_ref_dereference() { // Explicit dereference with type parameter let e1 = &'a'; - let _f1 = e1.deref(); // $ target=deref type=_f1:&T.char + let _f1 = e1.deref(); // $ target=deref type=_f1:TRef.char // Explicit dereference with type parameter let e2 = &'a'; @@ -80,7 +80,7 @@ fn explicit_ref_dereference() { fn explicit_box_dereference() { // Explicit dereference with type parameter let g1: Box = Box::new('a'); // $ target=new - let _h1 = g1.deref(); // $ target=deref type=_h1:&T.char + let _h1 = g1.deref(); // $ target=deref type=_h1:TRef.char // Explicit dereference with type parameter let g2: Box = Box::new('a'); // $ target=new @@ -101,7 +101,7 @@ fn implicit_dereference() { let _y = x.is_positive(); // $ MISSING: target=is_positive type=_y:bool let z = MySmartPointer { value: S(0i64) }; - let z_ = z.foo(); // $ MISSING: target=foo type=z_:&T.i64 + let z_ = z.foo(); // $ MISSING: target=foo type=z_:TRef.i64 } mod implicit_deref_coercion_cycle { diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index c18c43330c1..bf53c4906e3 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -1542,7 +1542,7 @@ mod method_call_type_conversion { let x7 = S(&S2); // Non-implicit dereference with nested borrow in order to test that the // implicit dereference handling doesn't affect nested borrows. - let t = x7.m1(); // $ target=m1 type=t:& type=t:&T.S2 + let t = x7.m1(); // $ target=m1 type=t:& type=t:TRef.S2 println!("{:?}", x7); let x9: String = "Hello".to_string(); // $ certainType=x9:String target=to_string @@ -1732,7 +1732,7 @@ mod builtins { let z = x + y; // $ type=z:i32 target=add let z = x.abs(); // $ target=abs $ type=z:i32 let c = 'c'; // $ certainType=c:char - let hello = "Hello"; // $ certainType=hello:&T.str + let hello = "Hello"; // $ certainType=hello:TRef.str let f = 123.0f64; // $ certainType=f:f64 let t = true; // $ certainType=t:bool let f = false; // $ certainType=f:bool @@ -1753,8 +1753,8 @@ mod builtins { } } - let x = [1, 2, 3].my_method(); // $ target=my_method type=x:&T.i32 - let x = <[_; 3]>::my_method(&[1, 2, 3]); // $ target=my_method type=x:&T.i32 + let x = [1, 2, 3].my_method(); // $ target=my_method type=x:TRef.i32 + let x = <[_; 3]>::my_method(&[1, 2, 3]); // $ target=my_method type=x:TRef.i32 let x = <[i32; 3]>::my_func(); // $ target=my_func type=x:i32 impl MyTrait for [T] { @@ -1768,8 +1768,8 @@ mod builtins { } let s: &[i32] = &[1, 2, 3]; - let x = s.my_method(); // $ target=my_method type=x:&T.i32 - let x = <[_]>::my_method(s); // $ target=my_method type=x:&T.i32 + let x = s.my_method(); // $ target=my_method type=x:TRef.i32 + let x = <[_]>::my_method(s); // $ target=my_method type=x:TRef.i32 let x = <[i32]>::my_func(); // $ target=my_func type=x:i32 impl MyTrait for (T, i32) { @@ -1783,8 +1783,8 @@ mod builtins { } let p = (42, 7); - let x = p.my_method(); // $ target=my_method type=x:&T.i32 - let x = <(_, _)>::my_method(&p); // $ target=my_method type=x:&T.i32 + let x = p.my_method(); // $ target=my_method type=x:TRef.i32 + let x = <(_, _)>::my_method(&p); // $ target=my_method type=x:TRef.i32 let x = <(i32, i32)>::my_func(); // $ target=my_func type=x:i32 impl MyTrait for &T { @@ -1798,8 +1798,8 @@ mod builtins { } let r = &42; - let x = r.my_method(); // $ target=my_method type=x:&T.i32 - let x = <&_>::my_method(&r); // $ target=my_method type=x:&T.i32 + let x = r.my_method(); // $ target=my_method type=x:TRef.i32 + let x = <&_>::my_method(&r); // $ target=my_method type=x:TRef.i32 let x = <&i32>::my_func(); // $ target=my_func type=x:i32 impl MyTrait for *mut T { @@ -1814,8 +1814,8 @@ mod builtins { let mut v = 42; let p: *mut i32 = &mut v; - let x = unsafe { p.my_method() }; // $ target=my_method type=x:&T.i32 - let x = unsafe { <*mut _>::my_method(&p) }; // $ target=my_method type=x:&T.i32 + let x = unsafe { p.my_method() }; // $ target=my_method type=x:TRef.i32 + let x = unsafe { <*mut _>::my_method(&p) }; // $ target=my_method type=x:TRef.i32 let x = <*mut i32>::my_func(); // $ target=my_func type=x:i32 } } @@ -2612,24 +2612,24 @@ mod loops { for i in [1, 2, 3].map(|x| x + 1) {} // $ target=map MISSING: type=i:i32 for i in [1, 2, 3].into_iter() {} // $ target=into_iter type=i:i32 - let vals1 = [1u8, 2, 3]; // $ type=vals1:[T;...].u8 + let vals1 = [1u8, 2, 3]; // $ type=vals1:TArray.u8 for u in vals1 {} // $ type=u:u8 - let vals2 = [1u16; 3]; // $ type=vals2:[T;...].u16 + let vals2 = [1u16; 3]; // $ type=vals2:TArray.u16 for u in vals2 {} // $ type=u:u16 - let vals3: [u32; 3] = [1, 2, 3]; // $ certainType=vals3:[T;...].u32 + let vals3: [u32; 3] = [1, 2, 3]; // $ certainType=vals3:TArray.u32 for u in vals3 {} // $ type=u:u32 - let vals4: [u64; 3] = [1; 3]; // $ certainType=vals4:[T;...].u64 + let vals4: [u64; 3] = [1; 3]; // $ certainType=vals4:TArray.u64 for u in vals4 {} // $ type=u:u64 - let mut strings1 = ["foo", "bar", "baz"]; // $ type=strings1:[T;...].&T.str - for s in &strings1 {} // $ type=s:&T.&T.str - for s in &mut strings1 {} // $ type=s:&T.&T.str - for s in strings1 {} // $ type=s:&T.str + let mut strings1 = ["foo", "bar", "baz"]; // $ type=strings1:TArray.TRef.str + for s in &strings1 {} // $ type=s:TRef.TRef.str + for s in &mut strings1 {} // $ type=s:TRef.TRef.str + for s in strings1 {} // $ type=s:TRef.str - let strings2 = // $ type=strings2:[T;...].String + let strings2 = // $ type=strings2:TArray.String [ String::from("foo"), // $ target=from String::from("bar"), // $ target=from @@ -2637,15 +2637,15 @@ mod loops { ]; for s in strings2 {} // $ type=s:String - let strings3 = // $ type=strings3:&T.[T;...].String + let strings3 = // $ type=strings3:TRef.TArray.String &[ String::from("foo"), // $ target=from String::from("bar"), // $ target=from String::from("baz"), // $ target=from ]; - for s in strings3 {} // $ type=s:&T.String + for s in strings3 {} // $ type=s:TRef.String - let callables = [MyCallable::new(), MyCallable::new(), MyCallable::new()]; // $ target=new $ type=callables:[T;...].MyCallable + let callables = [MyCallable::new(), MyCallable::new(), MyCallable::new()]; // $ target=new $ type=callables:TArray.MyCallable for c // $ type=c:MyCallable in callables { @@ -2659,7 +2659,7 @@ mod loops { let range = 0..10; // $ certainType=range:Range type=range:Idx.i32 for i in range {} // $ type=i:i32 let range_full = ..; // $ certainType=range_full:RangeFull - for i in &[1i64, 2i64, 3i64][range_full] {} // $ target=index MISSING: type=i:&T.i64 + for i in &[1i64, 2i64, 3i64][range_full] {} // $ target=index MISSING: type=i:TRef.i64 let range1 = // $ certainType=range1:Range type=range1:Idx.u16 std::ops::Range { @@ -2682,8 +2682,8 @@ mod loops { let vals5 = Vec::from([1u32, 2, 3]); // $ certainType=vals5:Vec target=from type=vals5:T.u32 for u in vals5 {} // $ type=u:u32 - let vals6: Vec<&u64> = [1u64, 2, 3].iter().collect(); // $ certainType=vals6:Vec certainType=vals6:T.&T.u64 - for u in vals6 {} // $ type=u:&T.u64 + let vals6: Vec<&u64> = [1u64, 2, 3].iter().collect(); // $ certainType=vals6:Vec certainType=vals6:T.TRef.u64 + for u in vals6 {} // $ type=u:TRef.u64 let mut vals7 = Vec::new(); // $ target=new certainType=vals7:Vec type=vals7:T.u8 vals7.push(1u8); // $ target=push @@ -2696,13 +2696,13 @@ mod loops { } }; - let mut map1 = std::collections::HashMap::new(); // $ target=new type=map1:K.i32 type=map1:V.Box $ MISSING: type=map1:Hashmap type1=map1:V.T.&T.str + let mut map1 = std::collections::HashMap::new(); // $ target=new type=map1:K.i32 type=map1:V.Box $ MISSING: type=map1:Hashmap type1=map1:V.T.TRef.str map1.insert(1, Box::new("one")); // $ target=insert target=new map1.insert(2, Box::new("two")); // $ target=insert target=new - for key in map1.keys() {} // $ target=keys type=key:&T.i32 - for value in map1.values() {} // $ target=values type=value:&T.Box type=value:&T.T.&T.str - for (key, value) in map1.iter() {} // $ target=iter type=key:&T.i32 type=value:&T.Box type=value:&T.T.&T.str - for (key, value) in &map1 {} // $ type=key:&T.i32 type=value:&T.Box type=value:&T.T.&T.str + for key in map1.keys() {} // $ target=keys type=key:TRef.i32 + for value in map1.values() {} // $ target=values type=value:TRef.Box type=value:TRef.T.TRef.str + for (key, value) in map1.iter() {} // $ target=iter type=key:TRef.i32 type=value:TRef.Box type=value:TRef.T.TRef.str + for (key, value) in &map1 {} // $ type=key:TRef.i32 type=value:TRef.Box type=value:TRef.T.TRef.str // while loops @@ -2804,11 +2804,11 @@ mod tuples { // `a` and `b` to be inferred. let a = Default::default(); // $ target=default type=a:i64 let b = Default::default(); // $ target=default type=b:bool - let pair = (a, b); // $ type=pair:0(2).i64 type=pair:1(2).bool + let pair = (a, b); // $ type=pair:T0.i64 type=pair:T1.bool let i: i64 = pair.0; // $ fieldof=Tuple2 let j: bool = pair.1; // $ fieldof=Tuple2 - let pair = [1, 1].into(); // $ type=pair:(T_2) type=pair:0(2).i32 type=pair:1(2).i32 MISSING: target=into + let pair = [1, 1].into(); // $ type=pair:(T_2) type=pair:T0.i32 type=pair:T1.i32 MISSING: target=into match pair { (0, 0) => print!("unexpected"), _ => print!("expected"), diff --git a/rust/ql/test/library-tests/type-inference/pattern_matching.rs b/rust/ql/test/library-tests/type-inference/pattern_matching.rs index 569b06ab9a7..b7f96cd555b 100755 --- a/rust/ql/test/library-tests/type-inference/pattern_matching.rs +++ b/rust/ql/test/library-tests/type-inference/pattern_matching.rs @@ -37,18 +37,18 @@ pub fn f() -> Option<()> { let value3 = 42; if let ref mesg = value3 { - let mesg = mesg; // $ type=mesg:&T.i32 + let mesg = mesg; // $ type=mesg:TRef.i32 println!("{mesg}"); } let value4 = Some(42); if let Some(ref mesg) = value4 { - let mesg = mesg; // $ type=mesg:&T.i32 + let mesg = mesg; // $ type=mesg:TRef.i32 println!("{mesg}"); } let ref value5 = 42; - let x = value5; // $ type=x:&T.i32 + let x = value5; // $ type=x:TRef.i32 let my_record_struct = MyRecordStruct { value1: 42, @@ -102,7 +102,7 @@ pub fn f() -> Option<()> { ) => { let a = value1; // $ type=a:bool let b = x; // $ type=b:i32 - let c = y; // $ type=c:&T.str + let c = y; // $ type=c:TRef.str (); } _ => (), @@ -197,7 +197,7 @@ pub fn literal_patterns() { let string_val = "hello"; match string_val { "hello" => { - let hello_match = string_val; // $ certainType=hello_match:&T.str + let hello_match = string_val; // $ certainType=hello_match:TRef.str println!("String literal: {}", hello_match); } _ => {} @@ -230,7 +230,7 @@ pub fn identifier_patterns() { // IdentPat with ref match &value { ref x => { - let ref_bound = x; // $ type=ref_bound:&T.&T.i32 + let ref_bound = x; // $ type=ref_bound:TRef.TRef.i32 println!("Reference identifier: {:?}", ref_bound); } } @@ -269,7 +269,7 @@ pub fn identifier_patterns() { let mut ref_mut_val = 5i32; match &mut ref_mut_val { ref mut x => { - let ref_mut_bound = x; // $ type=ref_mut_bound:&T.&T.i32 + let ref_mut_bound = x; // $ type=ref_mut_bound:TRef.TRef.i32 **ref_mut_bound += 1; // $ target=deref target=add_assign println!("Ref mut pattern"); } @@ -341,14 +341,14 @@ pub fn reference_patterns() { match &mut mutable_value { &mut ref x => { - let mut_ref_bound = x; // $ type=mut_ref_bound:&T.i32 + let mut_ref_bound = x; // $ type=mut_ref_bound:TRef.i32 println!("Mutable ref pattern: {}", mut_ref_bound); } } match &value { ref x => { - let ref_pattern = x; // $ type=ref_pattern:&T.&T.i32 + let ref_pattern = x; // $ type=ref_pattern:TRef.TRef.i32 println!("Reference pattern: {}", ref_pattern); } } @@ -525,7 +525,7 @@ pub fn slice_patterns() { // SlicePat - Slice patterns match slice { [] => { - let empty_slice = slice; // $ certainType=empty_slice:&T.[T].i32 + let empty_slice = slice; // $ certainType=empty_slice:TRef.TSlice.i32 println!("Empty slice: {:?}", empty_slice); } [x] => { @@ -540,7 +540,7 @@ pub fn slice_patterns() { [first, middle @ .., last] => { let slice_start = *first; // $ MISSING: type=slice_start:i32 let slice_end = *last; // $ MISSING: type=slice_end:i32 - let slice_middle = middle; // $ MISSING: type=slice_middle:&T.[T].i32 + let slice_middle = middle; // $ MISSING: type=slice_middle:TRef.TSlice.i32 println!( "First: {}, last: {}, middle len: {}", slice_start, @@ -717,7 +717,7 @@ pub fn complex_nested_patterns() { } // Catch-all with identifier pattern other => { - let other_complex = other; // $ type=other_complex:0(2).Point type=other_complex:1(2).MyOption + let other_complex = other; // $ type=other_complex:T0.Point type=other_complex:T1.MyOption println!("Other complex data: {:?}", other_complex); } } @@ -750,7 +750,7 @@ pub fn patterns_in_let_statements() { // Let with reference pattern let value = 42i32; let ref ref_val = value; - let let_ref = ref_val; // $ certainType=let_ref:&T.i32 + let let_ref = ref_val; // $ certainType=let_ref:TRef.i32 // Let with mutable pattern let mut mut_val = 10i32; @@ -779,13 +779,13 @@ pub fn patterns_in_function_parameters() { // Call the functions to use them let point = Point { x: 5, y: 10 }; - let extracted = extract_point(point); // $ target=extract_point certainType=extracted:0(2).i32 certainType=extracted:1(2).i32 + let extracted = extract_point(point); // $ target=extract_point certainType=extracted:T0.i32 certainType=extracted:T1.i32 let color = Color(200, 100, 50); let red = extract_color(color); // $ target=extract_color certainType=red:u8 let tuple = (42i32, 3.14f64, true); - let tuple_extracted = extract_tuple(tuple); // $ target=extract_tuple certainType=tuple_extracted:0(2).i32 certainType=tuple_extracted:1(2).bool + let tuple_extracted = extract_tuple(tuple); // $ target=extract_tuple certainType=tuple_extracted:T0.i32 certainType=tuple_extracted:T1.bool } #[rustfmt::skip] diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index 641294130b1..a56b6b7c475 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -1,45 +1,45 @@ inferType | blanket_impl.rs:15:18:15:22 | SelfParam | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:15:18:15:22 | SelfParam | &T | blanket_impl.rs:9:5:10:14 | S2 | +| blanket_impl.rs:15:18:15:22 | SelfParam | TRef | blanket_impl.rs:9:5:10:14 | S2 | | blanket_impl.rs:15:42:17:9 | { ... } | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:15:42:17:9 | { ... } | &T | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:15:42:17:9 | { ... } | TRef | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:16:13:16:15 | &S1 | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:16:13:16:15 | &S1 | &T | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:16:13:16:15 | &S1 | TRef | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:16:14:16:15 | S1 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:21:19:21:23 | SelfParam | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:21:19:21:23 | SelfParam | &T | blanket_impl.rs:20:5:22:5 | Self [trait Clone1] | +| blanket_impl.rs:21:19:21:23 | SelfParam | TRef | blanket_impl.rs:20:5:22:5 | Self [trait Clone1] | | blanket_impl.rs:25:22:25:26 | SelfParam | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:25:22:25:26 | SelfParam | &T | blanket_impl.rs:24:5:28:5 | Self [trait Duplicatable] | +| blanket_impl.rs:25:22:25:26 | SelfParam | TRef | blanket_impl.rs:24:5:28:5 | Self [trait Duplicatable] | | blanket_impl.rs:32:19:32:23 | SelfParam | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:32:19:32:23 | SelfParam | &T | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:32:19:32:23 | SelfParam | TRef | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:32:34:34:9 | { ... } | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:33:13:33:17 | * ... | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:33:14:33:17 | self | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:33:14:33:17 | self | &T | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:33:14:33:17 | self | TRef | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:40:22:40:26 | SelfParam | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:40:22:40:26 | SelfParam | &T | blanket_impl.rs:38:10:38:18 | T | +| blanket_impl.rs:40:22:40:26 | SelfParam | TRef | blanket_impl.rs:38:10:38:18 | T | | blanket_impl.rs:40:37:42:9 | { ... } | | blanket_impl.rs:38:10:38:18 | T | | blanket_impl.rs:41:13:41:16 | self | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:41:13:41:16 | self | &T | blanket_impl.rs:38:10:38:18 | T | +| blanket_impl.rs:41:13:41:16 | self | TRef | blanket_impl.rs:38:10:38:18 | T | | blanket_impl.rs:41:13:41:25 | self.clone1() | | blanket_impl.rs:38:10:38:18 | T | | blanket_impl.rs:45:33:60:5 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:46:13:46:14 | x1 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:46:18:46:19 | S1 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:46:18:46:28 | S1.clone1() | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:47:18:47:25 | "{x1:?}\\n" | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:47:18:47:25 | "{x1:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:47:18:47:25 | "{x1:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | blanket_impl.rs:47:18:47:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:47:18:47:25 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:47:20:47:21 | x1 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:48:13:48:14 | x2 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:48:18:48:22 | (...) | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:48:18:48:22 | (...) | &T | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:48:18:48:22 | (...) | TRef | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:48:18:48:31 | ... .clone1() | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:48:19:48:21 | &S1 | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:48:19:48:21 | &S1 | &T | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:48:19:48:21 | &S1 | TRef | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:48:20:48:21 | S1 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:49:18:49:25 | "{x2:?}\\n" | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:49:18:49:25 | "{x2:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:49:18:49:25 | "{x2:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | blanket_impl.rs:49:18:49:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:49:18:49:25 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:49:20:49:21 | x2 | | blanket_impl.rs:6:5:7:14 | S1 | @@ -47,44 +47,44 @@ inferType | blanket_impl.rs:50:18:50:19 | S1 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:50:18:50:31 | S1.duplicate() | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:51:18:51:25 | "{x3:?}\\n" | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:51:18:51:25 | "{x3:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:51:18:51:25 | "{x3:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | blanket_impl.rs:51:18:51:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:51:18:51:25 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:51:20:51:21 | x3 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:52:13:52:14 | x4 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:52:18:52:22 | (...) | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:52:18:52:22 | (...) | &T | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:52:18:52:22 | (...) | TRef | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:52:18:52:34 | ... .duplicate() | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:52:19:52:21 | &S1 | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:52:19:52:21 | &S1 | &T | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:52:19:52:21 | &S1 | TRef | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:52:20:52:21 | S1 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:53:18:53:25 | "{x4:?}\\n" | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:53:18:53:25 | "{x4:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:53:18:53:25 | "{x4:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | blanket_impl.rs:53:18:53:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:53:18:53:25 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:53:20:53:21 | x4 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:54:13:54:14 | x5 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:54:18:54:35 | ...::duplicate(...) | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:54:32:54:34 | &S1 | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:54:32:54:34 | &S1 | &T | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:54:32:54:34 | &S1 | TRef | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:54:33:54:34 | S1 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:55:18:55:25 | "{x5:?}\\n" | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:55:18:55:25 | "{x5:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:55:18:55:25 | "{x5:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | blanket_impl.rs:55:18:55:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:55:18:55:25 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:55:20:55:21 | x5 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:56:18:56:19 | S2 | | blanket_impl.rs:9:5:10:14 | S2 | | blanket_impl.rs:57:18:57:25 | "{x6:?}\\n" | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:57:18:57:25 | "{x6:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:57:18:57:25 | "{x6:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | blanket_impl.rs:57:18:57:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:57:18:57:25 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:58:18:58:22 | (...) | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:58:18:58:22 | (...) | &T | blanket_impl.rs:9:5:10:14 | S2 | +| blanket_impl.rs:58:18:58:22 | (...) | TRef | blanket_impl.rs:9:5:10:14 | S2 | | blanket_impl.rs:58:19:58:21 | &S2 | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:58:19:58:21 | &S2 | &T | blanket_impl.rs:9:5:10:14 | S2 | +| blanket_impl.rs:58:19:58:21 | &S2 | TRef | blanket_impl.rs:9:5:10:14 | S2 | | blanket_impl.rs:58:20:58:21 | S2 | | blanket_impl.rs:9:5:10:14 | S2 | | blanket_impl.rs:59:18:59:25 | "{x7:?}\\n" | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:59:18:59:25 | "{x7:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:59:18:59:25 | "{x7:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | blanket_impl.rs:59:18:59:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:59:18:59:25 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:68:24:68:24 | x | | {EXTERNAL LOCATION} | i64 | @@ -107,7 +107,7 @@ inferType | blanket_impl.rs:90:34:90:34 | 1 | | {EXTERNAL LOCATION} | i32 | | blanket_impl.rs:90:37:90:38 | S1 | | blanket_impl.rs:64:5:65:14 | S1 | | blanket_impl.rs:91:18:91:25 | "{x1:?}\\n" | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:91:18:91:25 | "{x1:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:91:18:91:25 | "{x1:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | blanket_impl.rs:91:18:91:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:91:18:91:25 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:91:20:91:21 | x1 | | blanket_impl.rs:64:5:65:14 | S1 | @@ -116,7 +116,7 @@ inferType | blanket_impl.rs:92:38:92:38 | 1 | | {EXTERNAL LOCATION} | i32 | | blanket_impl.rs:92:41:92:42 | S1 | | blanket_impl.rs:64:5:65:14 | S1 | | blanket_impl.rs:93:18:93:25 | "{x2:?}\\n" | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:93:18:93:25 | "{x2:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:93:18:93:25 | "{x2:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | blanket_impl.rs:93:18:93:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:93:18:93:25 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:93:20:93:21 | x2 | | blanket_impl.rs:64:5:65:14 | S1 | @@ -125,7 +125,7 @@ inferType | blanket_impl.rs:94:34:94:34 | 1 | | {EXTERNAL LOCATION} | i32 | | blanket_impl.rs:94:37:94:38 | S1 | | blanket_impl.rs:64:5:65:14 | S1 | | blanket_impl.rs:95:18:95:25 | "{x3:?}\\n" | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:95:18:95:25 | "{x3:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:95:18:95:25 | "{x3:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | blanket_impl.rs:95:18:95:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:95:18:95:25 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:95:20:95:21 | x3 | | blanket_impl.rs:64:5:65:14 | S1 | @@ -134,56 +134,56 @@ inferType | blanket_impl.rs:96:38:96:38 | 1 | | {EXTERNAL LOCATION} | i32 | | blanket_impl.rs:96:41:96:42 | S1 | | blanket_impl.rs:64:5:65:14 | S1 | | blanket_impl.rs:97:18:97:25 | "{x4:?}\\n" | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:97:18:97:25 | "{x4:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:97:18:97:25 | "{x4:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | blanket_impl.rs:97:18:97:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:97:18:97:25 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:97:20:97:21 | x4 | | blanket_impl.rs:64:5:65:14 | S1 | | blanket_impl.rs:108:22:108:26 | SelfParam | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:108:22:108:26 | SelfParam | &T | blanket_impl.rs:107:5:109:5 | Self [trait Flag] | +| blanket_impl.rs:108:22:108:26 | SelfParam | TRef | blanket_impl.rs:107:5:109:5 | Self [trait Flag] | | blanket_impl.rs:112:26:112:30 | SelfParam | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:112:26:112:30 | SelfParam | &T | blanket_impl.rs:111:5:113:5 | Self [trait TryFlag] | +| blanket_impl.rs:112:26:112:30 | SelfParam | TRef | blanket_impl.rs:111:5:113:5 | Self [trait TryFlag] | | blanket_impl.rs:119:26:119:30 | SelfParam | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:119:26:119:30 | SelfParam | &T | blanket_impl.rs:115:10:115:11 | Fl | +| blanket_impl.rs:119:26:119:30 | SelfParam | TRef | blanket_impl.rs:115:10:115:11 | Fl | | blanket_impl.rs:119:49:121:9 | { ... } | | {EXTERNAL LOCATION} | Option | | blanket_impl.rs:119:49:121:9 | { ... } | T | {EXTERNAL LOCATION} | bool | | blanket_impl.rs:120:13:120:34 | Some(...) | | {EXTERNAL LOCATION} | Option | | blanket_impl.rs:120:13:120:34 | Some(...) | T | {EXTERNAL LOCATION} | bool | | blanket_impl.rs:120:18:120:21 | self | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:120:18:120:21 | self | &T | blanket_impl.rs:115:10:115:11 | Fl | +| blanket_impl.rs:120:18:120:21 | self | TRef | blanket_impl.rs:115:10:115:11 | Fl | | blanket_impl.rs:120:18:120:33 | self.read_flag() | | {EXTERNAL LOCATION} | bool | | blanket_impl.rs:126:32:126:36 | SelfParam | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:126:32:126:36 | SelfParam | &T | blanket_impl.rs:124:5:129:5 | Self [trait TryFlagExt] | +| blanket_impl.rs:126:32:126:36 | SelfParam | TRef | blanket_impl.rs:124:5:129:5 | Self [trait TryFlagExt] | | blanket_impl.rs:126:55:128:9 | { ... } | | {EXTERNAL LOCATION} | Option | | blanket_impl.rs:126:55:128:9 | { ... } | T | {EXTERNAL LOCATION} | bool | | blanket_impl.rs:127:13:127:16 | self | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:127:13:127:16 | self | &T | blanket_impl.rs:124:5:129:5 | Self [trait TryFlagExt] | +| blanket_impl.rs:127:13:127:16 | self | TRef | blanket_impl.rs:124:5:129:5 | Self [trait TryFlagExt] | | blanket_impl.rs:127:13:127:32 | self.try_read_flag() | | {EXTERNAL LOCATION} | Option | | blanket_impl.rs:127:13:127:32 | self.try_read_flag() | T | {EXTERNAL LOCATION} | bool | | blanket_impl.rs:135:32:135:36 | SelfParam | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:135:32:135:36 | SelfParam | &T | blanket_impl.rs:133:5:136:5 | Self [trait AnotherTryFlag] | +| blanket_impl.rs:135:32:135:36 | SelfParam | TRef | blanket_impl.rs:133:5:136:5 | Self [trait AnotherTryFlag] | | blanket_impl.rs:144:26:144:30 | SelfParam | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:144:26:144:30 | SelfParam | &T | blanket_impl.rs:138:5:140:5 | MyTryFlag | +| blanket_impl.rs:144:26:144:30 | SelfParam | TRef | blanket_impl.rs:138:5:140:5 | MyTryFlag | | blanket_impl.rs:144:49:146:9 | { ... } | | {EXTERNAL LOCATION} | Option | | blanket_impl.rs:144:49:146:9 | { ... } | T | {EXTERNAL LOCATION} | bool | | blanket_impl.rs:145:13:145:27 | Some(...) | | {EXTERNAL LOCATION} | Option | | blanket_impl.rs:145:13:145:27 | Some(...) | T | {EXTERNAL LOCATION} | bool | | blanket_impl.rs:145:18:145:21 | self | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:145:18:145:21 | self | &T | blanket_impl.rs:138:5:140:5 | MyTryFlag | +| blanket_impl.rs:145:18:145:21 | self | TRef | blanket_impl.rs:138:5:140:5 | MyTryFlag | | blanket_impl.rs:145:18:145:26 | self.flag | | {EXTERNAL LOCATION} | bool | | blanket_impl.rs:155:22:155:26 | SelfParam | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:155:22:155:26 | SelfParam | &T | blanket_impl.rs:149:5:151:5 | MyFlag | +| blanket_impl.rs:155:22:155:26 | SelfParam | TRef | blanket_impl.rs:149:5:151:5 | MyFlag | | blanket_impl.rs:155:37:157:9 | { ... } | | {EXTERNAL LOCATION} | bool | | blanket_impl.rs:156:13:156:16 | self | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:156:13:156:16 | self | &T | blanket_impl.rs:149:5:151:5 | MyFlag | +| blanket_impl.rs:156:13:156:16 | self | TRef | blanket_impl.rs:149:5:151:5 | MyFlag | | blanket_impl.rs:156:13:156:21 | self.flag | | {EXTERNAL LOCATION} | bool | | blanket_impl.rs:166:32:166:36 | SelfParam | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:166:32:166:36 | SelfParam | &T | blanket_impl.rs:160:5:162:5 | MyOtherFlag | +| blanket_impl.rs:166:32:166:36 | SelfParam | TRef | blanket_impl.rs:160:5:162:5 | MyOtherFlag | | blanket_impl.rs:166:55:168:9 | { ... } | | {EXTERNAL LOCATION} | Option | | blanket_impl.rs:166:55:168:9 | { ... } | T | {EXTERNAL LOCATION} | bool | | blanket_impl.rs:167:13:167:27 | Some(...) | | {EXTERNAL LOCATION} | Option | | blanket_impl.rs:167:13:167:27 | Some(...) | T | {EXTERNAL LOCATION} | bool | | blanket_impl.rs:167:18:167:21 | self | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:167:18:167:21 | self | &T | blanket_impl.rs:160:5:162:5 | MyOtherFlag | +| blanket_impl.rs:167:18:167:21 | self | TRef | blanket_impl.rs:160:5:162:5 | MyOtherFlag | | blanket_impl.rs:167:18:167:26 | self.flag | | {EXTERNAL LOCATION} | bool | | blanket_impl.rs:171:15:184:5 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:172:13:172:23 | my_try_flag | | blanket_impl.rs:138:5:140:5 | MyTryFlag | @@ -216,25 +216,25 @@ inferType | blanket_impl.rs:226:15:226:18 | SelfParam | | blanket_impl.rs:188:5:189:14 | S1 | | blanket_impl.rs:226:21:226:22 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:231:15:231:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:231:15:231:18 | SelfParam | &T | blanket_impl.rs:229:10:229:27 | T | +| blanket_impl.rs:231:15:231:18 | SelfParam | TRef | blanket_impl.rs:229:10:229:27 | T | | blanket_impl.rs:231:21:233:9 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:232:13:232:16 | self | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:232:13:232:16 | self | &T | blanket_impl.rs:229:10:229:27 | T | +| blanket_impl.rs:232:13:232:16 | self | TRef | blanket_impl.rs:229:10:229:27 | T | | blanket_impl.rs:232:13:232:21 | self.m1() | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:238:15:238:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:238:15:238:18 | SelfParam | &T | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:238:15:238:18 | SelfParam | &T.&T | blanket_impl.rs:188:5:189:14 | S1 | +| blanket_impl.rs:238:15:238:18 | SelfParam | TRef | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:238:15:238:18 | SelfParam | TRef.TRef | blanket_impl.rs:188:5:189:14 | S1 | | blanket_impl.rs:238:21:240:9 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:239:13:239:16 | self | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:239:13:239:16 | self | &T | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:239:13:239:16 | self | &T.&T | blanket_impl.rs:188:5:189:14 | S1 | +| blanket_impl.rs:239:13:239:16 | self | TRef | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:239:13:239:16 | self | TRef.TRef | blanket_impl.rs:188:5:189:14 | S1 | | blanket_impl.rs:239:13:239:21 | self.m1() | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:245:15:245:18 | SelfParam | | blanket_impl.rs:243:10:243:20 | T | | blanket_impl.rs:245:21:247:9 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:246:13:246:16 | self | | blanket_impl.rs:243:10:243:20 | T | | blanket_impl.rs:246:13:246:21 | self.m3() | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:252:15:252:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:252:15:252:18 | SelfParam | &T | blanket_impl.rs:250:10:250:10 | T | +| blanket_impl.rs:252:15:252:18 | SelfParam | TRef | blanket_impl.rs:250:10:250:10 | T | | blanket_impl.rs:252:21:252:22 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:255:33:263:5 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:256:13:256:14 | x1 | | {EXTERNAL LOCATION} | () | @@ -242,60 +242,60 @@ inferType | blanket_impl.rs:256:18:256:24 | S1.m1() | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:257:13:257:14 | x2 | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:257:18:257:22 | (...) | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:257:18:257:22 | (...) | &T | blanket_impl.rs:188:5:189:14 | S1 | +| blanket_impl.rs:257:18:257:22 | (...) | TRef | blanket_impl.rs:188:5:189:14 | S1 | | blanket_impl.rs:257:18:257:27 | ... .m2() | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:257:19:257:21 | &S1 | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:257:19:257:21 | &S1 | &T | blanket_impl.rs:188:5:189:14 | S1 | +| blanket_impl.rs:257:19:257:21 | &S1 | TRef | blanket_impl.rs:188:5:189:14 | S1 | | blanket_impl.rs:257:20:257:21 | S1 | | blanket_impl.rs:188:5:189:14 | S1 | | blanket_impl.rs:258:13:258:14 | x3 | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:258:18:258:23 | (...) | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:258:18:258:23 | (...) | &T | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:258:18:258:23 | (...) | &T.&T | blanket_impl.rs:188:5:189:14 | S1 | +| blanket_impl.rs:258:18:258:23 | (...) | TRef | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:258:18:258:23 | (...) | TRef.TRef | blanket_impl.rs:188:5:189:14 | S1 | | blanket_impl.rs:258:18:258:28 | ... .m2() | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:258:19:258:22 | &... | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:258:19:258:22 | &... | &T | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:258:19:258:22 | &... | &T.&T | blanket_impl.rs:188:5:189:14 | S1 | +| blanket_impl.rs:258:19:258:22 | &... | TRef | {EXTERNAL LOCATION} | & | +| blanket_impl.rs:258:19:258:22 | &... | TRef.TRef | blanket_impl.rs:188:5:189:14 | S1 | | blanket_impl.rs:258:20:258:22 | &S1 | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:258:20:258:22 | &S1 | &T | blanket_impl.rs:188:5:189:14 | S1 | +| blanket_impl.rs:258:20:258:22 | &S1 | TRef | blanket_impl.rs:188:5:189:14 | S1 | | blanket_impl.rs:258:21:258:22 | S1 | | blanket_impl.rs:188:5:189:14 | S1 | | blanket_impl.rs:259:13:259:14 | x4 | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:259:18:259:19 | S1 | | blanket_impl.rs:188:5:189:14 | S1 | | blanket_impl.rs:259:18:259:24 | S1.m4() | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:260:13:260:14 | x5 | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:260:18:260:22 | (...) | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:260:18:260:22 | (...) | &T | blanket_impl.rs:188:5:189:14 | S1 | +| blanket_impl.rs:260:18:260:22 | (...) | TRef | blanket_impl.rs:188:5:189:14 | S1 | | blanket_impl.rs:260:18:260:27 | ... .m4() | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:260:19:260:21 | &S1 | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:260:19:260:21 | &S1 | &T | blanket_impl.rs:188:5:189:14 | S1 | +| blanket_impl.rs:260:19:260:21 | &S1 | TRef | blanket_impl.rs:188:5:189:14 | S1 | | blanket_impl.rs:260:20:260:21 | S1 | | blanket_impl.rs:188:5:189:14 | S1 | | blanket_impl.rs:261:13:261:14 | x6 | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:261:18:261:19 | S2 | | blanket_impl.rs:191:5:192:14 | S2 | | blanket_impl.rs:261:18:261:24 | S2.m4() | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:262:13:262:14 | x7 | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:262:18:262:22 | (...) | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:262:18:262:22 | (...) | &T | blanket_impl.rs:191:5:192:14 | S2 | +| blanket_impl.rs:262:18:262:22 | (...) | TRef | blanket_impl.rs:191:5:192:14 | S2 | | blanket_impl.rs:262:18:262:27 | ... .m4() | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:262:19:262:21 | &S2 | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:262:19:262:21 | &S2 | &T | blanket_impl.rs:191:5:192:14 | S2 | +| blanket_impl.rs:262:19:262:21 | &S2 | TRef | blanket_impl.rs:191:5:192:14 | S2 | | blanket_impl.rs:262:20:262:21 | S2 | | blanket_impl.rs:191:5:192:14 | S2 | | blanket_impl.rs:272:21:272:25 | SelfParam | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:272:21:272:25 | SelfParam | &T | blanket_impl.rs:271:5:274:5 | Self [trait Executor] | +| blanket_impl.rs:272:21:272:25 | SelfParam | TRef | blanket_impl.rs:271:5:274:5 | Self [trait Executor] | | blanket_impl.rs:273:24:273:28 | SelfParam | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:273:24:273:28 | SelfParam | &T | blanket_impl.rs:271:5:274:5 | Self [trait Executor] | +| blanket_impl.rs:273:24:273:28 | SelfParam | TRef | blanket_impl.rs:271:5:274:5 | Self [trait Executor] | | blanket_impl.rs:273:31:273:35 | query | | blanket_impl.rs:273:21:273:21 | E | | blanket_impl.rs:277:21:277:25 | SelfParam | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:277:21:277:25 | SelfParam | &T | blanket_impl.rs:276:10:276:22 | T | +| blanket_impl.rs:277:21:277:25 | SelfParam | TRef | blanket_impl.rs:276:10:276:22 | T | | blanket_impl.rs:277:28:279:9 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:278:22:278:41 | "Executor::execute1\\n" | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:278:22:278:41 | "Executor::execute1\\n" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:278:22:278:41 | "Executor::execute1\\n" | TRef | {EXTERNAL LOCATION} | str | | blanket_impl.rs:278:22:278:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:278:22:278:41 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:281:24:281:28 | SelfParam | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:281:24:281:28 | SelfParam | &T | blanket_impl.rs:276:10:276:22 | T | +| blanket_impl.rs:281:24:281:28 | SelfParam | TRef | blanket_impl.rs:276:10:276:22 | T | | blanket_impl.rs:281:31:281:36 | _query | | blanket_impl.rs:281:21:281:21 | E | | blanket_impl.rs:281:42:283:9 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:282:22:282:41 | "Executor::execute2\\n" | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:282:22:282:41 | "Executor::execute2\\n" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:282:22:282:41 | "Executor::execute2\\n" | TRef | {EXTERNAL LOCATION} | str | | blanket_impl.rs:282:22:282:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:282:22:282:41 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:290:16:300:5 | { ... } | | {EXTERNAL LOCATION} | () | @@ -305,38 +305,38 @@ inferType | blanket_impl.rs:293:9:293:20 | c.execute1() | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:294:9:294:37 | ...::execute1(...) | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:294:35:294:36 | &c | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:294:35:294:36 | &c | &T | blanket_impl.rs:286:5:286:29 | MySqlConnection | +| blanket_impl.rs:294:35:294:36 | &c | TRef | blanket_impl.rs:286:5:286:29 | MySqlConnection | | blanket_impl.rs:294:36:294:36 | c | | blanket_impl.rs:286:5:286:29 | MySqlConnection | | blanket_impl.rs:296:9:296:9 | c | | blanket_impl.rs:286:5:286:29 | MySqlConnection | | blanket_impl.rs:296:9:296:41 | c.execute2(...) | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:296:20:296:40 | "SELECT * FROM users" | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:296:20:296:40 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:296:20:296:40 | "SELECT * FROM users" | TRef | {EXTERNAL LOCATION} | str | | blanket_impl.rs:297:9:297:9 | c | | blanket_impl.rs:286:5:286:29 | MySqlConnection | | blanket_impl.rs:297:9:297:49 | c.execute2(...) | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:297:28:297:48 | "SELECT * FROM users" | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:297:28:297:48 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:297:28:297:48 | "SELECT * FROM users" | TRef | {EXTERNAL LOCATION} | str | | blanket_impl.rs:298:9:298:60 | ...::execute2(...) | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:298:35:298:36 | &c | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:298:35:298:36 | &c | &T | blanket_impl.rs:286:5:286:29 | MySqlConnection | +| blanket_impl.rs:298:35:298:36 | &c | TRef | blanket_impl.rs:286:5:286:29 | MySqlConnection | | blanket_impl.rs:298:36:298:36 | c | | blanket_impl.rs:286:5:286:29 | MySqlConnection | | blanket_impl.rs:298:39:298:59 | "SELECT * FROM users" | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:298:39:298:59 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:298:39:298:59 | "SELECT * FROM users" | TRef | {EXTERNAL LOCATION} | str | | blanket_impl.rs:299:9:299:68 | ...::execute2::<...>(...) | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:299:43:299:44 | &c | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:299:43:299:44 | &c | &T | blanket_impl.rs:286:5:286:29 | MySqlConnection | +| blanket_impl.rs:299:43:299:44 | &c | TRef | blanket_impl.rs:286:5:286:29 | MySqlConnection | | blanket_impl.rs:299:44:299:44 | c | | blanket_impl.rs:286:5:286:29 | MySqlConnection | | blanket_impl.rs:299:47:299:67 | "SELECT * FROM users" | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:299:47:299:67 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:299:47:299:67 | "SELECT * FROM users" | TRef | {EXTERNAL LOCATION} | str | | closure.rs:4:19:31:5 | { ... } | | {EXTERNAL LOCATION} | () | | closure.rs:6:13:6:22 | my_closure | | {EXTERNAL LOCATION} | dyn FnOnce | | closure.rs:6:13:6:22 | my_closure | dyn(Args) | {EXTERNAL LOCATION} | (T_2) | -| closure.rs:6:13:6:22 | my_closure | dyn(Args).0(2) | {EXTERNAL LOCATION} | bool | -| closure.rs:6:13:6:22 | my_closure | dyn(Args).1(2) | {EXTERNAL LOCATION} | bool | +| closure.rs:6:13:6:22 | my_closure | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | +| closure.rs:6:13:6:22 | my_closure | dyn(Args).T1 | {EXTERNAL LOCATION} | bool | | closure.rs:6:13:6:22 | my_closure | dyn(Output) | {EXTERNAL LOCATION} | bool | | closure.rs:6:26:6:38 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | | closure.rs:6:26:6:38 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_2) | -| closure.rs:6:26:6:38 | \|...\| ... | dyn(Args).0(2) | {EXTERNAL LOCATION} | bool | -| closure.rs:6:26:6:38 | \|...\| ... | dyn(Args).1(2) | {EXTERNAL LOCATION} | bool | +| closure.rs:6:26:6:38 | \|...\| ... | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | +| closure.rs:6:26:6:38 | \|...\| ... | dyn(Args).T1 | {EXTERNAL LOCATION} | bool | | closure.rs:6:26:6:38 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | bool | | closure.rs:6:27:6:27 | a | | {EXTERNAL LOCATION} | bool | | closure.rs:6:30:6:30 | b | | {EXTERNAL LOCATION} | bool | @@ -347,11 +347,11 @@ inferType | closure.rs:8:22:8:25 | 1i64 | | {EXTERNAL LOCATION} | i64 | | closure.rs:9:13:9:19 | add_one | | {EXTERNAL LOCATION} | dyn FnOnce | | closure.rs:9:13:9:19 | add_one | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:9:13:9:19 | add_one | dyn(Args).0(1) | {EXTERNAL LOCATION} | i64 | +| closure.rs:9:13:9:19 | add_one | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | | closure.rs:9:13:9:19 | add_one | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:9:23:9:34 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | | closure.rs:9:23:9:34 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:9:23:9:34 | \|...\| ... | dyn(Args).0(1) | {EXTERNAL LOCATION} | i64 | +| closure.rs:9:23:9:34 | \|...\| ... | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | | closure.rs:9:23:9:34 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:9:24:9:24 | n | | {EXTERNAL LOCATION} | i64 | | closure.rs:9:27:9:27 | n | | {EXTERNAL LOCATION} | i64 | @@ -360,7 +360,7 @@ inferType | closure.rs:10:13:10:14 | _y | | {EXTERNAL LOCATION} | i64 | | closure.rs:10:18:10:24 | add_one | | {EXTERNAL LOCATION} | dyn FnOnce | | closure.rs:10:18:10:24 | add_one | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:10:18:10:24 | add_one | dyn(Args).0(1) | {EXTERNAL LOCATION} | i64 | +| closure.rs:10:18:10:24 | add_one | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | | closure.rs:10:18:10:24 | add_one | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:10:18:10:27 | add_one(...) | | {EXTERNAL LOCATION} | i64 | | closure.rs:10:26:10:26 | x | | {EXTERNAL LOCATION} | i64 | @@ -368,18 +368,18 @@ inferType | closure.rs:13:17:13:34 | ...::default(...) | | {EXTERNAL LOCATION} | i64 | | closure.rs:14:13:14:20 | add_zero | | {EXTERNAL LOCATION} | dyn FnOnce | | closure.rs:14:13:14:20 | add_zero | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:14:13:14:20 | add_zero | dyn(Args).0(1) | {EXTERNAL LOCATION} | i64 | +| closure.rs:14:13:14:20 | add_zero | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | | closure.rs:14:13:14:20 | add_zero | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:14:24:14:33 | \|...\| n | | {EXTERNAL LOCATION} | dyn FnOnce | | closure.rs:14:24:14:33 | \|...\| n | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:14:24:14:33 | \|...\| n | dyn(Args).0(1) | {EXTERNAL LOCATION} | i64 | +| closure.rs:14:24:14:33 | \|...\| n | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | | closure.rs:14:24:14:33 | \|...\| n | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:14:25:14:25 | n | | {EXTERNAL LOCATION} | i64 | | closure.rs:14:33:14:33 | n | | {EXTERNAL LOCATION} | i64 | | closure.rs:15:13:15:14 | _y | | {EXTERNAL LOCATION} | i64 | | closure.rs:15:18:15:25 | add_zero | | {EXTERNAL LOCATION} | dyn FnOnce | | closure.rs:15:18:15:25 | add_zero | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:15:18:15:25 | add_zero | dyn(Args).0(1) | {EXTERNAL LOCATION} | i64 | +| closure.rs:15:18:15:25 | add_zero | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | | closure.rs:15:18:15:25 | add_zero | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:15:18:15:28 | add_zero(...) | | {EXTERNAL LOCATION} | i64 | | closure.rs:15:27:15:27 | x | | {EXTERNAL LOCATION} | i64 | @@ -395,28 +395,28 @@ inferType | closure.rs:20:13:20:13 | b | | {EXTERNAL LOCATION} | bool | | closure.rs:24:13:24:14 | id | | {EXTERNAL LOCATION} | dyn FnOnce | | closure.rs:24:13:24:14 | id | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:24:13:24:14 | id | dyn(Args).0(1) | {EXTERNAL LOCATION} | bool | +| closure.rs:24:13:24:14 | id | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | | closure.rs:24:13:24:14 | id | dyn(Output) | {EXTERNAL LOCATION} | bool | | closure.rs:24:18:24:22 | \|...\| b | | {EXTERNAL LOCATION} | dyn FnOnce | | closure.rs:24:18:24:22 | \|...\| b | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:24:18:24:22 | \|...\| b | dyn(Args).0(1) | {EXTERNAL LOCATION} | bool | +| closure.rs:24:18:24:22 | \|...\| b | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | | closure.rs:24:18:24:22 | \|...\| b | dyn(Output) | {EXTERNAL LOCATION} | bool | | closure.rs:24:19:24:19 | b | | {EXTERNAL LOCATION} | bool | | closure.rs:24:22:24:22 | b | | {EXTERNAL LOCATION} | bool | | closure.rs:25:13:25:14 | _b | | {EXTERNAL LOCATION} | bool | | closure.rs:25:18:25:19 | id | | {EXTERNAL LOCATION} | dyn FnOnce | | closure.rs:25:18:25:19 | id | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:25:18:25:19 | id | dyn(Args).0(1) | {EXTERNAL LOCATION} | bool | +| closure.rs:25:18:25:19 | id | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | | closure.rs:25:18:25:19 | id | dyn(Output) | {EXTERNAL LOCATION} | bool | | closure.rs:25:18:25:25 | id(...) | | {EXTERNAL LOCATION} | bool | | closure.rs:25:21:25:24 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:28:13:28:15 | id2 | | {EXTERNAL LOCATION} | dyn FnOnce | | closure.rs:28:13:28:15 | id2 | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:28:13:28:15 | id2 | dyn(Args).0(1) | {EXTERNAL LOCATION} | bool | +| closure.rs:28:13:28:15 | id2 | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | | closure.rs:28:13:28:15 | id2 | dyn(Output) | {EXTERNAL LOCATION} | bool | | closure.rs:28:19:28:23 | \|...\| b | | {EXTERNAL LOCATION} | dyn FnOnce | | closure.rs:28:19:28:23 | \|...\| b | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:28:19:28:23 | \|...\| b | dyn(Args).0(1) | {EXTERNAL LOCATION} | bool | +| closure.rs:28:19:28:23 | \|...\| b | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | | closure.rs:28:19:28:23 | \|...\| b | dyn(Output) | {EXTERNAL LOCATION} | bool | | closure.rs:28:20:28:20 | b | | {EXTERNAL LOCATION} | bool | | closure.rs:28:23:28:23 | b | | {EXTERNAL LOCATION} | bool | @@ -425,7 +425,7 @@ inferType | closure.rs:30:13:30:15 | _b2 | | {EXTERNAL LOCATION} | bool | | closure.rs:30:25:30:27 | id2 | | {EXTERNAL LOCATION} | dyn FnOnce | | closure.rs:30:25:30:27 | id2 | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:30:25:30:27 | id2 | dyn(Args).0(1) | {EXTERNAL LOCATION} | bool | +| closure.rs:30:25:30:27 | id2 | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | | closure.rs:30:25:30:27 | id2 | dyn(Output) | {EXTERNAL LOCATION} | bool | | closure.rs:30:25:30:32 | id2(...) | | {EXTERNAL LOCATION} | bool | | closure.rs:30:29:30:31 | arg | | {EXTERNAL LOCATION} | bool | @@ -457,12 +457,12 @@ inferType | closure.rs:52:15:64:5 | { ... } | | {EXTERNAL LOCATION} | () | | closure.rs:53:13:53:13 | f | | {EXTERNAL LOCATION} | dyn FnOnce | | closure.rs:53:13:53:13 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:53:13:53:13 | f | dyn(Args).0(1) | {EXTERNAL LOCATION} | bool | +| closure.rs:53:13:53:13 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | | closure.rs:53:13:53:13 | f | dyn(Output) | {EXTERNAL LOCATION} | i32 | | closure.rs:53:13:53:13 | f | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:53:17:59:9 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | | closure.rs:53:17:59:9 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:53:17:59:9 | \|...\| ... | dyn(Args).0(1) | {EXTERNAL LOCATION} | bool | +| closure.rs:53:17:59:9 | \|...\| ... | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | | closure.rs:53:17:59:9 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | i32 | | closure.rs:53:17:59:9 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:53:18:53:18 | x | | {EXTERNAL LOCATION} | bool | @@ -485,7 +485,7 @@ inferType | closure.rs:60:18:60:31 | apply(...) | | {EXTERNAL LOCATION} | i64 | | closure.rs:60:24:60:24 | f | | {EXTERNAL LOCATION} | dyn FnOnce | | closure.rs:60:24:60:24 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:60:24:60:24 | f | dyn(Args).0(1) | {EXTERNAL LOCATION} | bool | +| closure.rs:60:24:60:24 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | | closure.rs:60:24:60:24 | f | dyn(Output) | {EXTERNAL LOCATION} | i32 | | closure.rs:60:24:60:24 | f | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:60:27:60:30 | true | | {EXTERNAL LOCATION} | bool | @@ -512,7 +512,7 @@ inferType | closure.rs:72:30:72:30 | f | A | {EXTERNAL LOCATION} | Global | | closure.rs:72:30:72:30 | f | T | {EXTERNAL LOCATION} | dyn FnOnce | | closure.rs:72:30:72:30 | f | T.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:72:30:72:30 | f | T.dyn(Args).0(1) | closure.rs:72:24:72:24 | A | +| closure.rs:72:30:72:30 | f | T.dyn(Args).T0 | closure.rs:72:24:72:24 | A | | closure.rs:72:30:72:30 | f | T.dyn(Output) | closure.rs:72:27:72:27 | B | | closure.rs:72:58:72:60 | arg | | closure.rs:72:24:72:24 | A | | closure.rs:72:66:75:5 | { ... } | | {EXTERNAL LOCATION} | () | @@ -522,7 +522,7 @@ inferType | closure.rs:73:31:73:31 | f | A | {EXTERNAL LOCATION} | Global | | closure.rs:73:31:73:31 | f | T | {EXTERNAL LOCATION} | dyn FnOnce | | closure.rs:73:31:73:31 | f | T.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:73:31:73:31 | f | T.dyn(Args).0(1) | closure.rs:72:24:72:24 | A | +| closure.rs:73:31:73:31 | f | T.dyn(Args).T0 | closure.rs:72:24:72:24 | A | | closure.rs:73:31:73:31 | f | T.dyn(Output) | closure.rs:72:27:72:27 | B | | closure.rs:73:34:73:36 | arg | | closure.rs:72:24:72:24 | A | | closure.rs:74:13:74:15 | _r2 | | {EXTERNAL LOCATION} | bool | @@ -531,55 +531,55 @@ inferType | closure.rs:74:31:74:53 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | closure.rs:74:31:74:53 | ...::new(...) | T | {EXTERNAL LOCATION} | dyn FnOnce | | closure.rs:74:31:74:53 | ...::new(...) | T.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:74:31:74:53 | ...::new(...) | T.dyn(Args).0(1) | {EXTERNAL LOCATION} | i64 | +| closure.rs:74:31:74:53 | ...::new(...) | T.dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | | closure.rs:74:31:74:53 | ...::new(...) | T.dyn(Output) | {EXTERNAL LOCATION} | bool | | closure.rs:74:40:74:52 | \|...\| true | | {EXTERNAL LOCATION} | dyn FnOnce | | closure.rs:74:40:74:52 | \|...\| true | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:74:40:74:52 | \|...\| true | dyn(Args).0(1) | {EXTERNAL LOCATION} | i64 | +| closure.rs:74:40:74:52 | \|...\| true | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | | closure.rs:74:40:74:52 | \|...\| true | dyn(Output) | {EXTERNAL LOCATION} | bool | | closure.rs:74:41:74:41 | _ | | {EXTERNAL LOCATION} | i64 | | closure.rs:74:49:74:52 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:74:56:74:56 | 3 | | {EXTERNAL LOCATION} | i32 | | dereference.rs:12:14:12:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| dereference.rs:12:14:12:18 | SelfParam | &T | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:12:14:12:18 | SelfParam | TRef | dereference.rs:4:1:6:1 | MyIntPointer | | dereference.rs:12:29:14:5 | { ... } | | {EXTERNAL LOCATION} | & | -| dereference.rs:12:29:14:5 | { ... } | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:12:29:14:5 | { ... } | TRef | {EXTERNAL LOCATION} | i64 | | dereference.rs:13:9:13:19 | &... | | {EXTERNAL LOCATION} | & | -| dereference.rs:13:9:13:19 | &... | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:13:9:13:19 | &... | TRef | {EXTERNAL LOCATION} | i64 | | dereference.rs:13:10:13:13 | self | | {EXTERNAL LOCATION} | & | -| dereference.rs:13:10:13:13 | self | &T | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:13:10:13:13 | self | TRef | 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 | | {EXTERNAL LOCATION} | & | -| 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:14:25:18 | SelfParam | TRef | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:25:14:25:18 | SelfParam | TRef.T | dereference.rs:21:6:21:6 | T | | dereference.rs:25:27:27:5 | { ... } | | {EXTERNAL LOCATION} | & | -| dereference.rs:25:27:27:5 | { ... } | &T | dereference.rs:21:6:21:6 | T | +| dereference.rs:25:27:27:5 | { ... } | TRef | dereference.rs:21:6:21:6 | T | | dereference.rs:26:9:26:19 | &... | | {EXTERNAL LOCATION} | & | -| dereference.rs:26:9:26:19 | &... | &T | dereference.rs:21:6:21:6 | T | +| dereference.rs:26:9:26:19 | &... | TRef | dereference.rs:21:6:21:6 | T | | dereference.rs:26:10:26:13 | self | | {EXTERNAL LOCATION} | & | -| 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:13 | self | TRef | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:26:10:26:13 | self | TRef.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:33:12:33:16 | SelfParam | | {EXTERNAL LOCATION} | & | -| dereference.rs:33:12:33:16 | SelfParam | &T | dereference.rs:30:1:30:15 | S | -| dereference.rs:33:12:33:16 | SelfParam | &T.T | dereference.rs:32:6:32:6 | T | +| dereference.rs:33:12:33:16 | SelfParam | TRef | dereference.rs:30:1:30:15 | S | +| dereference.rs:33:12:33:16 | SelfParam | TRef.T | dereference.rs:32:6:32:6 | T | | dereference.rs:33:25:35:5 | { ... } | | {EXTERNAL LOCATION} | & | -| dereference.rs:33:25:35:5 | { ... } | &T | dereference.rs:32:6:32:6 | T | +| dereference.rs:33:25:35:5 | { ... } | TRef | dereference.rs:32:6:32:6 | T | | dereference.rs:34:9:34:15 | &... | | {EXTERNAL LOCATION} | & | -| dereference.rs:34:9:34:15 | &... | &T | dereference.rs:32:6:32:6 | T | +| dereference.rs:34:9:34:15 | &... | TRef | dereference.rs:32:6:32:6 | T | | dereference.rs:34:10:34:13 | self | | {EXTERNAL LOCATION} | & | -| dereference.rs:34:10:34:13 | self | &T | dereference.rs:30:1:30:15 | S | -| dereference.rs:34:10:34:13 | self | &T.T | dereference.rs:32:6:32:6 | T | +| dereference.rs:34:10:34:13 | self | TRef | dereference.rs:30:1:30:15 | S | +| dereference.rs:34:10:34:13 | self | TRef.T | dereference.rs:32:6:32:6 | T | | dereference.rs:34:10:34:15 | self.0 | | dereference.rs:32:6:32:6 | T | | dereference.rs:38:39:50:1 | { ... } | | {EXTERNAL LOCATION} | () | | dereference.rs:40:9:40:10 | a1 | | 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 | _b1 | | {EXTERNAL LOCATION} | & | -| dereference.rs:41:9:41:11 | _b1 | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:41:9:41:11 | _b1 | TRef | {EXTERNAL LOCATION} | i64 | | dereference.rs:41:15:41:16 | a1 | | dereference.rs:4:1:6:1 | MyIntPointer | | dereference.rs:41:15:41:24 | a1.deref() | | {EXTERNAL LOCATION} | & | -| dereference.rs:41:15:41:24 | a1.deref() | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:41:15:41:24 | a1.deref() | TRef | {EXTERNAL LOCATION} | i64 | | dereference.rs:44:9:44:10 | a2 | | dereference.rs:4:1:6:1 | MyIntPointer | | dereference.rs:44:14:44:42 | MyIntPointer {...} | | dereference.rs:4:1:6:1 | MyIntPointer | | dereference.rs:44:36:44:40 | 34i64 | | {EXTERNAL LOCATION} | i64 | @@ -601,11 +601,11 @@ inferType | dereference.rs:54:14:54:42 | MySmartPointer {...} | T | {EXTERNAL LOCATION} | char | | dereference.rs:54:38:54:40 | 'a' | | {EXTERNAL LOCATION} | char | | dereference.rs:55:9:55:11 | _d1 | | {EXTERNAL LOCATION} | & | -| dereference.rs:55:9:55:11 | _d1 | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:55:9:55:11 | _d1 | TRef | {EXTERNAL LOCATION} | char | | dereference.rs:55:15:55:16 | c1 | | dereference.rs:17:1:19:1 | MySmartPointer | | dereference.rs:55:15:55:16 | c1 | T | {EXTERNAL LOCATION} | char | | dereference.rs:55:15:55:24 | c1.deref() | | {EXTERNAL LOCATION} | & | -| dereference.rs:55:15:55:24 | c1.deref() | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:55:15:55:24 | c1.deref() | TRef | {EXTERNAL LOCATION} | char | | dereference.rs:58:9:58:10 | c2 | | dereference.rs:17:1:19:1 | MySmartPointer | | dereference.rs:58:9:58:10 | c2 | T | {EXTERNAL LOCATION} | char | | dereference.rs:58:14:58:42 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | @@ -628,36 +628,36 @@ inferType | dereference.rs:63:17:63:18 | c3 | T | {EXTERNAL LOCATION} | i64 | | dereference.rs:66:31:78:1 | { ... } | | {EXTERNAL LOCATION} | () | | dereference.rs:68:9:68:10 | e1 | | {EXTERNAL LOCATION} | & | -| dereference.rs:68:9:68:10 | e1 | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:68:9:68:10 | e1 | TRef | {EXTERNAL LOCATION} | char | | dereference.rs:68:14:68:17 | &'a' | | {EXTERNAL LOCATION} | & | -| dereference.rs:68:14:68:17 | &'a' | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:68:14:68:17 | &'a' | TRef | {EXTERNAL LOCATION} | char | | dereference.rs:68:15:68:17 | 'a' | | {EXTERNAL LOCATION} | char | | dereference.rs:69:9:69:11 | _f1 | | {EXTERNAL LOCATION} | & | -| dereference.rs:69:9:69:11 | _f1 | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:69:9:69:11 | _f1 | TRef | {EXTERNAL LOCATION} | char | | dereference.rs:69:15:69:16 | e1 | | {EXTERNAL LOCATION} | & | -| dereference.rs:69:15:69:16 | e1 | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:69:15:69:16 | e1 | TRef | {EXTERNAL LOCATION} | char | | dereference.rs:69:15:69:24 | e1.deref() | | {EXTERNAL LOCATION} | & | -| dereference.rs:69:15:69:24 | e1.deref() | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:69:15:69:24 | e1.deref() | TRef | {EXTERNAL LOCATION} | char | | dereference.rs:72:9:72:10 | e2 | | {EXTERNAL LOCATION} | & | -| dereference.rs:72:9:72:10 | e2 | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:72:9:72:10 | e2 | TRef | {EXTERNAL LOCATION} | char | | dereference.rs:72:14:72:17 | &'a' | | {EXTERNAL LOCATION} | & | -| dereference.rs:72:14:72:17 | &'a' | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:72:14:72:17 | &'a' | TRef | {EXTERNAL LOCATION} | char | | dereference.rs:72:15:72:17 | 'a' | | {EXTERNAL LOCATION} | char | | dereference.rs:73:9:73:11 | _f2 | | {EXTERNAL LOCATION} | char | | dereference.rs:73:15:73:17 | * ... | | {EXTERNAL LOCATION} | char | | dereference.rs:73:16:73:17 | e2 | | {EXTERNAL LOCATION} | & | -| dereference.rs:73:16:73:17 | e2 | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:73:16:73:17 | e2 | TRef | {EXTERNAL LOCATION} | char | | dereference.rs:76:9:76:10 | e3 | | {EXTERNAL LOCATION} | & | -| dereference.rs:76:9:76:10 | e3 | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:76:9:76:10 | e3 | TRef | {EXTERNAL LOCATION} | i64 | | dereference.rs:76:14:76:19 | &34i64 | | {EXTERNAL LOCATION} | & | -| dereference.rs:76:14:76:19 | &34i64 | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:76:14:76:19 | &34i64 | TRef | {EXTERNAL LOCATION} | i64 | | dereference.rs:76:15:76:19 | 34i64 | | {EXTERNAL LOCATION} | i64 | | dereference.rs:77:9:77:11 | _f3 | | {EXTERNAL LOCATION} | bool | | dereference.rs:77:15:77:19 | (...) | | {EXTERNAL LOCATION} | i64 | | dereference.rs:77:15:77:33 | ... .is_positive() | | {EXTERNAL LOCATION} | bool | | dereference.rs:77:16:77:18 | * ... | | {EXTERNAL LOCATION} | i64 | | dereference.rs:77:17:77:18 | e3 | | {EXTERNAL LOCATION} | & | -| dereference.rs:77:17:77:18 | e3 | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:77:17:77:18 | e3 | TRef | {EXTERNAL LOCATION} | i64 | | dereference.rs:80:31:92:1 | { ... } | | {EXTERNAL LOCATION} | () | | dereference.rs:82:9:82:10 | g1 | | {EXTERNAL LOCATION} | Box | | dereference.rs:82:9:82:10 | g1 | A | {EXTERNAL LOCATION} | Global | @@ -667,12 +667,12 @@ inferType | dereference.rs:82:25:82:37 | ...::new(...) | T | {EXTERNAL LOCATION} | char | | dereference.rs:82:34:82:36 | 'a' | | {EXTERNAL LOCATION} | char | | dereference.rs:83:9:83:11 | _h1 | | {EXTERNAL LOCATION} | & | -| dereference.rs:83:9:83:11 | _h1 | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:83:9:83:11 | _h1 | TRef | {EXTERNAL LOCATION} | char | | dereference.rs:83:15:83:16 | g1 | | {EXTERNAL LOCATION} | Box | | dereference.rs:83:15:83:16 | g1 | A | {EXTERNAL LOCATION} | Global | | dereference.rs:83:15:83:16 | g1 | T | {EXTERNAL LOCATION} | char | | dereference.rs:83:15:83:24 | g1.deref() | | {EXTERNAL LOCATION} | & | -| dereference.rs:83:15:83:24 | g1.deref() | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:83:15:83:24 | g1.deref() | TRef | {EXTERNAL LOCATION} | char | | dereference.rs:86:9:86:10 | g2 | | {EXTERNAL LOCATION} | Box | | dereference.rs:86:9:86:10 | g2 | A | {EXTERNAL LOCATION} | Global | | dereference.rs:86:9:86:10 | g2 | T | {EXTERNAL LOCATION} | char | @@ -726,86 +726,86 @@ inferType | dereference.rs:131:19:139:5 | { ... } | | {EXTERNAL LOCATION} | () | | dereference.rs:132:17:132:26 | key_to_key | | {EXTERNAL LOCATION} | HashMap | | dereference.rs:132:17:132:26 | key_to_key | K | {EXTERNAL LOCATION} | & | -| dereference.rs:132:17:132:26 | key_to_key | K.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:132:17:132:26 | key_to_key | K.TRef | dereference.rs:110:5:111:21 | Key | | dereference.rs:132:17:132:26 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | | dereference.rs:132:17:132:26 | key_to_key | V | {EXTERNAL LOCATION} | & | -| dereference.rs:132:17:132:26 | key_to_key | V.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:132:17:132:26 | key_to_key | V.TRef | dereference.rs:110:5:111:21 | Key | | dereference.rs:132:30:132:57 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | | dereference.rs:132:30:132:57 | ...::new(...) | K | {EXTERNAL LOCATION} | & | -| dereference.rs:132:30:132:57 | ...::new(...) | K.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:132:30:132:57 | ...::new(...) | K.TRef | dereference.rs:110:5:111:21 | Key | | dereference.rs:132:30:132:57 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | | dereference.rs:132:30:132:57 | ...::new(...) | V | {EXTERNAL LOCATION} | & | -| dereference.rs:132:30:132:57 | ...::new(...) | V.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:132:30:132:57 | ...::new(...) | V.TRef | dereference.rs:110:5:111:21 | Key | | dereference.rs:133:17:133:19 | key | | {EXTERNAL LOCATION} | & | -| dereference.rs:133:17:133:19 | key | &T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:133:17:133:19 | key | &T | {EXTERNAL LOCATION} | & | -| dereference.rs:133:17:133:19 | key | &T.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:133:17:133:19 | key | TRef | dereference.rs:110:5:111:21 | Key | +| dereference.rs:133:17:133:19 | key | TRef | {EXTERNAL LOCATION} | & | +| dereference.rs:133:17:133:19 | key | TRef.TRef | dereference.rs:110:5:111:21 | Key | | dereference.rs:133:23:133:29 | &... | | {EXTERNAL LOCATION} | & | -| dereference.rs:133:23:133:29 | &... | &T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:133:23:133:29 | &... | &T | {EXTERNAL LOCATION} | & | -| dereference.rs:133:23:133:29 | &... | &T.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:133:23:133:29 | &... | TRef | dereference.rs:110:5:111:21 | Key | +| dereference.rs:133:23:133:29 | &... | TRef | {EXTERNAL LOCATION} | & | +| dereference.rs:133:23:133:29 | &... | TRef.TRef | dereference.rs:110:5:111:21 | Key | | dereference.rs:133:24:133:29 | Key {...} | | dereference.rs:110:5:111:21 | Key | | dereference.rs:134:9:137:9 | if ... {...} | | {EXTERNAL LOCATION} | () | | dereference.rs:134:16:134:28 | Some(...) | | {EXTERNAL LOCATION} | Option | | dereference.rs:134:16:134:28 | Some(...) | T | {EXTERNAL LOCATION} | & | -| dereference.rs:134:16:134:28 | Some(...) | T.&T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:134:16:134:28 | Some(...) | T.&T | {EXTERNAL LOCATION} | & | -| dereference.rs:134:16:134:28 | Some(...) | T.&T.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:134:16:134:28 | Some(...) | T.TRef | dereference.rs:110:5:111:21 | Key | +| dereference.rs:134:16:134:28 | Some(...) | T.TRef | {EXTERNAL LOCATION} | & | +| dereference.rs:134:16:134:28 | Some(...) | T.TRef.TRef | dereference.rs:110:5:111:21 | Key | | dereference.rs:134:21:134:27 | ref_key | | {EXTERNAL LOCATION} | & | -| dereference.rs:134:21:134:27 | ref_key | &T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:134:21:134:27 | ref_key | &T | {EXTERNAL LOCATION} | & | -| dereference.rs:134:21:134:27 | ref_key | &T.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:134:21:134:27 | ref_key | TRef | dereference.rs:110:5:111:21 | Key | +| dereference.rs:134:21:134:27 | ref_key | TRef | {EXTERNAL LOCATION} | & | +| dereference.rs:134:21:134:27 | ref_key | TRef.TRef | dereference.rs:110:5:111:21 | Key | | dereference.rs:134:32:134:41 | key_to_key | | {EXTERNAL LOCATION} | HashMap | | dereference.rs:134:32:134:41 | key_to_key | K | {EXTERNAL LOCATION} | & | -| dereference.rs:134:32:134:41 | key_to_key | K.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:134:32:134:41 | key_to_key | K.TRef | dereference.rs:110:5:111:21 | Key | | dereference.rs:134:32:134:41 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | | dereference.rs:134:32:134:41 | key_to_key | V | {EXTERNAL LOCATION} | & | -| dereference.rs:134:32:134:41 | key_to_key | V.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:134:32:134:41 | key_to_key | V.TRef | dereference.rs:110:5:111:21 | Key | | dereference.rs:134:32:134:50 | key_to_key.get(...) | | {EXTERNAL LOCATION} | Option | | dereference.rs:134:32:134:50 | key_to_key.get(...) | T | {EXTERNAL LOCATION} | & | -| dereference.rs:134:32:134:50 | key_to_key.get(...) | T.&T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:134:32:134:50 | key_to_key.get(...) | T.&T | {EXTERNAL LOCATION} | & | -| dereference.rs:134:32:134:50 | key_to_key.get(...) | T.&T.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:134:32:134:50 | key_to_key.get(...) | T.TRef | dereference.rs:110:5:111:21 | Key | +| dereference.rs:134:32:134:50 | key_to_key.get(...) | T.TRef | {EXTERNAL LOCATION} | & | +| dereference.rs:134:32:134:50 | key_to_key.get(...) | T.TRef.TRef | dereference.rs:110:5:111:21 | Key | | dereference.rs:134:47:134:49 | key | | {EXTERNAL LOCATION} | & | -| dereference.rs:134:47:134:49 | key | &T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:134:47:134:49 | key | &T | {EXTERNAL LOCATION} | & | -| dereference.rs:134:47:134:49 | key | &T.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:134:47:134:49 | key | TRef | dereference.rs:110:5:111:21 | Key | +| dereference.rs:134:47:134:49 | key | TRef | {EXTERNAL LOCATION} | & | +| dereference.rs:134:47:134:49 | key | TRef.TRef | dereference.rs:110:5:111:21 | Key | | dereference.rs:134:52:137:9 | { ... } | | {EXTERNAL LOCATION} | () | | dereference.rs:136:13:136:15 | key | | {EXTERNAL LOCATION} | & | -| dereference.rs:136:13:136:15 | key | &T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:136:13:136:15 | key | &T | {EXTERNAL LOCATION} | & | -| dereference.rs:136:13:136:15 | key | &T.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:136:13:136:15 | key | TRef | dereference.rs:110:5:111:21 | Key | +| dereference.rs:136:13:136:15 | key | TRef | {EXTERNAL LOCATION} | & | +| dereference.rs:136:13:136:15 | key | TRef.TRef | dereference.rs:110:5:111:21 | Key | | dereference.rs:136:13:136:25 | ... = ... | | {EXTERNAL LOCATION} | () | | dereference.rs:136:19:136:25 | ref_key | | {EXTERNAL LOCATION} | & | -| dereference.rs:136:19:136:25 | ref_key | &T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:136:19:136:25 | ref_key | &T | {EXTERNAL LOCATION} | & | -| dereference.rs:136:19:136:25 | ref_key | &T.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:136:19:136:25 | ref_key | TRef | dereference.rs:110:5:111:21 | Key | +| dereference.rs:136:19:136:25 | ref_key | TRef | {EXTERNAL LOCATION} | & | +| dereference.rs:136:19:136:25 | ref_key | TRef.TRef | dereference.rs:110:5:111:21 | Key | | dereference.rs:138:9:138:18 | key_to_key | | {EXTERNAL LOCATION} | HashMap | | dereference.rs:138:9:138:18 | key_to_key | K | {EXTERNAL LOCATION} | & | -| dereference.rs:138:9:138:18 | key_to_key | K.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:138:9:138:18 | key_to_key | K.TRef | dereference.rs:110:5:111:21 | Key | | dereference.rs:138:9:138:18 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | | dereference.rs:138:9:138:18 | key_to_key | V | {EXTERNAL LOCATION} | & | -| dereference.rs:138:9:138:18 | key_to_key | V.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:138:9:138:18 | key_to_key | V.TRef | dereference.rs:110:5:111:21 | Key | | dereference.rs:138:9:138:35 | key_to_key.insert(...) | | {EXTERNAL LOCATION} | Option | | dereference.rs:138:9:138:35 | key_to_key.insert(...) | T | {EXTERNAL LOCATION} | & | -| dereference.rs:138:9:138:35 | key_to_key.insert(...) | T.&T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:138:9:138:35 | key_to_key.insert(...) | T.&T | {EXTERNAL LOCATION} | & | -| dereference.rs:138:9:138:35 | key_to_key.insert(...) | T.&T.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:138:9:138:35 | key_to_key.insert(...) | T.TRef | dereference.rs:110:5:111:21 | Key | +| dereference.rs:138:9:138:35 | key_to_key.insert(...) | T.TRef | {EXTERNAL LOCATION} | & | +| dereference.rs:138:9:138:35 | key_to_key.insert(...) | T.TRef.TRef | dereference.rs:110:5:111:21 | Key | | dereference.rs:138:27:138:29 | key | | {EXTERNAL LOCATION} | & | -| dereference.rs:138:27:138:29 | key | &T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:138:27:138:29 | key | &T | {EXTERNAL LOCATION} | & | -| dereference.rs:138:27:138:29 | key | &T.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:138:27:138:29 | key | TRef | dereference.rs:110:5:111:21 | Key | +| dereference.rs:138:27:138:29 | key | TRef | {EXTERNAL LOCATION} | & | +| dereference.rs:138:27:138:29 | key | TRef.TRef | dereference.rs:110:5:111:21 | Key | | dereference.rs:138:32:138:34 | key | | {EXTERNAL LOCATION} | & | -| dereference.rs:138:32:138:34 | key | &T | dereference.rs:110:5:111:21 | Key | -| dereference.rs:138:32:138:34 | key | &T | {EXTERNAL LOCATION} | & | -| dereference.rs:138:32:138:34 | key | &T.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:138:32:138:34 | key | TRef | dereference.rs:110:5:111:21 | Key | +| dereference.rs:138:32:138:34 | key | TRef | {EXTERNAL LOCATION} | & | +| dereference.rs:138:32:138:34 | key | TRef.TRef | dereference.rs:110:5:111:21 | Key | | dereference.rs:144:16:144:19 | SelfParam | | dereference.rs:143:5:145:5 | Self [trait MyTrait1] | | dereference.rs:151:16:151:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| dereference.rs:151:16:151:19 | SelfParam | &T | dereference.rs:147:5:147:13 | S | +| dereference.rs:151:16:151:19 | SelfParam | TRef | dereference.rs:147:5:147:13 | S | | dereference.rs:151:27:153:9 | { ... } | | dereference.rs:147:5:147:13 | S | | dereference.rs:152:13:152:13 | S | | dereference.rs:147:5:147:13 | S | | dereference.rs:158:16:158:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| dereference.rs:158:16:158:19 | SelfParam | &T | dereference.rs:147:5:147:13 | S | +| dereference.rs:158:16:158:19 | SelfParam | TRef | dereference.rs:147:5:147:13 | S | | dereference.rs:158:29:160:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | dereference.rs:159:13:159:14 | 42 | | {EXTERNAL LOCATION} | i32 | | dereference.rs:159:13:159:14 | 42 | | {EXTERNAL LOCATION} | i64 | @@ -813,12 +813,12 @@ inferType | dereference.rs:164:22:164:24 | arg | | dereference.rs:163:20:163:21 | T1 | | dereference.rs:169:16:169:19 | SelfParam | | dereference.rs:147:5:147:13 | S | | dereference.rs:169:22:169:24 | arg | | {EXTERNAL LOCATION} | & | -| dereference.rs:169:22:169:24 | arg | &T | dereference.rs:147:5:147:13 | S | +| dereference.rs:169:22:169:24 | arg | TRef | dereference.rs:147:5:147:13 | S | | dereference.rs:169:36:171:9 | { ... } | | dereference.rs:147:5:147:13 | S | | dereference.rs:170:13:170:13 | S | | dereference.rs:147:5:147:13 | S | | dereference.rs:176:16:176:19 | SelfParam | | dereference.rs:147:5:147:13 | S | | dereference.rs:176:22:176:24 | arg | | {EXTERNAL LOCATION} | & | -| dereference.rs:176:22:176:24 | arg | &T | dereference.rs:147:5:147:13 | S | +| dereference.rs:176:22:176:24 | arg | TRef | dereference.rs:147:5:147:13 | S | | dereference.rs:176:42:178:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | dereference.rs:177:13:177:14 | 42 | | {EXTERNAL LOCATION} | i32 | | dereference.rs:177:13:177:14 | 42 | | {EXTERNAL LOCATION} | i64 | @@ -826,11 +826,11 @@ inferType | dereference.rs:182:13:182:13 | x | | dereference.rs:147:5:147:13 | S | | dereference.rs:182:13:182:13 | x | | {EXTERNAL LOCATION} | i64 | | dereference.rs:182:17:182:20 | (...) | | {EXTERNAL LOCATION} | & | -| dereference.rs:182:17:182:20 | (...) | &T | dereference.rs:147:5:147:13 | S | +| dereference.rs:182:17:182:20 | (...) | TRef | dereference.rs:147:5:147:13 | S | | dereference.rs:182:17:182:26 | ... .foo() | | dereference.rs:147:5:147:13 | S | | dereference.rs:182:17:182:26 | ... .foo() | | {EXTERNAL LOCATION} | i64 | | dereference.rs:182:18:182:19 | &S | | {EXTERNAL LOCATION} | & | -| dereference.rs:182:18:182:19 | &S | &T | dereference.rs:147:5:147:13 | S | +| dereference.rs:182:18:182:19 | &S | TRef | dereference.rs:147:5:147:13 | S | | dereference.rs:182:19:182:19 | S | | dereference.rs:147:5:147:13 | S | | dereference.rs:183:13:183:13 | y | | dereference.rs:147:5:147:13 | S | | dereference.rs:183:13:183:13 | y | | {EXTERNAL LOCATION} | i64 | @@ -840,11 +840,11 @@ inferType | dereference.rs:184:13:184:13 | z | | dereference.rs:147:5:147:13 | S | | dereference.rs:184:13:184:13 | z | | {EXTERNAL LOCATION} | i64 | | dereference.rs:184:17:184:24 | (...) | | {EXTERNAL LOCATION} | & | -| dereference.rs:184:17:184:24 | (...) | &T | dereference.rs:147:5:147:13 | S | +| dereference.rs:184:17:184:24 | (...) | TRef | dereference.rs:147:5:147:13 | S | | dereference.rs:184:17:184:30 | ... .foo() | | dereference.rs:147:5:147:13 | S | | dereference.rs:184:17:184:30 | ... .foo() | | {EXTERNAL LOCATION} | i64 | | dereference.rs:184:18:184:23 | &mut S | | {EXTERNAL LOCATION} | & | -| dereference.rs:184:18:184:23 | &mut S | &T | dereference.rs:147:5:147:13 | S | +| dereference.rs:184:18:184:23 | &mut S | TRef | dereference.rs:147:5:147:13 | S | | dereference.rs:184:23:184:23 | S | | dereference.rs:147:5:147:13 | S | | dereference.rs:186:13:186:13 | x | | dereference.rs:147:5:147:13 | S | | dereference.rs:186:13:186:13 | x | | {EXTERNAL LOCATION} | i64 | @@ -852,7 +852,7 @@ inferType | dereference.rs:186:17:186:25 | S.bar(...) | | dereference.rs:147:5:147:13 | S | | dereference.rs:186:17:186:25 | S.bar(...) | | {EXTERNAL LOCATION} | i64 | | dereference.rs:186:23:186:24 | &S | | {EXTERNAL LOCATION} | & | -| dereference.rs:186:23:186:24 | &S | &T | dereference.rs:147:5:147:13 | S | +| dereference.rs:186:23:186:24 | &S | TRef | dereference.rs:147:5:147:13 | S | | dereference.rs:186:24:186:24 | S | | dereference.rs:147:5:147:13 | S | | dereference.rs:187:13:187:13 | y | | dereference.rs:147:5:147:13 | S | | dereference.rs:187:13:187:13 | y | | {EXTERNAL LOCATION} | i64 | @@ -860,25 +860,25 @@ inferType | dereference.rs:187:17:187:29 | S.bar(...) | | dereference.rs:147:5:147:13 | S | | dereference.rs:187:17:187:29 | S.bar(...) | | {EXTERNAL LOCATION} | i64 | | dereference.rs:187:23:187:28 | &mut S | | {EXTERNAL LOCATION} | & | -| dereference.rs:187:23:187:28 | &mut S | &T | dereference.rs:147:5:147:13 | S | +| dereference.rs:187:23:187:28 | &mut S | TRef | dereference.rs:147:5:147:13 | S | | dereference.rs:187:28:187:28 | S | | dereference.rs:147:5:147:13 | S | | dereference.rs:196:16:196:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| dereference.rs:196:16:196:20 | SelfParam | &T | dereference.rs:195:5:197:5 | Self [trait Bar] | +| dereference.rs:196:16:196:20 | SelfParam | TRef | dereference.rs:195:5:197:5 | Self [trait Bar] | | dereference.rs:201:16:201:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| dereference.rs:201:16:201:24 | SelfParam | &T | dereference.rs:193:5:193:17 | Foo | +| dereference.rs:201:16:201:24 | SelfParam | TRef | dereference.rs:193:5:193:17 | Foo | | dereference.rs:201:27:203:9 | { ... } | | {EXTERNAL LOCATION} | () | | dereference.rs:202:13:202:39 | MacroExpr | | {EXTERNAL LOCATION} | () | | dereference.rs:202:22:202:38 | "In struct impl!\\n" | | {EXTERNAL LOCATION} | & | -| dereference.rs:202:22:202:38 | "In struct impl!\\n" | &T | {EXTERNAL LOCATION} | str | +| dereference.rs:202:22:202:38 | "In struct impl!\\n" | TRef | {EXTERNAL LOCATION} | str | | dereference.rs:202:22:202:38 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | dereference.rs:202:22:202:38 | MacroBlockExpr | | {EXTERNAL LOCATION} | () | | dereference.rs:202:22:202:38 | { ... } | | {EXTERNAL LOCATION} | () | | dereference.rs:208:16:208:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| dereference.rs:208:16:208:20 | SelfParam | &T | dereference.rs:193:5:193:17 | Foo | +| dereference.rs:208:16:208:20 | SelfParam | TRef | dereference.rs:193:5:193:17 | Foo | | dereference.rs:208:23:210:9 | { ... } | | {EXTERNAL LOCATION} | () | | dereference.rs:209:13:209:38 | MacroExpr | | {EXTERNAL LOCATION} | () | | dereference.rs:209:22:209:37 | "In trait impl!\\n" | | {EXTERNAL LOCATION} | & | -| dereference.rs:209:22:209:37 | "In trait impl!\\n" | &T | {EXTERNAL LOCATION} | str | +| dereference.rs:209:22:209:37 | "In trait impl!\\n" | TRef | {EXTERNAL LOCATION} | str | | dereference.rs:209:22:209:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | dereference.rs:209:22:209:37 | MacroBlockExpr | | {EXTERNAL LOCATION} | () | | dereference.rs:209:22:209:37 | { ... } | | {EXTERNAL LOCATION} | () | @@ -897,53 +897,53 @@ inferType | dereference.rs:226:5:226:26 | ...::test(...) | | {EXTERNAL LOCATION} | () | | dereference.rs:227:5:227:34 | ...::main(...) | | {EXTERNAL LOCATION} | () | | dyn_type.rs:7:10:7:14 | SelfParam | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:7:10:7:14 | SelfParam | &T | dyn_type.rs:5:1:8:1 | Self [trait MyTrait1] | +| dyn_type.rs:7:10:7:14 | SelfParam | TRef | dyn_type.rs:5:1:8:1 | Self [trait MyTrait1] | | dyn_type.rs:12:12:12:16 | SelfParam | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:12:12:12:16 | SelfParam | &T | dyn_type.rs:10:1:13:1 | Self [trait GenericGet] | +| dyn_type.rs:12:12:12:16 | SelfParam | TRef | dyn_type.rs:10:1:13:1 | Self [trait GenericGet] | | dyn_type.rs:18:12:18:16 | SelfParam | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:18:12:18:16 | SelfParam | &T | dyn_type.rs:15:1:19:1 | Self [trait AssocTrait] | +| dyn_type.rs:18:12:18:16 | SelfParam | TRef | dyn_type.rs:15:1:19:1 | Self [trait AssocTrait] | | dyn_type.rs:28:10:28:14 | SelfParam | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:28:10:28:14 | SelfParam | &T | dyn_type.rs:21:1:24:1 | MyStruct | +| dyn_type.rs:28:10:28:14 | SelfParam | TRef | dyn_type.rs:21:1:24:1 | MyStruct | | dyn_type.rs:28:27:30:5 | { ... } | | {EXTERNAL LOCATION} | String | | dyn_type.rs:29:9:29:43 | MacroExpr | | {EXTERNAL LOCATION} | String | | dyn_type.rs:29:17:29:30 | "MyTrait1: {}" | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:29:17:29:30 | "MyTrait1: {}" | &T | {EXTERNAL LOCATION} | str | +| dyn_type.rs:29:17:29:30 | "MyTrait1: {}" | TRef | {EXTERNAL LOCATION} | str | | dyn_type.rs:29:17:29:42 | ...::format(...) | | {EXTERNAL LOCATION} | String | | dyn_type.rs:29:17:29:42 | ...::must_use(...) | | {EXTERNAL LOCATION} | String | | dyn_type.rs:29:17:29:42 | MacroBlockExpr | | {EXTERNAL LOCATION} | String | | dyn_type.rs:29:17:29:42 | { ... } | | {EXTERNAL LOCATION} | String | | dyn_type.rs:29:33:29:36 | self | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:29:33:29:36 | self | &T | dyn_type.rs:21:1:24:1 | MyStruct | +| dyn_type.rs:29:33:29:36 | self | TRef | dyn_type.rs:21:1:24:1 | MyStruct | | dyn_type.rs:29:33:29:42 | self.value | | {EXTERNAL LOCATION} | i32 | | dyn_type.rs:40:12:40:16 | SelfParam | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:40:12:40:16 | SelfParam | &T | dyn_type.rs:33:1:36:1 | GenStruct | -| dyn_type.rs:40:12:40:16 | SelfParam | &T.A | dyn_type.rs:38:6:38:21 | A | +| dyn_type.rs:40:12:40:16 | SelfParam | TRef | dyn_type.rs:33:1:36:1 | GenStruct | +| dyn_type.rs:40:12:40:16 | SelfParam | TRef.A | dyn_type.rs:38:6:38:21 | A | | dyn_type.rs:40:24:42:5 | { ... } | | dyn_type.rs:38:6:38:21 | A | | dyn_type.rs:41:9:41:12 | self | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:41:9:41:12 | self | &T | dyn_type.rs:33:1:36:1 | GenStruct | -| dyn_type.rs:41:9:41:12 | self | &T.A | dyn_type.rs:38:6:38:21 | A | +| dyn_type.rs:41:9:41:12 | self | TRef | dyn_type.rs:33:1:36:1 | GenStruct | +| dyn_type.rs:41:9:41:12 | self | TRef.A | dyn_type.rs:38:6:38:21 | A | | dyn_type.rs:41:9:41:18 | self.value | | dyn_type.rs:38:6:38:21 | A | | dyn_type.rs:41:9:41:26 | ... .clone() | | dyn_type.rs:38:6:38:21 | A | | dyn_type.rs:51:12:51:16 | SelfParam | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:51:12:51:16 | SelfParam | &T | dyn_type.rs:33:1:36:1 | GenStruct | -| dyn_type.rs:51:12:51:16 | SelfParam | &T.A | dyn_type.rs:45:6:45:8 | GGP | +| dyn_type.rs:51:12:51:16 | SelfParam | TRef | dyn_type.rs:33:1:36:1 | GenStruct | +| dyn_type.rs:51:12:51:16 | SelfParam | TRef.A | dyn_type.rs:45:6:45:8 | GGP | | dyn_type.rs:51:34:53:5 | { ... } | | {EXTERNAL LOCATION} | (T_2) | -| dyn_type.rs:51:34:53:5 | { ... } | 0(2) | dyn_type.rs:45:6:45:8 | GGP | -| dyn_type.rs:51:34:53:5 | { ... } | 1(2) | {EXTERNAL LOCATION} | bool | +| dyn_type.rs:51:34:53:5 | { ... } | T0 | dyn_type.rs:45:6:45:8 | GGP | +| dyn_type.rs:51:34:53:5 | { ... } | T1 | {EXTERNAL LOCATION} | bool | | dyn_type.rs:52:9:52:34 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | -| dyn_type.rs:52:9:52:34 | TupleExpr | 0(2) | dyn_type.rs:45:6:45:8 | GGP | -| dyn_type.rs:52:9:52:34 | TupleExpr | 1(2) | {EXTERNAL LOCATION} | bool | +| dyn_type.rs:52:9:52:34 | TupleExpr | T0 | dyn_type.rs:45:6:45:8 | GGP | +| dyn_type.rs:52:9:52:34 | TupleExpr | T1 | {EXTERNAL LOCATION} | bool | | dyn_type.rs:52:10:52:13 | self | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:52:10:52:13 | self | &T | dyn_type.rs:33:1:36:1 | GenStruct | -| dyn_type.rs:52:10:52:13 | self | &T.A | dyn_type.rs:45:6:45:8 | GGP | +| dyn_type.rs:52:10:52:13 | self | TRef | dyn_type.rs:33:1:36:1 | GenStruct | +| dyn_type.rs:52:10:52:13 | self | TRef.A | dyn_type.rs:45:6:45:8 | GGP | | dyn_type.rs:52:10:52:19 | self.value | | dyn_type.rs:45:6:45:8 | GGP | | dyn_type.rs:52:10:52:27 | ... .clone() | | dyn_type.rs:45:6:45:8 | GGP | | dyn_type.rs:52:30:52:33 | true | | {EXTERNAL LOCATION} | bool | | dyn_type.rs:56:40:56:40 | a | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:56:40:56:40 | a | &T | dyn_type.rs:56:13:56:37 | G | +| dyn_type.rs:56:40:56:40 | a | TRef | dyn_type.rs:56:13:56:37 | G | | dyn_type.rs:56:52:58:1 | { ... } | | dyn_type.rs:56:10:56:10 | A | | dyn_type.rs:57:5:57:5 | a | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:57:5:57:5 | a | &T | dyn_type.rs:56:13:56:37 | G | +| dyn_type.rs:57:5:57:5 | a | TRef | dyn_type.rs:56:13:56:37 | G | | dyn_type.rs:57:5:57:11 | a.get() | | dyn_type.rs:56:10:56:10 | A | | dyn_type.rs:60:46:60:46 | a | | dyn_type.rs:60:18:60:43 | A | | dyn_type.rs:60:78:62:1 | { ... } | | {EXTERNAL LOCATION} | Box | @@ -960,17 +960,17 @@ inferType | dyn_type.rs:61:14:61:35 | GenStruct {...} | A | dyn_type.rs:60:18:60:43 | A | | dyn_type.rs:61:33:61:33 | a | | dyn_type.rs:60:18:60:43 | A | | dyn_type.rs:64:25:64:27 | obj | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:64:25:64:27 | obj | &T | dyn_type.rs:5:1:8:1 | dyn MyTrait1 | +| dyn_type.rs:64:25:64:27 | obj | TRef | dyn_type.rs:5:1:8:1 | dyn MyTrait1 | | dyn_type.rs:64:45:66:1 | { ... } | | {EXTERNAL LOCATION} | () | | dyn_type.rs:65:9:65:15 | _result | | {EXTERNAL LOCATION} | String | | dyn_type.rs:65:19:65:24 | (...) | | dyn_type.rs:5:1:8:1 | dyn MyTrait1 | | dyn_type.rs:65:19:65:28 | ... .m() | | {EXTERNAL LOCATION} | String | | dyn_type.rs:65:20:65:23 | * ... | | dyn_type.rs:5:1:8:1 | dyn MyTrait1 | | dyn_type.rs:65:21:65:23 | obj | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:65:21:65:23 | obj | &T | dyn_type.rs:5:1:8:1 | dyn MyTrait1 | +| dyn_type.rs:65:21:65:23 | obj | TRef | dyn_type.rs:5:1:8:1 | dyn MyTrait1 | | dyn_type.rs:68:27:68:29 | obj | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:68:27:68:29 | obj | &T | dyn_type.rs:10:1:13:1 | dyn GenericGet | -| dyn_type.rs:68:27:68:29 | obj | &T.dyn(A) | {EXTERNAL LOCATION} | String | +| dyn_type.rs:68:27:68:29 | obj | TRef | dyn_type.rs:10:1:13:1 | dyn GenericGet | +| dyn_type.rs:68:27:68:29 | obj | TRef.dyn(A) | {EXTERNAL LOCATION} | String | | dyn_type.rs:68:57:71:1 | { ... } | | {EXTERNAL LOCATION} | () | | dyn_type.rs:69:9:69:16 | _result1 | | {EXTERNAL LOCATION} | String | | dyn_type.rs:69:20:69:25 | (...) | | dyn_type.rs:10:1:13:1 | dyn GenericGet | @@ -979,13 +979,13 @@ inferType | dyn_type.rs:69:21:69:24 | * ... | | dyn_type.rs:10:1:13:1 | dyn GenericGet | | dyn_type.rs:69:21:69:24 | * ... | dyn(A) | {EXTERNAL LOCATION} | String | | dyn_type.rs:69:22:69:24 | obj | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:69:22:69:24 | obj | &T | dyn_type.rs:10:1:13:1 | dyn GenericGet | -| dyn_type.rs:69:22:69:24 | obj | &T.dyn(A) | {EXTERNAL LOCATION} | String | +| dyn_type.rs:69:22:69:24 | obj | TRef | dyn_type.rs:10:1:13:1 | dyn GenericGet | +| dyn_type.rs:69:22:69:24 | obj | TRef.dyn(A) | {EXTERNAL LOCATION} | String | | dyn_type.rs:70:9:70:16 | _result2 | | {EXTERNAL LOCATION} | String | | dyn_type.rs:70:20:70:29 | get_a(...) | | {EXTERNAL LOCATION} | String | | dyn_type.rs:70:26:70:28 | obj | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:70:26:70:28 | obj | &T | dyn_type.rs:10:1:13:1 | dyn GenericGet | -| dyn_type.rs:70:26:70:28 | obj | &T.dyn(A) | {EXTERNAL LOCATION} | String | +| dyn_type.rs:70:26:70:28 | obj | TRef | dyn_type.rs:10:1:13:1 | dyn GenericGet | +| dyn_type.rs:70:26:70:28 | obj | TRef.dyn(A) | {EXTERNAL LOCATION} | String | | dyn_type.rs:73:26:76:1 | { ... } | | {EXTERNAL LOCATION} | () | | dyn_type.rs:74:9:74:11 | obj | | {EXTERNAL LOCATION} | Box | | dyn_type.rs:74:9:74:11 | obj | A | {EXTERNAL LOCATION} | Global | @@ -1007,96 +1007,96 @@ inferType | dyn_type.rs:75:21:75:23 | obj | T | dyn_type.rs:10:1:13:1 | dyn GenericGet | | dyn_type.rs:75:21:75:23 | obj | T.dyn(A) | {EXTERNAL LOCATION} | bool | | dyn_type.rs:78:24:78:24 | a | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:78:24:78:24 | a | &T | dyn_type.rs:15:1:19:1 | dyn AssocTrait | -| dyn_type.rs:78:24:78:24 | a | &T.dyn(AP) | dyn_type.rs:78:21:78:21 | B | -| dyn_type.rs:78:24:78:24 | a | &T.dyn(GP) | dyn_type.rs:78:18:78:18 | A | +| dyn_type.rs:78:24:78:24 | a | TRef | dyn_type.rs:15:1:19:1 | dyn AssocTrait | +| dyn_type.rs:78:24:78:24 | a | TRef.dyn(AP) | dyn_type.rs:78:21:78:21 | B | +| dyn_type.rs:78:24:78:24 | a | TRef.dyn(GP) | dyn_type.rs:78:18:78:18 | A | | dyn_type.rs:78:65:80:1 | { ... } | | {EXTERNAL LOCATION} | (T_2) | -| dyn_type.rs:78:65:80:1 | { ... } | 0(2) | dyn_type.rs:78:18:78:18 | A | -| dyn_type.rs:78:65:80:1 | { ... } | 1(2) | dyn_type.rs:78:21:78:21 | B | +| dyn_type.rs:78:65:80:1 | { ... } | T0 | dyn_type.rs:78:18:78:18 | A | +| dyn_type.rs:78:65:80:1 | { ... } | T1 | dyn_type.rs:78:21:78:21 | B | | dyn_type.rs:79:5:79:5 | a | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:79:5:79:5 | a | &T | dyn_type.rs:15:1:19:1 | dyn AssocTrait | -| dyn_type.rs:79:5:79:5 | a | &T.dyn(AP) | dyn_type.rs:78:21:78:21 | B | -| dyn_type.rs:79:5:79:5 | a | &T.dyn(GP) | dyn_type.rs:78:18:78:18 | A | +| dyn_type.rs:79:5:79:5 | a | TRef | dyn_type.rs:15:1:19:1 | dyn AssocTrait | +| dyn_type.rs:79:5:79:5 | a | TRef.dyn(AP) | dyn_type.rs:78:21:78:21 | B | +| dyn_type.rs:79:5:79:5 | a | TRef.dyn(GP) | dyn_type.rs:78:18:78:18 | A | | dyn_type.rs:79:5:79:11 | a.get() | | {EXTERNAL LOCATION} | (T_2) | -| dyn_type.rs:79:5:79:11 | a.get() | 0(2) | dyn_type.rs:78:18:78:18 | A | -| dyn_type.rs:79:5:79:11 | a.get() | 1(2) | dyn_type.rs:78:21:78:21 | B | +| dyn_type.rs:79:5:79:11 | a.get() | T0 | dyn_type.rs:78:18:78:18 | A | +| dyn_type.rs:79:5:79:11 | a.get() | T1 | dyn_type.rs:78:21:78:21 | B | | dyn_type.rs:82:55:82:55 | a | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:82:55:82:55 | a | &T | dyn_type.rs:82:20:82:52 | T | +| dyn_type.rs:82:55:82:55 | a | TRef | dyn_type.rs:82:20:82:52 | T | | dyn_type.rs:82:72:84:1 | { ... } | | {EXTERNAL LOCATION} | (T_2) | -| dyn_type.rs:82:72:84:1 | { ... } | 0(2) | dyn_type.rs:82:14:82:14 | A | -| dyn_type.rs:82:72:84:1 | { ... } | 1(2) | dyn_type.rs:82:17:82:17 | B | +| dyn_type.rs:82:72:84:1 | { ... } | T0 | dyn_type.rs:82:14:82:14 | A | +| dyn_type.rs:82:72:84:1 | { ... } | T1 | dyn_type.rs:82:17:82:17 | B | | dyn_type.rs:83:5:83:5 | a | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:83:5:83:5 | a | &T | dyn_type.rs:82:20:82:52 | T | +| dyn_type.rs:83:5:83:5 | a | TRef | dyn_type.rs:82:20:82:52 | T | | dyn_type.rs:83:5:83:11 | a.get() | | {EXTERNAL LOCATION} | (T_2) | -| dyn_type.rs:83:5:83:11 | a.get() | 0(2) | dyn_type.rs:82:14:82:14 | A | -| dyn_type.rs:83:5:83:11 | a.get() | 1(2) | dyn_type.rs:82:17:82:17 | B | +| dyn_type.rs:83:5:83:11 | a.get() | T0 | dyn_type.rs:82:14:82:14 | A | +| dyn_type.rs:83:5:83:11 | a.get() | T1 | dyn_type.rs:82:17:82:17 | B | | dyn_type.rs:86:20:86:22 | obj | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:86:20:86:22 | obj | &T | dyn_type.rs:15:1:19:1 | dyn AssocTrait | -| dyn_type.rs:86:20:86:22 | obj | &T.dyn(AP) | {EXTERNAL LOCATION} | bool | -| dyn_type.rs:86:20:86:22 | obj | &T.dyn(GP) | {EXTERNAL LOCATION} | i64 | +| dyn_type.rs:86:20:86:22 | obj | TRef | dyn_type.rs:15:1:19:1 | dyn AssocTrait | +| dyn_type.rs:86:20:86:22 | obj | TRef.dyn(AP) | {EXTERNAL LOCATION} | bool | +| dyn_type.rs:86:20:86:22 | obj | TRef.dyn(GP) | {EXTERNAL LOCATION} | i64 | | dyn_type.rs:86:58:99:1 | { ... } | | {EXTERNAL LOCATION} | () | | dyn_type.rs:87:9:90:5 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| dyn_type.rs:87:9:90:5 | TuplePat | 0(2) | {EXTERNAL LOCATION} | i64 | -| dyn_type.rs:87:9:90:5 | TuplePat | 1(2) | {EXTERNAL LOCATION} | bool | +| dyn_type.rs:87:9:90:5 | TuplePat | T0 | {EXTERNAL LOCATION} | i64 | +| dyn_type.rs:87:9:90:5 | TuplePat | T1 | {EXTERNAL LOCATION} | bool | | dyn_type.rs:88:9:88:11 | _gp | | {EXTERNAL LOCATION} | i64 | | dyn_type.rs:89:9:89:11 | _ap | | {EXTERNAL LOCATION} | bool | | dyn_type.rs:90:9:90:14 | (...) | | dyn_type.rs:15:1:19:1 | dyn AssocTrait | | dyn_type.rs:90:9:90:14 | (...) | dyn(AP) | {EXTERNAL LOCATION} | bool | | dyn_type.rs:90:9:90:14 | (...) | dyn(GP) | {EXTERNAL LOCATION} | i64 | | dyn_type.rs:90:9:90:20 | ... .get() | | {EXTERNAL LOCATION} | (T_2) | -| dyn_type.rs:90:9:90:20 | ... .get() | 0(2) | {EXTERNAL LOCATION} | i64 | -| dyn_type.rs:90:9:90:20 | ... .get() | 1(2) | {EXTERNAL LOCATION} | bool | +| dyn_type.rs:90:9:90:20 | ... .get() | T0 | {EXTERNAL LOCATION} | i64 | +| dyn_type.rs:90:9:90:20 | ... .get() | T1 | {EXTERNAL LOCATION} | bool | | dyn_type.rs:90:10:90:13 | * ... | | dyn_type.rs:15:1:19:1 | dyn AssocTrait | | dyn_type.rs:90:10:90:13 | * ... | dyn(AP) | {EXTERNAL LOCATION} | bool | | dyn_type.rs:90:10:90:13 | * ... | dyn(GP) | {EXTERNAL LOCATION} | i64 | | dyn_type.rs:90:11:90:13 | obj | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:90:11:90:13 | obj | &T | dyn_type.rs:15:1:19:1 | dyn AssocTrait | -| dyn_type.rs:90:11:90:13 | obj | &T.dyn(AP) | {EXTERNAL LOCATION} | bool | -| dyn_type.rs:90:11:90:13 | obj | &T.dyn(GP) | {EXTERNAL LOCATION} | i64 | +| dyn_type.rs:90:11:90:13 | obj | TRef | dyn_type.rs:15:1:19:1 | dyn AssocTrait | +| dyn_type.rs:90:11:90:13 | obj | TRef.dyn(AP) | {EXTERNAL LOCATION} | bool | +| dyn_type.rs:90:11:90:13 | obj | TRef.dyn(GP) | {EXTERNAL LOCATION} | i64 | | dyn_type.rs:91:9:94:5 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| dyn_type.rs:91:9:94:5 | TuplePat | 0(2) | {EXTERNAL LOCATION} | i64 | -| dyn_type.rs:91:9:94:5 | TuplePat | 1(2) | {EXTERNAL LOCATION} | bool | +| dyn_type.rs:91:9:94:5 | TuplePat | T0 | {EXTERNAL LOCATION} | i64 | +| dyn_type.rs:91:9:94:5 | TuplePat | T1 | {EXTERNAL LOCATION} | bool | | dyn_type.rs:92:9:92:11 | _gp | | {EXTERNAL LOCATION} | i64 | | dyn_type.rs:93:9:93:11 | _ap | | {EXTERNAL LOCATION} | bool | | dyn_type.rs:94:9:94:26 | assoc_dyn_get(...) | | {EXTERNAL LOCATION} | (T_2) | -| dyn_type.rs:94:9:94:26 | assoc_dyn_get(...) | 0(2) | {EXTERNAL LOCATION} | i64 | -| dyn_type.rs:94:9:94:26 | assoc_dyn_get(...) | 1(2) | {EXTERNAL LOCATION} | bool | +| dyn_type.rs:94:9:94:26 | assoc_dyn_get(...) | T0 | {EXTERNAL LOCATION} | i64 | +| dyn_type.rs:94:9:94:26 | assoc_dyn_get(...) | T1 | {EXTERNAL LOCATION} | bool | | dyn_type.rs:94:23:94:25 | obj | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:94:23:94:25 | obj | &T | dyn_type.rs:15:1:19:1 | dyn AssocTrait | -| dyn_type.rs:94:23:94:25 | obj | &T.dyn(AP) | {EXTERNAL LOCATION} | bool | -| dyn_type.rs:94:23:94:25 | obj | &T.dyn(GP) | {EXTERNAL LOCATION} | i64 | +| dyn_type.rs:94:23:94:25 | obj | TRef | dyn_type.rs:15:1:19:1 | dyn AssocTrait | +| dyn_type.rs:94:23:94:25 | obj | TRef.dyn(AP) | {EXTERNAL LOCATION} | bool | +| dyn_type.rs:94:23:94:25 | obj | TRef.dyn(GP) | {EXTERNAL LOCATION} | i64 | | dyn_type.rs:95:9:98:5 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| dyn_type.rs:95:9:98:5 | TuplePat | 0(2) | {EXTERNAL LOCATION} | i64 | -| dyn_type.rs:95:9:98:5 | TuplePat | 1(2) | {EXTERNAL LOCATION} | bool | +| dyn_type.rs:95:9:98:5 | TuplePat | T0 | {EXTERNAL LOCATION} | i64 | +| dyn_type.rs:95:9:98:5 | TuplePat | T1 | {EXTERNAL LOCATION} | bool | | dyn_type.rs:96:9:96:11 | _gp | | {EXTERNAL LOCATION} | i64 | | dyn_type.rs:97:9:97:11 | _ap | | {EXTERNAL LOCATION} | bool | | dyn_type.rs:98:9:98:22 | assoc_get(...) | | {EXTERNAL LOCATION} | (T_2) | -| dyn_type.rs:98:9:98:22 | assoc_get(...) | 0(2) | {EXTERNAL LOCATION} | i64 | -| dyn_type.rs:98:9:98:22 | assoc_get(...) | 1(2) | {EXTERNAL LOCATION} | bool | +| dyn_type.rs:98:9:98:22 | assoc_get(...) | T0 | {EXTERNAL LOCATION} | i64 | +| dyn_type.rs:98:9:98:22 | assoc_get(...) | T1 | {EXTERNAL LOCATION} | bool | | dyn_type.rs:98:19:98:21 | obj | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:98:19:98:21 | obj | &T | dyn_type.rs:15:1:19:1 | dyn AssocTrait | -| dyn_type.rs:98:19:98:21 | obj | &T.dyn(AP) | {EXTERNAL LOCATION} | bool | -| dyn_type.rs:98:19:98:21 | obj | &T.dyn(GP) | {EXTERNAL LOCATION} | i64 | +| dyn_type.rs:98:19:98:21 | obj | TRef | dyn_type.rs:15:1:19:1 | dyn AssocTrait | +| dyn_type.rs:98:19:98:21 | obj | TRef.dyn(AP) | {EXTERNAL LOCATION} | bool | +| dyn_type.rs:98:19:98:21 | obj | TRef.dyn(GP) | {EXTERNAL LOCATION} | i64 | | dyn_type.rs:101:15:108:1 | { ... } | | {EXTERNAL LOCATION} | () | | dyn_type.rs:102:5:102:49 | test_basic_dyn_trait(...) | | {EXTERNAL LOCATION} | () | | dyn_type.rs:102:26:102:48 | &... | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:102:26:102:48 | &... | &T | dyn_type.rs:21:1:24:1 | MyStruct | +| dyn_type.rs:102:26:102:48 | &... | TRef | dyn_type.rs:21:1:24:1 | MyStruct | | dyn_type.rs:102:27:102:48 | MyStruct {...} | | dyn_type.rs:21:1:24:1 | MyStruct | | dyn_type.rs:102:45:102:46 | 42 | | {EXTERNAL LOCATION} | i32 | | dyn_type.rs:103:5:105:6 | test_generic_dyn_trait(...) | | {EXTERNAL LOCATION} | () | | dyn_type.rs:103:28:105:5 | &... | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:103:28:105:5 | &... | &T | dyn_type.rs:33:1:36:1 | GenStruct | -| dyn_type.rs:103:28:105:5 | &... | &T.A | {EXTERNAL LOCATION} | String | +| dyn_type.rs:103:28:105:5 | &... | TRef | dyn_type.rs:33:1:36:1 | GenStruct | +| dyn_type.rs:103:28:105:5 | &... | TRef.A | {EXTERNAL LOCATION} | String | | dyn_type.rs:103:29:105:5 | GenStruct {...} | | dyn_type.rs:33:1:36:1 | GenStruct | | dyn_type.rs:103:29:105:5 | GenStruct {...} | A | {EXTERNAL LOCATION} | String | | dyn_type.rs:104:16:104:17 | "" | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:104:16:104:17 | "" | &T | {EXTERNAL LOCATION} | str | +| dyn_type.rs:104:16:104:17 | "" | TRef | {EXTERNAL LOCATION} | str | | dyn_type.rs:104:16:104:29 | "".to_string() | | {EXTERNAL LOCATION} | String | | dyn_type.rs:106:5:106:25 | test_poly_dyn_trait(...) | | {EXTERNAL LOCATION} | () | | dyn_type.rs:107:5:107:46 | test_assoc_type(...) | | {EXTERNAL LOCATION} | () | | dyn_type.rs:107:21:107:45 | &... | | {EXTERNAL LOCATION} | & | -| dyn_type.rs:107:21:107:45 | &... | &T | dyn_type.rs:33:1:36:1 | GenStruct | -| dyn_type.rs:107:21:107:45 | &... | &T.A | {EXTERNAL LOCATION} | i32 | +| dyn_type.rs:107:21:107:45 | &... | TRef | dyn_type.rs:33:1:36:1 | GenStruct | +| dyn_type.rs:107:21:107:45 | &... | TRef.A | {EXTERNAL LOCATION} | i32 | | dyn_type.rs:107:22:107:45 | GenStruct {...} | | dyn_type.rs:33:1:36:1 | GenStruct | | dyn_type.rs:107:22:107:45 | GenStruct {...} | A | {EXTERNAL LOCATION} | i32 | | dyn_type.rs:107:41:107:43 | 100 | | {EXTERNAL LOCATION} | i32 | @@ -1135,26 +1135,26 @@ inferType | invalid/main.rs:47:17:47:21 | ... + ... | | invalid/main.rs:21:5:22:20 | Num | | invalid/main.rs:47:21:47:21 | b | | invalid/main.rs:21:5:22:20 | Num | | invalid/main.rs:57:19:57:23 | SelfParam | | {EXTERNAL LOCATION} | & | -| invalid/main.rs:57:19:57:23 | SelfParam | &T | invalid/main.rs:56:5:58:5 | Self [trait Clone1] | +| invalid/main.rs:57:19:57:23 | SelfParam | TRef | invalid/main.rs:56:5:58:5 | Self [trait Clone1] | | invalid/main.rs:61:22:61:26 | SelfParam | | {EXTERNAL LOCATION} | & | -| invalid/main.rs:61:22:61:26 | SelfParam | &T | invalid/main.rs:60:5:64:5 | Self [trait Duplicatable] | +| invalid/main.rs:61:22:61:26 | SelfParam | TRef | invalid/main.rs:60:5:64:5 | Self [trait Duplicatable] | | invalid/main.rs:68:19:68:23 | SelfParam | | {EXTERNAL LOCATION} | & | -| invalid/main.rs:68:19:68:23 | SelfParam | &T | invalid/main.rs:53:5:54:14 | S1 | +| invalid/main.rs:68:19:68:23 | SelfParam | TRef | invalid/main.rs:53:5:54:14 | S1 | | invalid/main.rs:68:34:70:9 | { ... } | | invalid/main.rs:53:5:54:14 | S1 | | invalid/main.rs:69:13:69:17 | * ... | | invalid/main.rs:53:5:54:14 | S1 | | invalid/main.rs:69:14:69:17 | self | | {EXTERNAL LOCATION} | & | -| invalid/main.rs:69:14:69:17 | self | &T | invalid/main.rs:53:5:54:14 | S1 | +| invalid/main.rs:69:14:69:17 | self | TRef | invalid/main.rs:53:5:54:14 | S1 | | invalid/main.rs:75:22:75:26 | SelfParam | | {EXTERNAL LOCATION} | & | -| invalid/main.rs:75:22:75:26 | SelfParam | &T | invalid/main.rs:53:5:54:14 | S1 | +| invalid/main.rs:75:22:75:26 | SelfParam | TRef | invalid/main.rs:53:5:54:14 | S1 | | invalid/main.rs:75:37:77:9 | { ... } | | invalid/main.rs:53:5:54:14 | S1 | | invalid/main.rs:76:13:76:17 | * ... | | invalid/main.rs:53:5:54:14 | S1 | | invalid/main.rs:76:14:76:17 | self | | {EXTERNAL LOCATION} | & | -| invalid/main.rs:76:14:76:17 | self | &T | invalid/main.rs:53:5:54:14 | S1 | +| invalid/main.rs:76:14:76:17 | self | TRef | invalid/main.rs:53:5:54:14 | S1 | | invalid/main.rs:83:22:83:26 | SelfParam | | {EXTERNAL LOCATION} | & | -| invalid/main.rs:83:22:83:26 | SelfParam | &T | invalid/main.rs:81:10:81:18 | T | +| invalid/main.rs:83:22:83:26 | SelfParam | TRef | invalid/main.rs:81:10:81:18 | T | | invalid/main.rs:83:37:85:9 | { ... } | | invalid/main.rs:81:10:81:18 | T | | invalid/main.rs:84:13:84:16 | self | | {EXTERNAL LOCATION} | & | -| invalid/main.rs:84:13:84:16 | self | &T | invalid/main.rs:81:10:81:18 | T | +| invalid/main.rs:84:13:84:16 | self | TRef | invalid/main.rs:81:10:81:18 | T | | invalid/main.rs:84:13:84:25 | self.clone1() | | invalid/main.rs:81:10:81:18 | T | | invalid/main.rs:88:33:92:5 | { ... } | | {EXTERNAL LOCATION} | () | | invalid/main.rs:91:13:91:13 | x | | invalid/main.rs:53:5:54:14 | S1 | @@ -1165,7 +1165,7 @@ inferType | main.rs:26:17:26:32 | MyThing {...} | | main.rs:5:5:8:5 | MyThing | | main.rs:26:30:26:30 | S | | main.rs:3:5:4:13 | S | | main.rs:27:18:27:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:27:18:27:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:27:18:27:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:27:18:27:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:27:18:27:28 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:27:26:27:26 | x | | main.rs:5:5:8:5 | MyThing | @@ -1178,7 +1178,7 @@ inferType | main.rs:31:17:31:17 | x | A | {EXTERNAL LOCATION} | bool | | main.rs:31:17:31:19 | x.a | | {EXTERNAL LOCATION} | bool | | main.rs:32:18:32:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:32:18:32:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:32:18:32:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:32:18:32:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:32:18:32:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:32:26:32:26 | a | | {EXTERNAL LOCATION} | bool | @@ -1189,7 +1189,7 @@ inferType | main.rs:37:17:37:42 | GenericThing::<...> {...} | A | main.rs:3:5:4:13 | S | | main.rs:37:40:37:40 | S | | main.rs:3:5:4:13 | S | | main.rs:38:18:38:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:38:18:38:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:38:18:38:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:38:18:38:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:38:18:38:28 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:38:26:38:26 | x | | main.rs:16:5:19:5 | GenericThing | @@ -1201,7 +1201,7 @@ inferType | main.rs:41:17:41:37 | GenericThing {...} | A | main.rs:3:5:4:13 | S | | main.rs:41:35:41:35 | S | | main.rs:3:5:4:13 | S | | main.rs:42:18:42:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:42:18:42:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:42:18:42:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:42:18:42:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:42:18:42:28 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:42:26:42:26 | x | | main.rs:16:5:19:5 | GenericThing | @@ -1212,7 +1212,7 @@ inferType | main.rs:47:16:47:33 | ...::MyNone(...) | | main.rs:10:5:14:5 | MyOption | | main.rs:47:16:47:33 | ...::MyNone(...) | T | main.rs:3:5:4:13 | S | | main.rs:49:18:49:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:49:18:49:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:49:18:49:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:49:18:49:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:49:18:49:28 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:49:26:49:26 | x | | main.rs:21:5:23:5 | OptionS | @@ -1227,7 +1227,7 @@ inferType | main.rs:53:16:53:33 | ...::MyNone(...) | | main.rs:10:5:14:5 | MyOption | | main.rs:53:16:53:33 | ...::MyNone(...) | T | main.rs:3:5:4:13 | S | | main.rs:55:18:55:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:55:18:55:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:55:18:55:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:55:18:55:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:55:18:55:28 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:55:26:55:26 | x | | main.rs:16:5:19:5 | GenericThing | @@ -1251,7 +1251,7 @@ inferType | main.rs:61:30:61:32 | x.a | | main.rs:10:5:14:5 | MyOption | | main.rs:61:30:61:32 | x.a | T | main.rs:3:5:4:13 | S | | main.rs:62:18:62:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:62:18:62:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:62:18:62:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:62:18:62:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:62:18:62:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:62:26:62:26 | a | | main.rs:10:5:14:5 | MyOption | @@ -1267,7 +1267,7 @@ inferType | main.rs:80:13:80:16 | self | | main.rs:72:5:72:21 | Foo | | main.rs:84:23:89:5 | { ... } | | main.rs:72:5:72:21 | Foo | | main.rs:85:18:85:33 | "main.rs::m1::f\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:85:18:85:33 | "main.rs::m1::f\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:85:18:85:33 | "main.rs::m1::f\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:85:18:85:33 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:85:18:85:33 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:86:13:86:13 | x | | main.rs:72:5:72:21 | Foo | @@ -1279,7 +1279,7 @@ inferType | main.rs:91:22:91:22 | y | | main.rs:72:5:72:21 | Foo | | main.rs:91:37:95:5 | { ... } | | main.rs:72:5:72:21 | Foo | | main.rs:92:18:92:33 | "main.rs::m1::g\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:92:18:92:33 | "main.rs::m1::g\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:92:18:92:33 | "main.rs::m1::g\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:92:18:92:33 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:92:18:92:33 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:93:9:93:9 | x | | main.rs:72:5:72:21 | Foo | @@ -1305,17 +1305,17 @@ inferType | main.rs:120:17:120:40 | ...::trait_method(...) | | {EXTERNAL LOCATION} | bool | | main.rs:120:39:120:39 | y | | main.rs:99:5:102:5 | MyThing | | main.rs:130:25:130:29 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:130:25:130:29 | SelfParam | &T | main.rs:128:9:133:9 | Self [trait Foo] | +| main.rs:130:25:130:29 | SelfParam | TRef | main.rs:128:9:133:9 | Self [trait Foo] | | main.rs:130:32:132:13 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:131:26:131:31 | "foo!\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:131:26:131:31 | "foo!\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:131:26:131:31 | "foo!\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:131:26:131:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:131:26:131:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:137:25:137:29 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:137:25:137:29 | SelfParam | &T | main.rs:135:9:140:9 | Self [trait Bar] | +| main.rs:137:25:137:29 | SelfParam | TRef | main.rs:135:9:140:9 | Self [trait Bar] | | main.rs:137:32:139:13 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:138:26:138:31 | "bar!\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:138:26:138:31 | "bar!\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:138:26:138:31 | "bar!\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:138:26:138:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:138:26:138:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:149:15:170:5 | { ... } | | {EXTERNAL LOCATION} | () | @@ -1333,11 +1333,11 @@ inferType | main.rs:163:9:169:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:167:13:167:29 | ...::a_method(...) | | {EXTERNAL LOCATION} | () | | main.rs:167:27:167:28 | &x | | {EXTERNAL LOCATION} | & | -| main.rs:167:27:167:28 | &x | &T | main.rs:142:9:142:21 | X | +| main.rs:167:27:167:28 | &x | TRef | main.rs:142:9:142:21 | X | | main.rs:167:28:167:28 | x | | main.rs:142:9:142:21 | X | | main.rs:168:13:168:29 | ...::a_method(...) | | {EXTERNAL LOCATION} | () | | main.rs:168:27:168:28 | &x | | {EXTERNAL LOCATION} | & | -| main.rs:168:27:168:28 | &x | &T | main.rs:142:9:142:21 | X | +| main.rs:168:27:168:28 | &x | TRef | main.rs:142:9:142:21 | X | | main.rs:168:28:168:28 | x | | main.rs:142:9:142:21 | X | | main.rs:186:15:186:18 | SelfParam | | main.rs:174:5:177:5 | MyThing | | main.rs:186:15:186:18 | SelfParam | A | main.rs:179:5:180:14 | S1 | @@ -1372,28 +1372,28 @@ inferType | main.rs:206:17:206:33 | MyThing {...} | A | main.rs:181:5:182:14 | S2 | | main.rs:206:30:206:31 | S2 | | main.rs:181:5:182:14 | S2 | | main.rs:209:18:209:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:209:18:209:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:209:18:209:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:209:18:209:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:209:18:209:28 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:209:26:209:26 | x | | main.rs:174:5:177:5 | MyThing | | main.rs:209:26:209:26 | x | A | main.rs:179:5:180:14 | S1 | | main.rs:209:26:209:28 | x.a | | main.rs:179:5:180:14 | S1 | | main.rs:210:18:210:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:210:18:210:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:210:18:210:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:210:18:210:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:210:18:210:28 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:210:26:210:26 | y | | main.rs:174:5:177:5 | MyThing | | main.rs:210:26:210:26 | y | A | main.rs:181:5:182:14 | S2 | | main.rs:210:26:210:28 | y.a | | main.rs:181:5:182:14 | S2 | | main.rs:212:18:212:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:212:18:212:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:212:18:212:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:212:18:212:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:212:18:212:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:212:26:212:26 | x | | main.rs:174:5:177:5 | MyThing | | main.rs:212:26:212:26 | x | A | main.rs:179:5:180:14 | S1 | | main.rs:212:26:212:31 | x.m1() | | main.rs:179:5:180:14 | S1 | | main.rs:213:18:213:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:213:18:213:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:213:18:213:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:213:18:213:33 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:213:18:213:33 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:213:26:213:26 | y | | main.rs:174:5:177:5 | MyThing | @@ -1412,14 +1412,14 @@ inferType | main.rs:216:17:216:33 | MyThing {...} | A | main.rs:181:5:182:14 | S2 | | main.rs:216:30:216:31 | S2 | | main.rs:181:5:182:14 | S2 | | main.rs:218:18:218:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:218:18:218:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:218:18:218:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:218:18:218:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:218:18:218:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:218:26:218:26 | x | | main.rs:174:5:177:5 | MyThing | | main.rs:218:26:218:26 | x | A | main.rs:179:5:180:14 | S1 | | main.rs:218:26:218:31 | x.m2() | | main.rs:179:5:180:14 | S1 | | main.rs:219:18:219:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:219:18:219:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:219:18:219:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:219:18:219:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:219:18:219:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:219:26:219:26 | y | | main.rs:174:5:177:5 | MyThing | @@ -1562,14 +1562,14 @@ inferType | main.rs:374:24:374:40 | MyThing {...} | A | main.rs:239:5:240:14 | S3 | | main.rs:374:37:374:38 | S3 | | main.rs:239:5:240:14 | S3 | | main.rs:378:18:378:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:378:18:378:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:378:18:378:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:378:18:378:38 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:378:18:378:38 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:378:26:378:33 | thing_s1 | | main.rs:224:5:227:5 | MyThing | | main.rs:378:26:378:33 | thing_s1 | A | main.rs:235:5:236:14 | S1 | | main.rs:378:26:378:38 | thing_s1.m1() | | main.rs:235:5:236:14 | S1 | | main.rs:379:18:379:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:379:18:379:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:379:18:379:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:379:18:379:40 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:379:18:379:40 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:379:26:379:33 | thing_s2 | | main.rs:224:5:227:5 | MyThing | @@ -1582,7 +1582,7 @@ inferType | main.rs:380:22:380:29 | thing_s3 | A | main.rs:239:5:240:14 | S3 | | main.rs:380:22:380:34 | thing_s3.m1() | | main.rs:239:5:240:14 | S3 | | main.rs:381:18:381:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:381:18:381:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:381:18:381:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:381:18:381:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:381:18:381:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:381:26:381:27 | s3 | | main.rs:239:5:240:14 | S3 | @@ -1595,7 +1595,7 @@ inferType | main.rs:383:31:383:32 | S1 | | main.rs:235:5:236:14 | S1 | | main.rs:383:39:383:40 | S1 | | main.rs:235:5:236:14 | S1 | | main.rs:384:18:384:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:384:18:384:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:384:18:384:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:384:18:384:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:384:18:384:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:384:26:384:27 | p1 | | main.rs:229:5:233:5 | MyPair | @@ -1611,7 +1611,7 @@ inferType | main.rs:386:31:386:32 | S1 | | main.rs:235:5:236:14 | S1 | | main.rs:386:39:386:40 | S2 | | main.rs:237:5:238:14 | S2 | | main.rs:387:18:387:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:387:18:387:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:387:18:387:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:387:18:387:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:387:18:387:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:387:26:387:27 | p2 | | main.rs:229:5:233:5 | MyPair | @@ -1631,7 +1631,7 @@ inferType | main.rs:390:30:390:31 | S1 | | main.rs:235:5:236:14 | S1 | | main.rs:391:17:391:18 | S3 | | main.rs:239:5:240:14 | S3 | | main.rs:393:18:393:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:393:18:393:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:393:18:393:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:393:18:393:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:393:18:393:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:393:26:393:27 | p3 | | main.rs:229:5:233:5 | MyPair | @@ -1653,7 +1653,7 @@ inferType | main.rs:397:17:397:17 | a | P2 | main.rs:235:5:236:14 | S1 | | main.rs:397:17:397:23 | a.fst() | | main.rs:235:5:236:14 | S1 | | main.rs:398:18:398:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:398:18:398:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:398:18:398:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:398:18:398:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:398:18:398:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:398:26:398:26 | x | | main.rs:235:5:236:14 | S1 | @@ -1663,7 +1663,7 @@ inferType | main.rs:399:17:399:17 | a | P2 | main.rs:235:5:236:14 | S1 | | main.rs:399:17:399:23 | a.snd() | | main.rs:235:5:236:14 | S1 | | main.rs:400:18:400:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:400:18:400:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:400:18:400:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:400:18:400:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:400:18:400:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:400:26:400:26 | y | | main.rs:235:5:236:14 | S1 | @@ -1681,7 +1681,7 @@ inferType | main.rs:407:17:407:17 | b | P2 | main.rs:235:5:236:14 | S1 | | main.rs:407:17:407:23 | b.fst() | | main.rs:235:5:236:14 | S1 | | main.rs:408:18:408:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:408:18:408:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:408:18:408:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:408:18:408:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:408:18:408:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:408:26:408:26 | x | | main.rs:235:5:236:14 | S1 | @@ -1691,7 +1691,7 @@ inferType | main.rs:409:17:409:17 | b | P2 | main.rs:235:5:236:14 | S1 | | main.rs:409:17:409:23 | b.snd() | | main.rs:237:5:238:14 | S2 | | main.rs:410:18:410:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:410:18:410:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:410:18:410:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:410:18:410:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:410:18:410:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:410:26:410:26 | y | | main.rs:237:5:238:14 | S2 | @@ -1700,7 +1700,7 @@ inferType | main.rs:414:31:414:38 | thing_s1 | | main.rs:224:5:227:5 | MyThing | | main.rs:414:31:414:38 | thing_s1 | A | main.rs:235:5:236:14 | S1 | | main.rs:415:18:415:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:415:18:415:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:415:18:415:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:415:18:415:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:415:18:415:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:415:26:415:26 | x | | main.rs:235:5:236:14 | S1 | @@ -1711,7 +1711,7 @@ inferType | main.rs:416:31:416:38 | thing_s2 | | main.rs:224:5:227:5 | MyThing | | main.rs:416:31:416:38 | thing_s2 | A | main.rs:237:5:238:14 | S2 | | main.rs:417:18:417:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:417:18:417:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:417:18:417:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:417:18:417:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:417:18:417:28 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:417:26:417:26 | y | | main.rs:224:5:227:5 | MyThing | @@ -1731,7 +1731,7 @@ inferType | main.rs:421:25:421:25 | a | P1 | main.rs:235:5:236:14 | S1 | | main.rs:421:25:421:25 | a | P2 | main.rs:235:5:236:14 | S1 | | main.rs:422:18:422:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:422:18:422:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:422:18:422:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:422:18:422:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:422:18:422:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:422:26:422:26 | x | | main.rs:235:5:236:14 | S1 | @@ -1741,7 +1741,7 @@ inferType | main.rs:423:25:423:25 | a | P1 | main.rs:235:5:236:14 | S1 | | main.rs:423:25:423:25 | a | P2 | main.rs:235:5:236:14 | S1 | | main.rs:424:18:424:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:424:18:424:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:424:18:424:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:424:18:424:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:424:18:424:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:424:26:424:26 | y | | main.rs:235:5:236:14 | S1 | @@ -1759,7 +1759,7 @@ inferType | main.rs:428:25:428:25 | b | P1 | main.rs:237:5:238:14 | S2 | | main.rs:428:25:428:25 | b | P2 | main.rs:235:5:236:14 | S1 | | main.rs:429:18:429:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:429:18:429:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:429:18:429:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:429:18:429:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:429:18:429:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:429:26:429:26 | x | | main.rs:235:5:236:14 | S1 | @@ -1769,7 +1769,7 @@ inferType | main.rs:430:25:430:25 | b | P1 | main.rs:237:5:238:14 | S2 | | main.rs:430:25:430:25 | b | P2 | main.rs:235:5:236:14 | S1 | | main.rs:431:18:431:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:431:18:431:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:431:18:431:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:431:18:431:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:431:18:431:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:431:26:431:26 | y | | main.rs:237:5:238:14 | S2 | @@ -1852,63 +1852,63 @@ inferType | main.rs:512:48:514:9 | { ... } | | main.rs:446:5:447:14 | S1 | | main.rs:513:13:513:14 | S1 | | main.rs:446:5:447:14 | S1 | | main.rs:521:14:521:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:521:14:521:18 | SelfParam | &T | main.rs:520:5:522:5 | Self [trait OverlappingTrait2] | +| main.rs:521:14:521:18 | SelfParam | TRef | main.rs:520:5:522:5 | Self [trait OverlappingTrait2] | | main.rs:521:21:521:21 | x | | {EXTERNAL LOCATION} | & | -| main.rs:521:21:521:21 | x | &T | main.rs:520:29:520:29 | T | +| main.rs:521:21:521:21 | x | TRef | main.rs:520:29:520:29 | T | | main.rs:526:14:526:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:526:14:526:18 | SelfParam | &T | main.rs:517:5:518:22 | S3 | -| main.rs:526:14:526:18 | SelfParam | &T.T3 | main.rs:524:10:524:10 | T | +| main.rs:526:14:526:18 | SelfParam | TRef | main.rs:517:5:518:22 | S3 | +| main.rs:526:14:526:18 | SelfParam | TRef.T3 | main.rs:524:10:524:10 | T | | main.rs:526:21:526:21 | x | | {EXTERNAL LOCATION} | & | -| main.rs:526:21:526:21 | x | &T | main.rs:524:10:524:10 | T | +| main.rs:526:21:526:21 | x | TRef | main.rs:524:10:524:10 | T | | main.rs:526:37:528:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:526:37:528:9 | { ... } | &T | main.rs:517:5:518:22 | S3 | -| main.rs:526:37:528:9 | { ... } | &T.T3 | main.rs:524:10:524:10 | T | +| main.rs:526:37:528:9 | { ... } | TRef | main.rs:517:5:518:22 | S3 | +| main.rs:526:37:528:9 | { ... } | TRef.T3 | main.rs:524:10:524:10 | T | | main.rs:527:13:527:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:527:13:527:16 | self | &T | main.rs:517:5:518:22 | S3 | -| main.rs:527:13:527:16 | self | &T.T3 | main.rs:524:10:524:10 | T | +| main.rs:527:13:527:16 | self | TRef | main.rs:517:5:518:22 | S3 | +| main.rs:527:13:527:16 | self | TRef.T3 | main.rs:524:10:524:10 | T | | main.rs:533:14:533:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:533:14:533:18 | SelfParam | &T | main.rs:517:5:518:22 | S3 | -| main.rs:533:14:533:18 | SelfParam | &T.T3 | main.rs:531:10:531:10 | T | +| main.rs:533:14:533:18 | SelfParam | TRef | main.rs:517:5:518:22 | S3 | +| main.rs:533:14:533:18 | SelfParam | TRef.T3 | main.rs:531:10:531:10 | T | | main.rs:533:21:533:21 | x | | main.rs:531:10:531:10 | T | | main.rs:533:36:535:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:533:36:535:9 | { ... } | &T | main.rs:517:5:518:22 | S3 | -| main.rs:533:36:535:9 | { ... } | &T.T3 | main.rs:531:10:531:10 | T | +| main.rs:533:36:535:9 | { ... } | TRef | main.rs:517:5:518:22 | S3 | +| main.rs:533:36:535:9 | { ... } | TRef.T3 | main.rs:531:10:531:10 | T | | main.rs:534:13:534:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:534:13:534:16 | self | &T | main.rs:517:5:518:22 | S3 | -| main.rs:534:13:534:16 | self | &T.T3 | main.rs:531:10:531:10 | T | +| main.rs:534:13:534:16 | self | TRef | main.rs:517:5:518:22 | S3 | +| main.rs:534:13:534:16 | self | TRef.T3 | main.rs:531:10:531:10 | T | | main.rs:540:14:540:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:540:14:540:18 | SelfParam | &T | main.rs:538:5:541:5 | Self [trait MyTrait1] | +| main.rs:540:14:540:18 | SelfParam | TRef | main.rs:538:5:541:5 | Self [trait MyTrait1] | | main.rs:540:21:540:22 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:550:14:550:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:550:14:550:18 | SelfParam | &T | main.rs:545:5:546:14 | S4 | +| main.rs:550:14:550:18 | SelfParam | TRef | main.rs:545:5:546:14 | S4 | | main.rs:550:21:550:22 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:560:14:560:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:560:14:560:18 | SelfParam | &T | main.rs:555:5:556:22 | S5 | -| main.rs:560:14:560:18 | SelfParam | &T.T5 | {EXTERNAL LOCATION} | i32 | +| main.rs:560:14:560:18 | SelfParam | TRef | main.rs:555:5:556:22 | S5 | +| main.rs:560:14:560:18 | SelfParam | TRef.T5 | {EXTERNAL LOCATION} | i32 | | main.rs:560:21:560:22 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:569:16:595:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:570:13:570:13 | x | | main.rs:446:5:447:14 | S1 | | main.rs:570:17:570:18 | S1 | | main.rs:446:5:447:14 | S1 | | main.rs:571:18:571:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:571:18:571:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:571:18:571:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:571:18:571:42 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:571:18:571:42 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:571:26:571:26 | x | | main.rs:446:5:447:14 | S1 | | main.rs:571:26:571:42 | x.common_method() | | main.rs:446:5:447:14 | S1 | | main.rs:572:18:572:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:572:18:572:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:572:18:572:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:572:18:572:45 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:572:18:572:45 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:572:26:572:45 | ...::common_method(...) | | main.rs:446:5:447:14 | S1 | | main.rs:572:44:572:44 | x | | main.rs:446:5:447:14 | S1 | | main.rs:573:18:573:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:573:18:573:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:573:18:573:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:573:18:573:44 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:573:18:573:44 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:573:26:573:26 | x | | main.rs:446:5:447:14 | S1 | | main.rs:573:26:573:44 | x.common_method_2() | | main.rs:446:5:447:14 | S1 | | main.rs:574:18:574:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:574:18:574:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:574:18:574:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:574:18:574:47 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:574:18:574:47 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:574:26:574:47 | ...::common_method_2(...) | | main.rs:446:5:447:14 | S1 | @@ -1919,14 +1919,14 @@ inferType | main.rs:576:17:576:22 | S2(...) | T2 | main.rs:446:5:447:14 | S1 | | main.rs:576:20:576:21 | S1 | | main.rs:446:5:447:14 | S1 | | main.rs:577:18:577:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:577:18:577:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:577:18:577:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:577:18:577:42 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:577:18:577:42 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:577:26:577:26 | y | | main.rs:479:5:479:22 | S2 | | main.rs:577:26:577:26 | y | T2 | main.rs:446:5:447:14 | S1 | | main.rs:577:26:577:42 | y.common_method() | | main.rs:446:5:447:14 | S1 | | main.rs:578:18:578:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:578:18:578:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:578:18:578:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:578:18:578:56 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:578:18:578:56 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:578:26:578:56 | ...::common_method(...) | | main.rs:446:5:447:14 | S1 | @@ -1939,14 +1939,14 @@ inferType | main.rs:580:17:580:21 | S2(...) | T2 | {EXTERNAL LOCATION} | i32 | | main.rs:580:20:580:20 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:581:18:581:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:581:18:581:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:581:18:581:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:581:18:581:42 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:581:18:581:42 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:581:26:581:26 | z | | main.rs:479:5:479:22 | S2 | | main.rs:581:26:581:26 | z | T2 | {EXTERNAL LOCATION} | i32 | | main.rs:581:26:581:42 | z.common_method() | | main.rs:446:5:447:14 | S1 | | main.rs:582:18:582:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:582:18:582:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:582:18:582:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:582:18:582:49 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:582:18:582:49 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:582:26:582:49 | ...::common_method(...) | | main.rs:446:5:447:14 | S1 | @@ -1954,7 +1954,7 @@ inferType | main.rs:582:44:582:48 | S2(...) | T2 | {EXTERNAL LOCATION} | i32 | | main.rs:582:47:582:47 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:583:18:583:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:583:18:583:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:583:18:583:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:583:18:583:56 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:583:18:583:56 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:583:26:583:56 | ...::common_method(...) | | main.rs:446:5:447:14 | S1 | @@ -1967,25 +1967,25 @@ inferType | main.rs:585:17:585:22 | S3(...) | T3 | main.rs:446:5:447:14 | S1 | | main.rs:585:20:585:21 | S1 | | main.rs:446:5:447:14 | S1 | | main.rs:586:18:586:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:586:18:586:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:586:18:586:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:586:18:586:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:586:18:586:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:586:26:586:26 | w | | main.rs:517:5:518:22 | S3 | | main.rs:586:26:586:26 | w | T3 | main.rs:446:5:447:14 | S1 | | main.rs:586:26:586:31 | w.m(...) | | {EXTERNAL LOCATION} | & | -| main.rs:586:26:586:31 | w.m(...) | &T | main.rs:517:5:518:22 | S3 | -| main.rs:586:26:586:31 | w.m(...) | &T.T3 | main.rs:446:5:447:14 | S1 | +| main.rs:586:26:586:31 | w.m(...) | TRef | main.rs:517:5:518:22 | S3 | +| main.rs:586:26:586:31 | w.m(...) | TRef.T3 | main.rs:446:5:447:14 | S1 | | main.rs:586:30:586:30 | x | | main.rs:446:5:447:14 | S1 | | main.rs:587:18:587:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:587:18:587:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:587:18:587:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:587:18:587:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:587:18:587:37 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:587:26:587:37 | ...::m(...) | | {EXTERNAL LOCATION} | & | -| main.rs:587:26:587:37 | ...::m(...) | &T | main.rs:517:5:518:22 | S3 | -| main.rs:587:26:587:37 | ...::m(...) | &T.T3 | main.rs:446:5:447:14 | S1 | +| main.rs:587:26:587:37 | ...::m(...) | TRef | main.rs:517:5:518:22 | S3 | +| main.rs:587:26:587:37 | ...::m(...) | TRef.T3 | main.rs:446:5:447:14 | S1 | | main.rs:587:32:587:33 | &w | | {EXTERNAL LOCATION} | & | -| main.rs:587:32:587:33 | &w | &T | main.rs:517:5:518:22 | S3 | -| main.rs:587:32:587:33 | &w | &T.T3 | main.rs:446:5:447:14 | S1 | +| main.rs:587:32:587:33 | &w | TRef | main.rs:517:5:518:22 | S3 | +| main.rs:587:32:587:33 | &w | TRef.T3 | main.rs:446:5:447:14 | S1 | | main.rs:587:33:587:33 | w | | main.rs:517:5:518:22 | S3 | | main.rs:587:33:587:33 | w | T3 | main.rs:446:5:447:14 | S1 | | main.rs:587:36:587:36 | x | | main.rs:446:5:447:14 | S1 | @@ -1993,7 +1993,7 @@ inferType | main.rs:589:9:589:14 | S4.m() | | {EXTERNAL LOCATION} | () | | main.rs:590:9:590:18 | ...::m(...) | | {EXTERNAL LOCATION} | () | | main.rs:590:15:590:17 | &S4 | | {EXTERNAL LOCATION} | & | -| main.rs:590:15:590:17 | &S4 | &T | main.rs:545:5:546:14 | S4 | +| main.rs:590:15:590:17 | &S4 | TRef | main.rs:545:5:546:14 | S4 | | main.rs:590:16:590:17 | S4 | | main.rs:545:5:546:14 | S4 | | main.rs:591:9:591:16 | S5(...) | | main.rs:555:5:556:22 | S5 | | main.rs:591:9:591:16 | S5(...) | T5 | {EXTERNAL LOCATION} | i32 | @@ -2001,8 +2001,8 @@ inferType | main.rs:591:12:591:15 | 0i32 | | {EXTERNAL LOCATION} | i32 | | main.rs:592:9:592:24 | ...::m(...) | | {EXTERNAL LOCATION} | () | | main.rs:592:15:592:23 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:592:15:592:23 | &... | &T | main.rs:555:5:556:22 | S5 | -| main.rs:592:15:592:23 | &... | &T.T5 | {EXTERNAL LOCATION} | i32 | +| main.rs:592:15:592:23 | &... | TRef | main.rs:555:5:556:22 | S5 | +| main.rs:592:15:592:23 | &... | TRef.T5 | {EXTERNAL LOCATION} | i32 | | main.rs:592:16:592:23 | S5(...) | | main.rs:555:5:556:22 | S5 | | main.rs:592:16:592:23 | S5(...) | T5 | {EXTERNAL LOCATION} | i32 | | main.rs:592:19:592:22 | 0i32 | | {EXTERNAL LOCATION} | i32 | @@ -2012,8 +2012,8 @@ inferType | main.rs:593:12:593:15 | true | | {EXTERNAL LOCATION} | bool | | main.rs:594:9:594:24 | ...::m(...) | | {EXTERNAL LOCATION} | () | | main.rs:594:15:594:23 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:594:15:594:23 | &... | &T | main.rs:555:5:556:22 | S5 | -| main.rs:594:15:594:23 | &... | &T.T5 | {EXTERNAL LOCATION} | bool | +| main.rs:594:15:594:23 | &... | TRef | main.rs:555:5:556:22 | S5 | +| main.rs:594:15:594:23 | &... | TRef.T5 | {EXTERNAL LOCATION} | bool | | main.rs:594:16:594:23 | S5(...) | | main.rs:555:5:556:22 | S5 | | main.rs:594:16:594:23 | S5(...) | T5 | {EXTERNAL LOCATION} | bool | | main.rs:594:19:594:22 | true | | {EXTERNAL LOCATION} | bool | @@ -2025,7 +2025,7 @@ inferType | main.rs:621:18:621:18 | x | | main.rs:619:45:619:61 | T | | main.rs:621:18:621:27 | x.method() | | main.rs:619:35:619:42 | I | | main.rs:622:18:622:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:622:18:622:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:622:18:622:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:622:18:622:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:622:18:622:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:622:26:622:27 | s1 | | main.rs:619:35:619:42 | I | @@ -2035,7 +2035,7 @@ inferType | main.rs:627:18:627:18 | x | | main.rs:625:46:625:62 | T | | main.rs:627:18:627:27 | x.method() | | main.rs:625:36:625:43 | I | | main.rs:628:18:628:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:628:18:628:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:628:18:628:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:628:18:628:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:628:18:628:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:628:26:628:27 | s2 | | main.rs:625:36:625:43 | I | @@ -2045,7 +2045,7 @@ inferType | main.rs:632:17:632:17 | x | | main.rs:631:30:631:46 | T | | main.rs:632:17:632:26 | x.method() | | main.rs:601:5:602:14 | S1 | | main.rs:633:18:633:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:633:18:633:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:633:18:633:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:633:18:633:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:633:18:633:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:633:26:633:26 | s | | main.rs:601:5:602:14 | S1 | @@ -2055,7 +2055,7 @@ inferType | main.rs:637:17:637:17 | x | | main.rs:636:34:636:50 | T | | main.rs:637:17:637:26 | x.method() | | main.rs:601:5:602:14 | S1 | | main.rs:638:18:638:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:638:18:638:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:638:18:638:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:638:18:638:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:638:18:638:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:638:26:638:26 | s | | main.rs:601:5:602:14 | S1 | @@ -2065,7 +2065,7 @@ inferType | main.rs:645:17:645:17 | x | | main.rs:641:40:641:40 | T | | main.rs:645:17:645:26 | x.method() | | main.rs:601:5:602:14 | S1 | | main.rs:646:18:646:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:646:18:646:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:646:18:646:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:646:18:646:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:646:18:646:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:646:26:646:26 | s | | main.rs:601:5:602:14 | S1 | @@ -2090,7 +2090,7 @@ inferType | main.rs:667:18:667:18 | y | | main.rs:664:41:664:55 | T | | main.rs:667:18:667:24 | y.snd() | | main.rs:604:5:605:14 | S2 | | main.rs:668:18:668:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:668:18:668:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:668:18:668:29 | "{:?}, {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:668:18:668:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:668:18:668:37 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:668:32:668:33 | s1 | | main.rs:601:5:602:14 | S1 | @@ -2105,7 +2105,7 @@ inferType | main.rs:674:18:674:18 | y | | main.rs:671:52:671:66 | T | | main.rs:674:18:674:24 | y.snd() | | main.rs:671:41:671:49 | T2 | | main.rs:675:18:675:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:675:18:675:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:675:18:675:29 | "{:?}, {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:675:18:675:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:675:18:675:37 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:675:32:675:33 | s1 | | main.rs:601:5:602:14 | S1 | @@ -2120,7 +2120,7 @@ inferType | main.rs:681:18:681:18 | y | | main.rs:678:41:678:47 | T | | main.rs:681:18:681:24 | y.snd() | | {EXTERNAL LOCATION} | i64 | | main.rs:682:18:682:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:682:18:682:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:682:18:682:29 | "{:?}, {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:682:18:682:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:682:18:682:37 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:682:32:682:33 | s1 | | {EXTERNAL LOCATION} | bool | @@ -2135,18 +2135,18 @@ inferType | main.rs:688:18:688:18 | y | | main.rs:685:41:685:51 | T | | main.rs:688:18:688:24 | y.snd() | | {EXTERNAL LOCATION} | i64 | | main.rs:689:18:689:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:689:18:689:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:689:18:689:29 | "{:?}, {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:689:18:689:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:689:18:689:37 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:689:32:689:33 | s1 | | {EXTERNAL LOCATION} | u8 | | main.rs:689:36:689:37 | s2 | | {EXTERNAL LOCATION} | i64 | | main.rs:697:18:697:22 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:697:18:697:22 | SelfParam | &T | main.rs:694:5:698:5 | Self [trait TraitWithSelfTp] | +| main.rs:697:18:697:22 | SelfParam | TRef | main.rs:694:5:698:5 | Self [trait TraitWithSelfTp] | | main.rs:700:40:700:44 | thing | | {EXTERNAL LOCATION} | & | -| main.rs:700:40:700:44 | thing | &T | main.rs:700:17:700:37 | T | +| main.rs:700:40:700:44 | thing | TRef | main.rs:700:17:700:37 | T | | main.rs:700:56:702:5 | { ... } | | main.rs:700:14:700:14 | A | | main.rs:701:9:701:13 | thing | | {EXTERNAL LOCATION} | & | -| main.rs:701:9:701:13 | thing | &T | main.rs:700:17:700:37 | T | +| main.rs:701:9:701:13 | thing | TRef | main.rs:700:17:700:37 | T | | main.rs:701:9:701:21 | thing.get_a() | | main.rs:700:14:700:14 | A | | main.rs:705:44:705:48 | thing | | main.rs:705:24:705:41 | S | | main.rs:705:61:708:5 | { ... } | | {EXTERNAL LOCATION} | i64 | @@ -2158,23 +2158,23 @@ inferType | main.rs:707:9:707:9 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:707:9:707:9 | 0 | | {EXTERNAL LOCATION} | i64 | | main.rs:713:55:713:59 | thing | | {EXTERNAL LOCATION} | & | -| main.rs:713:55:713:59 | thing | &T | main.rs:713:25:713:52 | S | +| main.rs:713:55:713:59 | thing | TRef | main.rs:713:25:713:52 | S | | main.rs:713:66:716:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:715:13:715:15 | _ms | | {EXTERNAL LOCATION} | Option | | main.rs:715:13:715:15 | _ms | T | main.rs:713:25:713:52 | S | | main.rs:715:19:715:30 | get_a(...) | | {EXTERNAL LOCATION} | Option | | main.rs:715:19:715:30 | get_a(...) | T | main.rs:713:25:713:52 | S | | main.rs:715:25:715:29 | thing | | {EXTERNAL LOCATION} | & | -| main.rs:715:25:715:29 | thing | &T | main.rs:713:25:713:52 | S | +| main.rs:715:25:715:29 | thing | TRef | main.rs:713:25:713:52 | S | | main.rs:724:18:724:22 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:724:18:724:22 | SelfParam | &T | main.rs:718:5:720:5 | MyStruct | +| main.rs:724:18:724:22 | SelfParam | TRef | main.rs:718:5:720:5 | MyStruct | | main.rs:724:41:726:9 | { ... } | | {EXTERNAL LOCATION} | Option | | main.rs:724:41:726:9 | { ... } | T | main.rs:718:5:720:5 | MyStruct | | main.rs:725:13:725:48 | Some(...) | | {EXTERNAL LOCATION} | Option | | main.rs:725:13:725:48 | Some(...) | T | main.rs:718:5:720:5 | MyStruct | | main.rs:725:18:725:47 | MyStruct {...} | | main.rs:718:5:720:5 | MyStruct | | main.rs:725:36:725:39 | self | | {EXTERNAL LOCATION} | & | -| main.rs:725:36:725:39 | self | &T | main.rs:718:5:720:5 | MyStruct | +| main.rs:725:36:725:39 | self | TRef | main.rs:718:5:720:5 | MyStruct | | main.rs:725:36:725:45 | self.value | | {EXTERNAL LOCATION} | i32 | | main.rs:731:19:734:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:732:13:732:13 | s | | main.rs:718:5:720:5 | MyStruct | @@ -2185,7 +2185,7 @@ inferType | main.rs:733:19:733:27 | get_a(...) | | {EXTERNAL LOCATION} | Option | | main.rs:733:19:733:27 | get_a(...) | T | main.rs:718:5:720:5 | MyStruct | | main.rs:733:25:733:26 | &s | | {EXTERNAL LOCATION} | & | -| main.rs:733:25:733:26 | &s | &T | main.rs:718:5:720:5 | MyStruct | +| main.rs:733:25:733:26 | &s | TRef | main.rs:718:5:720:5 | MyStruct | | main.rs:733:26:733:26 | s | | main.rs:718:5:720:5 | MyStruct | | main.rs:749:15:749:18 | SelfParam | | main.rs:748:5:759:5 | Self [trait MyTrait] | | main.rs:751:15:751:18 | SelfParam | | main.rs:748:5:759:5 | Self [trait MyTrait] | @@ -2288,14 +2288,14 @@ inferType | main.rs:832:17:832:33 | MyThing {...} | T | main.rs:745:5:746:14 | S2 | | main.rs:832:30:832:31 | S2 | | main.rs:745:5:746:14 | S2 | | main.rs:834:18:834:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:834:18:834:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:834:18:834:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:834:18:834:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:834:18:834:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:834:26:834:26 | x | | main.rs:738:5:741:5 | MyThing | | main.rs:834:26:834:26 | x | T | main.rs:743:5:744:14 | S1 | | main.rs:834:26:834:31 | x.m1() | | main.rs:743:5:744:14 | S1 | | main.rs:835:18:835:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:835:18:835:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:835:18:835:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:835:18:835:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:835:18:835:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:835:26:835:26 | y | | main.rs:738:5:741:5 | MyThing | @@ -2312,14 +2312,14 @@ inferType | main.rs:838:17:838:33 | MyThing {...} | T | main.rs:745:5:746:14 | S2 | | main.rs:838:30:838:31 | S2 | | main.rs:745:5:746:14 | S2 | | main.rs:840:18:840:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:840:18:840:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:840:18:840:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:840:18:840:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:840:18:840:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:840:26:840:26 | x | | main.rs:738:5:741:5 | MyThing | | main.rs:840:26:840:26 | x | T | main.rs:743:5:744:14 | S1 | | main.rs:840:26:840:31 | x.m2() | | main.rs:743:5:744:14 | S1 | | main.rs:841:18:841:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:841:18:841:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:841:18:841:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:841:18:841:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:841:18:841:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:841:26:841:26 | y | | main.rs:738:5:741:5 | MyThing | @@ -2340,7 +2340,7 @@ inferType | main.rs:846:31:846:32 | x2 | | main.rs:738:5:741:5 | MyThing | | main.rs:846:31:846:32 | x2 | T | main.rs:743:5:744:14 | S1 | | main.rs:847:18:847:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:847:18:847:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:847:18:847:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:847:18:847:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:847:18:847:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:847:26:847:26 | a | | main.rs:743:5:744:14 | S1 | @@ -2349,7 +2349,7 @@ inferType | main.rs:848:33:848:34 | x2 | | main.rs:738:5:741:5 | MyThing | | main.rs:848:33:848:34 | x2 | T | main.rs:743:5:744:14 | S1 | | main.rs:849:18:849:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:849:18:849:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:849:18:849:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:849:18:849:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:849:18:849:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:849:26:849:26 | a | | main.rs:743:5:744:14 | S1 | @@ -2358,7 +2358,7 @@ inferType | main.rs:850:33:850:34 | x2 | | main.rs:738:5:741:5 | MyThing | | main.rs:850:33:850:34 | x2 | T | main.rs:743:5:744:14 | S1 | | main.rs:851:18:851:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:851:18:851:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:851:18:851:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:851:18:851:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:851:18:851:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:851:26:851:26 | a | | main.rs:743:5:744:14 | S1 | @@ -2367,7 +2367,7 @@ inferType | main.rs:852:31:852:32 | y2 | | main.rs:738:5:741:5 | MyThing | | main.rs:852:31:852:32 | y2 | T | main.rs:745:5:746:14 | S2 | | main.rs:853:18:853:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:853:18:853:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:853:18:853:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:853:18:853:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:853:18:853:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:853:26:853:26 | a | | main.rs:745:5:746:14 | S2 | @@ -2376,7 +2376,7 @@ inferType | main.rs:854:33:854:34 | y2 | | main.rs:738:5:741:5 | MyThing | | main.rs:854:33:854:34 | y2 | T | main.rs:745:5:746:14 | S2 | | main.rs:855:18:855:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:855:18:855:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:855:18:855:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:855:18:855:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:855:18:855:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:855:26:855:26 | a | | main.rs:745:5:746:14 | S2 | @@ -2385,7 +2385,7 @@ inferType | main.rs:856:33:856:34 | y2 | | main.rs:738:5:741:5 | MyThing | | main.rs:856:33:856:34 | y2 | T | main.rs:745:5:746:14 | S2 | | main.rs:857:18:857:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:857:18:857:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:857:18:857:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:857:18:857:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:857:18:857:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:857:26:857:26 | a | | main.rs:745:5:746:14 | S2 | @@ -2394,7 +2394,7 @@ inferType | main.rs:858:36:858:37 | x2 | | main.rs:738:5:741:5 | MyThing | | main.rs:858:36:858:37 | x2 | T | main.rs:743:5:744:14 | S1 | | main.rs:859:18:859:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:859:18:859:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:859:18:859:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:859:18:859:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:859:18:859:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:859:26:859:26 | a | | main.rs:743:5:744:14 | S1 | @@ -2403,7 +2403,7 @@ inferType | main.rs:860:36:860:37 | x2 | | main.rs:738:5:741:5 | MyThing | | main.rs:860:36:860:37 | x2 | T | main.rs:743:5:744:14 | S1 | | main.rs:861:18:861:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:861:18:861:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:861:18:861:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:861:18:861:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:861:18:861:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:861:26:861:26 | a | | main.rs:743:5:744:14 | S1 | @@ -2412,7 +2412,7 @@ inferType | main.rs:862:36:862:37 | y2 | | main.rs:738:5:741:5 | MyThing | | main.rs:862:36:862:37 | y2 | T | main.rs:745:5:746:14 | S2 | | main.rs:863:18:863:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:863:18:863:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:863:18:863:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:863:18:863:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:863:18:863:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:863:26:863:26 | a | | main.rs:745:5:746:14 | S2 | @@ -2421,7 +2421,7 @@ inferType | main.rs:864:36:864:37 | y2 | | main.rs:738:5:741:5 | MyThing | | main.rs:864:36:864:37 | y2 | T | main.rs:745:5:746:14 | S2 | | main.rs:865:18:865:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:865:18:865:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:865:18:865:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:865:18:865:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:865:18:865:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:865:26:865:26 | a | | main.rs:745:5:746:14 | S2 | @@ -2449,7 +2449,7 @@ inferType | main.rs:874:37:874:38 | x3 | T | main.rs:738:5:741:5 | MyThing | | main.rs:874:37:874:38 | x3 | T.T | main.rs:743:5:744:14 | S1 | | main.rs:875:18:875:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:875:18:875:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:875:18:875:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:875:18:875:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:875:18:875:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:875:26:875:26 | a | | main.rs:743:5:744:14 | S1 | @@ -2459,7 +2459,7 @@ inferType | main.rs:876:39:876:40 | x3 | T | main.rs:738:5:741:5 | MyThing | | main.rs:876:39:876:40 | x3 | T.T | main.rs:743:5:744:14 | S1 | | main.rs:877:18:877:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:877:18:877:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:877:18:877:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:877:18:877:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:877:18:877:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:877:26:877:26 | a | | main.rs:743:5:744:14 | S1 | @@ -2469,7 +2469,7 @@ inferType | main.rs:878:39:878:40 | x3 | T | main.rs:738:5:741:5 | MyThing | | main.rs:878:39:878:40 | x3 | T.T | main.rs:743:5:744:14 | S1 | | main.rs:879:18:879:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:879:18:879:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:879:18:879:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:879:18:879:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:879:18:879:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:879:26:879:26 | a | | main.rs:743:5:744:14 | S1 | @@ -2479,7 +2479,7 @@ inferType | main.rs:880:37:880:38 | y3 | T | main.rs:738:5:741:5 | MyThing | | main.rs:880:37:880:38 | y3 | T.T | main.rs:745:5:746:14 | S2 | | main.rs:881:18:881:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:881:18:881:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:881:18:881:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:881:18:881:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:881:18:881:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:881:26:881:26 | b | | main.rs:745:5:746:14 | S2 | @@ -2489,7 +2489,7 @@ inferType | main.rs:882:39:882:40 | y3 | T | main.rs:738:5:741:5 | MyThing | | main.rs:882:39:882:40 | y3 | T.T | main.rs:745:5:746:14 | S2 | | main.rs:883:18:883:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:883:18:883:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:883:18:883:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:883:18:883:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:883:18:883:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:883:26:883:26 | b | | main.rs:745:5:746:14 | S2 | @@ -2499,7 +2499,7 @@ inferType | main.rs:884:39:884:40 | y3 | T | main.rs:738:5:741:5 | MyThing | | main.rs:884:39:884:40 | y3 | T.T | main.rs:745:5:746:14 | S2 | | main.rs:885:18:885:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:885:18:885:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:885:18:885:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:885:18:885:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:885:18:885:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:885:26:885:26 | b | | main.rs:745:5:746:14 | S2 | @@ -2522,32 +2522,32 @@ inferType | main.rs:914:13:914:21 | self.m1() | | main.rs:904:9:904:28 | AssociatedType | | main.rs:915:13:915:43 | ...::default(...) | | main.rs:904:9:904:28 | AssociatedType | | main.rs:923:19:923:23 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:923:19:923:23 | SelfParam | &T | main.rs:919:5:929:5 | Self [trait MyTraitAssoc2] | +| main.rs:923:19:923:23 | SelfParam | TRef | main.rs:919:5:929:5 | Self [trait MyTraitAssoc2] | | main.rs:923:26:923:26 | a | | main.rs:923:16:923:16 | A | | main.rs:925:22:925:26 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:925:22:925:26 | SelfParam | &T | main.rs:919:5:929:5 | Self [trait MyTraitAssoc2] | +| main.rs:925:22:925:26 | SelfParam | TRef | main.rs:919:5:929:5 | Self [trait MyTraitAssoc2] | | main.rs:925:29:925:29 | a | | main.rs:925:19:925:19 | A | | main.rs:925:35:925:35 | b | | main.rs:925:19:925:19 | A | | main.rs:925:75:928:9 | { ... } | | main.rs:920:9:920:52 | GenericAssociatedType | | main.rs:926:13:926:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:926:13:926:16 | self | &T | main.rs:919:5:929:5 | Self [trait MyTraitAssoc2] | +| main.rs:926:13:926:16 | self | TRef | main.rs:919:5:929:5 | Self [trait MyTraitAssoc2] | | main.rs:926:13:926:23 | self.put(...) | | main.rs:920:9:920:52 | GenericAssociatedType | | main.rs:926:22:926:22 | a | | main.rs:925:19:925:19 | A | | main.rs:927:13:927:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:927:13:927:16 | self | &T | main.rs:919:5:929:5 | Self [trait MyTraitAssoc2] | +| main.rs:927:13:927:16 | self | TRef | main.rs:919:5:929:5 | Self [trait MyTraitAssoc2] | | main.rs:927:13:927:23 | self.put(...) | | main.rs:920:9:920:52 | GenericAssociatedType | | main.rs:927:22:927:22 | b | | main.rs:925:19:925:19 | A | | main.rs:936:21:936:25 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:936:21:936:25 | SelfParam | &T | main.rs:931:5:941:5 | Self [trait TraitMultipleAssoc] | +| main.rs:936:21:936:25 | SelfParam | TRef | main.rs:931:5:941:5 | Self [trait TraitMultipleAssoc] | | main.rs:938:20:938:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:938:20:938:24 | SelfParam | &T | main.rs:931:5:941:5 | Self [trait TraitMultipleAssoc] | +| main.rs:938:20:938:24 | SelfParam | TRef | main.rs:931:5:941:5 | Self [trait TraitMultipleAssoc] | | main.rs:940:20:940:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:940:20:940:24 | SelfParam | &T | main.rs:931:5:941:5 | Self [trait TraitMultipleAssoc] | +| main.rs:940:20:940:24 | SelfParam | TRef | main.rs:931:5:941:5 | Self [trait TraitMultipleAssoc] | | main.rs:956:15:956:18 | SelfParam | | main.rs:943:5:944:13 | S | | main.rs:956:45:958:9 | { ... } | | main.rs:949:5:950:14 | AT | | main.rs:957:13:957:14 | AT | | main.rs:949:5:950:14 | AT | | main.rs:966:19:966:23 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:966:19:966:23 | SelfParam | &T | main.rs:943:5:944:13 | S | +| main.rs:966:19:966:23 | SelfParam | TRef | main.rs:943:5:944:13 | S | | main.rs:966:26:966:26 | a | | main.rs:966:16:966:16 | A | | main.rs:966:46:968:9 | { ... } | | main.rs:892:5:895:5 | Wrapper | | main.rs:966:46:968:9 | { ... } | A | main.rs:966:16:966:16 | A | @@ -2568,22 +2568,22 @@ inferType | main.rs:989:22:989:26 | thing | | main.rs:989:10:989:19 | T | | main.rs:990:9:990:13 | thing | | main.rs:989:10:989:19 | T | | main.rs:997:21:997:25 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:997:21:997:25 | SelfParam | &T | main.rs:949:5:950:14 | AT | +| main.rs:997:21:997:25 | SelfParam | TRef | main.rs:949:5:950:14 | AT | | main.rs:997:34:999:9 | { ... } | | main.rs:949:5:950:14 | AT | | main.rs:998:13:998:14 | AT | | main.rs:949:5:950:14 | AT | | main.rs:1001:20:1001:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1001:20:1001:24 | SelfParam | &T | main.rs:949:5:950:14 | AT | +| main.rs:1001:20:1001:24 | SelfParam | TRef | main.rs:949:5:950:14 | AT | | main.rs:1001:43:1003:9 | { ... } | | main.rs:943:5:944:13 | S | | main.rs:1002:13:1002:13 | S | | main.rs:943:5:944:13 | S | | main.rs:1005:20:1005:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1005:20:1005:24 | SelfParam | &T | main.rs:949:5:950:14 | AT | +| main.rs:1005:20:1005:24 | SelfParam | TRef | main.rs:949:5:950:14 | AT | | main.rs:1005:43:1007:9 | { ... } | | main.rs:946:5:947:14 | S2 | | main.rs:1006:13:1006:14 | S2 | | main.rs:946:5:947:14 | S2 | | main.rs:1010:16:1038:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1011:13:1011:14 | x1 | | main.rs:943:5:944:13 | S | | main.rs:1011:18:1011:18 | S | | main.rs:943:5:944:13 | S | | main.rs:1013:18:1013:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1013:18:1013:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1013:18:1013:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1013:18:1013:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1013:18:1013:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1013:26:1013:27 | x1 | | main.rs:943:5:944:13 | S | @@ -2594,14 +2594,14 @@ inferType | main.rs:1017:17:1017:18 | x2 | | main.rs:943:5:944:13 | S | | main.rs:1017:17:1017:23 | x2.m2() | | main.rs:949:5:950:14 | AT | | main.rs:1018:18:1018:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1018:18:1018:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1018:18:1018:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1018:18:1018:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1018:18:1018:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1018:26:1018:26 | y | | main.rs:949:5:950:14 | AT | | main.rs:1020:13:1020:14 | x3 | | main.rs:943:5:944:13 | S | | main.rs:1020:18:1020:18 | S | | main.rs:943:5:944:13 | S | | main.rs:1022:18:1022:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1022:18:1022:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1022:18:1022:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1022:18:1022:43 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1022:18:1022:43 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1022:26:1022:27 | x3 | | main.rs:943:5:944:13 | S | @@ -2610,7 +2610,7 @@ inferType | main.rs:1022:26:1022:43 | ... .unwrap() | | {EXTERNAL LOCATION} | i32 | | main.rs:1022:33:1022:33 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:1025:18:1025:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1025:18:1025:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1025:18:1025:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1025:18:1025:49 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1025:18:1025:49 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1025:26:1025:27 | x3 | | main.rs:943:5:944:13 | S | @@ -2621,13 +2621,13 @@ inferType | main.rs:1025:39:1025:39 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:1027:20:1027:20 | S | | main.rs:943:5:944:13 | S | | main.rs:1028:18:1028:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1028:18:1028:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1028:18:1028:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1028:18:1028:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1028:18:1028:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1030:13:1030:14 | x5 | | main.rs:946:5:947:14 | S2 | | main.rs:1030:18:1030:19 | S2 | | main.rs:946:5:947:14 | S2 | | main.rs:1031:18:1031:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1031:18:1031:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1031:18:1031:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1031:18:1031:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1031:18:1031:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1031:26:1031:27 | x5 | | main.rs:946:5:947:14 | S2 | @@ -2636,7 +2636,7 @@ inferType | main.rs:1032:13:1032:14 | x6 | | main.rs:946:5:947:14 | S2 | | main.rs:1032:18:1032:19 | S2 | | main.rs:946:5:947:14 | S2 | | main.rs:1033:18:1033:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1033:18:1033:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1033:18:1033:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1033:18:1033:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1033:18:1033:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1033:26:1033:27 | x6 | | main.rs:946:5:947:14 | S2 | @@ -2652,35 +2652,35 @@ inferType | main.rs:1037:25:1037:26 | AT | | main.rs:949:5:950:14 | AT | | main.rs:1037:25:1037:36 | AT.get_two() | | main.rs:946:5:947:14 | S2 | | main.rs:1045:19:1045:23 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1045:19:1045:23 | SelfParam | &T | main.rs:1042:5:1046:5 | Self [trait Supertrait] | +| main.rs:1045:19:1045:23 | SelfParam | TRef | main.rs:1042:5:1046:5 | Self [trait Supertrait] | | main.rs:1045:26:1045:32 | content | | main.rs:1043:9:1043:21 | Content | | main.rs:1050:24:1050:28 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1050:24:1050:28 | SelfParam | &T | main.rs:1048:5:1051:5 | Self [trait Subtrait] | +| main.rs:1050:24:1050:28 | SelfParam | TRef | main.rs:1048:5:1051:5 | Self [trait Subtrait] | | main.rs:1059:23:1059:27 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1059:23:1059:27 | SelfParam | &T | main.rs:1053:5:1063:5 | Self [trait Subtrait2] | +| main.rs:1059:23:1059:27 | SelfParam | TRef | main.rs:1053:5:1063:5 | Self [trait Subtrait2] | | main.rs:1059:30:1059:31 | c1 | | main.rs:1043:9:1043:21 | Content | | main.rs:1059:49:1059:50 | c2 | | main.rs:1043:9:1043:21 | Content | | main.rs:1059:68:1062:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1060:13:1060:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1060:13:1060:16 | self | &T | main.rs:1053:5:1063:5 | Self [trait Subtrait2] | +| main.rs:1060:13:1060:16 | self | TRef | main.rs:1053:5:1063:5 | Self [trait Subtrait2] | | main.rs:1060:13:1060:27 | self.insert(...) | | {EXTERNAL LOCATION} | () | | main.rs:1060:25:1060:26 | c1 | | main.rs:1043:9:1043:21 | Content | | main.rs:1061:13:1061:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1061:13:1061:16 | self | &T | main.rs:1053:5:1063:5 | Self [trait Subtrait2] | +| main.rs:1061:13:1061:16 | self | TRef | main.rs:1053:5:1063:5 | Self [trait Subtrait2] | | main.rs:1061:13:1061:27 | self.insert(...) | | {EXTERNAL LOCATION} | () | | main.rs:1061:25:1061:26 | c2 | | main.rs:1043:9:1043:21 | Content | | main.rs:1069:19:1069:23 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1069:19:1069:23 | SelfParam | &T | main.rs:1065:5:1065:24 | MyType | -| main.rs:1069:19:1069:23 | SelfParam | &T.T | main.rs:1067:10:1067:10 | T | +| main.rs:1069:19:1069:23 | SelfParam | TRef | main.rs:1065:5:1065:24 | MyType | +| main.rs:1069:19:1069:23 | SelfParam | TRef.T | main.rs:1067:10:1067:10 | T | | main.rs:1069:26:1069:33 | _content | | main.rs:1067:10:1067:10 | T | | main.rs:1069:51:1071:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1070:22:1070:42 | "Inserting content: \\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1070:22:1070:42 | "Inserting content: \\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1070:22:1070:42 | "Inserting content: \\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1070:22:1070:42 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1070:22:1070:42 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1076:24:1076:28 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1076:24:1076:28 | SelfParam | &T | main.rs:1065:5:1065:24 | MyType | -| main.rs:1076:24:1076:28 | SelfParam | &T.T | main.rs:1074:10:1074:17 | T | +| main.rs:1076:24:1076:28 | SelfParam | TRef | main.rs:1065:5:1065:24 | MyType | +| main.rs:1076:24:1076:28 | SelfParam | TRef.T | main.rs:1074:10:1074:17 | T | | main.rs:1076:48:1078:9 | { ... } | | main.rs:1074:10:1074:17 | T | | main.rs:1077:13:1077:19 | (...) | | main.rs:1065:5:1065:24 | MyType | | main.rs:1077:13:1077:19 | (...) | T | main.rs:1074:10:1074:17 | T | @@ -2689,26 +2689,26 @@ inferType | main.rs:1077:14:1077:18 | * ... | | main.rs:1065:5:1065:24 | MyType | | main.rs:1077:14:1077:18 | * ... | T | main.rs:1074:10:1074:17 | T | | main.rs:1077:15:1077:18 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1077:15:1077:18 | self | &T | main.rs:1065:5:1065:24 | MyType | -| main.rs:1077:15:1077:18 | self | &T.T | main.rs:1074:10:1074:17 | T | +| main.rs:1077:15:1077:18 | self | TRef | main.rs:1065:5:1065:24 | MyType | +| main.rs:1077:15:1077:18 | self | TRef.T | main.rs:1074:10:1074:17 | T | | main.rs:1081:33:1081:36 | item | | {EXTERNAL LOCATION} | & | -| main.rs:1081:33:1081:36 | item | &T | main.rs:1081:20:1081:30 | T | +| main.rs:1081:33:1081:36 | item | TRef | main.rs:1081:20:1081:30 | T | | main.rs:1081:57:1083:5 | { ... } | | main.rs:1043:9:1043:21 | Content | | main.rs:1082:9:1082:12 | item | | {EXTERNAL LOCATION} | & | -| main.rs:1082:9:1082:12 | item | &T | main.rs:1081:20:1081:30 | T | +| main.rs:1082:9:1082:12 | item | TRef | main.rs:1081:20:1081:30 | T | | main.rs:1082:9:1082:26 | item.get_content() | | main.rs:1043:9:1043:21 | Content | | main.rs:1085:35:1085:38 | item | | {EXTERNAL LOCATION} | & | -| main.rs:1085:35:1085:38 | item | &T | main.rs:1085:21:1085:32 | T | +| main.rs:1085:35:1085:38 | item | TRef | main.rs:1085:21:1085:32 | T | | main.rs:1085:45:1085:46 | c1 | | main.rs:1043:9:1043:21 | Content | | main.rs:1085:61:1085:62 | c2 | | main.rs:1043:9:1043:21 | Content | | main.rs:1085:77:1085:78 | c3 | | main.rs:1043:9:1043:21 | Content | | main.rs:1085:93:1088:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1086:9:1086:12 | item | | {EXTERNAL LOCATION} | & | -| main.rs:1086:9:1086:12 | item | &T | main.rs:1085:21:1085:32 | T | +| main.rs:1086:9:1086:12 | item | TRef | main.rs:1085:21:1085:32 | T | | main.rs:1086:9:1086:23 | item.insert(...) | | {EXTERNAL LOCATION} | () | | main.rs:1086:21:1086:22 | c1 | | main.rs:1043:9:1043:21 | Content | | main.rs:1087:9:1087:12 | item | | {EXTERNAL LOCATION} | & | -| main.rs:1087:9:1087:12 | item | &T | main.rs:1085:21:1085:32 | T | +| main.rs:1087:9:1087:12 | item | TRef | main.rs:1085:21:1085:32 | T | | main.rs:1087:9:1087:31 | item.insert_two(...) | | {EXTERNAL LOCATION} | () | | main.rs:1087:25:1087:26 | c2 | | main.rs:1043:9:1043:21 | Content | | main.rs:1087:29:1087:30 | c3 | | main.rs:1043:9:1043:21 | Content | @@ -2726,8 +2726,8 @@ inferType | main.rs:1094:21:1094:32 | MyType(...) | T | {EXTERNAL LOCATION} | bool | | main.rs:1094:28:1094:31 | true | | {EXTERNAL LOCATION} | bool | | main.rs:1095:37:1095:42 | &item2 | | {EXTERNAL LOCATION} | & | -| main.rs:1095:37:1095:42 | &item2 | &T | main.rs:1065:5:1065:24 | MyType | -| main.rs:1095:37:1095:42 | &item2 | &T.T | {EXTERNAL LOCATION} | bool | +| main.rs:1095:37:1095:42 | &item2 | TRef | main.rs:1065:5:1065:24 | MyType | +| main.rs:1095:37:1095:42 | &item2 | TRef.T | {EXTERNAL LOCATION} | bool | | main.rs:1095:38:1095:42 | item2 | | main.rs:1065:5:1065:24 | MyType | | main.rs:1095:38:1095:42 | item2 | T | {EXTERNAL LOCATION} | bool | | main.rs:1112:15:1112:18 | SelfParam | | main.rs:1100:5:1104:5 | MyEnum | @@ -2756,14 +2756,14 @@ inferType | main.rs:1122:17:1122:36 | ...::C2 {...} | A | main.rs:1108:5:1109:14 | S2 | | main.rs:1122:33:1122:34 | S2 | | main.rs:1108:5:1109:14 | S2 | | main.rs:1124:18:1124:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1124:18:1124:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1124:18:1124:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1124:18:1124:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1124:18:1124:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1124:26:1124:26 | x | | main.rs:1100:5:1104:5 | MyEnum | | main.rs:1124:26:1124:26 | x | A | main.rs:1106:5:1107:14 | S1 | | main.rs:1124:26:1124:31 | x.m1() | | main.rs:1106:5:1107:14 | S1 | | main.rs:1125:18:1125:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1125:18:1125:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1125:18:1125:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1125:18:1125:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1125:18:1125:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1125:26:1125:26 | y | | main.rs:1100:5:1104:5 | MyEnum | @@ -2771,7 +2771,7 @@ inferType | main.rs:1125:26:1125:31 | y.m1() | | main.rs:1108:5:1109:14 | S2 | | main.rs:1147:15:1147:18 | SelfParam | | main.rs:1145:5:1148:5 | Self [trait MyTrait1] | | main.rs:1152:15:1152:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1152:15:1152:19 | SelfParam | &T | main.rs:1150:5:1162:5 | Self [trait MyTrait2] | +| main.rs:1152:15:1152:19 | SelfParam | TRef | main.rs:1150:5:1162:5 | Self [trait MyTrait2] | | main.rs:1155:9:1161:9 | { ... } | | main.rs:1150:20:1150:22 | Tr2 | | main.rs:1156:13:1160:13 | if ... {...} else {...} | | main.rs:1150:20:1150:22 | Tr2 | | main.rs:1156:16:1156:16 | 3 | | {EXTERNAL LOCATION} | i32 | @@ -2779,13 +2779,13 @@ inferType | main.rs:1156:20:1156:20 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:1156:22:1158:13 | { ... } | | main.rs:1150:20:1150:22 | Tr2 | | main.rs:1157:17:1157:20 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1157:17:1157:20 | self | &T | main.rs:1150:5:1162:5 | Self [trait MyTrait2] | +| main.rs:1157:17:1157:20 | self | TRef | main.rs:1150:5:1162:5 | Self [trait MyTrait2] | | main.rs:1157:17:1157:25 | self.m1() | | main.rs:1150:20:1150:22 | Tr2 | | main.rs:1158:20:1160:13 | { ... } | | main.rs:1150:20:1150:22 | Tr2 | | main.rs:1159:17:1159:31 | ...::m1(...) | | main.rs:1150:20:1150:22 | Tr2 | | main.rs:1159:26:1159:30 | * ... | | main.rs:1150:5:1162:5 | Self [trait MyTrait2] | | main.rs:1159:27:1159:30 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1159:27:1159:30 | self | &T | main.rs:1150:5:1162:5 | Self [trait MyTrait2] | +| main.rs:1159:27:1159:30 | self | TRef | main.rs:1150:5:1162:5 | Self [trait MyTrait2] | | main.rs:1166:15:1166:18 | SelfParam | | main.rs:1164:5:1176:5 | Self [trait MyTrait3] | | main.rs:1169:9:1175:9 | { ... } | | main.rs:1164:20:1164:22 | Tr3 | | main.rs:1170:13:1174:13 | if ... {...} else {...} | | main.rs:1164:20:1164:22 | Tr3 | @@ -2802,7 +2802,7 @@ inferType | main.rs:1173:17:1173:31 | ...::m2(...) | A | main.rs:1164:20:1164:22 | Tr3 | | main.rs:1173:17:1173:33 | ... .a | | main.rs:1164:20:1164:22 | Tr3 | | main.rs:1173:26:1173:30 | &self | | {EXTERNAL LOCATION} | & | -| main.rs:1173:26:1173:30 | &self | &T | main.rs:1164:5:1176:5 | Self [trait MyTrait3] | +| main.rs:1173:26:1173:30 | &self | TRef | main.rs:1164:5:1176:5 | Self [trait MyTrait3] | | main.rs:1173:27:1173:30 | self | | main.rs:1164:5:1176:5 | Self [trait MyTrait3] | | main.rs:1180:15:1180:18 | SelfParam | | main.rs:1130:5:1133:5 | MyThing | | main.rs:1180:15:1180:18 | SelfParam | A | main.rs:1178:10:1178:10 | T | @@ -2831,7 +2831,7 @@ inferType | main.rs:1204:17:1204:22 | x.m1() | | main.rs:1130:5:1133:5 | MyThing | | main.rs:1204:17:1204:22 | x.m1() | A | main.rs:1140:5:1141:14 | S1 | | main.rs:1205:18:1205:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1205:18:1205:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1205:18:1205:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1205:18:1205:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1205:18:1205:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1205:26:1205:26 | a | | main.rs:1130:5:1133:5 | MyThing | @@ -2848,14 +2848,14 @@ inferType | main.rs:1210:17:1210:33 | MyThing {...} | A | main.rs:1142:5:1143:14 | S2 | | main.rs:1210:30:1210:31 | S2 | | main.rs:1142:5:1143:14 | S2 | | main.rs:1212:18:1212:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1212:18:1212:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1212:18:1212:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1212:18:1212:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1212:18:1212:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1212:26:1212:26 | x | | main.rs:1130:5:1133:5 | MyThing | | main.rs:1212:26:1212:26 | x | A | main.rs:1140:5:1141:14 | S1 | | main.rs:1212:26:1212:31 | x.m1() | | main.rs:1140:5:1141:14 | S1 | | main.rs:1213:18:1213:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1213:18:1213:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1213:18:1213:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1213:18:1213:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1213:18:1213:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1213:26:1213:26 | y | | main.rs:1130:5:1133:5 | MyThing | @@ -2872,14 +2872,14 @@ inferType | main.rs:1216:17:1216:33 | MyThing {...} | A | main.rs:1142:5:1143:14 | S2 | | main.rs:1216:30:1216:31 | S2 | | main.rs:1142:5:1143:14 | S2 | | main.rs:1218:18:1218:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1218:18:1218:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1218:18:1218:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1218:18:1218:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1218:18:1218:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1218:26:1218:26 | x | | main.rs:1130:5:1133:5 | MyThing | | main.rs:1218:26:1218:26 | x | A | main.rs:1140:5:1141:14 | S1 | | main.rs:1218:26:1218:31 | x.m2() | | main.rs:1140:5:1141:14 | S1 | | main.rs:1219:18:1219:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1219:18:1219:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1219:18:1219:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1219:18:1219:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1219:18:1219:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1219:26:1219:26 | y | | main.rs:1130:5:1133:5 | MyThing | @@ -2896,14 +2896,14 @@ inferType | main.rs:1222:17:1222:34 | MyThing2 {...} | A | main.rs:1142:5:1143:14 | S2 | | main.rs:1222:31:1222:32 | S2 | | main.rs:1142:5:1143:14 | S2 | | main.rs:1224:18:1224:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1224:18:1224:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1224:18:1224:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1224:18:1224:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1224:18:1224:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1224:26:1224:26 | x | | main.rs:1135:5:1138:5 | MyThing2 | | main.rs:1224:26:1224:26 | x | A | main.rs:1140:5:1141:14 | S1 | | main.rs:1224:26:1224:31 | x.m3() | | main.rs:1140:5:1141:14 | S1 | | main.rs:1225:18:1225:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1225:18:1225:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1225:18:1225:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1225:18:1225:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1225:18:1225:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1225:26:1225:26 | y | | main.rs:1135:5:1138:5 | MyThing2 | @@ -2930,11 +2930,11 @@ inferType | main.rs:1231:31:1231:31 | x | | main.rs:1135:5:1138:5 | MyThing2 | | main.rs:1231:31:1231:31 | x | A | main.rs:1142:5:1143:14 | S2 | | main.rs:1248:22:1248:22 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1248:22:1248:22 | x | &T | main.rs:1248:11:1248:19 | T | +| main.rs:1248:22:1248:22 | x | TRef | main.rs:1248:11:1248:19 | T | | main.rs:1248:35:1250:5 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1248:35:1250:5 | { ... } | &T | main.rs:1248:11:1248:19 | T | +| main.rs:1248:35:1250:5 | { ... } | TRef | main.rs:1248:11:1248:19 | T | | main.rs:1249:9:1249:9 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1249:9:1249:9 | x | &T | main.rs:1248:11:1248:19 | T | +| main.rs:1249:9:1249:9 | x | TRef | main.rs:1248:11:1248:19 | T | | main.rs:1253:17:1253:20 | SelfParam | | main.rs:1238:5:1239:14 | S1 | | main.rs:1253:29:1255:9 | { ... } | | main.rs:1241:5:1242:14 | S2 | | main.rs:1254:13:1254:14 | S2 | | main.rs:1241:5:1242:14 | S2 | @@ -2946,35 +2946,35 @@ inferType | main.rs:1266:13:1266:13 | x | | main.rs:1238:5:1239:14 | S1 | | main.rs:1266:17:1266:18 | S1 | | main.rs:1238:5:1239:14 | S1 | | main.rs:1267:18:1267:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1267:18:1267:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1267:18:1267:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1267:18:1267:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1267:18:1267:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1267:26:1267:31 | id(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1267:26:1267:31 | id(...) | &T | main.rs:1238:5:1239:14 | S1 | +| main.rs:1267:26:1267:31 | id(...) | TRef | main.rs:1238:5:1239:14 | S1 | | main.rs:1267:29:1267:30 | &x | | {EXTERNAL LOCATION} | & | -| main.rs:1267:29:1267:30 | &x | &T | main.rs:1238:5:1239:14 | S1 | +| main.rs:1267:29:1267:30 | &x | TRef | main.rs:1238:5:1239:14 | S1 | | main.rs:1267:30:1267:30 | x | | main.rs:1238:5:1239:14 | S1 | | main.rs:1269:13:1269:13 | x | | main.rs:1238:5:1239:14 | S1 | | main.rs:1269:17:1269:18 | S1 | | main.rs:1238:5:1239:14 | S1 | | main.rs:1270:18:1270:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1270:18:1270:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1270:18:1270:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1270:18:1270:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1270:18:1270:37 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1270:26:1270:37 | id::<...>(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1270:26:1270:37 | id::<...>(...) | &T | main.rs:1238:5:1239:14 | S1 | +| main.rs:1270:26:1270:37 | id::<...>(...) | TRef | main.rs:1238:5:1239:14 | S1 | | main.rs:1270:35:1270:36 | &x | | {EXTERNAL LOCATION} | & | -| main.rs:1270:35:1270:36 | &x | &T | main.rs:1238:5:1239:14 | S1 | +| main.rs:1270:35:1270:36 | &x | TRef | main.rs:1238:5:1239:14 | S1 | | main.rs:1270:36:1270:36 | x | | main.rs:1238:5:1239:14 | S1 | | main.rs:1272:13:1272:13 | x | | main.rs:1238:5:1239:14 | S1 | | main.rs:1272:17:1272:18 | S1 | | main.rs:1238:5:1239:14 | S1 | | main.rs:1274:18:1274:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1274:18:1274:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1274:18:1274:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1274:18:1274:44 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1274:18:1274:44 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1274:26:1274:44 | id::<...>(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1274:26:1274:44 | id::<...>(...) | &T | main.rs:1244:5:1244:25 | dyn Trait | +| main.rs:1274:26:1274:44 | id::<...>(...) | TRef | main.rs:1244:5:1244:25 | dyn Trait | | main.rs:1274:42:1274:43 | &x | | {EXTERNAL LOCATION} | & | -| main.rs:1274:42:1274:43 | &x | &T | main.rs:1238:5:1239:14 | S1 | +| main.rs:1274:42:1274:43 | &x | TRef | main.rs:1238:5:1239:14 | S1 | | main.rs:1274:43:1274:43 | x | | main.rs:1238:5:1239:14 | S1 | | main.rs:1276:13:1276:13 | x | | main.rs:1238:5:1239:14 | S1 | | main.rs:1276:17:1276:18 | S1 | | main.rs:1238:5:1239:14 | S1 | @@ -2999,7 +2999,7 @@ inferType | main.rs:1296:17:1296:38 | ...::PairNone(...) | Snd | main.rs:1293:15:1293:17 | Snd | | main.rs:1296:43:1296:82 | MacroExpr | | file://:0:0:0:0 | ! | | main.rs:1296:50:1296:81 | "PairNone has no second elemen... | | {EXTERNAL LOCATION} | & | -| main.rs:1296:50:1296:81 | "PairNone has no second elemen... | &T | {EXTERNAL LOCATION} | str | +| main.rs:1296:50:1296:81 | "PairNone has no second elemen... | TRef | {EXTERNAL LOCATION} | str | | main.rs:1296:50:1296:81 | ...::panic_fmt(...) | | file://:0:0:0:0 | ! | | main.rs:1296:50:1296:81 | MacroExpr | | {EXTERNAL LOCATION} | () | | main.rs:1296:50:1296:81 | { ... } | | {EXTERNAL LOCATION} | () | @@ -3009,7 +3009,7 @@ inferType | main.rs:1297:37:1297:37 | _ | | main.rs:1293:10:1293:12 | Fst | | main.rs:1297:43:1297:81 | MacroExpr | | file://:0:0:0:0 | ! | | main.rs:1297:50:1297:80 | "PairFst has no second element... | | {EXTERNAL LOCATION} | & | -| main.rs:1297:50:1297:80 | "PairFst has no second element... | &T | {EXTERNAL LOCATION} | str | +| main.rs:1297:50:1297:80 | "PairFst has no second element... | TRef | {EXTERNAL LOCATION} | str | | main.rs:1297:50:1297:80 | ...::panic_fmt(...) | | file://:0:0:0:0 | ! | | main.rs:1297:50:1297:80 | MacroExpr | | {EXTERNAL LOCATION} | () | | main.rs:1297:50:1297:80 | { ... } | | {EXTERNAL LOCATION} | () | @@ -3041,7 +3041,7 @@ inferType | main.rs:1326:17:1326:29 | t.unwrapSnd() | Snd | main.rs:1310:5:1311:14 | S3 | | main.rs:1326:17:1326:41 | ... .unwrapSnd() | | main.rs:1310:5:1311:14 | S3 | | main.rs:1327:18:1327:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1327:18:1327:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1327:18:1327:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1327:18:1327:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1327:18:1327:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1327:26:1327:26 | x | | main.rs:1310:5:1311:14 | S3 | @@ -3067,7 +3067,7 @@ inferType | main.rs:1357:47:1357:48 | S1 | | main.rs:1304:5:1305:14 | S1 | | main.rs:1357:51:1357:52 | S2 | | main.rs:1307:5:1308:14 | S2 | | main.rs:1358:18:1358:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1358:18:1358:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1358:18:1358:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1358:18:1358:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1358:18:1358:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1358:26:1358:27 | p1 | | main.rs:1285:5:1291:5 | PairOption | @@ -3080,7 +3080,7 @@ inferType | main.rs:1361:26:1361:47 | ...::PairNone(...) | Fst | main.rs:1304:5:1305:14 | S1 | | main.rs:1361:26:1361:47 | ...::PairNone(...) | Snd | main.rs:1307:5:1308:14 | S2 | | main.rs:1362:18:1362:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1362:18:1362:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1362:18:1362:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1362:18:1362:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1362:18:1362:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1362:26:1362:27 | p2 | | main.rs:1285:5:1291:5 | PairOption | @@ -3094,7 +3094,7 @@ inferType | main.rs:1365:34:1365:56 | ...::PairSnd(...) | Snd | main.rs:1310:5:1311:14 | S3 | | main.rs:1365:54:1365:55 | S3 | | main.rs:1310:5:1311:14 | S3 | | main.rs:1366:18:1366:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1366:18:1366:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1366:18:1366:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1366:18:1366:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1366:18:1366:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1366:26:1366:27 | p3 | | main.rs:1285:5:1291:5 | PairOption | @@ -3107,7 +3107,7 @@ inferType | main.rs:1369:35:1369:56 | ...::PairNone(...) | Fst | main.rs:1307:5:1308:14 | S2 | | main.rs:1369:35:1369:56 | ...::PairNone(...) | Snd | main.rs:1310:5:1311:14 | S3 | | main.rs:1370:18:1370:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1370:18:1370:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1370:18:1370:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1370:18:1370:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1370:18:1370:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1370:26:1370:27 | p3 | | main.rs:1285:5:1291:5 | PairOption | @@ -3139,19 +3139,19 @@ inferType | main.rs:1376:17:1376:38 | ... .get_input() | T | {EXTERNAL LOCATION} | bool | | main.rs:1376:22:1376:25 | true | | {EXTERNAL LOCATION} | bool | | main.rs:1389:16:1389:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1389:16:1389:24 | SelfParam | &T | main.rs:1387:5:1394:5 | Self [trait MyTrait] | +| main.rs:1389:16:1389:24 | SelfParam | TRef | main.rs:1387:5:1394:5 | Self [trait MyTrait] | | main.rs:1389:27:1389:31 | value | | main.rs:1387:19:1387:19 | S | | main.rs:1391:21:1391:29 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1391:21:1391:29 | SelfParam | &T | main.rs:1387:5:1394:5 | Self [trait MyTrait] | +| main.rs:1391:21:1391:29 | SelfParam | TRef | main.rs:1387:5:1394:5 | Self [trait MyTrait] | | main.rs:1391:32:1391:36 | value | | main.rs:1387:19:1387:19 | S | | main.rs:1391:42:1393:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1392:13:1392:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1392:13:1392:16 | self | &T | main.rs:1387:5:1394:5 | Self [trait MyTrait] | +| main.rs:1392:13:1392:16 | self | TRef | main.rs:1387:5:1394:5 | Self [trait MyTrait] | | main.rs:1392:13:1392:27 | self.set(...) | | {EXTERNAL LOCATION} | () | | main.rs:1392:22:1392:26 | value | | main.rs:1387:19:1387:19 | S | | main.rs:1398:16:1398:24 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1398:16:1398:24 | SelfParam | &T | main.rs:1381:5:1385:5 | MyOption | -| main.rs:1398:16:1398:24 | SelfParam | &T.T | main.rs:1396:10:1396:10 | T | +| main.rs:1398:16:1398:24 | SelfParam | TRef | main.rs:1381:5:1385:5 | MyOption | +| main.rs:1398:16:1398:24 | SelfParam | TRef.T | main.rs:1396:10:1396:10 | T | | main.rs:1398:27:1398:31 | value | | main.rs:1396:10:1396:10 | T | | main.rs:1398:37:1398:38 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1402:26:1404:9 | { ... } | | main.rs:1381:5:1385:5 | MyOption | @@ -3186,7 +3186,7 @@ inferType | main.rs:1420:18:1420:37 | ...::new(...) | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1420:18:1420:37 | ...::new(...) | T | main.rs:1416:5:1417:13 | S | | main.rs:1421:18:1421:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1421:18:1421:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1421:18:1421:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1421:18:1421:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1421:18:1421:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1421:26:1421:27 | x1 | | main.rs:1381:5:1385:5 | MyOption | @@ -3200,7 +3200,7 @@ inferType | main.rs:1424:9:1424:17 | x2.set(...) | | {EXTERNAL LOCATION} | () | | main.rs:1424:16:1424:16 | S | | main.rs:1416:5:1417:13 | S | | main.rs:1425:18:1425:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1425:18:1425:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1425:18:1425:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1425:18:1425:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1425:18:1425:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1425:26:1425:27 | x2 | | main.rs:1381:5:1385:5 | MyOption | @@ -3211,7 +3211,7 @@ inferType | main.rs:1429:9:1429:22 | x3.call_set(...) | | {EXTERNAL LOCATION} | () | | main.rs:1429:21:1429:21 | S | | main.rs:1416:5:1417:13 | S | | main.rs:1430:18:1430:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1430:18:1430:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1430:18:1430:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1430:18:1430:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1430:18:1430:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1430:26:1430:27 | x3 | | main.rs:1381:5:1385:5 | MyOption | @@ -3221,13 +3221,13 @@ inferType | main.rs:1432:22:1432:36 | ...::new(...) | T | main.rs:1416:5:1417:13 | S | | main.rs:1433:9:1433:33 | ...::set(...) | | {EXTERNAL LOCATION} | () | | main.rs:1433:23:1433:29 | &mut x4 | | {EXTERNAL LOCATION} | & | -| main.rs:1433:23:1433:29 | &mut x4 | &T | main.rs:1381:5:1385:5 | MyOption | -| main.rs:1433:23:1433:29 | &mut x4 | &T.T | main.rs:1416:5:1417:13 | S | +| main.rs:1433:23:1433:29 | &mut x4 | TRef | main.rs:1381:5:1385:5 | MyOption | +| main.rs:1433:23:1433:29 | &mut x4 | TRef.T | main.rs:1416:5:1417:13 | S | | main.rs:1433:28:1433:29 | x4 | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1433:28:1433:29 | x4 | T | main.rs:1416:5:1417:13 | S | | main.rs:1433:32:1433:32 | S | | main.rs:1416:5:1417:13 | S | | main.rs:1434:18:1434:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1434:18:1434:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1434:18:1434:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1434:18:1434:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1434:18:1434:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1434:26:1434:27 | x4 | | main.rs:1381:5:1385:5 | MyOption | @@ -3241,7 +3241,7 @@ inferType | main.rs:1436:35:1436:57 | ...::MyNone(...) | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1436:35:1436:57 | ...::MyNone(...) | T | main.rs:1416:5:1417:13 | S | | main.rs:1437:18:1437:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1437:18:1437:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1437:18:1437:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1437:18:1437:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1437:18:1437:37 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1437:26:1437:27 | x5 | | main.rs:1381:5:1385:5 | MyOption | @@ -3258,7 +3258,7 @@ inferType | main.rs:1439:35:1439:57 | ...::MyNone(...) | | main.rs:1381:5:1385:5 | MyOption | | main.rs:1439:35:1439:57 | ...::MyNone(...) | T | main.rs:1416:5:1417:13 | S | | main.rs:1440:18:1440:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1440:18:1440:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1440:18:1440:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1440:18:1440:61 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1440:18:1440:61 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1440:26:1440:61 | ...::flatten(...) | | main.rs:1381:5:1385:5 | MyOption | @@ -3283,7 +3283,7 @@ inferType | main.rs:1446:13:1446:31 | ...::MySome(...) | T | main.rs:1416:5:1417:13 | S | | main.rs:1446:30:1446:30 | S | | main.rs:1416:5:1417:13 | S | | main.rs:1448:18:1448:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1448:18:1448:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1448:18:1448:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1448:18:1448:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1448:18:1448:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1448:26:1448:32 | from_if | | main.rs:1381:5:1385:5 | MyOption | @@ -3303,7 +3303,7 @@ inferType | main.rs:1453:22:1453:40 | ...::MySome(...) | T | main.rs:1416:5:1417:13 | S | | main.rs:1453:39:1453:39 | S | | main.rs:1416:5:1417:13 | S | | main.rs:1455:18:1455:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1455:18:1455:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1455:18:1455:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1455:18:1455:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1455:18:1455:35 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1455:26:1455:35 | from_match | | main.rs:1381:5:1385:5 | MyOption | @@ -3324,7 +3324,7 @@ inferType | main.rs:1462:19:1462:37 | ...::MySome(...) | T | main.rs:1416:5:1417:13 | S | | main.rs:1462:36:1462:36 | S | | main.rs:1416:5:1417:13 | S | | main.rs:1464:18:1464:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1464:18:1464:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1464:18:1464:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1464:18:1464:34 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1464:18:1464:34 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1464:26:1464:34 | from_loop | | main.rs:1381:5:1385:5 | MyOption | @@ -3336,52 +3336,52 @@ inferType | main.rs:1483:13:1483:16 | self | T | main.rs:1481:10:1481:10 | T | | main.rs:1483:13:1483:18 | self.0 | | main.rs:1481:10:1481:10 | T | | main.rs:1486:15:1486:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1486:15:1486:19 | SelfParam | &T | main.rs:1470:5:1471:19 | S | -| main.rs:1486:15:1486:19 | SelfParam | &T.T | main.rs:1481:10:1481:10 | T | +| main.rs:1486:15:1486:19 | SelfParam | TRef | main.rs:1470:5:1471:19 | S | +| main.rs:1486:15:1486:19 | SelfParam | TRef.T | main.rs:1481:10:1481:10 | T | | main.rs:1486:28:1488:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1486:28:1488:9 | { ... } | &T | main.rs:1481:10:1481:10 | T | +| main.rs:1486:28:1488:9 | { ... } | TRef | main.rs:1481:10:1481:10 | T | | main.rs:1487:13:1487:19 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1487:13:1487:19 | &... | &T | main.rs:1481:10:1481:10 | T | +| main.rs:1487:13:1487:19 | &... | TRef | main.rs:1481:10:1481:10 | T | | main.rs:1487:14:1487:17 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1487:14:1487:17 | self | &T | main.rs:1470:5:1471:19 | S | -| main.rs:1487:14:1487:17 | self | &T.T | main.rs:1481:10:1481:10 | T | +| main.rs:1487:14:1487:17 | self | TRef | main.rs:1470:5:1471:19 | S | +| main.rs:1487:14:1487:17 | self | TRef.T | main.rs:1481:10:1481:10 | T | | main.rs:1487:14:1487:19 | self.0 | | main.rs:1481:10:1481:10 | T | | main.rs:1490:15:1490:25 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1490:15:1490:25 | SelfParam | &T | main.rs:1470:5:1471:19 | S | -| main.rs:1490:15:1490:25 | SelfParam | &T.T | main.rs:1481:10:1481:10 | T | +| main.rs:1490:15:1490:25 | SelfParam | TRef | main.rs:1470:5:1471:19 | S | +| main.rs:1490:15:1490:25 | SelfParam | TRef.T | main.rs:1481:10:1481:10 | T | | main.rs:1490:34:1492:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1490:34:1492:9 | { ... } | &T | main.rs:1481:10:1481:10 | T | +| main.rs:1490:34:1492:9 | { ... } | TRef | main.rs:1481:10:1481:10 | T | | main.rs:1491:13:1491:19 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1491:13:1491:19 | &... | &T | main.rs:1481:10:1481:10 | T | +| main.rs:1491:13:1491:19 | &... | TRef | main.rs:1481:10:1481:10 | T | | main.rs:1491:14:1491:17 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1491:14:1491:17 | self | &T | main.rs:1470:5:1471:19 | S | -| main.rs:1491:14:1491:17 | self | &T.T | main.rs:1481:10:1481:10 | T | +| main.rs:1491:14:1491:17 | self | TRef | main.rs:1470:5:1471:19 | S | +| main.rs:1491:14:1491:17 | self | TRef.T | main.rs:1481:10:1481:10 | T | | main.rs:1491:14:1491:19 | self.0 | | main.rs:1481:10:1481:10 | T | | main.rs:1496:29:1496:33 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1496:29:1496:33 | SelfParam | &T | main.rs:1495:5:1498:5 | Self [trait ATrait] | +| main.rs:1496:29:1496:33 | SelfParam | TRef | main.rs:1495:5:1498:5 | Self [trait ATrait] | | main.rs:1497:33:1497:36 | SelfParam | | main.rs:1495:5:1498:5 | Self [trait ATrait] | | main.rs:1503:29:1503:33 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1503:29:1503:33 | SelfParam | &T | {EXTERNAL LOCATION} | & | -| main.rs:1503:29:1503:33 | SelfParam | &T.&T | main.rs:1476:5:1479:5 | MyInt | +| main.rs:1503:29:1503:33 | SelfParam | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1503:29:1503:33 | SelfParam | TRef.TRef | main.rs:1476:5:1479:5 | MyInt | | main.rs:1503:43:1505:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:1504:13:1504:22 | (...) | | main.rs:1476:5:1479:5 | MyInt | | main.rs:1504:13:1504:24 | ... .a | | {EXTERNAL LOCATION} | i64 | | main.rs:1504:14:1504:21 | * ... | | main.rs:1476:5:1479:5 | MyInt | | main.rs:1504:15:1504:21 | (...) | | {EXTERNAL LOCATION} | & | -| main.rs:1504:15:1504:21 | (...) | &T | main.rs:1476:5:1479:5 | MyInt | +| main.rs:1504:15:1504:21 | (...) | TRef | main.rs:1476:5:1479:5 | MyInt | | main.rs:1504:16:1504:20 | * ... | | {EXTERNAL LOCATION} | & | -| main.rs:1504:16:1504:20 | * ... | &T | main.rs:1476:5:1479:5 | MyInt | +| main.rs:1504:16:1504:20 | * ... | TRef | main.rs:1476:5:1479:5 | MyInt | | main.rs:1504:17:1504:20 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1504:17:1504:20 | self | &T | {EXTERNAL LOCATION} | & | -| main.rs:1504:17:1504:20 | self | &T.&T | main.rs:1476:5:1479:5 | MyInt | +| main.rs:1504:17:1504:20 | self | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1504:17:1504:20 | self | TRef.TRef | main.rs:1476:5:1479:5 | MyInt | | main.rs:1508:33:1508:36 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1508:33:1508:36 | SelfParam | &T | main.rs:1476:5:1479:5 | MyInt | +| main.rs:1508:33:1508:36 | SelfParam | TRef | main.rs:1476:5:1479:5 | MyInt | | main.rs:1508:46:1510:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:1509:13:1509:19 | (...) | | main.rs:1476:5:1479:5 | MyInt | | main.rs:1509:13:1509:21 | ... .a | | {EXTERNAL LOCATION} | i64 | | main.rs:1509:14:1509:18 | * ... | | main.rs:1476:5:1479:5 | MyInt | | main.rs:1509:15:1509:18 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1509:15:1509:18 | self | &T | main.rs:1476:5:1479:5 | MyInt | +| main.rs:1509:15:1509:18 | self | TRef | main.rs:1476:5:1479:5 | MyInt | | main.rs:1513:16:1563:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1514:13:1514:14 | x1 | | main.rs:1470:5:1471:19 | S | | main.rs:1514:13:1514:14 | x1 | T | main.rs:1473:5:1474:14 | S2 | @@ -3389,7 +3389,7 @@ inferType | main.rs:1514:18:1514:22 | S(...) | T | main.rs:1473:5:1474:14 | S2 | | main.rs:1514:20:1514:21 | S2 | | main.rs:1473:5:1474:14 | S2 | | main.rs:1515:18:1515:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1515:18:1515:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1515:18:1515:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1515:18:1515:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1515:18:1515:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1515:26:1515:27 | x1 | | main.rs:1470:5:1471:19 | S | @@ -3401,111 +3401,111 @@ inferType | main.rs:1517:18:1517:22 | S(...) | T | main.rs:1473:5:1474:14 | S2 | | main.rs:1517:20:1517:21 | S2 | | main.rs:1473:5:1474:14 | S2 | | main.rs:1519:18:1519:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1519:18:1519:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1519:18:1519:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1519:18:1519:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1519:18:1519:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1519:26:1519:27 | x2 | | main.rs:1470:5:1471:19 | S | | main.rs:1519:26:1519:27 | x2 | T | main.rs:1473:5:1474:14 | S2 | | main.rs:1519:26:1519:32 | x2.m2() | | {EXTERNAL LOCATION} | & | -| main.rs:1519:26:1519:32 | x2.m2() | &T | main.rs:1473:5:1474:14 | S2 | +| main.rs:1519:26:1519:32 | x2.m2() | TRef | main.rs:1473:5:1474:14 | S2 | | main.rs:1520:18:1520:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1520:18:1520:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1520:18:1520:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1520:18:1520:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1520:18:1520:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1520:26:1520:27 | x2 | | main.rs:1470:5:1471:19 | S | | main.rs:1520:26:1520:27 | x2 | T | main.rs:1473:5:1474:14 | S2 | | main.rs:1520:26:1520:32 | x2.m3() | | {EXTERNAL LOCATION} | & | -| main.rs:1520:26:1520:32 | x2.m3() | &T | main.rs:1473:5:1474:14 | S2 | +| main.rs:1520:26:1520:32 | x2.m3() | TRef | main.rs:1473:5:1474:14 | S2 | | main.rs:1522:13:1522:14 | x3 | | main.rs:1470:5:1471:19 | S | | main.rs:1522:13:1522:14 | x3 | T | main.rs:1473:5:1474:14 | S2 | | main.rs:1522:18:1522:22 | S(...) | | main.rs:1470:5:1471:19 | S | | main.rs:1522:18:1522:22 | S(...) | T | main.rs:1473:5:1474:14 | S2 | | main.rs:1522:20:1522:21 | S2 | | main.rs:1473:5:1474:14 | S2 | | main.rs:1524:18:1524:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1524:18:1524:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1524:18:1524:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1524:18:1524:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1524:18:1524:41 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1524:26:1524:41 | ...::m2(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1524:26:1524:41 | ...::m2(...) | &T | main.rs:1473:5:1474:14 | S2 | +| main.rs:1524:26:1524:41 | ...::m2(...) | TRef | main.rs:1473:5:1474:14 | S2 | | main.rs:1524:38:1524:40 | &x3 | | {EXTERNAL LOCATION} | & | -| main.rs:1524:38:1524:40 | &x3 | &T | main.rs:1470:5:1471:19 | S | -| main.rs:1524:38:1524:40 | &x3 | &T.T | main.rs:1473:5:1474:14 | S2 | +| main.rs:1524:38:1524:40 | &x3 | TRef | main.rs:1470:5:1471:19 | S | +| main.rs:1524:38:1524:40 | &x3 | TRef.T | main.rs:1473:5:1474:14 | S2 | | main.rs:1524:39:1524:40 | x3 | | main.rs:1470:5:1471:19 | S | | main.rs:1524:39:1524:40 | x3 | T | main.rs:1473:5:1474:14 | S2 | | main.rs:1525:18:1525:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1525:18:1525:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1525:18:1525:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1525:18:1525:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1525:18:1525:41 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1525:26:1525:41 | ...::m3(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1525:26:1525:41 | ...::m3(...) | &T | main.rs:1473:5:1474:14 | S2 | +| main.rs:1525:26:1525:41 | ...::m3(...) | TRef | main.rs:1473:5:1474:14 | S2 | | main.rs:1525:38:1525:40 | &x3 | | {EXTERNAL LOCATION} | & | -| main.rs:1525:38:1525:40 | &x3 | &T | main.rs:1470:5:1471:19 | S | -| main.rs:1525:38:1525:40 | &x3 | &T.T | main.rs:1473:5:1474:14 | S2 | +| main.rs:1525:38:1525:40 | &x3 | TRef | main.rs:1470:5:1471:19 | S | +| main.rs:1525:38:1525:40 | &x3 | TRef.T | main.rs:1473:5:1474:14 | S2 | | main.rs:1525:39:1525:40 | x3 | | main.rs:1470:5:1471:19 | S | | main.rs:1525:39:1525:40 | x3 | T | main.rs:1473:5:1474:14 | S2 | | main.rs:1527:13:1527:14 | x4 | | {EXTERNAL LOCATION} | & | -| main.rs:1527:13:1527:14 | x4 | &T | main.rs:1470:5:1471:19 | S | -| main.rs:1527:13:1527:14 | x4 | &T.T | main.rs:1473:5:1474:14 | S2 | +| main.rs:1527:13:1527:14 | x4 | TRef | main.rs:1470:5:1471:19 | S | +| main.rs:1527:13:1527:14 | x4 | TRef.T | main.rs:1473:5:1474:14 | S2 | | main.rs:1527:18:1527:23 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1527:18:1527:23 | &... | &T | main.rs:1470:5:1471:19 | S | -| main.rs:1527:18:1527:23 | &... | &T.T | main.rs:1473:5:1474:14 | S2 | +| main.rs:1527:18:1527:23 | &... | TRef | main.rs:1470:5:1471:19 | S | +| main.rs:1527:18:1527:23 | &... | TRef.T | main.rs:1473:5:1474:14 | S2 | | main.rs:1527:19:1527:23 | S(...) | | main.rs:1470:5:1471:19 | S | | main.rs:1527:19:1527:23 | S(...) | T | main.rs:1473:5:1474:14 | S2 | | main.rs:1527:21:1527:22 | S2 | | main.rs:1473:5:1474:14 | S2 | | main.rs:1529:18:1529:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1529:18:1529:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1529:18:1529:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1529:18:1529:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1529:18:1529:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1529:26:1529:27 | x4 | | {EXTERNAL LOCATION} | & | -| main.rs:1529:26:1529:27 | x4 | &T | main.rs:1470:5:1471:19 | S | -| main.rs:1529:26:1529:27 | x4 | &T.T | main.rs:1473:5:1474:14 | S2 | +| main.rs:1529:26:1529:27 | x4 | TRef | main.rs:1470:5:1471:19 | S | +| main.rs:1529:26:1529:27 | x4 | TRef.T | main.rs:1473:5:1474:14 | S2 | | main.rs:1529:26:1529:32 | x4.m2() | | {EXTERNAL LOCATION} | & | -| main.rs:1529:26:1529:32 | x4.m2() | &T | main.rs:1473:5:1474:14 | S2 | +| main.rs:1529:26:1529:32 | x4.m2() | TRef | main.rs:1473:5:1474:14 | S2 | | main.rs:1530:18:1530:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1530:18:1530:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1530:18:1530:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1530:18:1530:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1530:18:1530:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1530:26:1530:27 | x4 | | {EXTERNAL LOCATION} | & | -| main.rs:1530:26:1530:27 | x4 | &T | main.rs:1470:5:1471:19 | S | -| main.rs:1530:26:1530:27 | x4 | &T.T | main.rs:1473:5:1474:14 | S2 | +| main.rs:1530:26:1530:27 | x4 | TRef | main.rs:1470:5:1471:19 | S | +| main.rs:1530:26:1530:27 | x4 | TRef.T | main.rs:1473:5:1474:14 | S2 | | main.rs:1530:26:1530:32 | x4.m3() | | {EXTERNAL LOCATION} | & | -| main.rs:1530:26:1530:32 | x4.m3() | &T | main.rs:1473:5:1474:14 | S2 | +| main.rs:1530:26:1530:32 | x4.m3() | TRef | main.rs:1473:5:1474:14 | S2 | | main.rs:1532:13:1532:14 | x5 | | {EXTERNAL LOCATION} | & | -| main.rs:1532:13:1532:14 | x5 | &T | main.rs:1470:5:1471:19 | S | -| main.rs:1532:13:1532:14 | x5 | &T.T | main.rs:1473:5:1474:14 | S2 | +| main.rs:1532:13:1532:14 | x5 | TRef | main.rs:1470:5:1471:19 | S | +| main.rs:1532:13:1532:14 | x5 | TRef.T | main.rs:1473:5:1474:14 | S2 | | main.rs:1532:18:1532:23 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1532:18:1532:23 | &... | &T | main.rs:1470:5:1471:19 | S | -| main.rs:1532:18:1532:23 | &... | &T.T | main.rs:1473:5:1474:14 | S2 | +| main.rs:1532:18:1532:23 | &... | TRef | main.rs:1470:5:1471:19 | S | +| main.rs:1532:18:1532:23 | &... | TRef.T | main.rs:1473:5:1474:14 | S2 | | main.rs:1532:19:1532:23 | S(...) | | main.rs:1470:5:1471:19 | S | | main.rs:1532:19:1532:23 | S(...) | T | main.rs:1473:5:1474:14 | S2 | | main.rs:1532:21:1532:22 | S2 | | main.rs:1473:5:1474:14 | S2 | | main.rs:1534:18:1534:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1534:18:1534:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1534:18:1534:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1534:18:1534:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1534:18:1534:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1534:26:1534:27 | x5 | | {EXTERNAL LOCATION} | & | -| main.rs:1534:26:1534:27 | x5 | &T | main.rs:1470:5:1471:19 | S | -| main.rs:1534:26:1534:27 | x5 | &T.T | main.rs:1473:5:1474:14 | S2 | +| main.rs:1534:26:1534:27 | x5 | TRef | main.rs:1470:5:1471:19 | S | +| main.rs:1534:26:1534:27 | x5 | TRef.T | main.rs:1473:5:1474:14 | S2 | | main.rs:1534:26:1534:32 | x5.m1() | | main.rs:1473:5:1474:14 | S2 | | main.rs:1535:18:1535:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1535:18:1535:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1535:18:1535:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1535:18:1535:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1535:18:1535:29 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1535:26:1535:27 | x5 | | {EXTERNAL LOCATION} | & | -| main.rs:1535:26:1535:27 | x5 | &T | main.rs:1470:5:1471:19 | S | -| main.rs:1535:26:1535:27 | x5 | &T.T | main.rs:1473:5:1474:14 | S2 | +| main.rs:1535:26:1535:27 | x5 | TRef | main.rs:1470:5:1471:19 | S | +| main.rs:1535:26:1535:27 | x5 | TRef.T | main.rs:1473:5:1474:14 | S2 | | main.rs:1535:26:1535:29 | x5.0 | | main.rs:1473:5:1474:14 | S2 | | main.rs:1537:13:1537:14 | x6 | | {EXTERNAL LOCATION} | & | -| main.rs:1537:13:1537:14 | x6 | &T | main.rs:1470:5:1471:19 | S | -| main.rs:1537:13:1537:14 | x6 | &T.T | main.rs:1473:5:1474:14 | S2 | +| main.rs:1537:13:1537:14 | x6 | TRef | main.rs:1470:5:1471:19 | S | +| main.rs:1537:13:1537:14 | x6 | TRef.T | main.rs:1473:5:1474:14 | S2 | | main.rs:1537:18:1537:23 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1537:18:1537:23 | &... | &T | main.rs:1470:5:1471:19 | S | -| main.rs:1537:18:1537:23 | &... | &T.T | main.rs:1473:5:1474:14 | S2 | +| main.rs:1537:18:1537:23 | &... | TRef | main.rs:1470:5:1471:19 | S | +| main.rs:1537:18:1537:23 | &... | TRef.T | main.rs:1473:5:1474:14 | S2 | | main.rs:1537:19:1537:23 | S(...) | | main.rs:1470:5:1471:19 | S | | main.rs:1537:19:1537:23 | S(...) | T | main.rs:1473:5:1474:14 | S2 | | main.rs:1537:21:1537:22 | S2 | | main.rs:1473:5:1474:14 | S2 | | main.rs:1540:18:1540:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1540:18:1540:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1540:18:1540:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1540:18:1540:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1540:18:1540:35 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1540:26:1540:30 | (...) | | main.rs:1470:5:1471:19 | S | @@ -3514,34 +3514,34 @@ inferType | main.rs:1540:27:1540:29 | * ... | | main.rs:1470:5:1471:19 | S | | main.rs:1540:27:1540:29 | * ... | T | main.rs:1473:5:1474:14 | S2 | | main.rs:1540:28:1540:29 | x6 | | {EXTERNAL LOCATION} | & | -| main.rs:1540:28:1540:29 | x6 | &T | main.rs:1470:5:1471:19 | S | -| main.rs:1540:28:1540:29 | x6 | &T.T | main.rs:1473:5:1474:14 | S2 | +| main.rs:1540:28:1540:29 | x6 | TRef | main.rs:1470:5:1471:19 | S | +| main.rs:1540:28:1540:29 | x6 | TRef.T | main.rs:1473:5:1474:14 | S2 | | main.rs:1542:13:1542:14 | x7 | | main.rs:1470:5:1471:19 | S | | main.rs:1542:13:1542:14 | x7 | T | {EXTERNAL LOCATION} | & | -| main.rs:1542:13:1542:14 | x7 | T.&T | main.rs:1473:5:1474:14 | S2 | +| main.rs:1542:13:1542:14 | x7 | T.TRef | main.rs:1473:5:1474:14 | S2 | | main.rs:1542:18:1542:23 | S(...) | | main.rs:1470:5:1471:19 | S | | main.rs:1542:18:1542:23 | S(...) | T | {EXTERNAL LOCATION} | & | -| main.rs:1542:18:1542:23 | S(...) | T.&T | main.rs:1473:5:1474:14 | S2 | +| main.rs:1542:18:1542:23 | S(...) | T.TRef | main.rs:1473:5:1474:14 | S2 | | main.rs:1542:20:1542:22 | &S2 | | {EXTERNAL LOCATION} | & | -| main.rs:1542:20:1542:22 | &S2 | &T | main.rs:1473:5:1474:14 | S2 | +| main.rs:1542:20:1542:22 | &S2 | TRef | main.rs:1473:5:1474:14 | S2 | | main.rs:1542:21:1542:22 | S2 | | main.rs:1473:5:1474:14 | S2 | | main.rs:1545:13:1545:13 | t | | {EXTERNAL LOCATION} | & | -| main.rs:1545:13:1545:13 | t | &T | main.rs:1473:5:1474:14 | S2 | +| main.rs:1545:13:1545:13 | t | TRef | main.rs:1473:5:1474:14 | S2 | | main.rs:1545:17:1545:18 | x7 | | main.rs:1470:5:1471:19 | S | | main.rs:1545:17:1545:18 | x7 | T | {EXTERNAL LOCATION} | & | -| main.rs:1545:17:1545:18 | x7 | T.&T | main.rs:1473:5:1474:14 | S2 | +| main.rs:1545:17:1545:18 | x7 | T.TRef | main.rs:1473:5:1474:14 | S2 | | main.rs:1545:17:1545:23 | x7.m1() | | {EXTERNAL LOCATION} | & | -| main.rs:1545:17:1545:23 | x7.m1() | &T | main.rs:1473:5:1474:14 | S2 | +| main.rs:1545:17:1545:23 | x7.m1() | TRef | main.rs:1473:5:1474:14 | S2 | | main.rs:1546:18:1546:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1546:18:1546:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1546:18:1546:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1546:18:1546:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1546:18:1546:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1546:26:1546:27 | x7 | | main.rs:1470:5:1471:19 | S | | main.rs:1546:26:1546:27 | x7 | T | {EXTERNAL LOCATION} | & | -| main.rs:1546:26:1546:27 | x7 | T.&T | main.rs:1473:5:1474:14 | S2 | +| main.rs:1546:26:1546:27 | x7 | T.TRef | main.rs:1473:5:1474:14 | S2 | | main.rs:1548:13:1548:14 | x9 | | {EXTERNAL LOCATION} | String | | main.rs:1548:26:1548:32 | "Hello" | | {EXTERNAL LOCATION} | & | -| main.rs:1548:26:1548:32 | "Hello" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1548:26:1548:32 | "Hello" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1548:26:1548:44 | "Hello".to_string() | | {EXTERNAL LOCATION} | String | | main.rs:1552:13:1552:13 | u | | {EXTERNAL LOCATION} | Result | | main.rs:1552:13:1552:13 | u | T | {EXTERNAL LOCATION} | u32 | @@ -3549,78 +3549,78 @@ inferType | main.rs:1552:17:1552:33 | x9.parse() | | {EXTERNAL LOCATION} | Result | | main.rs:1552:17:1552:33 | x9.parse() | T | {EXTERNAL LOCATION} | u32 | | main.rs:1554:13:1554:20 | my_thing | | {EXTERNAL LOCATION} | & | -| main.rs:1554:13:1554:20 | my_thing | &T | main.rs:1476:5:1479:5 | MyInt | +| main.rs:1554:13:1554:20 | my_thing | TRef | main.rs:1476:5:1479:5 | MyInt | | main.rs:1554:24:1554:39 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1554:24:1554:39 | &... | &T | main.rs:1476:5:1479:5 | MyInt | +| main.rs:1554:24:1554:39 | &... | TRef | main.rs:1476:5:1479:5 | MyInt | | main.rs:1554:25:1554:39 | MyInt {...} | | main.rs:1476:5:1479:5 | MyInt | | main.rs:1554:36:1554:37 | 37 | | {EXTERNAL LOCATION} | i32 | | main.rs:1556:13:1556:13 | a | | {EXTERNAL LOCATION} | i64 | | main.rs:1556:17:1556:24 | my_thing | | {EXTERNAL LOCATION} | & | -| main.rs:1556:17:1556:24 | my_thing | &T | main.rs:1476:5:1479:5 | MyInt | +| main.rs:1556:17:1556:24 | my_thing | TRef | main.rs:1476:5:1479:5 | MyInt | | main.rs:1556:17:1556:43 | my_thing.method_on_borrow() | | {EXTERNAL LOCATION} | i64 | | main.rs:1557:18:1557:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1557:18:1557:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1557:18:1557:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1557:18:1557:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1557:18:1557:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1557:26:1557:26 | a | | {EXTERNAL LOCATION} | i64 | | main.rs:1560:13:1560:20 | my_thing | | {EXTERNAL LOCATION} | & | -| main.rs:1560:13:1560:20 | my_thing | &T | main.rs:1476:5:1479:5 | MyInt | +| main.rs:1560:13:1560:20 | my_thing | TRef | main.rs:1476:5:1479:5 | MyInt | | main.rs:1560:24:1560:39 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1560:24:1560:39 | &... | &T | main.rs:1476:5:1479:5 | MyInt | +| main.rs:1560:24:1560:39 | &... | TRef | main.rs:1476:5:1479:5 | MyInt | | main.rs:1560:25:1560:39 | MyInt {...} | | main.rs:1476:5:1479:5 | MyInt | | main.rs:1560:36:1560:37 | 38 | | {EXTERNAL LOCATION} | i32 | | main.rs:1561:13:1561:13 | a | | {EXTERNAL LOCATION} | i64 | | main.rs:1561:17:1561:24 | my_thing | | {EXTERNAL LOCATION} | & | -| main.rs:1561:17:1561:24 | my_thing | &T | main.rs:1476:5:1479:5 | MyInt | +| main.rs:1561:17:1561:24 | my_thing | TRef | main.rs:1476:5:1479:5 | MyInt | | main.rs:1561:17:1561:47 | my_thing.method_not_on_borrow() | | {EXTERNAL LOCATION} | i64 | | main.rs:1562:18:1562:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1562:18:1562:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1562:18:1562:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1562:18:1562:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1562:18:1562:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1562:26:1562:26 | a | | {EXTERNAL LOCATION} | i64 | | main.rs:1569:16:1569:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1569:16:1569:20 | SelfParam | &T | main.rs:1567:5:1575:5 | Self [trait MyTrait] | +| main.rs:1569:16:1569:20 | SelfParam | TRef | main.rs:1567:5:1575:5 | Self [trait MyTrait] | | main.rs:1572:16:1572:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1572:16:1572:20 | SelfParam | &T | main.rs:1567:5:1575:5 | Self [trait MyTrait] | +| main.rs:1572:16:1572:20 | SelfParam | TRef | main.rs:1567:5:1575:5 | Self [trait MyTrait] | | main.rs:1572:32:1574:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1572:32:1574:9 | { ... } | &T | main.rs:1567:5:1575:5 | Self [trait MyTrait] | +| main.rs:1572:32:1574:9 | { ... } | TRef | main.rs:1567:5:1575:5 | Self [trait MyTrait] | | main.rs:1573:13:1573:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1573:13:1573:16 | self | &T | main.rs:1567:5:1575:5 | Self [trait MyTrait] | +| main.rs:1573:13:1573:16 | self | TRef | main.rs:1567:5:1575:5 | Self [trait MyTrait] | | main.rs:1573:13:1573:22 | self.foo() | | {EXTERNAL LOCATION} | & | -| main.rs:1573:13:1573:22 | self.foo() | &T | main.rs:1567:5:1575:5 | Self [trait MyTrait] | +| main.rs:1573:13:1573:22 | self.foo() | TRef | main.rs:1567:5:1575:5 | Self [trait MyTrait] | | main.rs:1581:16:1581:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1581:16:1581:20 | SelfParam | &T | main.rs:1577:5:1577:20 | MyStruct | +| main.rs:1581:16:1581:20 | SelfParam | TRef | main.rs:1577:5:1577:20 | MyStruct | | main.rs:1581:36:1583:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1581:36:1583:9 | { ... } | &T | main.rs:1577:5:1577:20 | MyStruct | +| main.rs:1581:36:1583:9 | { ... } | TRef | main.rs:1577:5:1577:20 | MyStruct | | main.rs:1582:13:1582:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1582:13:1582:16 | self | &T | main.rs:1577:5:1577:20 | MyStruct | +| main.rs:1582:13:1582:16 | self | TRef | main.rs:1577:5:1577:20 | MyStruct | | main.rs:1586:16:1589:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1587:13:1587:13 | x | | main.rs:1577:5:1577:20 | MyStruct | | main.rs:1587:17:1587:24 | MyStruct | | main.rs:1577:5:1577:20 | MyStruct | | main.rs:1588:9:1588:9 | x | | main.rs:1577:5:1577:20 | MyStruct | | main.rs:1588:9:1588:15 | x.bar() | | {EXTERNAL LOCATION} | & | -| main.rs:1588:9:1588:15 | x.bar() | &T | main.rs:1577:5:1577:20 | MyStruct | +| main.rs:1588:9:1588:15 | x.bar() | TRef | main.rs:1577:5:1577:20 | MyStruct | | main.rs:1598:16:1598:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1598:16:1598:20 | SelfParam | &T | main.rs:1595:5:1595:26 | MyStruct | -| main.rs:1598:16:1598:20 | SelfParam | &T.T | main.rs:1597:10:1597:10 | T | +| main.rs:1598:16:1598:20 | SelfParam | TRef | main.rs:1595:5:1595:26 | MyStruct | +| main.rs:1598:16:1598:20 | SelfParam | TRef.T | main.rs:1597:10:1597:10 | T | | main.rs:1598:32:1600:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1598:32:1600:9 | { ... } | &T | main.rs:1595:5:1595:26 | MyStruct | -| main.rs:1598:32:1600:9 | { ... } | &T.T | main.rs:1597:10:1597:10 | T | +| main.rs:1598:32:1600:9 | { ... } | TRef | main.rs:1595:5:1595:26 | MyStruct | +| main.rs:1598:32:1600:9 | { ... } | TRef.T | main.rs:1597:10:1597:10 | T | | main.rs:1599:13:1599:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1599:13:1599:16 | self | &T | main.rs:1595:5:1595:26 | MyStruct | -| main.rs:1599:13:1599:16 | self | &T.T | main.rs:1597:10:1597:10 | T | +| main.rs:1599:13:1599:16 | self | TRef | main.rs:1595:5:1595:26 | MyStruct | +| main.rs:1599:13:1599:16 | self | TRef.T | main.rs:1597:10:1597:10 | T | | main.rs:1602:16:1602:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1602:16:1602:20 | SelfParam | &T | main.rs:1595:5:1595:26 | MyStruct | -| main.rs:1602:16:1602:20 | SelfParam | &T.T | main.rs:1597:10:1597:10 | T | +| main.rs:1602:16:1602:20 | SelfParam | TRef | main.rs:1595:5:1595:26 | MyStruct | +| main.rs:1602:16:1602:20 | SelfParam | TRef.T | main.rs:1597:10:1597:10 | T | | main.rs:1602:23:1602:23 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1602:23:1602:23 | x | &T | main.rs:1595:5:1595:26 | MyStruct | -| main.rs:1602:23:1602:23 | x | &T.T | main.rs:1597:10:1597:10 | T | +| main.rs:1602:23:1602:23 | x | TRef | main.rs:1595:5:1595:26 | MyStruct | +| main.rs:1602:23:1602:23 | x | TRef.T | main.rs:1597:10:1597:10 | T | | main.rs:1602:42:1604:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1602:42:1604:9 | { ... } | &T | main.rs:1595:5:1595:26 | MyStruct | -| main.rs:1602:42:1604:9 | { ... } | &T.T | main.rs:1597:10:1597:10 | T | +| main.rs:1602:42:1604:9 | { ... } | TRef | main.rs:1595:5:1595:26 | MyStruct | +| main.rs:1602:42:1604:9 | { ... } | TRef.T | main.rs:1597:10:1597:10 | T | | main.rs:1603:13:1603:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1603:13:1603:16 | self | &T | main.rs:1595:5:1595:26 | MyStruct | -| main.rs:1603:13:1603:16 | self | &T.T | main.rs:1597:10:1597:10 | T | +| main.rs:1603:13:1603:16 | self | TRef | main.rs:1595:5:1595:26 | MyStruct | +| main.rs:1603:13:1603:16 | self | TRef.T | main.rs:1597:10:1597:10 | T | | main.rs:1607:16:1613:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1608:13:1608:13 | x | | main.rs:1595:5:1595:26 | MyStruct | | main.rs:1608:13:1608:13 | x | T | main.rs:1593:5:1593:13 | S | @@ -3630,8 +3630,8 @@ inferType | main.rs:1609:9:1609:9 | x | | main.rs:1595:5:1595:26 | MyStruct | | main.rs:1609:9:1609:9 | x | T | main.rs:1593:5:1593:13 | S | | main.rs:1609:9:1609:15 | x.foo() | | {EXTERNAL LOCATION} | & | -| main.rs:1609:9:1609:15 | x.foo() | &T | main.rs:1595:5:1595:26 | MyStruct | -| main.rs:1609:9:1609:15 | x.foo() | &T.T | main.rs:1593:5:1593:13 | S | +| main.rs:1609:9:1609:15 | x.foo() | TRef | main.rs:1595:5:1595:26 | MyStruct | +| main.rs:1609:9:1609:15 | x.foo() | TRef.T | main.rs:1593:5:1593:13 | S | | main.rs:1610:13:1610:13 | x | | main.rs:1595:5:1595:26 | MyStruct | | main.rs:1610:13:1610:13 | x | T | main.rs:1593:5:1593:13 | S | | main.rs:1610:17:1610:27 | MyStruct(...) | | main.rs:1595:5:1595:26 | MyStruct | @@ -3640,123 +3640,123 @@ inferType | main.rs:1612:9:1612:9 | x | | main.rs:1595:5:1595:26 | MyStruct | | main.rs:1612:9:1612:9 | x | T | main.rs:1593:5:1593:13 | S | | main.rs:1612:9:1612:18 | x.bar(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1612:9:1612:18 | x.bar(...) | &T | main.rs:1595:5:1595:26 | MyStruct | -| main.rs:1612:9:1612:18 | x.bar(...) | &T.T | main.rs:1593:5:1593:13 | S | +| main.rs:1612:9:1612:18 | x.bar(...) | TRef | main.rs:1595:5:1595:26 | MyStruct | +| main.rs:1612:9:1612:18 | x.bar(...) | TRef.T | main.rs:1593:5:1593:13 | S | | main.rs:1612:15:1612:17 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1612:15:1612:17 | &... | &T | {EXTERNAL LOCATION} | & | -| main.rs:1612:15:1612:17 | &... | &T.&T | main.rs:1595:5:1595:26 | MyStruct | -| main.rs:1612:15:1612:17 | &... | &T.&T.T | main.rs:1593:5:1593:13 | S | +| main.rs:1612:15:1612:17 | &... | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1612:15:1612:17 | &... | TRef.TRef | main.rs:1595:5:1595:26 | MyStruct | +| main.rs:1612:15:1612:17 | &... | TRef.TRef.T | main.rs:1593:5:1593:13 | S | | main.rs:1612:16:1612:17 | &x | | {EXTERNAL LOCATION} | & | -| main.rs:1612:16:1612:17 | &x | &T | main.rs:1595:5:1595:26 | MyStruct | -| main.rs:1612:16:1612:17 | &x | &T.T | main.rs:1593:5:1593:13 | S | +| main.rs:1612:16:1612:17 | &x | TRef | main.rs:1595:5:1595:26 | MyStruct | +| main.rs:1612:16:1612:17 | &x | TRef.T | main.rs:1593:5:1593:13 | S | | main.rs:1612:17:1612:17 | x | | main.rs:1595:5:1595:26 | MyStruct | | main.rs:1612:17:1612:17 | x | T | main.rs:1593:5:1593:13 | S | | main.rs:1623:17:1623:25 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1623:17:1623:25 | SelfParam | &T | main.rs:1617:5:1620:5 | MyFlag | +| main.rs:1623:17:1623:25 | SelfParam | TRef | main.rs:1617:5:1620:5 | MyFlag | | main.rs:1623:28:1625:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1624:13:1624:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1624:13:1624:16 | self | &T | main.rs:1617:5:1620:5 | MyFlag | +| main.rs:1624:13:1624:16 | self | TRef | main.rs:1617:5:1620:5 | MyFlag | | main.rs:1624:13:1624:21 | self.bool | | {EXTERNAL LOCATION} | bool | | main.rs:1624:13:1624:34 | ... = ... | | {EXTERNAL LOCATION} | () | | main.rs:1624:25:1624:34 | ! ... | | {EXTERNAL LOCATION} | bool | | main.rs:1624:26:1624:29 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1624:26:1624:29 | self | &T | main.rs:1617:5:1620:5 | MyFlag | +| main.rs:1624:26:1624:29 | self | TRef | main.rs:1617:5:1620:5 | MyFlag | | main.rs:1624:26:1624:34 | self.bool | | {EXTERNAL LOCATION} | bool | | main.rs:1631:15:1631:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1631:15:1631:19 | SelfParam | &T | main.rs:1628:5:1628:13 | S | +| main.rs:1631:15:1631:19 | SelfParam | TRef | main.rs:1628:5:1628:13 | S | | main.rs:1631:31:1633:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1631:31:1633:9 | { ... } | &T | main.rs:1628:5:1628:13 | S | +| main.rs:1631:31:1633:9 | { ... } | TRef | main.rs:1628:5:1628:13 | S | | main.rs:1632:13:1632:19 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1632:13:1632:19 | &... | &T | {EXTERNAL LOCATION} | & | -| main.rs:1632:13:1632:19 | &... | &T | main.rs:1628:5:1628:13 | S | -| main.rs:1632:13:1632:19 | &... | &T.&T | {EXTERNAL LOCATION} | & | -| main.rs:1632:13:1632:19 | &... | &T.&T.&T | {EXTERNAL LOCATION} | & | -| main.rs:1632:13:1632:19 | &... | &T.&T.&T.&T | main.rs:1628:5:1628:13 | S | +| main.rs:1632:13:1632:19 | &... | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1632:13:1632:19 | &... | TRef | main.rs:1628:5:1628:13 | S | +| main.rs:1632:13:1632:19 | &... | TRef.TRef | {EXTERNAL LOCATION} | & | +| main.rs:1632:13:1632:19 | &... | TRef.TRef.TRef | {EXTERNAL LOCATION} | & | +| main.rs:1632:13:1632:19 | &... | TRef.TRef.TRef.TRef | main.rs:1628:5:1628:13 | S | | main.rs:1632:14:1632:19 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1632:14:1632:19 | &... | &T | {EXTERNAL LOCATION} | & | -| main.rs:1632:14:1632:19 | &... | &T.&T | {EXTERNAL LOCATION} | & | -| main.rs:1632:14:1632:19 | &... | &T.&T.&T | main.rs:1628:5:1628:13 | S | +| main.rs:1632:14:1632:19 | &... | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1632:14:1632:19 | &... | TRef.TRef | {EXTERNAL LOCATION} | & | +| main.rs:1632:14:1632:19 | &... | TRef.TRef.TRef | main.rs:1628:5:1628:13 | S | | main.rs:1632:15:1632:19 | &self | | {EXTERNAL LOCATION} | & | -| main.rs:1632:15:1632:19 | &self | &T | {EXTERNAL LOCATION} | & | -| main.rs:1632:15:1632:19 | &self | &T.&T | main.rs:1628:5:1628:13 | S | +| main.rs:1632:15:1632:19 | &self | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1632:15:1632:19 | &self | TRef.TRef | main.rs:1628:5:1628:13 | S | | main.rs:1632:16:1632:19 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1632:16:1632:19 | self | &T | main.rs:1628:5:1628:13 | S | +| main.rs:1632:16:1632:19 | self | TRef | main.rs:1628:5:1628:13 | S | | main.rs:1635:15:1635:25 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1635:15:1635:25 | SelfParam | &T | main.rs:1628:5:1628:13 | S | +| main.rs:1635:15:1635:25 | SelfParam | TRef | main.rs:1628:5:1628:13 | S | | main.rs:1635:37:1637:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1635:37:1637:9 | { ... } | &T | main.rs:1628:5:1628:13 | S | +| main.rs:1635:37:1637:9 | { ... } | TRef | main.rs:1628:5:1628:13 | S | | main.rs:1636:13:1636:19 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1636:13:1636:19 | &... | &T | {EXTERNAL LOCATION} | & | -| main.rs:1636:13:1636:19 | &... | &T | main.rs:1628:5:1628:13 | S | -| main.rs:1636:13:1636:19 | &... | &T.&T | {EXTERNAL LOCATION} | & | -| main.rs:1636:13:1636:19 | &... | &T.&T.&T | {EXTERNAL LOCATION} | & | -| main.rs:1636:13:1636:19 | &... | &T.&T.&T.&T | main.rs:1628:5:1628:13 | S | +| main.rs:1636:13:1636:19 | &... | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1636:13:1636:19 | &... | TRef | main.rs:1628:5:1628:13 | S | +| main.rs:1636:13:1636:19 | &... | TRef.TRef | {EXTERNAL LOCATION} | & | +| main.rs:1636:13:1636:19 | &... | TRef.TRef.TRef | {EXTERNAL LOCATION} | & | +| main.rs:1636:13:1636:19 | &... | TRef.TRef.TRef.TRef | main.rs:1628:5:1628:13 | S | | main.rs:1636:14:1636:19 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1636:14:1636:19 | &... | &T | {EXTERNAL LOCATION} | & | -| main.rs:1636:14:1636:19 | &... | &T.&T | {EXTERNAL LOCATION} | & | -| main.rs:1636:14:1636:19 | &... | &T.&T.&T | main.rs:1628:5:1628:13 | S | +| main.rs:1636:14:1636:19 | &... | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1636:14:1636:19 | &... | TRef.TRef | {EXTERNAL LOCATION} | & | +| main.rs:1636:14:1636:19 | &... | TRef.TRef.TRef | main.rs:1628:5:1628:13 | S | | main.rs:1636:15:1636:19 | &self | | {EXTERNAL LOCATION} | & | -| main.rs:1636:15:1636:19 | &self | &T | {EXTERNAL LOCATION} | & | -| main.rs:1636:15:1636:19 | &self | &T.&T | main.rs:1628:5:1628:13 | S | +| main.rs:1636:15:1636:19 | &self | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1636:15:1636:19 | &self | TRef.TRef | main.rs:1628:5:1628:13 | S | | main.rs:1636:16:1636:19 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1636:16:1636:19 | self | &T | main.rs:1628:5:1628:13 | S | +| main.rs:1636:16:1636:19 | self | TRef | main.rs:1628:5:1628:13 | S | | main.rs:1639:15:1639:15 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1639:15:1639:15 | x | &T | main.rs:1628:5:1628:13 | S | +| main.rs:1639:15:1639:15 | x | TRef | main.rs:1628:5:1628:13 | S | | main.rs:1639:34:1641:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1639:34:1641:9 | { ... } | &T | main.rs:1628:5:1628:13 | S | +| main.rs:1639:34:1641:9 | { ... } | TRef | main.rs:1628:5:1628:13 | S | | main.rs:1640:13:1640:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1640:13:1640:13 | x | &T | main.rs:1628:5:1628:13 | S | +| main.rs:1640:13:1640:13 | x | TRef | main.rs:1628:5:1628:13 | S | | main.rs:1643:15:1643:15 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1643:15:1643:15 | x | &T | main.rs:1628:5:1628:13 | S | +| main.rs:1643:15:1643:15 | x | TRef | main.rs:1628:5:1628:13 | S | | main.rs:1643:34:1645:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1643:34:1645:9 | { ... } | &T | main.rs:1628:5:1628:13 | S | +| main.rs:1643:34:1645:9 | { ... } | TRef | main.rs:1628:5:1628:13 | S | | main.rs:1644:13:1644:16 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1644:13:1644:16 | &... | &T | {EXTERNAL LOCATION} | & | -| main.rs:1644:13:1644:16 | &... | &T | main.rs:1628:5:1628:13 | S | -| main.rs:1644:13:1644:16 | &... | &T.&T | {EXTERNAL LOCATION} | & | -| main.rs:1644:13:1644:16 | &... | &T.&T.&T | {EXTERNAL LOCATION} | & | -| main.rs:1644:13:1644:16 | &... | &T.&T.&T.&T | main.rs:1628:5:1628:13 | S | +| main.rs:1644:13:1644:16 | &... | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1644:13:1644:16 | &... | TRef | main.rs:1628:5:1628:13 | S | +| main.rs:1644:13:1644:16 | &... | TRef.TRef | {EXTERNAL LOCATION} | & | +| main.rs:1644:13:1644:16 | &... | TRef.TRef.TRef | {EXTERNAL LOCATION} | & | +| main.rs:1644:13:1644:16 | &... | TRef.TRef.TRef.TRef | main.rs:1628:5:1628:13 | S | | main.rs:1644:14:1644:16 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1644:14:1644:16 | &... | &T | {EXTERNAL LOCATION} | & | -| main.rs:1644:14:1644:16 | &... | &T.&T | {EXTERNAL LOCATION} | & | -| main.rs:1644:14:1644:16 | &... | &T.&T.&T | main.rs:1628:5:1628:13 | S | +| main.rs:1644:14:1644:16 | &... | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1644:14:1644:16 | &... | TRef.TRef | {EXTERNAL LOCATION} | & | +| main.rs:1644:14:1644:16 | &... | TRef.TRef.TRef | main.rs:1628:5:1628:13 | S | | main.rs:1644:15:1644:16 | &x | | {EXTERNAL LOCATION} | & | -| main.rs:1644:15:1644:16 | &x | &T | {EXTERNAL LOCATION} | & | -| main.rs:1644:15:1644:16 | &x | &T.&T | main.rs:1628:5:1628:13 | S | +| main.rs:1644:15:1644:16 | &x | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1644:15:1644:16 | &x | TRef.TRef | main.rs:1628:5:1628:13 | S | | main.rs:1644:16:1644:16 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1644:16:1644:16 | x | &T | main.rs:1628:5:1628:13 | S | +| main.rs:1644:16:1644:16 | x | TRef | main.rs:1628:5:1628:13 | S | | main.rs:1648:16:1661:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1649:13:1649:13 | x | | main.rs:1628:5:1628:13 | S | | main.rs:1649:17:1649:20 | S {...} | | main.rs:1628:5:1628:13 | S | | main.rs:1650:9:1650:9 | x | | main.rs:1628:5:1628:13 | S | | main.rs:1650:9:1650:14 | x.f1() | | {EXTERNAL LOCATION} | & | -| main.rs:1650:9:1650:14 | x.f1() | &T | main.rs:1628:5:1628:13 | S | +| main.rs:1650:9:1650:14 | x.f1() | TRef | main.rs:1628:5:1628:13 | S | | main.rs:1651:9:1651:9 | x | | main.rs:1628:5:1628:13 | S | | main.rs:1651:9:1651:14 | x.f2() | | {EXTERNAL LOCATION} | & | -| main.rs:1651:9:1651:14 | x.f2() | &T | main.rs:1628:5:1628:13 | S | +| main.rs:1651:9:1651:14 | x.f2() | TRef | main.rs:1628:5:1628:13 | S | | main.rs:1652:9:1652:17 | ...::f3(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1652:9:1652:17 | ...::f3(...) | &T | main.rs:1628:5:1628:13 | S | +| main.rs:1652:9:1652:17 | ...::f3(...) | TRef | main.rs:1628:5:1628:13 | S | | main.rs:1652:15:1652:16 | &x | | {EXTERNAL LOCATION} | & | -| main.rs:1652:15:1652:16 | &x | &T | main.rs:1628:5:1628:13 | S | +| main.rs:1652:15:1652:16 | &x | TRef | main.rs:1628:5:1628:13 | S | | main.rs:1652:16:1652:16 | x | | main.rs:1628:5:1628:13 | S | | main.rs:1654:13:1654:13 | n | | {EXTERNAL LOCATION} | bool | | main.rs:1654:17:1654:24 | * ... | | {EXTERNAL LOCATION} | bool | | main.rs:1654:18:1654:24 | * ... | | {EXTERNAL LOCATION} | & | -| main.rs:1654:18:1654:24 | * ... | &T | {EXTERNAL LOCATION} | bool | +| main.rs:1654:18:1654:24 | * ... | TRef | {EXTERNAL LOCATION} | bool | | main.rs:1654:19:1654:24 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1654:19:1654:24 | &... | &T | {EXTERNAL LOCATION} | & | -| main.rs:1654:19:1654:24 | &... | &T.&T | {EXTERNAL LOCATION} | bool | +| main.rs:1654:19:1654:24 | &... | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1654:19:1654:24 | &... | TRef.TRef | {EXTERNAL LOCATION} | bool | | main.rs:1654:20:1654:24 | &true | | {EXTERNAL LOCATION} | & | -| main.rs:1654:20:1654:24 | &true | &T | {EXTERNAL LOCATION} | bool | +| main.rs:1654:20:1654:24 | &true | TRef | {EXTERNAL LOCATION} | bool | | main.rs:1654:21:1654:24 | true | | {EXTERNAL LOCATION} | bool | | main.rs:1658:17:1658:20 | flag | | main.rs:1617:5:1620:5 | MyFlag | | main.rs:1658:24:1658:41 | ...::default(...) | | main.rs:1617:5:1620:5 | MyFlag | | main.rs:1659:9:1659:31 | ...::flip(...) | | {EXTERNAL LOCATION} | () | | main.rs:1659:22:1659:30 | &mut flag | | {EXTERNAL LOCATION} | & | -| main.rs:1659:22:1659:30 | &mut flag | &T | main.rs:1617:5:1620:5 | MyFlag | +| main.rs:1659:22:1659:30 | &mut flag | TRef | main.rs:1617:5:1620:5 | MyFlag | | main.rs:1659:27:1659:30 | flag | | main.rs:1617:5:1620:5 | MyFlag | | main.rs:1660:18:1660:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1660:18:1660:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1660:18:1660:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1660:18:1660:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1660:18:1660:29 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1660:26:1660:29 | flag | | main.rs:1617:5:1620:5 | MyFlag | @@ -3836,7 +3836,7 @@ inferType | main.rs:1701:53:1704:9 | { ... } | | {EXTERNAL LOCATION} | Result | | main.rs:1701:53:1704:9 | { ... } | E | main.rs:1667:5:1668:14 | S1 | | main.rs:1702:22:1702:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1702:22:1702:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1702:22:1702:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1702:22:1702:30 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1702:22:1702:30 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1703:13:1703:34 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | @@ -3856,7 +3856,7 @@ inferType | main.rs:1710:37:1710:52 | try_same_error(...) | T | main.rs:1667:5:1668:14 | S1 | | main.rs:1710:54:1712:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1711:22:1711:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1711:22:1711:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1711:22:1711:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1711:22:1711:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1711:22:1711:35 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1711:30:1711:35 | result | | main.rs:1667:5:1668:14 | S1 | @@ -3870,7 +3870,7 @@ inferType | main.rs:1714:37:1714:55 | try_convert_error(...) | T | main.rs:1667:5:1668:14 | S1 | | main.rs:1714:57:1716:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1715:22:1715:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1715:22:1715:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1715:22:1715:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1715:22:1715:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1715:22:1715:35 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1715:30:1715:35 | result | | main.rs:1667:5:1668:14 | S1 | @@ -3884,7 +3884,7 @@ inferType | main.rs:1718:37:1718:49 | try_chained(...) | T | main.rs:1667:5:1668:14 | S1 | | main.rs:1718:51:1720:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1719:22:1719:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1719:22:1719:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1719:22:1719:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1719:22:1719:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1719:22:1719:35 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1719:30:1719:35 | result | | main.rs:1667:5:1668:14 | S1 | @@ -3902,7 +3902,7 @@ inferType | main.rs:1722:60:1722:61 | S1 | | main.rs:1667:5:1668:14 | S1 | | main.rs:1722:65:1724:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1723:22:1723:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:1723:22:1723:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1723:22:1723:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1723:22:1723:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1723:22:1723:35 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1723:30:1723:35 | result | | main.rs:1667:5:1668:14 | S1 | @@ -3921,9 +3921,9 @@ inferType | main.rs:1734:13:1734:13 | c | | {EXTERNAL LOCATION} | char | | main.rs:1734:17:1734:19 | 'c' | | {EXTERNAL LOCATION} | char | | main.rs:1735:13:1735:17 | hello | | {EXTERNAL LOCATION} | & | -| main.rs:1735:13:1735:17 | hello | &T | {EXTERNAL LOCATION} | str | +| main.rs:1735:13:1735:17 | hello | TRef | {EXTERNAL LOCATION} | str | | main.rs:1735:21:1735:27 | "Hello" | | {EXTERNAL LOCATION} | & | -| main.rs:1735:21:1735:27 | "Hello" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1735:21:1735:27 | "Hello" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1736:13:1736:13 | f | | {EXTERNAL LOCATION} | f64 | | main.rs:1736:17:1736:24 | 123.0f64 | | {EXTERNAL LOCATION} | f64 | | main.rs:1737:13:1737:13 | t | | {EXTERNAL LOCATION} | bool | @@ -3931,39 +3931,39 @@ inferType | main.rs:1738:13:1738:13 | f | | {EXTERNAL LOCATION} | bool | | main.rs:1738:17:1738:21 | false | | {EXTERNAL LOCATION} | bool | | main.rs:1741:26:1741:30 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1741:26:1741:30 | SelfParam | &T | main.rs:1740:9:1744:9 | Self [trait MyTrait] | +| main.rs:1741:26:1741:30 | SelfParam | TRef | main.rs:1740:9:1744:9 | Self [trait MyTrait] | | main.rs:1747:26:1747:30 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1747:26:1747:30 | SelfParam | &T | {EXTERNAL LOCATION} | [;] | -| main.rs:1747:26:1747:30 | SelfParam | &T.[T;...] | main.rs:1746:14:1746:23 | T | +| main.rs:1747:26:1747:30 | SelfParam | TRef | {EXTERNAL LOCATION} | [;] | +| main.rs:1747:26:1747:30 | SelfParam | TRef.TArray | main.rs:1746:14:1746:23 | T | | main.rs:1747:39:1749:13 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1747:39:1749:13 | { ... } | &T | main.rs:1746:14:1746:23 | T | +| main.rs:1747:39:1749:13 | { ... } | TRef | main.rs:1746:14:1746:23 | T | | main.rs:1748:17:1748:20 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1748:17:1748:20 | self | &T | {EXTERNAL LOCATION} | [;] | -| main.rs:1748:17:1748:20 | self | &T.[T;...] | main.rs:1746:14:1746:23 | T | +| main.rs:1748:17:1748:20 | self | TRef | {EXTERNAL LOCATION} | [;] | +| main.rs:1748:17:1748:20 | self | TRef.TArray | main.rs:1746:14:1746:23 | T | | main.rs:1748:17:1748:36 | ... .unwrap() | | {EXTERNAL LOCATION} | & | -| main.rs:1748:17:1748:36 | ... .unwrap() | &T | main.rs:1746:14:1746:23 | T | +| main.rs:1748:17:1748:36 | ... .unwrap() | TRef | main.rs:1746:14:1746:23 | T | | main.rs:1748:26:1748:26 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:1751:31:1753:13 | { ... } | | main.rs:1746:14:1746:23 | T | | main.rs:1752:17:1752:28 | ...::default(...) | | main.rs:1746:14:1746:23 | T | | main.rs:1756:13:1756:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1756:13:1756:13 | x | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1756:13:1756:13 | x | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1756:17:1756:25 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:1756:17:1756:25 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:1756:17:1756:25 | [...] | TArray | {EXTERNAL LOCATION} | i32 | | main.rs:1756:17:1756:37 | ... .my_method() | | {EXTERNAL LOCATION} | & | -| main.rs:1756:17:1756:37 | ... .my_method() | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1756:17:1756:37 | ... .my_method() | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1756:18:1756:18 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:1756:21:1756:21 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:1756:24:1756:24 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:1757:13:1757:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1757:13:1757:13 | x | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1757:13:1757:13 | x | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1757:17:1757:47 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1757:17:1757:47 | ...::my_method(...) | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1757:17:1757:47 | ...::my_method(...) | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1757:22:1757:22 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:1757:37:1757:46 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1757:37:1757:46 | &... | &T | {EXTERNAL LOCATION} | [;] | -| main.rs:1757:37:1757:46 | &... | &T.[T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:1757:37:1757:46 | &... | TRef | {EXTERNAL LOCATION} | [;] | +| main.rs:1757:37:1757:46 | &... | TRef.TArray | {EXTERNAL LOCATION} | i32 | | main.rs:1757:38:1757:46 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:1757:38:1757:46 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:1757:38:1757:46 | [...] | TArray | {EXTERNAL LOCATION} | i32 | | main.rs:1757:39:1757:39 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:1757:42:1757:42 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:1757:45:1757:45 | 3 | | {EXTERNAL LOCATION} | i32 | @@ -3971,170 +3971,170 @@ inferType | main.rs:1758:17:1758:37 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | | main.rs:1758:24:1758:24 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:1761:26:1761:30 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1761:26:1761:30 | SelfParam | &T | {EXTERNAL LOCATION} | [] | -| main.rs:1761:26:1761:30 | SelfParam | &T.[T] | main.rs:1760:14:1760:23 | T | +| main.rs:1761:26:1761:30 | SelfParam | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:1761:26:1761:30 | SelfParam | TRef.TSlice | main.rs:1760:14:1760:23 | T | | main.rs:1761:39:1763:13 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1761:39:1763:13 | { ... } | &T | main.rs:1760:14:1760:23 | T | +| main.rs:1761:39:1763:13 | { ... } | TRef | main.rs:1760:14:1760:23 | T | | main.rs:1762:17:1762:20 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1762:17:1762:20 | self | &T | {EXTERNAL LOCATION} | [] | -| main.rs:1762:17:1762:20 | self | &T.[T] | main.rs:1760:14:1760:23 | T | +| main.rs:1762:17:1762:20 | self | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:1762:17:1762:20 | self | TRef.TSlice | main.rs:1760:14:1760:23 | T | | main.rs:1762:17:1762:27 | self.get(...) | | {EXTERNAL LOCATION} | Option | | main.rs:1762:17:1762:27 | self.get(...) | T | {EXTERNAL LOCATION} | & | -| main.rs:1762:17:1762:27 | self.get(...) | T.&T | main.rs:1760:14:1760:23 | T | +| main.rs:1762:17:1762:27 | self.get(...) | T.TRef | main.rs:1760:14:1760:23 | T | | main.rs:1762:17:1762:36 | ... .unwrap() | | {EXTERNAL LOCATION} | & | -| main.rs:1762:17:1762:36 | ... .unwrap() | &T | main.rs:1760:14:1760:23 | T | +| main.rs:1762:17:1762:36 | ... .unwrap() | TRef | main.rs:1760:14:1760:23 | T | | main.rs:1762:26:1762:26 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:1765:31:1767:13 | { ... } | | main.rs:1760:14:1760:23 | T | | main.rs:1766:17:1766:28 | ...::default(...) | | main.rs:1760:14:1760:23 | T | | main.rs:1770:13:1770:13 | s | | {EXTERNAL LOCATION} | & | -| main.rs:1770:13:1770:13 | s | &T | {EXTERNAL LOCATION} | [] | -| main.rs:1770:13:1770:13 | s | &T.[T] | {EXTERNAL LOCATION} | i32 | +| main.rs:1770:13:1770:13 | s | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:1770:13:1770:13 | s | TRef.TSlice | {EXTERNAL LOCATION} | i32 | | main.rs:1770:25:1770:34 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1770:25:1770:34 | &... | &T | {EXTERNAL LOCATION} | [] | -| main.rs:1770:25:1770:34 | &... | &T | {EXTERNAL LOCATION} | [;] | -| main.rs:1770:25:1770:34 | &... | &T.[T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:1770:25:1770:34 | &... | &T.[T] | {EXTERNAL LOCATION} | i32 | +| main.rs:1770:25:1770:34 | &... | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:1770:25:1770:34 | &... | TRef | {EXTERNAL LOCATION} | [;] | +| main.rs:1770:25:1770:34 | &... | TRef.TArray | {EXTERNAL LOCATION} | i32 | +| main.rs:1770:25:1770:34 | &... | TRef.TSlice | {EXTERNAL LOCATION} | i32 | | main.rs:1770:26:1770:34 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:1770:26:1770:34 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:1770:26:1770:34 | [...] | TArray | {EXTERNAL LOCATION} | i32 | | main.rs:1770:27:1770:27 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:1770:30:1770:30 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:1770:33:1770:33 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:1771:13:1771:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1771:13:1771:13 | x | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1771:13:1771:13 | x | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1771:17:1771:17 | s | | {EXTERNAL LOCATION} | & | -| main.rs:1771:17:1771:17 | s | &T | {EXTERNAL LOCATION} | [] | -| main.rs:1771:17:1771:17 | s | &T.[T] | {EXTERNAL LOCATION} | i32 | +| main.rs:1771:17:1771:17 | s | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:1771:17:1771:17 | s | TRef.TSlice | {EXTERNAL LOCATION} | i32 | | main.rs:1771:17:1771:29 | s.my_method() | | {EXTERNAL LOCATION} | & | -| main.rs:1771:17:1771:29 | s.my_method() | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1771:17:1771:29 | s.my_method() | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1772:13:1772:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1772:13:1772:13 | x | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1772:13:1772:13 | x | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1772:17:1772:35 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1772:17:1772:35 | ...::my_method(...) | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1772:17:1772:35 | ...::my_method(...) | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1772:34:1772:34 | s | | {EXTERNAL LOCATION} | & | -| main.rs:1772:34:1772:34 | s | &T | {EXTERNAL LOCATION} | [] | -| main.rs:1772:34:1772:34 | s | &T.[T] | {EXTERNAL LOCATION} | i32 | +| main.rs:1772:34:1772:34 | s | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:1772:34:1772:34 | s | TRef.TSlice | {EXTERNAL LOCATION} | i32 | | main.rs:1773:13:1773:13 | x | | {EXTERNAL LOCATION} | i32 | | main.rs:1773:17:1773:34 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | | main.rs:1776:26:1776:30 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1776:26:1776:30 | SelfParam | &T | {EXTERNAL LOCATION} | (T_2) | -| main.rs:1776:26:1776:30 | SelfParam | &T.0(2) | main.rs:1775:14:1775:23 | T | -| main.rs:1776:26:1776:30 | SelfParam | &T.1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:1776:26:1776:30 | SelfParam | TRef | {EXTERNAL LOCATION} | (T_2) | +| main.rs:1776:26:1776:30 | SelfParam | TRef.T0 | main.rs:1775:14:1775:23 | T | +| main.rs:1776:26:1776:30 | SelfParam | TRef.T1 | {EXTERNAL LOCATION} | i32 | | main.rs:1776:39:1778:13 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1776:39:1778:13 | { ... } | &T | main.rs:1775:14:1775:23 | T | +| main.rs:1776:39:1778:13 | { ... } | TRef | main.rs:1775:14:1775:23 | T | | main.rs:1777:17:1777:23 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1777:17:1777:23 | &... | &T | main.rs:1775:14:1775:23 | T | +| main.rs:1777:17:1777:23 | &... | TRef | main.rs:1775:14:1775:23 | T | | main.rs:1777:18:1777:21 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1777:18:1777:21 | self | &T | {EXTERNAL LOCATION} | (T_2) | -| main.rs:1777:18:1777:21 | self | &T.0(2) | main.rs:1775:14:1775:23 | T | -| main.rs:1777:18:1777:21 | self | &T.1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:1777:18:1777:21 | self | TRef | {EXTERNAL LOCATION} | (T_2) | +| main.rs:1777:18:1777:21 | self | TRef.T0 | main.rs:1775:14:1775:23 | T | +| main.rs:1777:18:1777:21 | self | TRef.T1 | {EXTERNAL LOCATION} | i32 | | main.rs:1777:18:1777:23 | self.0 | | main.rs:1775:14:1775:23 | T | | main.rs:1780:31:1782:13 | { ... } | | main.rs:1775:14:1775:23 | T | | main.rs:1781:17:1781:28 | ...::default(...) | | main.rs:1775:14:1775:23 | T | | main.rs:1785:13:1785:13 | p | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:1785:13:1785:13 | p | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:1785:13:1785:13 | p | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:1785:13:1785:13 | p | T0 | {EXTERNAL LOCATION} | i32 | +| main.rs:1785:13:1785:13 | p | T1 | {EXTERNAL LOCATION} | i32 | | main.rs:1785:17:1785:23 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:1785:17:1785:23 | TupleExpr | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:1785:17:1785:23 | TupleExpr | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:1785:17:1785:23 | TupleExpr | T0 | {EXTERNAL LOCATION} | i32 | +| main.rs:1785:17:1785:23 | TupleExpr | T1 | {EXTERNAL LOCATION} | i32 | | main.rs:1785:18:1785:19 | 42 | | {EXTERNAL LOCATION} | i32 | | main.rs:1785:22:1785:22 | 7 | | {EXTERNAL LOCATION} | i32 | | main.rs:1786:13:1786:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1786:13:1786:13 | x | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1786:13:1786:13 | x | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1786:17:1786:17 | p | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:1786:17:1786:17 | p | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:1786:17:1786:17 | p | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:1786:17:1786:17 | p | T0 | {EXTERNAL LOCATION} | i32 | +| main.rs:1786:17:1786:17 | p | T1 | {EXTERNAL LOCATION} | i32 | | main.rs:1786:17:1786:29 | p.my_method() | | {EXTERNAL LOCATION} | & | -| main.rs:1786:17:1786:29 | p.my_method() | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1786:17:1786:29 | p.my_method() | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1787:13:1787:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1787:13:1787:13 | x | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1787:13:1787:13 | x | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1787:17:1787:39 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1787:17:1787:39 | ...::my_method(...) | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1787:17:1787:39 | ...::my_method(...) | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1787:37:1787:38 | &p | | {EXTERNAL LOCATION} | & | -| main.rs:1787:37:1787:38 | &p | &T | {EXTERNAL LOCATION} | (T_2) | -| main.rs:1787:37:1787:38 | &p | &T.0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:1787:37:1787:38 | &p | &T.1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:1787:37:1787:38 | &p | TRef | {EXTERNAL LOCATION} | (T_2) | +| main.rs:1787:37:1787:38 | &p | TRef.T0 | {EXTERNAL LOCATION} | i32 | +| main.rs:1787:37:1787:38 | &p | TRef.T1 | {EXTERNAL LOCATION} | i32 | | main.rs:1787:38:1787:38 | p | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:1787:38:1787:38 | p | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:1787:38:1787:38 | p | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:1787:38:1787:38 | p | T0 | {EXTERNAL LOCATION} | i32 | +| main.rs:1787:38:1787:38 | p | T1 | {EXTERNAL LOCATION} | i32 | | main.rs:1788:13:1788:13 | x | | {EXTERNAL LOCATION} | i32 | | main.rs:1788:17:1788:39 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | | main.rs:1791:26:1791:30 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1791:26:1791:30 | SelfParam | &T | {EXTERNAL LOCATION} | & | -| main.rs:1791:26:1791:30 | SelfParam | &T.&T | main.rs:1790:14:1790:23 | T | +| main.rs:1791:26:1791:30 | SelfParam | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1791:26:1791:30 | SelfParam | TRef.TRef | main.rs:1790:14:1790:23 | T | | main.rs:1791:39:1793:13 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1791:39:1793:13 | { ... } | &T | main.rs:1790:14:1790:23 | T | +| main.rs:1791:39:1793:13 | { ... } | TRef | main.rs:1790:14:1790:23 | T | | main.rs:1792:17:1792:21 | * ... | | {EXTERNAL LOCATION} | & | -| main.rs:1792:17:1792:21 | * ... | &T | main.rs:1790:14:1790:23 | T | +| main.rs:1792:17:1792:21 | * ... | TRef | main.rs:1790:14:1790:23 | T | | main.rs:1792:18:1792:21 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1792:18:1792:21 | self | &T | {EXTERNAL LOCATION} | & | -| main.rs:1792:18:1792:21 | self | &T.&T | main.rs:1790:14:1790:23 | T | +| main.rs:1792:18:1792:21 | self | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1792:18:1792:21 | self | TRef.TRef | main.rs:1790:14:1790:23 | T | | main.rs:1795:31:1797:13 | { ... } | | main.rs:1790:14:1790:23 | T | | main.rs:1796:17:1796:28 | ...::default(...) | | main.rs:1790:14:1790:23 | T | | main.rs:1800:13:1800:13 | r | | {EXTERNAL LOCATION} | & | -| main.rs:1800:13:1800:13 | r | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1800:13:1800:13 | r | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1800:17:1800:19 | &42 | | {EXTERNAL LOCATION} | & | -| main.rs:1800:17:1800:19 | &42 | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1800:17:1800:19 | &42 | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1800:18:1800:19 | 42 | | {EXTERNAL LOCATION} | i32 | | main.rs:1801:13:1801:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1801:13:1801:13 | x | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1801:13:1801:13 | x | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1801:17:1801:17 | r | | {EXTERNAL LOCATION} | & | -| main.rs:1801:17:1801:17 | r | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1801:17:1801:17 | r | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1801:17:1801:29 | r.my_method() | | {EXTERNAL LOCATION} | & | -| main.rs:1801:17:1801:29 | r.my_method() | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1801:17:1801:29 | r.my_method() | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1802:13:1802:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1802:13:1802:13 | x | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1802:13:1802:13 | x | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1802:17:1802:35 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1802:17:1802:35 | ...::my_method(...) | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1802:17:1802:35 | ...::my_method(...) | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1802:33:1802:34 | &r | | {EXTERNAL LOCATION} | & | -| main.rs:1802:33:1802:34 | &r | &T | {EXTERNAL LOCATION} | & | -| main.rs:1802:33:1802:34 | &r | &T.&T | {EXTERNAL LOCATION} | i32 | +| main.rs:1802:33:1802:34 | &r | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1802:33:1802:34 | &r | TRef.TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1802:34:1802:34 | r | | {EXTERNAL LOCATION} | & | -| main.rs:1802:34:1802:34 | r | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1802:34:1802:34 | r | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1803:13:1803:13 | x | | {EXTERNAL LOCATION} | i32 | | main.rs:1803:17:1803:33 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | | main.rs:1806:26:1806:30 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1806:26:1806:30 | SelfParam | &T | file://:0:0:0:0 | * | -| main.rs:1806:26:1806:30 | SelfParam | &T.*T | main.rs:1805:14:1805:23 | T | +| main.rs:1806:26:1806:30 | SelfParam | TRef | file://:0:0:0:0 | * | +| main.rs:1806:26:1806:30 | SelfParam | TRef.TPtr | main.rs:1805:14:1805:23 | T | | main.rs:1806:39:1808:13 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1806:39:1808:13 | { ... } | &T | main.rs:1805:14:1805:23 | T | +| main.rs:1806:39:1808:13 | { ... } | TRef | main.rs:1805:14:1805:23 | T | | main.rs:1807:17:1807:34 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1807:17:1807:34 | { ... } | &T | main.rs:1805:14:1805:23 | T | +| main.rs:1807:17:1807:34 | { ... } | TRef | main.rs:1805:14:1805:23 | T | | main.rs:1807:26:1807:32 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:1807:26:1807:32 | &... | &T | main.rs:1805:14:1805:23 | T | +| main.rs:1807:26:1807:32 | &... | TRef | main.rs:1805:14:1805:23 | T | | main.rs:1807:27:1807:32 | * ... | | main.rs:1805:14:1805:23 | T | | main.rs:1807:28:1807:32 | * ... | | file://:0:0:0:0 | * | -| main.rs:1807:28:1807:32 | * ... | *T | main.rs:1805:14:1805:23 | T | +| main.rs:1807:28:1807:32 | * ... | TPtr | main.rs:1805:14:1805:23 | T | | main.rs:1807:29:1807:32 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1807:29:1807:32 | self | &T | file://:0:0:0:0 | * | -| main.rs:1807:29:1807:32 | self | &T.*T | main.rs:1805:14:1805:23 | T | +| main.rs:1807:29:1807:32 | self | TRef | file://:0:0:0:0 | * | +| main.rs:1807:29:1807:32 | self | TRef.TPtr | main.rs:1805:14:1805:23 | T | | main.rs:1810:31:1812:13 | { ... } | | main.rs:1805:14:1805:23 | T | | main.rs:1811:17:1811:28 | ...::default(...) | | main.rs:1805:14:1805:23 | T | | main.rs:1815:17:1815:17 | v | | {EXTERNAL LOCATION} | i32 | | main.rs:1815:21:1815:22 | 42 | | {EXTERNAL LOCATION} | i32 | | main.rs:1816:13:1816:13 | p | | file://:0:0:0:0 | * | -| main.rs:1816:13:1816:13 | p | *T | {EXTERNAL LOCATION} | i32 | +| main.rs:1816:13:1816:13 | p | TPtr | {EXTERNAL LOCATION} | i32 | | main.rs:1816:27:1816:32 | &mut v | | {EXTERNAL LOCATION} | & | -| main.rs:1816:27:1816:32 | &mut v | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1816:27:1816:32 | &mut v | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1816:32:1816:32 | v | | {EXTERNAL LOCATION} | i32 | | main.rs:1817:13:1817:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1817:13:1817:13 | x | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1817:13:1817:13 | x | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1817:17:1817:40 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1817:17:1817:40 | { ... } | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1817:17:1817:40 | { ... } | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1817:26:1817:26 | p | | file://:0:0:0:0 | * | -| main.rs:1817:26:1817:26 | p | *T | {EXTERNAL LOCATION} | i32 | +| main.rs:1817:26:1817:26 | p | TPtr | {EXTERNAL LOCATION} | i32 | | main.rs:1817:26:1817:38 | p.my_method() | | {EXTERNAL LOCATION} | & | -| main.rs:1817:26:1817:38 | p.my_method() | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1817:26:1817:38 | p.my_method() | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1818:13:1818:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1818:13:1818:13 | x | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1818:13:1818:13 | x | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1818:17:1818:50 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1818:17:1818:50 | { ... } | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1818:17:1818:50 | { ... } | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1818:26:1818:48 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1818:26:1818:48 | ...::my_method(...) | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:1818:26:1818:48 | ...::my_method(...) | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:1818:46:1818:47 | &p | | {EXTERNAL LOCATION} | & | -| main.rs:1818:46:1818:47 | &p | &T | file://:0:0:0:0 | * | -| main.rs:1818:46:1818:47 | &p | &T.*T | {EXTERNAL LOCATION} | i32 | +| main.rs:1818:46:1818:47 | &p | TRef | file://:0:0:0:0 | * | +| main.rs:1818:46:1818:47 | &p | TRef.TPtr | {EXTERNAL LOCATION} | i32 | | main.rs:1818:47:1818:47 | p | | file://:0:0:0:0 | * | -| main.rs:1818:47:1818:47 | p | *T | {EXTERNAL LOCATION} | i32 | +| main.rs:1818:47:1818:47 | p | TPtr | {EXTERNAL LOCATION} | i32 | | main.rs:1819:13:1819:13 | x | | {EXTERNAL LOCATION} | i32 | | main.rs:1819:17:1819:37 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | | main.rs:1825:16:1837:5 | { ... } | | {EXTERNAL LOCATION} | () | @@ -4183,17 +4183,17 @@ inferType | main.rs:1861:29:1861:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1861:29:1861:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1868:23:1868:31 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1868:23:1868:31 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1868:23:1868:31 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1868:34:1868:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1868:45:1871:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1869:13:1869:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1869:13:1869:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1869:13:1869:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1869:13:1869:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1869:13:1869:27 | ... += ... | | {EXTERNAL LOCATION} | () | | main.rs:1869:23:1869:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1869:23:1869:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1870:13:1870:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1870:13:1870:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1870:13:1870:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1870:13:1870:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1870:13:1870:27 | ... += ... | | {EXTERNAL LOCATION} | () | | main.rs:1870:23:1870:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | @@ -4213,17 +4213,17 @@ inferType | main.rs:1879:29:1879:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1879:29:1879:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1886:23:1886:31 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1886:23:1886:31 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1886:23:1886:31 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1886:34:1886:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1886:45:1889:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1887:13:1887:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1887:13:1887:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1887:13:1887:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1887:13:1887:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1887:13:1887:27 | ... -= ... | | {EXTERNAL LOCATION} | () | | main.rs:1887:23:1887:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1887:23:1887:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1888:13:1888:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1888:13:1888:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1888:13:1888:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1888:13:1888:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1888:13:1888:27 | ... -= ... | | {EXTERNAL LOCATION} | () | | main.rs:1888:23:1888:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | @@ -4243,17 +4243,17 @@ inferType | main.rs:1897:29:1897:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1897:29:1897:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1903:23:1903:31 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1903:23:1903:31 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1903:23:1903:31 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1903:34:1903:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1903:45:1906:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1904:13:1904:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1904:13:1904:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1904:13:1904:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1904:13:1904:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1904:13:1904:27 | ... *= ... | | {EXTERNAL LOCATION} | () | | main.rs:1904:23:1904:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1904:23:1904:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1905:13:1905:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1905:13:1905:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1905:13:1905:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1905:13:1905:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1905:13:1905:27 | ... *= ... | | {EXTERNAL LOCATION} | () | | main.rs:1905:23:1905:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | @@ -4273,17 +4273,17 @@ inferType | main.rs:1914:29:1914:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1914:29:1914:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1920:23:1920:31 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1920:23:1920:31 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1920:23:1920:31 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1920:34:1920:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1920:45:1923:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1921:13:1921:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1921:13:1921:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1921:13:1921:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1921:13:1921:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1921:13:1921:27 | ... /= ... | | {EXTERNAL LOCATION} | () | | main.rs:1921:23:1921:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1921:23:1921:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1922:13:1922:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1922:13:1922:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1922:13:1922:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1922:13:1922:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1922:13:1922:27 | ... /= ... | | {EXTERNAL LOCATION} | () | | main.rs:1922:23:1922:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | @@ -4303,17 +4303,17 @@ inferType | main.rs:1931:29:1931:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1931:29:1931:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1937:23:1937:31 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1937:23:1937:31 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1937:23:1937:31 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1937:34:1937:36 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1937:45:1940:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1938:13:1938:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1938:13:1938:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1938:13:1938:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1938:13:1938:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1938:13:1938:27 | ... %= ... | | {EXTERNAL LOCATION} | () | | main.rs:1938:23:1938:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1938:23:1938:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1939:13:1939:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1939:13:1939:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1939:13:1939:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1939:13:1939:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1939:13:1939:27 | ... %= ... | | {EXTERNAL LOCATION} | () | | main.rs:1939:23:1939:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | @@ -4333,17 +4333,17 @@ inferType | main.rs:1948:29:1948:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1948:29:1948:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1954:26:1954:34 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1954:26:1954:34 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1954:26:1954:34 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1954:37:1954:39 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1954:48:1957:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1955:13:1955:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1955:13:1955:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1955:13:1955:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1955:13:1955:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1955:13:1955:27 | ... &= ... | | {EXTERNAL LOCATION} | () | | main.rs:1955:23:1955:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1955:23:1955:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1956:13:1956:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1956:13:1956:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1956:13:1956:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1956:13:1956:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1956:13:1956:27 | ... &= ... | | {EXTERNAL LOCATION} | () | | main.rs:1956:23:1956:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | @@ -4363,17 +4363,17 @@ inferType | main.rs:1965:29:1965:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1965:29:1965:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1971:25:1971:33 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1971:25:1971:33 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1971:25:1971:33 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1971:36:1971:38 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1971:47:1974:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1972:13:1972:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1972:13:1972:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1972:13:1972:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1972:13:1972:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1972:13:1972:27 | ... \|= ... | | {EXTERNAL LOCATION} | () | | main.rs:1972:23:1972:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1972:23:1972:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1973:13:1973:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1973:13:1973:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1973:13:1973:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1973:13:1973:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1973:13:1973:27 | ... \|= ... | | {EXTERNAL LOCATION} | () | | main.rs:1973:23:1973:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | @@ -4393,17 +4393,17 @@ inferType | main.rs:1982:29:1982:31 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1982:29:1982:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1988:26:1988:34 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:1988:26:1988:34 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1988:26:1988:34 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1988:37:1988:39 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1988:48:1991:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1989:13:1989:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1989:13:1989:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1989:13:1989:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1989:13:1989:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1989:13:1989:27 | ... ^= ... | | {EXTERNAL LOCATION} | () | | main.rs:1989:23:1989:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1989:23:1989:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1990:13:1990:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:1990:13:1990:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:1990:13:1990:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:1990:13:1990:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1990:13:1990:27 | ... ^= ... | | {EXTERNAL LOCATION} | () | | main.rs:1990:23:1990:25 | rhs | | main.rs:1843:5:1848:5 | Vec2 | @@ -4421,16 +4421,16 @@ inferType | main.rs:1999:20:1999:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1999:30:1999:32 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:2005:23:2005:31 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2005:23:2005:31 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2005:23:2005:31 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2005:34:2005:36 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:2005:44:2008:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2006:13:2006:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2006:13:2006:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2006:13:2006:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2006:13:2006:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:2006:13:2006:26 | ... <<= ... | | {EXTERNAL LOCATION} | () | | main.rs:2006:24:2006:26 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:2007:13:2007:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2007:13:2007:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2007:13:2007:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2007:13:2007:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2007:13:2007:26 | ... <<= ... | | {EXTERNAL LOCATION} | () | | main.rs:2007:24:2007:26 | rhs | | {EXTERNAL LOCATION} | u32 | @@ -4447,16 +4447,16 @@ inferType | main.rs:2016:20:2016:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | | main.rs:2016:30:2016:32 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:2022:23:2022:31 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2022:23:2022:31 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2022:23:2022:31 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2022:34:2022:36 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:2022:44:2025:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2023:13:2023:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2023:13:2023:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2023:13:2023:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2023:13:2023:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:2023:13:2023:26 | ... >>= ... | | {EXTERNAL LOCATION} | () | | main.rs:2023:24:2023:26 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:2024:13:2024:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2024:13:2024:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2024:13:2024:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2024:13:2024:18 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2024:13:2024:26 | ... >>= ... | | {EXTERNAL LOCATION} | () | | main.rs:2024:24:2024:26 | rhs | | {EXTERNAL LOCATION} | u32 | @@ -4479,150 +4479,150 @@ inferType | main.rs:2043:21:2043:24 | self | | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2043:21:2043:26 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2049:15:2049:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2049:15:2049:19 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2049:15:2049:19 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2049:22:2049:26 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2049:22:2049:26 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2049:22:2049:26 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2049:44:2051:9 | { ... } | | {EXTERNAL LOCATION} | bool | | main.rs:2050:13:2050:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2050:13:2050:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2050:13:2050:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2050:13:2050:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:2050:13:2050:29 | ... == ... | | {EXTERNAL LOCATION} | bool | | main.rs:2050:13:2050:50 | ... && ... | | {EXTERNAL LOCATION} | bool | | main.rs:2050:23:2050:27 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2050:23:2050:27 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2050:23:2050:27 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2050:23:2050:29 | other.x | | {EXTERNAL LOCATION} | i64 | | main.rs:2050:34:2050:37 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2050:34:2050:37 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2050:34:2050:37 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2050:34:2050:39 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2050:34:2050:50 | ... == ... | | {EXTERNAL LOCATION} | bool | | main.rs:2050:44:2050:48 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2050:44:2050:48 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2050:44:2050:48 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2050:44:2050:50 | other.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2053:15:2053:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2053:15:2053:19 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2053:15:2053:19 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2053:22:2053:26 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2053:22:2053:26 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2053:22:2053:26 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2053:44:2055:9 | { ... } | | {EXTERNAL LOCATION} | bool | | main.rs:2054:13:2054:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2054:13:2054:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2054:13:2054:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2054:13:2054:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:2054:13:2054:29 | ... != ... | | {EXTERNAL LOCATION} | bool | | main.rs:2054:13:2054:50 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | | main.rs:2054:23:2054:27 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2054:23:2054:27 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2054:23:2054:27 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2054:23:2054:29 | other.x | | {EXTERNAL LOCATION} | i64 | | main.rs:2054:34:2054:37 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2054:34:2054:37 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2054:34:2054:37 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2054:34:2054:39 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2054:34:2054:50 | ... != ... | | {EXTERNAL LOCATION} | bool | | main.rs:2054:44:2054:48 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2054:44:2054:48 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2054:44:2054:48 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2054:44:2054:50 | other.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2059:24:2059:28 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2059:24:2059:28 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2059:24:2059:28 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2059:31:2059:35 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2059:31:2059:35 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2059:31:2059:35 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2059:75:2061:9 | { ... } | | {EXTERNAL LOCATION} | Option | | main.rs:2059:75:2061:9 | { ... } | T | {EXTERNAL LOCATION} | Ordering | | main.rs:2060:13:2060:29 | (...) | | {EXTERNAL LOCATION} | i64 | | main.rs:2060:13:2060:63 | ... .partial_cmp(...) | | {EXTERNAL LOCATION} | Option | | main.rs:2060:13:2060:63 | ... .partial_cmp(...) | T | {EXTERNAL LOCATION} | Ordering | | main.rs:2060:14:2060:17 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2060:14:2060:17 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2060:14:2060:17 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2060:14:2060:19 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:2060:14:2060:28 | ... + ... | | {EXTERNAL LOCATION} | i64 | | main.rs:2060:23:2060:26 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2060:23:2060:26 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2060:23:2060:26 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2060:23:2060:28 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2060:43:2060:62 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:2060:43:2060:62 | &... | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:2060:43:2060:62 | &... | TRef | {EXTERNAL LOCATION} | i64 | | main.rs:2060:44:2060:62 | (...) | | {EXTERNAL LOCATION} | i64 | | main.rs:2060:45:2060:49 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2060:45:2060:49 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2060:45:2060:49 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2060:45:2060:51 | other.x | | {EXTERNAL LOCATION} | i64 | | main.rs:2060:45:2060:61 | ... + ... | | {EXTERNAL LOCATION} | i64 | | main.rs:2060:55:2060:59 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2060:55:2060:59 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2060:55:2060:59 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2060:55:2060:61 | other.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2063:15:2063:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2063:15:2063:19 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2063:15:2063:19 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2063:22:2063:26 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2063:22:2063:26 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2063:22:2063:26 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2063:44:2065:9 | { ... } | | {EXTERNAL LOCATION} | bool | | main.rs:2064:13:2064:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2064:13:2064:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2064:13:2064:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2064:13:2064:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:2064:13:2064:28 | ... < ... | | {EXTERNAL LOCATION} | bool | | main.rs:2064:13:2064:48 | ... && ... | | {EXTERNAL LOCATION} | bool | | main.rs:2064:22:2064:26 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2064:22:2064:26 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2064:22:2064:26 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2064:22:2064:28 | other.x | | {EXTERNAL LOCATION} | i64 | | main.rs:2064:33:2064:36 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2064:33:2064:36 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2064:33:2064:36 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2064:33:2064:38 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2064:33:2064:48 | ... < ... | | {EXTERNAL LOCATION} | bool | | main.rs:2064:42:2064:46 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2064:42:2064:46 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2064:42:2064:46 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2064:42:2064:48 | other.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2067:15:2067:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2067:15:2067:19 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2067:15:2067:19 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2067:22:2067:26 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2067:22:2067:26 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2067:22:2067:26 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2067:44:2069:9 | { ... } | | {EXTERNAL LOCATION} | bool | | main.rs:2068:13:2068:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2068:13:2068:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2068:13:2068:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2068:13:2068:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:2068:13:2068:29 | ... <= ... | | {EXTERNAL LOCATION} | bool | | main.rs:2068:13:2068:50 | ... && ... | | {EXTERNAL LOCATION} | bool | | main.rs:2068:23:2068:27 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2068:23:2068:27 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2068:23:2068:27 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2068:23:2068:29 | other.x | | {EXTERNAL LOCATION} | i64 | | main.rs:2068:34:2068:37 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2068:34:2068:37 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2068:34:2068:37 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2068:34:2068:39 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2068:34:2068:50 | ... <= ... | | {EXTERNAL LOCATION} | bool | | main.rs:2068:44:2068:48 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2068:44:2068:48 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2068:44:2068:48 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2068:44:2068:50 | other.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2071:15:2071:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2071:15:2071:19 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2071:15:2071:19 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2071:22:2071:26 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2071:22:2071:26 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2071:22:2071:26 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2071:44:2073:9 | { ... } | | {EXTERNAL LOCATION} | bool | | main.rs:2072:13:2072:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2072:13:2072:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2072:13:2072:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2072:13:2072:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:2072:13:2072:28 | ... > ... | | {EXTERNAL LOCATION} | bool | | main.rs:2072:13:2072:48 | ... && ... | | {EXTERNAL LOCATION} | bool | | main.rs:2072:22:2072:26 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2072:22:2072:26 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2072:22:2072:26 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2072:22:2072:28 | other.x | | {EXTERNAL LOCATION} | i64 | | main.rs:2072:33:2072:36 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2072:33:2072:36 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2072:33:2072:36 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2072:33:2072:38 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2072:33:2072:48 | ... > ... | | {EXTERNAL LOCATION} | bool | | main.rs:2072:42:2072:46 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2072:42:2072:46 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2072:42:2072:46 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2072:42:2072:48 | other.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2075:15:2075:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2075:15:2075:19 | SelfParam | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2075:15:2075:19 | SelfParam | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2075:22:2075:26 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2075:22:2075:26 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2075:22:2075:26 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2075:44:2077:9 | { ... } | | {EXTERNAL LOCATION} | bool | | main.rs:2076:13:2076:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2076:13:2076:16 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2076:13:2076:16 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2076:13:2076:18 | self.x | | {EXTERNAL LOCATION} | i64 | | main.rs:2076:13:2076:29 | ... >= ... | | {EXTERNAL LOCATION} | bool | | main.rs:2076:13:2076:50 | ... && ... | | {EXTERNAL LOCATION} | bool | | main.rs:2076:23:2076:27 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2076:23:2076:27 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2076:23:2076:27 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2076:23:2076:29 | other.x | | {EXTERNAL LOCATION} | i64 | | main.rs:2076:34:2076:37 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2076:34:2076:37 | self | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2076:34:2076:37 | self | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2076:34:2076:39 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2076:34:2076:50 | ... >= ... | | {EXTERNAL LOCATION} | bool | | main.rs:2076:44:2076:48 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2076:44:2076:48 | other | &T | main.rs:1843:5:1848:5 | Vec2 | +| main.rs:2076:44:2076:48 | other | TRef | main.rs:1843:5:1848:5 | Vec2 | | main.rs:2076:44:2076:50 | other.y | | {EXTERNAL LOCATION} | i64 | | main.rs:2080:26:2080:26 | a | | main.rs:2080:18:2080:23 | T | | main.rs:2080:32:2080:32 | b | | main.rs:2080:18:2080:23 | T | @@ -4916,9 +4916,9 @@ inferType | main.rs:2236:9:2236:16 | { ... } | Output | {EXTERNAL LOCATION} | () | | main.rs:2245:13:2245:42 | SelfParam | | {EXTERNAL LOCATION} | Pin | | main.rs:2245:13:2245:42 | SelfParam | Ptr | {EXTERNAL LOCATION} | & | -| main.rs:2245:13:2245:42 | SelfParam | Ptr.&T | main.rs:2239:5:2239:14 | S2 | +| main.rs:2245:13:2245:42 | SelfParam | Ptr.TRef | main.rs:2239:5:2239:14 | S2 | | main.rs:2246:13:2246:15 | _cx | | {EXTERNAL LOCATION} | & | -| main.rs:2246:13:2246:15 | _cx | &T | {EXTERNAL LOCATION} | Context | +| main.rs:2246:13:2246:15 | _cx | TRef | {EXTERNAL LOCATION} | Context | | main.rs:2247:44:2249:9 | { ... } | | {EXTERNAL LOCATION} | Poll | | main.rs:2247:44:2249:9 | { ... } | T | main.rs:2221:5:2221:14 | S1 | | main.rs:2248:13:2248:38 | ...::Ready(...) | | {EXTERNAL LOCATION} | Poll | @@ -4953,37 +4953,37 @@ inferType | main.rs:2263:9:2263:15 | await b | | main.rs:2221:5:2221:14 | S1 | | main.rs:2263:9:2263:19 | ... .f() | | {EXTERNAL LOCATION} | () | | main.rs:2274:15:2274:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2274:15:2274:19 | SelfParam | &T | main.rs:2273:5:2275:5 | Self [trait Trait1] | +| main.rs:2274:15:2274:19 | SelfParam | TRef | main.rs:2273:5:2275:5 | Self [trait Trait1] | | main.rs:2274:22:2274:23 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2278:15:2278:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2278:15:2278:19 | SelfParam | &T | main.rs:2277:5:2279:5 | Self [trait Trait2] | +| main.rs:2278:15:2278:19 | SelfParam | TRef | main.rs:2277:5:2279:5 | Self [trait Trait2] | | main.rs:2278:22:2278:23 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2282:15:2282:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2282:15:2282:19 | SelfParam | &T | main.rs:2268:5:2269:14 | S1 | +| main.rs:2282:15:2282:19 | SelfParam | TRef | main.rs:2268:5:2269:14 | S1 | | main.rs:2282:22:2282:23 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2286:15:2286:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2286:15:2286:19 | SelfParam | &T | main.rs:2268:5:2269:14 | S1 | +| main.rs:2286:15:2286:19 | SelfParam | TRef | main.rs:2268:5:2269:14 | S1 | | main.rs:2286:22:2286:23 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2289:37:2291:5 | { ... } | | main.rs:2289:16:2289:35 | impl ... + ... | | main.rs:2290:9:2290:10 | S1 | | main.rs:2268:5:2269:14 | S1 | | main.rs:2290:9:2290:10 | S1 | | main.rs:2289:16:2289:35 | impl ... + ... | | main.rs:2294:18:2294:22 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2294:18:2294:22 | SelfParam | &T | main.rs:2293:5:2295:5 | Self [trait MyTrait] | +| main.rs:2294:18:2294:22 | SelfParam | TRef | main.rs:2293:5:2295:5 | Self [trait MyTrait] | | main.rs:2298:18:2298:22 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2298:18:2298:22 | SelfParam | &T | main.rs:2268:5:2269:14 | S1 | +| main.rs:2298:18:2298:22 | SelfParam | TRef | main.rs:2268:5:2269:14 | S1 | | main.rs:2298:31:2300:9 | { ... } | | main.rs:2270:5:2270:14 | S2 | | main.rs:2299:13:2299:14 | S2 | | main.rs:2270:5:2270:14 | S2 | | main.rs:2304:18:2304:22 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2304:18:2304:22 | SelfParam | &T | main.rs:2271:5:2271:22 | S3 | -| main.rs:2304:18:2304:22 | SelfParam | &T.T3 | main.rs:2303:10:2303:17 | T | +| main.rs:2304:18:2304:22 | SelfParam | TRef | main.rs:2271:5:2271:22 | S3 | +| main.rs:2304:18:2304:22 | SelfParam | TRef.T3 | main.rs:2303:10:2303:17 | T | | main.rs:2304:30:2307:9 | { ... } | | main.rs:2303:10:2303:17 | T | | main.rs:2305:17:2305:21 | S3(...) | | {EXTERNAL LOCATION} | & | | main.rs:2305:17:2305:21 | S3(...) | | main.rs:2271:5:2271:22 | S3 | -| main.rs:2305:17:2305:21 | S3(...) | &T | main.rs:2271:5:2271:22 | S3 | -| main.rs:2305:17:2305:21 | S3(...) | &T.T3 | main.rs:2303:10:2303:17 | T | +| main.rs:2305:17:2305:21 | S3(...) | TRef | main.rs:2271:5:2271:22 | S3 | +| main.rs:2305:17:2305:21 | S3(...) | TRef.T3 | main.rs:2303:10:2303:17 | T | | main.rs:2305:25:2305:28 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2305:25:2305:28 | self | &T | main.rs:2271:5:2271:22 | S3 | -| main.rs:2305:25:2305:28 | self | &T.T3 | main.rs:2303:10:2303:17 | T | +| main.rs:2305:25:2305:28 | self | TRef | main.rs:2271:5:2271:22 | S3 | +| main.rs:2305:25:2305:28 | self | TRef.T3 | main.rs:2303:10:2303:17 | T | | main.rs:2306:13:2306:21 | t.clone() | | main.rs:2303:10:2303:17 | T | | main.rs:2310:45:2312:5 | { ... } | | main.rs:2310:28:2310:43 | impl ... | | main.rs:2311:9:2311:10 | S1 | | main.rs:2268:5:2269:14 | S1 | @@ -5014,19 +5014,19 @@ inferType | main.rs:2323:17:2323:17 | x | | main.rs:2322:24:2322:31 | T | | main.rs:2326:34:2326:34 | x | | main.rs:2326:24:2326:31 | T | | main.rs:2326:78:2328:5 | { ... } | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2326:78:2328:5 | { ... } | 0(2) | main.rs:2326:44:2326:58 | impl ... | -| main.rs:2326:78:2328:5 | { ... } | 0(2).impl(T) | main.rs:2326:24:2326:31 | T | -| main.rs:2326:78:2328:5 | { ... } | 1(2) | main.rs:2326:61:2326:75 | impl ... | -| main.rs:2326:78:2328:5 | { ... } | 1(2).impl(T) | main.rs:2326:24:2326:31 | T | +| main.rs:2326:78:2328:5 | { ... } | T0 | main.rs:2326:44:2326:58 | impl ... | +| main.rs:2326:78:2328:5 | { ... } | T0.impl(T) | main.rs:2326:24:2326:31 | T | +| main.rs:2326:78:2328:5 | { ... } | T1 | main.rs:2326:61:2326:75 | impl ... | +| main.rs:2326:78:2328:5 | { ... } | T1.impl(T) | main.rs:2326:24:2326:31 | T | | main.rs:2327:9:2327:30 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2327:9:2327:30 | TupleExpr | 0(2) | main.rs:2271:5:2271:22 | S3 | -| main.rs:2327:9:2327:30 | TupleExpr | 0(2) | main.rs:2326:44:2326:58 | impl ... | -| main.rs:2327:9:2327:30 | TupleExpr | 0(2).T3 | main.rs:2326:24:2326:31 | T | -| main.rs:2327:9:2327:30 | TupleExpr | 0(2).impl(T) | main.rs:2326:24:2326:31 | T | -| main.rs:2327:9:2327:30 | TupleExpr | 1(2) | main.rs:2271:5:2271:22 | S3 | -| main.rs:2327:9:2327:30 | TupleExpr | 1(2) | main.rs:2326:61:2326:75 | impl ... | -| main.rs:2327:9:2327:30 | TupleExpr | 1(2).T3 | main.rs:2326:24:2326:31 | T | -| main.rs:2327:9:2327:30 | TupleExpr | 1(2).impl(T) | main.rs:2326:24:2326:31 | T | +| main.rs:2327:9:2327:30 | TupleExpr | T0 | main.rs:2271:5:2271:22 | S3 | +| main.rs:2327:9:2327:30 | TupleExpr | T0 | main.rs:2326:44:2326:58 | impl ... | +| main.rs:2327:9:2327:30 | TupleExpr | T0.T3 | main.rs:2326:24:2326:31 | T | +| main.rs:2327:9:2327:30 | TupleExpr | T0.impl(T) | main.rs:2326:24:2326:31 | T | +| main.rs:2327:9:2327:30 | TupleExpr | T1 | main.rs:2271:5:2271:22 | S3 | +| main.rs:2327:9:2327:30 | TupleExpr | T1 | main.rs:2326:61:2326:75 | impl ... | +| main.rs:2327:9:2327:30 | TupleExpr | T1.T3 | main.rs:2326:24:2326:31 | T | +| main.rs:2327:9:2327:30 | TupleExpr | T1.impl(T) | main.rs:2326:24:2326:31 | T | | main.rs:2327:10:2327:22 | S3(...) | | main.rs:2271:5:2271:22 | S3 | | main.rs:2327:10:2327:22 | S3(...) | | main.rs:2326:44:2326:58 | impl ... | | main.rs:2327:10:2327:22 | S3(...) | T3 | main.rs:2326:24:2326:31 | T | @@ -5077,16 +5077,16 @@ inferType | main.rs:2346:33:2346:34 | S1 | | main.rs:2268:5:2269:14 | S1 | | main.rs:2347:13:2347:13 | g | | main.rs:2268:5:2269:14 | S1 | | main.rs:2347:17:2347:35 | get_a_my_trait4(...) | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2347:17:2347:35 | get_a_my_trait4(...) | 0(2) | main.rs:2326:44:2326:58 | impl ... | -| main.rs:2347:17:2347:35 | get_a_my_trait4(...) | 0(2).impl(T) | main.rs:2268:5:2269:14 | S1 | -| main.rs:2347:17:2347:35 | get_a_my_trait4(...) | 1(2) | main.rs:2326:61:2326:75 | impl ... | -| main.rs:2347:17:2347:35 | get_a_my_trait4(...) | 1(2).impl(T) | main.rs:2268:5:2269:14 | S1 | +| main.rs:2347:17:2347:35 | get_a_my_trait4(...) | T0 | main.rs:2326:44:2326:58 | impl ... | +| main.rs:2347:17:2347:35 | get_a_my_trait4(...) | T0.impl(T) | main.rs:2268:5:2269:14 | S1 | +| main.rs:2347:17:2347:35 | get_a_my_trait4(...) | T1 | main.rs:2326:61:2326:75 | impl ... | +| main.rs:2347:17:2347:35 | get_a_my_trait4(...) | T1.impl(T) | main.rs:2268:5:2269:14 | S1 | | main.rs:2347:17:2347:37 | ... .0 | | main.rs:2326:44:2326:58 | impl ... | | main.rs:2347:17:2347:37 | ... .0 | impl(T) | main.rs:2268:5:2269:14 | S1 | | main.rs:2347:17:2347:45 | ... .get_a() | | main.rs:2268:5:2269:14 | S1 | | main.rs:2347:33:2347:34 | S1 | | main.rs:2268:5:2269:14 | S1 | | main.rs:2358:16:2358:20 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2358:16:2358:20 | SelfParam | &T | main.rs:2354:5:2355:13 | S | +| main.rs:2358:16:2358:20 | SelfParam | TRef | main.rs:2354:5:2355:13 | S | | main.rs:2358:31:2360:9 | { ... } | | main.rs:2354:5:2355:13 | S | | main.rs:2359:13:2359:13 | S | | main.rs:2354:5:2355:13 | S | | main.rs:2369:26:2371:9 | { ... } | | main.rs:2363:5:2366:5 | MyVec | @@ -5097,42 +5097,42 @@ inferType | main.rs:2370:27:2370:36 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | main.rs:2370:27:2370:36 | ...::new(...) | T | main.rs:2368:10:2368:10 | T | | main.rs:2373:17:2373:25 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2373:17:2373:25 | SelfParam | &T | main.rs:2363:5:2366:5 | MyVec | -| main.rs:2373:17:2373:25 | SelfParam | &T.T | main.rs:2368:10:2368:10 | T | +| main.rs:2373:17:2373:25 | SelfParam | TRef | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2373:17:2373:25 | SelfParam | TRef.T | main.rs:2368:10:2368:10 | T | | main.rs:2373:28:2373:32 | value | | main.rs:2368:10:2368:10 | T | | main.rs:2373:38:2375:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2374:13:2374:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2374:13:2374:16 | self | &T | main.rs:2363:5:2366:5 | MyVec | -| main.rs:2374:13:2374:16 | self | &T.T | main.rs:2368:10:2368:10 | T | +| main.rs:2374:13:2374:16 | self | TRef | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2374:13:2374:16 | self | TRef.T | main.rs:2368:10:2368:10 | T | | main.rs:2374:13:2374:21 | self.data | | {EXTERNAL LOCATION} | Vec | | main.rs:2374:13:2374:21 | self.data | A | {EXTERNAL LOCATION} | Global | | main.rs:2374:13:2374:21 | self.data | T | main.rs:2368:10:2368:10 | T | | main.rs:2374:13:2374:33 | ... .push(...) | | {EXTERNAL LOCATION} | () | | main.rs:2374:28:2374:32 | value | | main.rs:2368:10:2368:10 | T | | main.rs:2382:18:2382:22 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2382:18:2382:22 | SelfParam | &T | main.rs:2363:5:2366:5 | MyVec | -| main.rs:2382:18:2382:22 | SelfParam | &T.T | main.rs:2378:10:2378:10 | T | +| main.rs:2382:18:2382:22 | SelfParam | TRef | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2382:18:2382:22 | SelfParam | TRef.T | main.rs:2378:10:2378:10 | T | | main.rs:2382:25:2382:29 | index | | {EXTERNAL LOCATION} | usize | | main.rs:2382:56:2384:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:2382:56:2384:9 | { ... } | &T | main.rs:2378:10:2378:10 | T | +| main.rs:2382:56:2384:9 | { ... } | TRef | main.rs:2378:10:2378:10 | T | | main.rs:2383:13:2383:29 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:2383:13:2383:29 | &... | &T | main.rs:2378:10:2378:10 | T | +| main.rs:2383:13:2383:29 | &... | TRef | main.rs:2378:10:2378:10 | T | | main.rs:2383:14:2383:17 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2383:14:2383:17 | self | &T | main.rs:2363:5:2366:5 | MyVec | -| main.rs:2383:14:2383:17 | self | &T.T | main.rs:2378:10:2378:10 | T | +| main.rs:2383:14:2383:17 | self | TRef | main.rs:2363:5:2366:5 | MyVec | +| main.rs:2383:14:2383:17 | self | TRef.T | main.rs:2378:10:2378:10 | T | | main.rs:2383:14:2383:22 | self.data | | {EXTERNAL LOCATION} | Vec | | main.rs:2383:14:2383:22 | self.data | A | {EXTERNAL LOCATION} | Global | | main.rs:2383:14:2383:22 | self.data | T | main.rs:2378:10:2378:10 | T | | main.rs:2383:14:2383:29 | ...[index] | | main.rs:2378:10:2378:10 | T | | main.rs:2383:24:2383:28 | index | | {EXTERNAL LOCATION} | usize | | main.rs:2387:22:2387:26 | slice | | {EXTERNAL LOCATION} | & | -| main.rs:2387:22:2387:26 | slice | &T | {EXTERNAL LOCATION} | [] | -| main.rs:2387:22:2387:26 | slice | &T.[T] | main.rs:2354:5:2355:13 | S | +| main.rs:2387:22:2387:26 | slice | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:2387:22:2387:26 | slice | TRef.TSlice | main.rs:2354:5:2355:13 | S | | main.rs:2387:35:2389:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2388:13:2388:13 | x | | main.rs:2354:5:2355:13 | S | | main.rs:2388:17:2388:21 | slice | | {EXTERNAL LOCATION} | & | -| main.rs:2388:17:2388:21 | slice | &T | {EXTERNAL LOCATION} | [] | -| main.rs:2388:17:2388:21 | slice | &T.[T] | main.rs:2354:5:2355:13 | S | +| main.rs:2388:17:2388:21 | slice | TRef | {EXTERNAL LOCATION} | [] | +| main.rs:2388:17:2388:21 | slice | TRef.TSlice | main.rs:2354:5:2355:13 | S | | main.rs:2388:17:2388:24 | slice[0] | | main.rs:2354:5:2355:13 | S | | main.rs:2388:17:2388:30 | ... .foo() | | main.rs:2354:5:2355:13 | S | | main.rs:2388:23:2388:23 | 0 | | {EXTERNAL LOCATION} | i32 | @@ -5157,14 +5157,14 @@ inferType | main.rs:2401:9:2401:20 | ... .foo() | | main.rs:2354:5:2355:13 | S | | main.rs:2401:13:2401:13 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:2403:13:2403:14 | xs | | {EXTERNAL LOCATION} | [;] | -| main.rs:2403:13:2403:14 | xs | [T;...] | main.rs:2354:5:2355:13 | S | +| main.rs:2403:13:2403:14 | xs | TArray | main.rs:2354:5:2355:13 | S | | main.rs:2403:21:2403:21 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2403:26:2403:28 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2403:26:2403:28 | [...] | [T;...] | main.rs:2354:5:2355:13 | S | +| main.rs:2403:26:2403:28 | [...] | TArray | main.rs:2354:5:2355:13 | S | | main.rs:2403:27:2403:27 | S | | main.rs:2354:5:2355:13 | S | | main.rs:2404:13:2404:13 | x | | main.rs:2354:5:2355:13 | S | | main.rs:2404:17:2404:18 | xs | | {EXTERNAL LOCATION} | [;] | -| main.rs:2404:17:2404:18 | xs | [T;...] | main.rs:2354:5:2355:13 | S | +| main.rs:2404:17:2404:18 | xs | TArray | main.rs:2354:5:2355:13 | S | | main.rs:2404:17:2404:21 | xs[0] | | main.rs:2354:5:2355:13 | S | | main.rs:2404:17:2404:27 | ... .foo() | | main.rs:2354:5:2355:13 | S | | main.rs:2404:20:2404:20 | 0 | | {EXTERNAL LOCATION} | i32 | @@ -5173,20 +5173,20 @@ inferType | main.rs:2406:34:2406:34 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:2408:9:2408:26 | analyze_slice(...) | | {EXTERNAL LOCATION} | () | | main.rs:2408:23:2408:25 | &xs | | {EXTERNAL LOCATION} | & | -| main.rs:2408:23:2408:25 | &xs | &T | {EXTERNAL LOCATION} | [;] | -| main.rs:2408:23:2408:25 | &xs | &T.[T;...] | main.rs:2354:5:2355:13 | S | +| main.rs:2408:23:2408:25 | &xs | TRef | {EXTERNAL LOCATION} | [;] | +| main.rs:2408:23:2408:25 | &xs | TRef.TArray | main.rs:2354:5:2355:13 | S | | main.rs:2408:24:2408:25 | xs | | {EXTERNAL LOCATION} | [;] | -| main.rs:2408:24:2408:25 | xs | [T;...] | main.rs:2354:5:2355:13 | S | +| main.rs:2408:24:2408:25 | xs | TArray | main.rs:2354:5:2355:13 | S | | main.rs:2413:16:2415:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2414:13:2414:13 | x | | {EXTERNAL LOCATION} | String | | main.rs:2414:17:2414:46 | MacroExpr | | {EXTERNAL LOCATION} | String | | main.rs:2414:25:2414:35 | "Hello, {}" | | {EXTERNAL LOCATION} | & | -| main.rs:2414:25:2414:35 | "Hello, {}" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2414:25:2414:35 | "Hello, {}" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2414:25:2414:45 | ...::format(...) | | {EXTERNAL LOCATION} | String | | main.rs:2414:25:2414:45 | ...::must_use(...) | | {EXTERNAL LOCATION} | String | | main.rs:2414:25:2414:45 | { ... } | | {EXTERNAL LOCATION} | String | | main.rs:2414:38:2414:45 | "World!" | | {EXTERNAL LOCATION} | & | -| main.rs:2414:38:2414:45 | "World!" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2414:38:2414:45 | "World!" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2423:19:2423:22 | SelfParam | | main.rs:2419:5:2424:5 | Self [trait MyAdd] | | main.rs:2423:25:2423:27 | rhs | | main.rs:2419:17:2419:26 | Rhs | | main.rs:2430:19:2430:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | @@ -5195,11 +5195,11 @@ inferType | main.rs:2431:13:2431:17 | value | | {EXTERNAL LOCATION} | i64 | | main.rs:2439:19:2439:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | | main.rs:2439:25:2439:29 | value | | {EXTERNAL LOCATION} | & | -| main.rs:2439:25:2439:29 | value | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:2439:25:2439:29 | value | TRef | {EXTERNAL LOCATION} | i64 | | main.rs:2439:46:2441:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:2440:13:2440:18 | * ... | | {EXTERNAL LOCATION} | i64 | | main.rs:2440:14:2440:18 | value | | {EXTERNAL LOCATION} | & | -| main.rs:2440:14:2440:18 | value | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:2440:14:2440:18 | value | TRef | {EXTERNAL LOCATION} | i64 | | main.rs:2448:19:2448:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | | main.rs:2448:25:2448:29 | value | | {EXTERNAL LOCATION} | bool | | main.rs:2448:46:2454:9 | { ... } | | {EXTERNAL LOCATION} | i64 | @@ -5244,7 +5244,7 @@ inferType | main.rs:2484:19:2484:22 | SelfParam | | main.rs:2457:5:2457:19 | S | | main.rs:2484:19:2484:22 | SelfParam | T | main.rs:2477:14:2477:14 | T | | main.rs:2484:25:2484:29 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2484:25:2484:29 | other | &T | main.rs:2477:14:2477:14 | T | +| main.rs:2484:25:2484:29 | other | TRef | main.rs:2477:14:2477:14 | T | | main.rs:2484:55:2486:9 | { ... } | | main.rs:2457:5:2457:19 | S | | main.rs:2485:13:2485:37 | S(...) | | main.rs:2457:5:2457:19 | S | | main.rs:2485:15:2485:22 | (...) | | main.rs:2477:14:2477:14 | T | @@ -5252,7 +5252,7 @@ inferType | main.rs:2485:16:2485:19 | self | T | main.rs:2477:14:2477:14 | T | | main.rs:2485:16:2485:21 | self.0 | | main.rs:2477:14:2477:14 | T | | main.rs:2485:31:2485:35 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2485:31:2485:35 | other | &T | main.rs:2477:14:2477:14 | T | +| main.rs:2485:31:2485:35 | other | TRef | main.rs:2477:14:2477:14 | T | | main.rs:2491:20:2491:24 | value | | main.rs:2489:18:2489:18 | T | | main.rs:2496:20:2496:24 | value | | {EXTERNAL LOCATION} | i64 | | main.rs:2496:40:2498:9 | { ... } | | {EXTERNAL LOCATION} | i64 | @@ -5314,7 +5314,7 @@ inferType | main.rs:2570:9:2570:9 | x | | {EXTERNAL LOCATION} | i64 | | main.rs:2570:9:2570:23 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | | main.rs:2570:18:2570:22 | &5i64 | | {EXTERNAL LOCATION} | & | -| main.rs:2570:18:2570:22 | &5i64 | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:2570:18:2570:22 | &5i64 | TRef | {EXTERNAL LOCATION} | i64 | | main.rs:2570:19:2570:22 | 5i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2571:9:2571:9 | x | | {EXTERNAL LOCATION} | i64 | | main.rs:2571:9:2571:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | @@ -5335,7 +5335,7 @@ inferType | main.rs:2575:9:2575:29 | ... .my_add(...) | | main.rs:2457:5:2457:19 | S | | main.rs:2575:11:2575:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2575:24:2575:28 | &3i64 | | {EXTERNAL LOCATION} | & | -| main.rs:2575:24:2575:28 | &3i64 | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:2575:24:2575:28 | &3i64 | TRef | {EXTERNAL LOCATION} | i64 | | main.rs:2575:25:2575:28 | 3i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2577:13:2577:13 | x | | {EXTERNAL LOCATION} | i64 | | main.rs:2577:17:2577:35 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | @@ -5374,7 +5374,7 @@ inferType | main.rs:2599:26:2601:9 | { ... } | | main.rs:2596:5:2596:24 | MyCallable | | main.rs:2600:13:2600:25 | MyCallable {...} | | main.rs:2596:5:2596:24 | MyCallable | | main.rs:2603:17:2603:21 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2603:17:2603:21 | SelfParam | &T | main.rs:2596:5:2596:24 | MyCallable | +| main.rs:2603:17:2603:21 | SelfParam | TRef | main.rs:2596:5:2596:24 | MyCallable | | main.rs:2603:31:2605:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:2604:13:2604:13 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2604:13:2604:13 | 1 | | {EXTERNAL LOCATION} | i64 | @@ -5382,14 +5382,14 @@ inferType | main.rs:2611:9:2611:29 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2611:13:2611:13 | i | | {EXTERNAL LOCATION} | i32 | | main.rs:2611:18:2611:26 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2611:18:2611:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2611:18:2611:26 | [...] | TArray | {EXTERNAL LOCATION} | i32 | | main.rs:2611:19:2611:19 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2611:22:2611:22 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:2611:25:2611:25 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:2611:28:2611:29 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2612:9:2612:44 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2612:18:2612:26 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2612:18:2612:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2612:18:2612:26 | [...] | TArray | {EXTERNAL LOCATION} | i32 | | main.rs:2612:18:2612:41 | ... .map(...) | | {EXTERNAL LOCATION} | [;] | | main.rs:2612:19:2612:19 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2612:22:2612:22 | 2 | | {EXTERNAL LOCATION} | i32 | @@ -5401,7 +5401,7 @@ inferType | main.rs:2613:9:2613:41 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2613:13:2613:13 | i | | {EXTERNAL LOCATION} | i32 | | main.rs:2613:18:2613:26 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2613:18:2613:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2613:18:2613:26 | [...] | TArray | {EXTERNAL LOCATION} | i32 | | main.rs:2613:18:2613:38 | ... .into_iter() | | {EXTERNAL LOCATION} | IntoIter | | main.rs:2613:18:2613:38 | ... .into_iter() | T | {EXTERNAL LOCATION} | i32 | | main.rs:2613:19:2613:19 | 1 | | {EXTERNAL LOCATION} | i32 | @@ -5409,11 +5409,11 @@ inferType | main.rs:2613:25:2613:25 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:2613:40:2613:41 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2615:13:2615:17 | vals1 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2615:13:2615:17 | vals1 | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2615:13:2615:17 | vals1 | [T;...] | {EXTERNAL LOCATION} | u8 | +| main.rs:2615:13:2615:17 | vals1 | TArray | {EXTERNAL LOCATION} | i32 | +| main.rs:2615:13:2615:17 | vals1 | TArray | {EXTERNAL LOCATION} | u8 | | main.rs:2615:21:2615:31 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2615:21:2615:31 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2615:21:2615:31 | [...] | [T;...] | {EXTERNAL LOCATION} | u8 | +| main.rs:2615:21:2615:31 | [...] | TArray | {EXTERNAL LOCATION} | i32 | +| main.rs:2615:21:2615:31 | [...] | TArray | {EXTERNAL LOCATION} | u8 | | main.rs:2615:22:2615:24 | 1u8 | | {EXTERNAL LOCATION} | u8 | | main.rs:2615:27:2615:27 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:2615:27:2615:27 | 2 | | {EXTERNAL LOCATION} | u8 | @@ -5423,26 +5423,26 @@ inferType | main.rs:2616:13:2616:13 | u | | {EXTERNAL LOCATION} | i32 | | main.rs:2616:13:2616:13 | u | | {EXTERNAL LOCATION} | u8 | | main.rs:2616:18:2616:22 | vals1 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2616:18:2616:22 | vals1 | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2616:18:2616:22 | vals1 | [T;...] | {EXTERNAL LOCATION} | u8 | +| main.rs:2616:18:2616:22 | vals1 | TArray | {EXTERNAL LOCATION} | i32 | +| main.rs:2616:18:2616:22 | vals1 | TArray | {EXTERNAL LOCATION} | u8 | | main.rs:2616:24:2616:25 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2618:13:2618:17 | vals2 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2618:13:2618:17 | vals2 | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2618:13:2618:17 | vals2 | TArray | {EXTERNAL LOCATION} | u16 | | main.rs:2618:21:2618:29 | [1u16; 3] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2618:21:2618:29 | [1u16; 3] | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2618:21:2618:29 | [1u16; 3] | TArray | {EXTERNAL LOCATION} | u16 | | main.rs:2618:22:2618:25 | 1u16 | | {EXTERNAL LOCATION} | u16 | | main.rs:2618:28:2618:28 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:2619:9:2619:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2619:13:2619:13 | u | | {EXTERNAL LOCATION} | u16 | | main.rs:2619:18:2619:22 | vals2 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2619:18:2619:22 | vals2 | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2619:18:2619:22 | vals2 | TArray | {EXTERNAL LOCATION} | u16 | | main.rs:2619:24:2619:25 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2621:13:2621:17 | vals3 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2621:13:2621:17 | vals3 | [T;...] | {EXTERNAL LOCATION} | u32 | +| main.rs:2621:13:2621:17 | vals3 | TArray | {EXTERNAL LOCATION} | u32 | | main.rs:2621:26:2621:26 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:2621:31:2621:39 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2621:31:2621:39 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2621:31:2621:39 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | +| main.rs:2621:31:2621:39 | [...] | TArray | {EXTERNAL LOCATION} | i32 | +| main.rs:2621:31:2621:39 | [...] | TArray | {EXTERNAL LOCATION} | u32 | | main.rs:2621:32:2621:32 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2621:32:2621:32 | 1 | | {EXTERNAL LOCATION} | u32 | | main.rs:2621:35:2621:35 | 2 | | {EXTERNAL LOCATION} | i32 | @@ -5452,121 +5452,121 @@ inferType | main.rs:2622:9:2622:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2622:13:2622:13 | u | | {EXTERNAL LOCATION} | u32 | | main.rs:2622:18:2622:22 | vals3 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2622:18:2622:22 | vals3 | [T;...] | {EXTERNAL LOCATION} | u32 | +| main.rs:2622:18:2622:22 | vals3 | TArray | {EXTERNAL LOCATION} | u32 | | main.rs:2622:24:2622:25 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2624:13:2624:17 | vals4 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2624:13:2624:17 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | +| main.rs:2624:13:2624:17 | vals4 | TArray | {EXTERNAL LOCATION} | u64 | | main.rs:2624:26:2624:26 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:2624:31:2624:36 | [1; 3] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2624:31:2624:36 | [1; 3] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2624:31:2624:36 | [1; 3] | [T;...] | {EXTERNAL LOCATION} | u64 | +| main.rs:2624:31:2624:36 | [1; 3] | TArray | {EXTERNAL LOCATION} | i32 | +| main.rs:2624:31:2624:36 | [1; 3] | TArray | {EXTERNAL LOCATION} | u64 | | main.rs:2624:32:2624:32 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2624:32:2624:32 | 1 | | {EXTERNAL LOCATION} | u64 | | main.rs:2624:35:2624:35 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:2625:9:2625:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2625:13:2625:13 | u | | {EXTERNAL LOCATION} | u64 | | main.rs:2625:18:2625:22 | vals4 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2625:18:2625:22 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | +| main.rs:2625:18:2625:22 | vals4 | TArray | {EXTERNAL LOCATION} | u64 | | main.rs:2625:24:2625:25 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2627:17:2627:24 | strings1 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2627:17:2627:24 | strings1 | [T;...] | {EXTERNAL LOCATION} | & | -| main.rs:2627:17:2627:24 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2627:17:2627:24 | strings1 | TArray | {EXTERNAL LOCATION} | & | +| main.rs:2627:17:2627:24 | strings1 | TArray.TRef | {EXTERNAL LOCATION} | str | | main.rs:2627:28:2627:48 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2627:28:2627:48 | [...] | [T;...] | {EXTERNAL LOCATION} | & | -| main.rs:2627:28:2627:48 | [...] | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2627:28:2627:48 | [...] | TArray | {EXTERNAL LOCATION} | & | +| main.rs:2627:28:2627:48 | [...] | TArray.TRef | {EXTERNAL LOCATION} | str | | main.rs:2627:29:2627:33 | "foo" | | {EXTERNAL LOCATION} | & | -| main.rs:2627:29:2627:33 | "foo" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2627:29:2627:33 | "foo" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2627:36:2627:40 | "bar" | | {EXTERNAL LOCATION} | & | -| main.rs:2627:36:2627:40 | "bar" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2627:36:2627:40 | "bar" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2627:43:2627:47 | "baz" | | {EXTERNAL LOCATION} | & | -| main.rs:2627:43:2627:47 | "baz" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2627:43:2627:47 | "baz" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2628:9:2628:29 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2628:13:2628:13 | s | | {EXTERNAL LOCATION} | Item | | main.rs:2628:13:2628:13 | s | | {EXTERNAL LOCATION} | & | -| main.rs:2628:13:2628:13 | s | &T | {EXTERNAL LOCATION} | & | -| main.rs:2628:13:2628:13 | s | &T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2628:13:2628:13 | s | TRef | {EXTERNAL LOCATION} | & | +| main.rs:2628:13:2628:13 | s | TRef.TRef | {EXTERNAL LOCATION} | str | | main.rs:2628:18:2628:26 | &strings1 | | {EXTERNAL LOCATION} | & | -| main.rs:2628:18:2628:26 | &strings1 | &T | {EXTERNAL LOCATION} | [;] | -| main.rs:2628:18:2628:26 | &strings1 | &T.[T;...] | {EXTERNAL LOCATION} | & | -| main.rs:2628:18:2628:26 | &strings1 | &T.[T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2628:18:2628:26 | &strings1 | TRef | {EXTERNAL LOCATION} | [;] | +| main.rs:2628:18:2628:26 | &strings1 | TRef.TArray | {EXTERNAL LOCATION} | & | +| main.rs:2628:18:2628:26 | &strings1 | TRef.TArray.TRef | {EXTERNAL LOCATION} | str | | main.rs:2628:19:2628:26 | strings1 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2628:19:2628:26 | strings1 | [T;...] | {EXTERNAL LOCATION} | & | -| main.rs:2628:19:2628:26 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2628:19:2628:26 | strings1 | TArray | {EXTERNAL LOCATION} | & | +| main.rs:2628:19:2628:26 | strings1 | TArray.TRef | {EXTERNAL LOCATION} | str | | main.rs:2628:28:2628:29 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2629:9:2629:33 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2629:13:2629:13 | s | | {EXTERNAL LOCATION} | Item | | main.rs:2629:13:2629:13 | s | | {EXTERNAL LOCATION} | & | -| main.rs:2629:13:2629:13 | s | &T | {EXTERNAL LOCATION} | & | -| main.rs:2629:13:2629:13 | s | &T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2629:13:2629:13 | s | TRef | {EXTERNAL LOCATION} | & | +| main.rs:2629:13:2629:13 | s | TRef.TRef | {EXTERNAL LOCATION} | str | | main.rs:2629:18:2629:30 | &mut strings1 | | {EXTERNAL LOCATION} | & | -| main.rs:2629:18:2629:30 | &mut strings1 | &T | {EXTERNAL LOCATION} | [;] | -| main.rs:2629:18:2629:30 | &mut strings1 | &T.[T;...] | {EXTERNAL LOCATION} | & | -| main.rs:2629:18:2629:30 | &mut strings1 | &T.[T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2629:18:2629:30 | &mut strings1 | TRef | {EXTERNAL LOCATION} | [;] | +| main.rs:2629:18:2629:30 | &mut strings1 | TRef.TArray | {EXTERNAL LOCATION} | & | +| main.rs:2629:18:2629:30 | &mut strings1 | TRef.TArray.TRef | {EXTERNAL LOCATION} | str | | main.rs:2629:23:2629:30 | strings1 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2629:23:2629:30 | strings1 | [T;...] | {EXTERNAL LOCATION} | & | -| main.rs:2629:23:2629:30 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2629:23:2629:30 | strings1 | TArray | {EXTERNAL LOCATION} | & | +| main.rs:2629:23:2629:30 | strings1 | TArray.TRef | {EXTERNAL LOCATION} | str | | main.rs:2629:32:2629:33 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2630:9:2630:28 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2630:13:2630:13 | s | | {EXTERNAL LOCATION} | & | -| main.rs:2630:13:2630:13 | s | &T | {EXTERNAL LOCATION} | str | +| main.rs:2630:13:2630:13 | s | TRef | {EXTERNAL LOCATION} | str | | main.rs:2630:18:2630:25 | strings1 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2630:18:2630:25 | strings1 | [T;...] | {EXTERNAL LOCATION} | & | -| main.rs:2630:18:2630:25 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2630:18:2630:25 | strings1 | TArray | {EXTERNAL LOCATION} | & | +| main.rs:2630:18:2630:25 | strings1 | TArray.TRef | {EXTERNAL LOCATION} | str | | main.rs:2630:27:2630:28 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2632:13:2632:20 | strings2 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2632:13:2632:20 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2632:13:2632:20 | strings2 | TArray | {EXTERNAL LOCATION} | String | | main.rs:2633:9:2637:9 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2633:9:2637:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2633:9:2637:9 | [...] | TArray | {EXTERNAL LOCATION} | String | | main.rs:2634:13:2634:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | | main.rs:2634:26:2634:30 | "foo" | | {EXTERNAL LOCATION} | & | -| main.rs:2634:26:2634:30 | "foo" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2634:26:2634:30 | "foo" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2635:13:2635:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | | main.rs:2635:26:2635:30 | "bar" | | {EXTERNAL LOCATION} | & | -| main.rs:2635:26:2635:30 | "bar" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2635:26:2635:30 | "bar" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2636:13:2636:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | | main.rs:2636:26:2636:30 | "baz" | | {EXTERNAL LOCATION} | & | -| main.rs:2636:26:2636:30 | "baz" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2636:26:2636:30 | "baz" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2638:9:2638:28 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2638:13:2638:13 | s | | {EXTERNAL LOCATION} | String | | main.rs:2638:18:2638:25 | strings2 | | {EXTERNAL LOCATION} | [;] | -| main.rs:2638:18:2638:25 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2638:18:2638:25 | strings2 | TArray | {EXTERNAL LOCATION} | String | | main.rs:2638:27:2638:28 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2640:13:2640:20 | strings3 | | {EXTERNAL LOCATION} | & | -| main.rs:2640:13:2640:20 | strings3 | &T | {EXTERNAL LOCATION} | [;] | -| main.rs:2640:13:2640:20 | strings3 | &T.[T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2640:13:2640:20 | strings3 | TRef | {EXTERNAL LOCATION} | [;] | +| main.rs:2640:13:2640:20 | strings3 | TRef.TArray | {EXTERNAL LOCATION} | String | | main.rs:2641:9:2645:9 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:2641:9:2645:9 | &... | &T | {EXTERNAL LOCATION} | [;] | -| main.rs:2641:9:2645:9 | &... | &T.[T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2641:9:2645:9 | &... | TRef | {EXTERNAL LOCATION} | [;] | +| main.rs:2641:9:2645:9 | &... | TRef.TArray | {EXTERNAL LOCATION} | String | | main.rs:2641:10:2645:9 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2641:10:2645:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2641:10:2645:9 | [...] | TArray | {EXTERNAL LOCATION} | String | | main.rs:2642:13:2642:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | | main.rs:2642:26:2642:30 | "foo" | | {EXTERNAL LOCATION} | & | -| main.rs:2642:26:2642:30 | "foo" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2642:26:2642:30 | "foo" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2643:13:2643:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | | main.rs:2643:26:2643:30 | "bar" | | {EXTERNAL LOCATION} | & | -| main.rs:2643:26:2643:30 | "bar" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2643:26:2643:30 | "bar" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2644:13:2644:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | | main.rs:2644:26:2644:30 | "baz" | | {EXTERNAL LOCATION} | & | -| main.rs:2644:26:2644:30 | "baz" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2644:26:2644:30 | "baz" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2646:9:2646:28 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2646:13:2646:13 | s | | {EXTERNAL LOCATION} | Item | | main.rs:2646:13:2646:13 | s | | {EXTERNAL LOCATION} | & | -| main.rs:2646:13:2646:13 | s | &T | {EXTERNAL LOCATION} | String | +| main.rs:2646:13:2646:13 | s | TRef | {EXTERNAL LOCATION} | String | | main.rs:2646:18:2646:25 | strings3 | | {EXTERNAL LOCATION} | & | -| main.rs:2646:18:2646:25 | strings3 | &T | {EXTERNAL LOCATION} | [;] | -| main.rs:2646:18:2646:25 | strings3 | &T.[T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2646:18:2646:25 | strings3 | TRef | {EXTERNAL LOCATION} | [;] | +| main.rs:2646:18:2646:25 | strings3 | TRef.TArray | {EXTERNAL LOCATION} | String | | main.rs:2646:27:2646:28 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2648:13:2648:21 | callables | | {EXTERNAL LOCATION} | [;] | -| main.rs:2648:13:2648:21 | callables | [T;...] | main.rs:2596:5:2596:24 | MyCallable | +| main.rs:2648:13:2648:21 | callables | TArray | main.rs:2596:5:2596:24 | MyCallable | | main.rs:2648:25:2648:81 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2648:25:2648:81 | [...] | [T;...] | main.rs:2596:5:2596:24 | MyCallable | +| main.rs:2648:25:2648:81 | [...] | TArray | main.rs:2596:5:2596:24 | MyCallable | | main.rs:2648:26:2648:42 | ...::new(...) | | main.rs:2596:5:2596:24 | MyCallable | | main.rs:2648:45:2648:61 | ...::new(...) | | main.rs:2596:5:2596:24 | MyCallable | | main.rs:2648:64:2648:80 | ...::new(...) | | main.rs:2596:5:2596:24 | MyCallable | | main.rs:2649:9:2653:9 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2649:13:2649:13 | c | | main.rs:2596:5:2596:24 | MyCallable | | main.rs:2650:12:2650:20 | callables | | {EXTERNAL LOCATION} | [;] | -| main.rs:2650:12:2650:20 | callables | [T;...] | main.rs:2596:5:2596:24 | MyCallable | +| main.rs:2650:12:2650:20 | callables | TArray | main.rs:2596:5:2596:24 | MyCallable | | main.rs:2651:9:2653:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2652:17:2652:22 | result | | {EXTERNAL LOCATION} | i64 | | main.rs:2652:26:2652:26 | c | | main.rs:2596:5:2596:24 | MyCallable | @@ -5583,9 +5583,9 @@ inferType | main.rs:2658:13:2658:13 | u | Idx | {EXTERNAL LOCATION} | i32 | | main.rs:2658:13:2658:13 | u | Idx | {EXTERNAL LOCATION} | u8 | | main.rs:2658:18:2658:26 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2658:18:2658:26 | [...] | [T;...] | {EXTERNAL LOCATION} | Range | -| main.rs:2658:18:2658:26 | [...] | [T;...].Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2658:18:2658:26 | [...] | [T;...].Idx | {EXTERNAL LOCATION} | u8 | +| main.rs:2658:18:2658:26 | [...] | TArray | {EXTERNAL LOCATION} | Range | +| main.rs:2658:18:2658:26 | [...] | TArray.Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2658:18:2658:26 | [...] | TArray.Idx | {EXTERNAL LOCATION} | u8 | | main.rs:2658:19:2658:21 | 0u8 | | {EXTERNAL LOCATION} | u8 | | main.rs:2658:19:2658:25 | 0u8..10 | | {EXTERNAL LOCATION} | Range | | main.rs:2658:19:2658:25 | 0u8..10 | Idx | {EXTERNAL LOCATION} | i32 | @@ -5610,7 +5610,7 @@ inferType | main.rs:2662:13:2662:13 | i | | {EXTERNAL LOCATION} | Item | | main.rs:2662:18:2662:48 | &... | | {EXTERNAL LOCATION} | & | | main.rs:2662:19:2662:36 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2662:19:2662:36 | [...] | [T;...] | {EXTERNAL LOCATION} | i64 | +| main.rs:2662:19:2662:36 | [...] | TArray | {EXTERNAL LOCATION} | i64 | | main.rs:2662:20:2662:23 | 1i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2662:26:2662:29 | 2i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2662:32:2662:35 | 3i64 | | {EXTERNAL LOCATION} | i64 | @@ -5639,8 +5639,8 @@ inferType | main.rs:2676:13:2676:18 | vals4a | A | {EXTERNAL LOCATION} | Global | | main.rs:2676:13:2676:18 | vals4a | T | {EXTERNAL LOCATION} | u16 | | main.rs:2676:32:2676:43 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2676:32:2676:43 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2676:32:2676:43 | [...] | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2676:32:2676:43 | [...] | TArray | {EXTERNAL LOCATION} | i32 | +| main.rs:2676:32:2676:43 | [...] | TArray | {EXTERNAL LOCATION} | u16 | | main.rs:2676:32:2676:52 | ... .to_vec() | | {EXTERNAL LOCATION} | Vec | | main.rs:2676:32:2676:52 | ... .to_vec() | A | {EXTERNAL LOCATION} | Global | | main.rs:2676:32:2676:52 | ... .to_vec() | T | {EXTERNAL LOCATION} | u16 | @@ -5654,8 +5654,8 @@ inferType | main.rs:2677:18:2677:23 | vals4a | T | {EXTERNAL LOCATION} | u16 | | main.rs:2677:25:2677:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2679:22:2679:33 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2679:22:2679:33 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2679:22:2679:33 | [...] | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2679:22:2679:33 | [...] | TArray | {EXTERNAL LOCATION} | i32 | +| main.rs:2679:22:2679:33 | [...] | TArray | {EXTERNAL LOCATION} | u16 | | main.rs:2679:23:2679:26 | 1u16 | | {EXTERNAL LOCATION} | u16 | | main.rs:2679:29:2679:29 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:2679:32:2679:32 | 3 | | {EXTERNAL LOCATION} | i32 | @@ -5670,8 +5670,8 @@ inferType | main.rs:2682:21:2682:43 | ...::from(...) | T | {EXTERNAL LOCATION} | i32 | | main.rs:2682:21:2682:43 | ...::from(...) | T | {EXTERNAL LOCATION} | u32 | | main.rs:2682:31:2682:42 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2682:31:2682:42 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2682:31:2682:42 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | +| main.rs:2682:31:2682:42 | [...] | TArray | {EXTERNAL LOCATION} | i32 | +| main.rs:2682:31:2682:42 | [...] | TArray | {EXTERNAL LOCATION} | u32 | | main.rs:2682:32:2682:35 | 1u32 | | {EXTERNAL LOCATION} | u32 | | main.rs:2682:38:2682:38 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:2682:41:2682:41 | 3 | | {EXTERNAL LOCATION} | i32 | @@ -5686,24 +5686,24 @@ inferType | main.rs:2685:13:2685:17 | vals6 | | {EXTERNAL LOCATION} | Vec | | main.rs:2685:13:2685:17 | vals6 | A | {EXTERNAL LOCATION} | Global | | main.rs:2685:13:2685:17 | vals6 | T | {EXTERNAL LOCATION} | & | -| main.rs:2685:13:2685:17 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 | +| main.rs:2685:13:2685:17 | vals6 | T.TRef | {EXTERNAL LOCATION} | u64 | | main.rs:2685:32:2685:43 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2685:32:2685:43 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2685:32:2685:43 | [...] | [T;...] | {EXTERNAL LOCATION} | u64 | +| main.rs:2685:32:2685:43 | [...] | TArray | {EXTERNAL LOCATION} | i32 | +| main.rs:2685:32:2685:43 | [...] | TArray | {EXTERNAL LOCATION} | u64 | | main.rs:2685:32:2685:60 | ... .collect() | | {EXTERNAL LOCATION} | Vec | | main.rs:2685:32:2685:60 | ... .collect() | A | {EXTERNAL LOCATION} | Global | | main.rs:2685:32:2685:60 | ... .collect() | T | {EXTERNAL LOCATION} | & | -| main.rs:2685:32:2685:60 | ... .collect() | T.&T | {EXTERNAL LOCATION} | u64 | +| main.rs:2685:32:2685:60 | ... .collect() | T.TRef | {EXTERNAL LOCATION} | u64 | | main.rs:2685:33:2685:36 | 1u64 | | {EXTERNAL LOCATION} | u64 | | main.rs:2685:39:2685:39 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:2685:42:2685:42 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:2686:9:2686:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2686:13:2686:13 | u | | {EXTERNAL LOCATION} | & | -| main.rs:2686:13:2686:13 | u | &T | {EXTERNAL LOCATION} | u64 | +| main.rs:2686:13:2686:13 | u | TRef | {EXTERNAL LOCATION} | u64 | | main.rs:2686:18:2686:22 | vals6 | | {EXTERNAL LOCATION} | Vec | | main.rs:2686:18:2686:22 | vals6 | A | {EXTERNAL LOCATION} | Global | | main.rs:2686:18:2686:22 | vals6 | T | {EXTERNAL LOCATION} | & | -| main.rs:2686:18:2686:22 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 | +| main.rs:2686:18:2686:22 | vals6 | T.TRef | {EXTERNAL LOCATION} | u64 | | main.rs:2686:24:2686:25 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2688:17:2688:21 | vals7 | | {EXTERNAL LOCATION} | Vec | | main.rs:2688:17:2688:21 | vals7 | A | {EXTERNAL LOCATION} | Global | @@ -5744,150 +5744,150 @@ inferType | main.rs:2699:17:2699:20 | map1 | V | {EXTERNAL LOCATION} | Box | | main.rs:2699:17:2699:20 | map1 | V.A | {EXTERNAL LOCATION} | Global | | main.rs:2699:17:2699:20 | map1 | V.T | {EXTERNAL LOCATION} | & | -| main.rs:2699:17:2699:20 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2699:17:2699:20 | map1 | V.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2699:24:2699:55 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | | main.rs:2699:24:2699:55 | ...::new(...) | K | {EXTERNAL LOCATION} | i32 | | main.rs:2699:24:2699:55 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2699:24:2699:55 | ...::new(...) | V | {EXTERNAL LOCATION} | Box | | main.rs:2699:24:2699:55 | ...::new(...) | V.A | {EXTERNAL LOCATION} | Global | | main.rs:2699:24:2699:55 | ...::new(...) | V.T | {EXTERNAL LOCATION} | & | -| main.rs:2699:24:2699:55 | ...::new(...) | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2699:24:2699:55 | ...::new(...) | V.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2700:9:2700:12 | map1 | | {EXTERNAL LOCATION} | HashMap | | main.rs:2700:9:2700:12 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2700:9:2700:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2700:9:2700:12 | map1 | V | {EXTERNAL LOCATION} | Box | | main.rs:2700:9:2700:12 | map1 | V.A | {EXTERNAL LOCATION} | Global | | main.rs:2700:9:2700:12 | map1 | V.T | {EXTERNAL LOCATION} | & | -| main.rs:2700:9:2700:12 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2700:9:2700:12 | map1 | V.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2700:9:2700:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | | main.rs:2700:9:2700:39 | map1.insert(...) | T | {EXTERNAL LOCATION} | Box | | main.rs:2700:9:2700:39 | map1.insert(...) | T.A | {EXTERNAL LOCATION} | Global | | main.rs:2700:9:2700:39 | map1.insert(...) | T.T | {EXTERNAL LOCATION} | & | -| main.rs:2700:9:2700:39 | map1.insert(...) | T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2700:9:2700:39 | map1.insert(...) | T.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2700:21:2700:21 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2700:24:2700:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | | main.rs:2700:24:2700:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | main.rs:2700:24:2700:38 | ...::new(...) | T | {EXTERNAL LOCATION} | & | -| main.rs:2700:24:2700:38 | ...::new(...) | T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2700:24:2700:38 | ...::new(...) | T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2700:33:2700:37 | "one" | | {EXTERNAL LOCATION} | & | -| main.rs:2700:33:2700:37 | "one" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2700:33:2700:37 | "one" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2701:9:2701:12 | map1 | | {EXTERNAL LOCATION} | HashMap | | main.rs:2701:9:2701:12 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2701:9:2701:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2701:9:2701:12 | map1 | V | {EXTERNAL LOCATION} | Box | | main.rs:2701:9:2701:12 | map1 | V.A | {EXTERNAL LOCATION} | Global | | main.rs:2701:9:2701:12 | map1 | V.T | {EXTERNAL LOCATION} | & | -| main.rs:2701:9:2701:12 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2701:9:2701:12 | map1 | V.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2701:9:2701:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | | main.rs:2701:9:2701:39 | map1.insert(...) | T | {EXTERNAL LOCATION} | Box | | main.rs:2701:9:2701:39 | map1.insert(...) | T.A | {EXTERNAL LOCATION} | Global | | main.rs:2701:9:2701:39 | map1.insert(...) | T.T | {EXTERNAL LOCATION} | & | -| main.rs:2701:9:2701:39 | map1.insert(...) | T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2701:9:2701:39 | map1.insert(...) | T.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2701:21:2701:21 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:2701:24:2701:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | | main.rs:2701:24:2701:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | main.rs:2701:24:2701:38 | ...::new(...) | T | {EXTERNAL LOCATION} | & | -| main.rs:2701:24:2701:38 | ...::new(...) | T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2701:24:2701:38 | ...::new(...) | T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2701:33:2701:37 | "two" | | {EXTERNAL LOCATION} | & | -| main.rs:2701:33:2701:37 | "two" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2701:33:2701:37 | "two" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2702:9:2702:33 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2702:13:2702:15 | key | | {EXTERNAL LOCATION} | & | -| main.rs:2702:13:2702:15 | key | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:2702:13:2702:15 | key | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:2702:20:2702:23 | map1 | | {EXTERNAL LOCATION} | HashMap | | main.rs:2702:20:2702:23 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2702:20:2702:23 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2702:20:2702:23 | map1 | V | {EXTERNAL LOCATION} | Box | | main.rs:2702:20:2702:23 | map1 | V.A | {EXTERNAL LOCATION} | Global | | main.rs:2702:20:2702:23 | map1 | V.T | {EXTERNAL LOCATION} | & | -| main.rs:2702:20:2702:23 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2702:20:2702:23 | map1 | V.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2702:20:2702:30 | map1.keys() | | {EXTERNAL LOCATION} | Keys | | main.rs:2702:20:2702:30 | map1.keys() | K | {EXTERNAL LOCATION} | i32 | | main.rs:2702:20:2702:30 | map1.keys() | V | {EXTERNAL LOCATION} | Box | | main.rs:2702:20:2702:30 | map1.keys() | V.A | {EXTERNAL LOCATION} | Global | | main.rs:2702:20:2702:30 | map1.keys() | V.T | {EXTERNAL LOCATION} | & | -| main.rs:2702:20:2702:30 | map1.keys() | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2702:20:2702:30 | map1.keys() | V.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2702:32:2702:33 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2703:9:2703:37 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2703:13:2703:17 | value | | {EXTERNAL LOCATION} | & | -| main.rs:2703:13:2703:17 | value | &T | {EXTERNAL LOCATION} | Box | -| main.rs:2703:13:2703:17 | value | &T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2703:13:2703:17 | value | &T.T | {EXTERNAL LOCATION} | & | -| main.rs:2703:13:2703:17 | value | &T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2703:13:2703:17 | value | TRef | {EXTERNAL LOCATION} | Box | +| main.rs:2703:13:2703:17 | value | TRef.A | {EXTERNAL LOCATION} | Global | +| main.rs:2703:13:2703:17 | value | TRef.T | {EXTERNAL LOCATION} | & | +| main.rs:2703:13:2703:17 | value | TRef.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2703:22:2703:25 | map1 | | {EXTERNAL LOCATION} | HashMap | | main.rs:2703:22:2703:25 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2703:22:2703:25 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2703:22:2703:25 | map1 | V | {EXTERNAL LOCATION} | Box | | main.rs:2703:22:2703:25 | map1 | V.A | {EXTERNAL LOCATION} | Global | | main.rs:2703:22:2703:25 | map1 | V.T | {EXTERNAL LOCATION} | & | -| main.rs:2703:22:2703:25 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2703:22:2703:25 | map1 | V.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2703:22:2703:34 | map1.values() | | {EXTERNAL LOCATION} | Values | | main.rs:2703:22:2703:34 | map1.values() | K | {EXTERNAL LOCATION} | i32 | | main.rs:2703:22:2703:34 | map1.values() | V | {EXTERNAL LOCATION} | Box | | main.rs:2703:22:2703:34 | map1.values() | V.A | {EXTERNAL LOCATION} | Global | | main.rs:2703:22:2703:34 | map1.values() | V.T | {EXTERNAL LOCATION} | & | -| main.rs:2703:22:2703:34 | map1.values() | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2703:22:2703:34 | map1.values() | V.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2703:36:2703:37 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2704:9:2704:42 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2704:13:2704:24 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2704:13:2704:24 | TuplePat | 0(2) | {EXTERNAL LOCATION} | & | -| main.rs:2704:13:2704:24 | TuplePat | 0(2).&T | {EXTERNAL LOCATION} | i32 | -| main.rs:2704:13:2704:24 | TuplePat | 1(2) | {EXTERNAL LOCATION} | & | -| main.rs:2704:13:2704:24 | TuplePat | 1(2).&T | {EXTERNAL LOCATION} | Box | -| main.rs:2704:13:2704:24 | TuplePat | 1(2).&T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2704:13:2704:24 | TuplePat | 1(2).&T.T | {EXTERNAL LOCATION} | & | -| main.rs:2704:13:2704:24 | TuplePat | 1(2).&T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2704:13:2704:24 | TuplePat | T0 | {EXTERNAL LOCATION} | & | +| main.rs:2704:13:2704:24 | TuplePat | T0.TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:2704:13:2704:24 | TuplePat | T1 | {EXTERNAL LOCATION} | & | +| main.rs:2704:13:2704:24 | TuplePat | T1.TRef | {EXTERNAL LOCATION} | Box | +| main.rs:2704:13:2704:24 | TuplePat | T1.TRef.A | {EXTERNAL LOCATION} | Global | +| main.rs:2704:13:2704:24 | TuplePat | T1.TRef.T | {EXTERNAL LOCATION} | & | +| main.rs:2704:13:2704:24 | TuplePat | T1.TRef.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2704:14:2704:16 | key | | {EXTERNAL LOCATION} | & | -| main.rs:2704:14:2704:16 | key | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:2704:14:2704:16 | key | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:2704:19:2704:23 | value | | {EXTERNAL LOCATION} | & | -| main.rs:2704:19:2704:23 | value | &T | {EXTERNAL LOCATION} | Box | -| main.rs:2704:19:2704:23 | value | &T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2704:19:2704:23 | value | &T.T | {EXTERNAL LOCATION} | & | -| main.rs:2704:19:2704:23 | value | &T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2704:19:2704:23 | value | TRef | {EXTERNAL LOCATION} | Box | +| main.rs:2704:19:2704:23 | value | TRef.A | {EXTERNAL LOCATION} | Global | +| main.rs:2704:19:2704:23 | value | TRef.T | {EXTERNAL LOCATION} | & | +| main.rs:2704:19:2704:23 | value | TRef.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2704:29:2704:32 | map1 | | {EXTERNAL LOCATION} | HashMap | | main.rs:2704:29:2704:32 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2704:29:2704:32 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2704:29:2704:32 | map1 | V | {EXTERNAL LOCATION} | Box | | main.rs:2704:29:2704:32 | map1 | V.A | {EXTERNAL LOCATION} | Global | | main.rs:2704:29:2704:32 | map1 | V.T | {EXTERNAL LOCATION} | & | -| main.rs:2704:29:2704:32 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2704:29:2704:32 | map1 | V.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2704:29:2704:39 | map1.iter() | | {EXTERNAL LOCATION} | Iter | | main.rs:2704:29:2704:39 | map1.iter() | K | {EXTERNAL LOCATION} | i32 | | main.rs:2704:29:2704:39 | map1.iter() | V | {EXTERNAL LOCATION} | Box | | main.rs:2704:29:2704:39 | map1.iter() | V.A | {EXTERNAL LOCATION} | Global | | main.rs:2704:29:2704:39 | map1.iter() | V.T | {EXTERNAL LOCATION} | & | -| main.rs:2704:29:2704:39 | map1.iter() | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2704:29:2704:39 | map1.iter() | V.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2704:41:2704:42 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2705:9:2705:36 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2705:13:2705:24 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2705:13:2705:24 | TuplePat | 0(2) | {EXTERNAL LOCATION} | & | -| main.rs:2705:13:2705:24 | TuplePat | 0(2).&T | {EXTERNAL LOCATION} | i32 | -| main.rs:2705:13:2705:24 | TuplePat | 1(2) | {EXTERNAL LOCATION} | & | -| main.rs:2705:13:2705:24 | TuplePat | 1(2).&T | {EXTERNAL LOCATION} | Box | -| main.rs:2705:13:2705:24 | TuplePat | 1(2).&T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2705:13:2705:24 | TuplePat | 1(2).&T.T | {EXTERNAL LOCATION} | & | -| main.rs:2705:13:2705:24 | TuplePat | 1(2).&T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2705:13:2705:24 | TuplePat | T0 | {EXTERNAL LOCATION} | & | +| main.rs:2705:13:2705:24 | TuplePat | T0.TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:2705:13:2705:24 | TuplePat | T1 | {EXTERNAL LOCATION} | & | +| main.rs:2705:13:2705:24 | TuplePat | T1.TRef | {EXTERNAL LOCATION} | Box | +| main.rs:2705:13:2705:24 | TuplePat | T1.TRef.A | {EXTERNAL LOCATION} | Global | +| main.rs:2705:13:2705:24 | TuplePat | T1.TRef.T | {EXTERNAL LOCATION} | & | +| main.rs:2705:13:2705:24 | TuplePat | T1.TRef.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2705:14:2705:16 | key | | {EXTERNAL LOCATION} | & | -| main.rs:2705:14:2705:16 | key | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:2705:14:2705:16 | key | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:2705:19:2705:23 | value | | {EXTERNAL LOCATION} | & | -| main.rs:2705:19:2705:23 | value | &T | {EXTERNAL LOCATION} | Box | -| main.rs:2705:19:2705:23 | value | &T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2705:19:2705:23 | value | &T.T | {EXTERNAL LOCATION} | & | -| main.rs:2705:19:2705:23 | value | &T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2705:19:2705:23 | value | TRef | {EXTERNAL LOCATION} | Box | +| main.rs:2705:19:2705:23 | value | TRef.A | {EXTERNAL LOCATION} | Global | +| main.rs:2705:19:2705:23 | value | TRef.T | {EXTERNAL LOCATION} | & | +| main.rs:2705:19:2705:23 | value | TRef.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2705:29:2705:33 | &map1 | | {EXTERNAL LOCATION} | & | -| main.rs:2705:29:2705:33 | &map1 | &T | {EXTERNAL LOCATION} | HashMap | -| main.rs:2705:29:2705:33 | &map1 | &T.K | {EXTERNAL LOCATION} | i32 | -| main.rs:2705:29:2705:33 | &map1 | &T.S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2705:29:2705:33 | &map1 | &T.V | {EXTERNAL LOCATION} | Box | -| main.rs:2705:29:2705:33 | &map1 | &T.V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2705:29:2705:33 | &map1 | &T.V.T | {EXTERNAL LOCATION} | & | -| main.rs:2705:29:2705:33 | &map1 | &T.V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2705:29:2705:33 | &map1 | TRef | {EXTERNAL LOCATION} | HashMap | +| main.rs:2705:29:2705:33 | &map1 | TRef.K | {EXTERNAL LOCATION} | i32 | +| main.rs:2705:29:2705:33 | &map1 | TRef.S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2705:29:2705:33 | &map1 | TRef.V | {EXTERNAL LOCATION} | Box | +| main.rs:2705:29:2705:33 | &map1 | TRef.V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2705:29:2705:33 | &map1 | TRef.V.T | {EXTERNAL LOCATION} | & | +| main.rs:2705:29:2705:33 | &map1 | TRef.V.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2705:30:2705:33 | map1 | | {EXTERNAL LOCATION} | HashMap | | main.rs:2705:30:2705:33 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2705:30:2705:33 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2705:30:2705:33 | map1 | V | {EXTERNAL LOCATION} | Box | | main.rs:2705:30:2705:33 | map1 | V.A | {EXTERNAL LOCATION} | Global | | main.rs:2705:30:2705:33 | map1 | V.T | {EXTERNAL LOCATION} | & | -| main.rs:2705:30:2705:33 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2705:30:2705:33 | map1 | V.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2705:35:2705:36 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2709:17:2709:17 | a | | {EXTERNAL LOCATION} | i64 | | main.rs:2709:26:2709:26 | 0 | | {EXTERNAL LOCATION} | i32 | @@ -6000,60 +6000,60 @@ inferType | main.rs:2771:19:2771:37 | ...::default(...) | | main.rs:2719:5:2719:20 | S1 | | main.rs:2771:19:2771:37 | ...::default(...) | T | main.rs:2721:5:2722:14 | S2 | | main.rs:2780:35:2782:9 | { ... } | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2780:35:2782:9 | { ... } | 0(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2780:35:2782:9 | { ... } | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2780:35:2782:9 | { ... } | T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2780:35:2782:9 | { ... } | T1 | main.rs:2776:5:2777:16 | S1 | | main.rs:2781:13:2781:26 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2781:13:2781:26 | TupleExpr | 0(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2781:13:2781:26 | TupleExpr | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2781:13:2781:26 | TupleExpr | T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2781:13:2781:26 | TupleExpr | T1 | main.rs:2776:5:2777:16 | S1 | | main.rs:2781:14:2781:18 | S1 {...} | | main.rs:2776:5:2777:16 | S1 | | main.rs:2781:21:2781:25 | S1 {...} | | main.rs:2776:5:2777:16 | S1 | | main.rs:2783:16:2783:19 | SelfParam | | main.rs:2776:5:2777:16 | S1 | | main.rs:2783:22:2783:23 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2786:16:2820:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2787:13:2787:13 | a | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2787:13:2787:13 | a | 0(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2787:13:2787:13 | a | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2787:13:2787:13 | a | T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2787:13:2787:13 | a | T1 | main.rs:2776:5:2777:16 | S1 | | main.rs:2787:17:2787:30 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2787:17:2787:30 | ...::get_pair(...) | 0(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2787:17:2787:30 | ...::get_pair(...) | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2787:17:2787:30 | ...::get_pair(...) | T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2787:17:2787:30 | ...::get_pair(...) | T1 | main.rs:2776:5:2777:16 | S1 | | main.rs:2788:17:2788:17 | b | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2788:17:2788:17 | b | 0(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2788:17:2788:17 | b | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2788:17:2788:17 | b | T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2788:17:2788:17 | b | T1 | main.rs:2776:5:2777:16 | S1 | | main.rs:2788:21:2788:34 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2788:21:2788:34 | ...::get_pair(...) | 0(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2788:21:2788:34 | ...::get_pair(...) | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2788:21:2788:34 | ...::get_pair(...) | T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2788:21:2788:34 | ...::get_pair(...) | T1 | main.rs:2776:5:2777:16 | S1 | | main.rs:2789:13:2789:18 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2789:13:2789:18 | TuplePat | 0(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2789:13:2789:18 | TuplePat | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2789:13:2789:18 | TuplePat | T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2789:13:2789:18 | TuplePat | T1 | main.rs:2776:5:2777:16 | S1 | | main.rs:2789:14:2789:14 | c | | main.rs:2776:5:2777:16 | S1 | | main.rs:2789:17:2789:17 | d | | main.rs:2776:5:2777:16 | S1 | | main.rs:2789:22:2789:35 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2789:22:2789:35 | ...::get_pair(...) | 0(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2789:22:2789:35 | ...::get_pair(...) | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2789:22:2789:35 | ...::get_pair(...) | T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2789:22:2789:35 | ...::get_pair(...) | T1 | main.rs:2776:5:2777:16 | S1 | | main.rs:2790:13:2790:22 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2790:13:2790:22 | TuplePat | 0(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2790:13:2790:22 | TuplePat | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2790:13:2790:22 | TuplePat | T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2790:13:2790:22 | TuplePat | T1 | main.rs:2776:5:2777:16 | S1 | | main.rs:2790:18:2790:18 | e | | main.rs:2776:5:2777:16 | S1 | | main.rs:2790:21:2790:21 | f | | main.rs:2776:5:2777:16 | S1 | | main.rs:2790:26:2790:39 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2790:26:2790:39 | ...::get_pair(...) | 0(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2790:26:2790:39 | ...::get_pair(...) | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2790:26:2790:39 | ...::get_pair(...) | T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2790:26:2790:39 | ...::get_pair(...) | T1 | main.rs:2776:5:2777:16 | S1 | | main.rs:2791:13:2791:26 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2791:13:2791:26 | TuplePat | 0(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2791:13:2791:26 | TuplePat | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2791:13:2791:26 | TuplePat | T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2791:13:2791:26 | TuplePat | T1 | main.rs:2776:5:2777:16 | S1 | | main.rs:2791:18:2791:18 | g | | main.rs:2776:5:2777:16 | S1 | | main.rs:2791:25:2791:25 | h | | main.rs:2776:5:2777:16 | S1 | | main.rs:2791:30:2791:43 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2791:30:2791:43 | ...::get_pair(...) | 0(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2791:30:2791:43 | ...::get_pair(...) | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2791:30:2791:43 | ...::get_pair(...) | T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2791:30:2791:43 | ...::get_pair(...) | T1 | main.rs:2776:5:2777:16 | S1 | | main.rs:2793:9:2793:9 | a | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2793:9:2793:9 | a | 0(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2793:9:2793:9 | a | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2793:9:2793:9 | a | T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2793:9:2793:9 | a | T1 | main.rs:2776:5:2777:16 | S1 | | main.rs:2793:9:2793:11 | a.0 | | main.rs:2776:5:2777:16 | S1 | | main.rs:2793:9:2793:17 | ... .foo() | | {EXTERNAL LOCATION} | () | | main.rs:2794:9:2794:9 | b | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2794:9:2794:9 | b | 0(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2794:9:2794:9 | b | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2794:9:2794:9 | b | T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2794:9:2794:9 | b | T1 | main.rs:2776:5:2777:16 | S1 | | main.rs:2794:9:2794:11 | b.1 | | main.rs:2776:5:2777:16 | S1 | | main.rs:2794:9:2794:17 | ... .foo() | | {EXTERNAL LOCATION} | () | | main.rs:2795:9:2795:9 | c | | main.rs:2776:5:2777:16 | S1 | @@ -6073,75 +6073,75 @@ inferType | main.rs:2806:13:2806:13 | b | | {EXTERNAL LOCATION} | bool | | main.rs:2806:17:2806:34 | ...::default(...) | | {EXTERNAL LOCATION} | bool | | main.rs:2807:13:2807:16 | pair | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2807:13:2807:16 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | -| main.rs:2807:13:2807:16 | pair | 1(2) | {EXTERNAL LOCATION} | bool | +| main.rs:2807:13:2807:16 | pair | T0 | {EXTERNAL LOCATION} | i64 | +| main.rs:2807:13:2807:16 | pair | T1 | {EXTERNAL LOCATION} | bool | | main.rs:2807:20:2807:25 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2807:20:2807:25 | TupleExpr | 0(2) | {EXTERNAL LOCATION} | i64 | -| main.rs:2807:20:2807:25 | TupleExpr | 1(2) | {EXTERNAL LOCATION} | bool | +| main.rs:2807:20:2807:25 | TupleExpr | T0 | {EXTERNAL LOCATION} | i64 | +| main.rs:2807:20:2807:25 | TupleExpr | T1 | {EXTERNAL LOCATION} | bool | | main.rs:2807:21:2807:21 | a | | {EXTERNAL LOCATION} | i64 | | main.rs:2807:24:2807:24 | b | | {EXTERNAL LOCATION} | bool | | main.rs:2808:13:2808:13 | i | | {EXTERNAL LOCATION} | i64 | | main.rs:2808:22:2808:25 | pair | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2808:22:2808:25 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | -| main.rs:2808:22:2808:25 | pair | 1(2) | {EXTERNAL LOCATION} | bool | +| main.rs:2808:22:2808:25 | pair | T0 | {EXTERNAL LOCATION} | i64 | +| main.rs:2808:22:2808:25 | pair | T1 | {EXTERNAL LOCATION} | bool | | main.rs:2808:22:2808:27 | pair.0 | | {EXTERNAL LOCATION} | i64 | | main.rs:2809:13:2809:13 | j | | {EXTERNAL LOCATION} | bool | | main.rs:2809:23:2809:26 | pair | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2809:23:2809:26 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | -| main.rs:2809:23:2809:26 | pair | 1(2) | {EXTERNAL LOCATION} | bool | +| main.rs:2809:23:2809:26 | pair | T0 | {EXTERNAL LOCATION} | i64 | +| main.rs:2809:23:2809:26 | pair | T1 | {EXTERNAL LOCATION} | bool | | main.rs:2809:23:2809:28 | pair.1 | | {EXTERNAL LOCATION} | bool | | main.rs:2811:13:2811:16 | pair | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2811:13:2811:16 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2811:13:2811:16 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2811:13:2811:16 | pair | T0 | {EXTERNAL LOCATION} | i32 | +| main.rs:2811:13:2811:16 | pair | T1 | {EXTERNAL LOCATION} | i32 | | main.rs:2811:20:2811:25 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2811:20:2811:25 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2811:20:2811:25 | [...] | TArray | {EXTERNAL LOCATION} | i32 | | main.rs:2811:20:2811:32 | ... .into() | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2811:20:2811:32 | ... .into() | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2811:20:2811:32 | ... .into() | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2811:20:2811:32 | ... .into() | T0 | {EXTERNAL LOCATION} | i32 | +| main.rs:2811:20:2811:32 | ... .into() | T1 | {EXTERNAL LOCATION} | i32 | | main.rs:2811:21:2811:21 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2811:24:2811:24 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2812:9:2815:9 | match pair { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2812:15:2812:18 | pair | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2812:15:2812:18 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2812:15:2812:18 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2812:15:2812:18 | pair | T0 | {EXTERNAL LOCATION} | i32 | +| main.rs:2812:15:2812:18 | pair | T1 | {EXTERNAL LOCATION} | i32 | | main.rs:2813:13:2813:18 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2813:13:2813:18 | TuplePat | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2813:13:2813:18 | TuplePat | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2813:13:2813:18 | TuplePat | T0 | {EXTERNAL LOCATION} | i32 | +| main.rs:2813:13:2813:18 | TuplePat | T1 | {EXTERNAL LOCATION} | i32 | | main.rs:2813:14:2813:14 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:2813:17:2813:17 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:2813:23:2813:42 | MacroExpr | | {EXTERNAL LOCATION} | () | | main.rs:2813:30:2813:41 | "unexpected" | | {EXTERNAL LOCATION} | & | -| main.rs:2813:30:2813:41 | "unexpected" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2813:30:2813:41 | "unexpected" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2813:30:2813:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:2813:30:2813:41 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2814:13:2814:13 | _ | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2814:13:2814:13 | _ | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2814:13:2814:13 | _ | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2814:13:2814:13 | _ | T0 | {EXTERNAL LOCATION} | i32 | +| main.rs:2814:13:2814:13 | _ | T1 | {EXTERNAL LOCATION} | i32 | | main.rs:2814:18:2814:35 | MacroExpr | | {EXTERNAL LOCATION} | () | | main.rs:2814:25:2814:34 | "expected" | | {EXTERNAL LOCATION} | & | -| main.rs:2814:25:2814:34 | "expected" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2814:25:2814:34 | "expected" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2814:25:2814:34 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:2814:25:2814:34 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2816:13:2816:13 | x | | {EXTERNAL LOCATION} | i32 | | main.rs:2816:17:2816:20 | pair | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2816:17:2816:20 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2816:17:2816:20 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2816:17:2816:20 | pair | T0 | {EXTERNAL LOCATION} | i32 | +| main.rs:2816:17:2816:20 | pair | T1 | {EXTERNAL LOCATION} | i32 | | main.rs:2816:17:2816:22 | pair.0 | | {EXTERNAL LOCATION} | i32 | | main.rs:2818:13:2818:13 | y | | {EXTERNAL LOCATION} | & | -| main.rs:2818:13:2818:13 | y | &T | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2818:13:2818:13 | y | &T.0(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2818:13:2818:13 | y | &T.1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2818:13:2818:13 | y | TRef | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2818:13:2818:13 | y | TRef.T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2818:13:2818:13 | y | TRef.T1 | main.rs:2776:5:2777:16 | S1 | | main.rs:2818:17:2818:31 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:2818:17:2818:31 | &... | &T | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2818:17:2818:31 | &... | &T.0(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2818:17:2818:31 | &... | &T.1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2818:17:2818:31 | &... | TRef | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2818:17:2818:31 | &... | TRef.T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2818:17:2818:31 | &... | TRef.T1 | main.rs:2776:5:2777:16 | S1 | | main.rs:2818:18:2818:31 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2818:18:2818:31 | ...::get_pair(...) | 0(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2818:18:2818:31 | ...::get_pair(...) | 1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2818:18:2818:31 | ...::get_pair(...) | T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2818:18:2818:31 | ...::get_pair(...) | T1 | main.rs:2776:5:2777:16 | S1 | | main.rs:2819:9:2819:9 | y | | {EXTERNAL LOCATION} | & | -| main.rs:2819:9:2819:9 | y | &T | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2819:9:2819:9 | y | &T.0(2) | main.rs:2776:5:2777:16 | S1 | -| main.rs:2819:9:2819:9 | y | &T.1(2) | main.rs:2776:5:2777:16 | S1 | +| main.rs:2819:9:2819:9 | y | TRef | {EXTERNAL LOCATION} | (T_2) | +| main.rs:2819:9:2819:9 | y | TRef.T0 | main.rs:2776:5:2777:16 | S1 | +| main.rs:2819:9:2819:9 | y | TRef.T1 | main.rs:2776:5:2777:16 | S1 | | main.rs:2819:9:2819:11 | y.0 | | main.rs:2776:5:2777:16 | S1 | | main.rs:2819:9:2819:17 | ... .foo() | | {EXTERNAL LOCATION} | () | | main.rs:2825:27:2847:5 | { ... } | | {EXTERNAL LOCATION} | () | @@ -6162,7 +6162,7 @@ inferType | main.rs:2830:17:2830:19 | 100 | | {EXTERNAL LOCATION} | i32 | | main.rs:2830:24:2832:13 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2831:26:2831:36 | "Boxed 100\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:2831:26:2831:36 | "Boxed 100\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2831:26:2831:36 | "Boxed 100\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2831:26:2831:36 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:2831:26:2831:36 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2833:13:2833:17 | box ... | | {EXTERNAL LOCATION} | Box | @@ -6170,7 +6170,7 @@ inferType | main.rs:2833:13:2833:17 | box ... | T | {EXTERNAL LOCATION} | i32 | | main.rs:2833:22:2836:13 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2835:26:2835:42 | "Boxed value: {}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:2835:26:2835:42 | "Boxed value: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2835:26:2835:42 | "Boxed value: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2835:26:2835:51 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:2835:26:2835:51 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2840:13:2840:22 | nested_box | | {EXTERNAL LOCATION} | Box | @@ -6200,13 +6200,13 @@ inferType | main.rs:2842:13:2842:21 | box ... | T.T | {EXTERNAL LOCATION} | i32 | | main.rs:2842:26:2845:13 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2844:26:2844:43 | "Nested boxed: {}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:2844:26:2844:43 | "Nested boxed: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2844:26:2844:43 | "Nested boxed: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2844:26:2844:59 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:2844:26:2844:59 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2856:36:2858:9 | { ... } | | main.rs:2853:5:2853:22 | Path | | main.rs:2857:13:2857:19 | Path {...} | | main.rs:2853:5:2853:22 | Path | | main.rs:2860:29:2860:33 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2860:29:2860:33 | SelfParam | &T | main.rs:2853:5:2853:22 | Path | +| main.rs:2860:29:2860:33 | SelfParam | TRef | main.rs:2853:5:2853:22 | Path | | main.rs:2860:59:2862:9 | { ... } | | {EXTERNAL LOCATION} | Result | | main.rs:2860:59:2862:9 | { ... } | E | {EXTERNAL LOCATION} | () | | main.rs:2860:59:2862:9 | { ... } | T | main.rs:2865:5:2865:25 | PathBuf | @@ -6217,12 +6217,12 @@ inferType | main.rs:2868:39:2870:9 | { ... } | | main.rs:2865:5:2865:25 | PathBuf | | main.rs:2869:13:2869:22 | PathBuf {...} | | main.rs:2865:5:2865:25 | PathBuf | | main.rs:2878:18:2878:22 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2878:18:2878:22 | SelfParam | &T | main.rs:2865:5:2865:25 | PathBuf | +| main.rs:2878:18:2878:22 | SelfParam | TRef | main.rs:2865:5:2865:25 | PathBuf | | main.rs:2878:34:2882:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:2878:34:2882:9 | { ... } | &T | main.rs:2853:5:2853:22 | Path | +| main.rs:2878:34:2882:9 | { ... } | TRef | main.rs:2853:5:2853:22 | Path | | main.rs:2880:33:2880:43 | ...::new(...) | | main.rs:2853:5:2853:22 | Path | | main.rs:2881:13:2881:17 | &path | | {EXTERNAL LOCATION} | & | -| main.rs:2881:13:2881:17 | &path | &T | main.rs:2853:5:2853:22 | Path | +| main.rs:2881:13:2881:17 | &path | TRef | main.rs:2853:5:2853:22 | Path | | main.rs:2881:14:2881:17 | path | | main.rs:2853:5:2853:22 | Path | | main.rs:2885:16:2893:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2886:13:2886:17 | path1 | | main.rs:2853:5:2853:22 | Path | @@ -6243,30 +6243,30 @@ inferType | main.rs:2890:24:2890:37 | ...::new(...) | | main.rs:2865:5:2865:25 | PathBuf | | main.rs:2891:24:2891:31 | pathbuf1 | | main.rs:2865:5:2865:25 | PathBuf | | main.rs:2898:14:2898:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2898:14:2898:18 | SelfParam | &T | main.rs:2897:5:2899:5 | Self [trait MyTrait] | +| main.rs:2898:14:2898:18 | SelfParam | TRef | main.rs:2897:5:2899:5 | Self [trait MyTrait] | | main.rs:2905:14:2905:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2905:14:2905:18 | SelfParam | &T | main.rs:2901:5:2902:19 | S | -| main.rs:2905:14:2905:18 | SelfParam | &T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2905:14:2905:18 | SelfParam | TRef | main.rs:2901:5:2902:19 | S | +| main.rs:2905:14:2905:18 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | | main.rs:2905:28:2907:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:2906:13:2906:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2906:13:2906:16 | self | &T | main.rs:2901:5:2902:19 | S | -| main.rs:2906:13:2906:16 | self | &T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2906:13:2906:16 | self | TRef | main.rs:2901:5:2902:19 | S | +| main.rs:2906:13:2906:16 | self | TRef.T | {EXTERNAL LOCATION} | i32 | | main.rs:2906:13:2906:18 | self.0 | | {EXTERNAL LOCATION} | i32 | | main.rs:2911:14:2911:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2911:14:2911:18 | SelfParam | &T | main.rs:2901:5:2902:19 | S | -| main.rs:2911:14:2911:18 | SelfParam | &T.T | main.rs:2901:5:2902:19 | S | -| main.rs:2911:14:2911:18 | SelfParam | &T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2911:14:2911:18 | SelfParam | TRef | main.rs:2901:5:2902:19 | S | +| main.rs:2911:14:2911:18 | SelfParam | TRef.T | main.rs:2901:5:2902:19 | S | +| main.rs:2911:14:2911:18 | SelfParam | TRef.T.T | {EXTERNAL LOCATION} | i32 | | main.rs:2911:28:2913:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:2912:13:2912:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2912:13:2912:16 | self | &T | main.rs:2901:5:2902:19 | S | -| main.rs:2912:13:2912:16 | self | &T.T | main.rs:2901:5:2902:19 | S | -| main.rs:2912:13:2912:16 | self | &T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2912:13:2912:16 | self | TRef | main.rs:2901:5:2902:19 | S | +| main.rs:2912:13:2912:16 | self | TRef.T | main.rs:2901:5:2902:19 | S | +| main.rs:2912:13:2912:16 | self | TRef.T.T | {EXTERNAL LOCATION} | i32 | | main.rs:2912:13:2912:18 | self.0 | | main.rs:2901:5:2902:19 | S | | main.rs:2912:13:2912:18 | self.0 | T | {EXTERNAL LOCATION} | i32 | | main.rs:2912:13:2912:21 | ... .0 | | {EXTERNAL LOCATION} | i32 | | main.rs:2917:15:2917:19 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2917:15:2917:19 | SelfParam | &T | main.rs:2901:5:2902:19 | S | -| main.rs:2917:15:2917:19 | SelfParam | &T.T | main.rs:2916:10:2916:16 | T | +| main.rs:2917:15:2917:19 | SelfParam | TRef | main.rs:2901:5:2902:19 | S | +| main.rs:2917:15:2917:19 | SelfParam | TRef.T | main.rs:2916:10:2916:16 | T | | main.rs:2917:33:2919:9 | { ... } | | main.rs:2901:5:2902:19 | S | | main.rs:2917:33:2919:9 | { ... } | T | main.rs:2901:5:2902:19 | S | | main.rs:2917:33:2919:9 | { ... } | T.T | main.rs:2916:10:2916:16 | T | @@ -6276,8 +6276,8 @@ inferType | main.rs:2918:15:2918:23 | S(...) | | main.rs:2901:5:2902:19 | S | | main.rs:2918:15:2918:23 | S(...) | T | main.rs:2916:10:2916:16 | T | | main.rs:2918:17:2918:20 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2918:17:2918:20 | self | &T | main.rs:2901:5:2902:19 | S | -| main.rs:2918:17:2918:20 | self | &T.T | main.rs:2916:10:2916:16 | T | +| main.rs:2918:17:2918:20 | self | TRef | main.rs:2901:5:2902:19 | S | +| main.rs:2918:17:2918:20 | self | TRef.T | main.rs:2916:10:2916:16 | T | | main.rs:2918:17:2918:22 | self.0 | | main.rs:2916:10:2916:16 | T | | main.rs:2922:14:2922:14 | b | | {EXTERNAL LOCATION} | bool | | main.rs:2922:48:2939:5 | { ... } | | {EXTERNAL LOCATION} | Box | @@ -6373,7 +6373,7 @@ inferType | main.rs:2963:20:2970:5 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:2966:26:2966:27 | 12 | | {EXTERNAL LOCATION} | i32 | | main.rs:2968:18:2968:26 | "b: {:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:2968:18:2968:26 | "b: {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2968:18:2968:26 | "b: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2968:18:2968:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:2968:18:2968:29 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2969:9:2969:9 | 0 | | {EXTERNAL LOCATION} | i32 | @@ -6388,7 +6388,7 @@ inferType | main.rs:2979:21:2981:13 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2980:24:2980:25 | 12 | | {EXTERNAL LOCATION} | i32 | | main.rs:2983:18:2983:26 | "a: {:?}\\n" | | {EXTERNAL LOCATION} | & | -| main.rs:2983:18:2983:26 | "a: {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2983:18:2983:26 | "a: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2983:18:2983:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:2983:18:2983:29 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2983:29:2983:29 | a | | {EXTERNAL LOCATION} | () | @@ -6587,7 +6587,7 @@ inferType | pattern_matching.rs:16:13:16:16 | mesg | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:16:20:16:23 | mesg | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:17:18:17:25 | "{mesg}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:17:18:17:25 | "{mesg}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:17:18:17:25 | "{mesg}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:17:18:17:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:17:18:17:25 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:17:20:17:23 | mesg | | {EXTERNAL LOCATION} | i32 | @@ -6601,7 +6601,7 @@ inferType | pattern_matching.rs:21:17:21:20 | mesg | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:21:24:21:27 | mesg | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:22:22:22:29 | "{mesg}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:22:22:22:29 | "{mesg}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:22:22:22:29 | "{mesg}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:22:22:22:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:22:22:22:29 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:22:24:22:27 | mesg | | {EXTERNAL LOCATION} | i32 | @@ -6615,7 +6615,7 @@ inferType | pattern_matching.rs:27:9:27:12 | mesg | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:27:16:27:19 | mesg | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:28:14:28:21 | "{mesg}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:28:14:28:21 | "{mesg}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:28:14:28:21 | "{mesg}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:28:14:28:21 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:28:14:28:21 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:28:16:28:19 | mesg | | {EXTERNAL LOCATION} | i32 | @@ -6624,34 +6624,34 @@ inferType | pattern_matching.rs:29:16:29:20 | value | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:29:16:29:21 | TryExpr | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:30:14:30:21 | "{mesg}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:30:14:30:21 | "{mesg}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:30:14:30:21 | "{mesg}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:30:14:30:21 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:30:14:30:21 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:30:16:30:19 | mesg | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:32:9:32:14 | value2 | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:32:9:32:14 | value2 | &T | {EXTERNAL LOCATION} | Option | -| pattern_matching.rs:32:9:32:14 | value2 | &T.T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:32:9:32:14 | value2 | TRef | {EXTERNAL LOCATION} | Option | +| pattern_matching.rs:32:9:32:14 | value2 | TRef.T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:32:18:32:26 | &... | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:32:18:32:26 | &... | &T | {EXTERNAL LOCATION} | Option | -| pattern_matching.rs:32:18:32:26 | &... | &T.T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:32:18:32:26 | &... | TRef | {EXTERNAL LOCATION} | Option | +| pattern_matching.rs:32:18:32:26 | &... | TRef.T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:32:19:32:26 | Some(...) | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:32:19:32:26 | Some(...) | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:32:24:32:25 | 42 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:33:5:36:5 | if ... {...} | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:33:12:33:22 | &... | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:33:12:33:22 | &... | &T | {EXTERNAL LOCATION} | Option | -| pattern_matching.rs:33:12:33:22 | &... | &T.T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:33:12:33:22 | &... | TRef | {EXTERNAL LOCATION} | Option | +| pattern_matching.rs:33:12:33:22 | &... | TRef.T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:33:13:33:22 | Some(...) | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:33:13:33:22 | Some(...) | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:33:18:33:21 | mesg | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:33:26:33:31 | value2 | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:33:26:33:31 | value2 | &T | {EXTERNAL LOCATION} | Option | -| pattern_matching.rs:33:26:33:31 | value2 | &T.T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:33:26:33:31 | value2 | TRef | {EXTERNAL LOCATION} | Option | +| pattern_matching.rs:33:26:33:31 | value2 | TRef.T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:33:33:36:5 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:34:13:34:16 | mesg | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:34:20:34:23 | mesg | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:35:18:35:25 | "{mesg}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:35:18:35:25 | "{mesg}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:35:18:35:25 | "{mesg}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:35:18:35:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:35:18:35:25 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:35:20:35:23 | mesg | | {EXTERNAL LOCATION} | i32 | @@ -6659,19 +6659,19 @@ inferType | pattern_matching.rs:38:18:38:19 | 42 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:39:5:42:5 | if ... {...} | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:39:16:39:19 | mesg | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:39:16:39:19 | mesg | &T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:39:16:39:19 | mesg | TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:39:23:39:28 | value3 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:39:30:42:5 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:40:13:40:16 | mesg | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:40:13:40:16 | mesg | &T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:40:13:40:16 | mesg | TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:40:20:40:23 | mesg | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:40:20:40:23 | mesg | &T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:40:20:40:23 | mesg | TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:41:18:41:25 | "{mesg}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:41:18:41:25 | "{mesg}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:41:18:41:25 | "{mesg}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:41:18:41:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:41:18:41:25 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:41:20:41:23 | mesg | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:41:20:41:23 | mesg | &T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:41:20:41:23 | mesg | TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:44:9:44:14 | value4 | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:44:9:44:14 | value4 | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:44:18:44:25 | Some(...) | | {EXTERNAL LOCATION} | Option | @@ -6681,27 +6681,27 @@ inferType | pattern_matching.rs:45:12:45:25 | Some(...) | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:45:12:45:25 | Some(...) | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:45:21:45:24 | mesg | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:45:21:45:24 | mesg | &T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:45:21:45:24 | mesg | TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:45:29:45:34 | value4 | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:45:29:45:34 | value4 | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:45:36:48:5 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:46:13:46:16 | mesg | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:46:13:46:16 | mesg | &T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:46:13:46:16 | mesg | TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:46:20:46:23 | mesg | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:46:20:46:23 | mesg | &T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:46:20:46:23 | mesg | TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:47:18:47:25 | "{mesg}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:47:18:47:25 | "{mesg}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:47:18:47:25 | "{mesg}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:47:18:47:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:47:18:47:25 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:47:20:47:23 | mesg | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:47:20:47:23 | mesg | &T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:47:20:47:23 | mesg | TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:50:13:50:18 | value5 | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:50:13:50:18 | value5 | &T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:50:13:50:18 | value5 | TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:50:22:50:23 | 42 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:51:9:51:9 | x | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:51:9:51:9 | x | &T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:51:9:51:9 | x | TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:51:13:51:18 | value5 | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:51:13:51:18 | value5 | &T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:51:13:51:18 | value5 | TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:53:9:53:24 | my_record_struct | | pattern_matching.rs:1:1:4:1 | MyRecordStruct | | pattern_matching.rs:53:9:53:24 | my_record_struct | T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:53:9:53:24 | my_record_struct | T2 | {EXTERNAL LOCATION} | bool | @@ -6786,58 +6786,58 @@ inferType | pattern_matching.rs:87:9:87:22 | my_nested_enum | T1 | pattern_matching.rs:1:1:4:1 | MyRecordStruct | | pattern_matching.rs:87:9:87:22 | my_nested_enum | T1.T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:87:9:87:22 | my_nested_enum | T1.T2 | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:87:9:87:22 | my_nested_enum | T1.T2.&T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:87:9:87:22 | my_nested_enum | T1.T2.TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:87:9:87:22 | my_nested_enum | T2 | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:87:26:93:5 | ...::Variant2(...) | | pattern_matching.rs:8:1:11:1 | MyEnum | | pattern_matching.rs:87:26:93:5 | ...::Variant2(...) | T1 | pattern_matching.rs:1:1:4:1 | MyRecordStruct | | pattern_matching.rs:87:26:93:5 | ...::Variant2(...) | T1.T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:87:26:93:5 | ...::Variant2(...) | T1.T2 | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:87:26:93:5 | ...::Variant2(...) | T1.T2.&T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:87:26:93:5 | ...::Variant2(...) | T1.T2.TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:87:26:93:5 | ...::Variant2(...) | T2 | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:88:9:88:13 | false | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:89:9:92:9 | MyRecordStruct {...} | | pattern_matching.rs:1:1:4:1 | MyRecordStruct | | pattern_matching.rs:89:9:92:9 | MyRecordStruct {...} | T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:89:9:92:9 | MyRecordStruct {...} | T2 | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:89:9:92:9 | MyRecordStruct {...} | T2.&T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:89:9:92:9 | MyRecordStruct {...} | T2.TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:90:21:90:22 | 42 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:91:21:91:28 | "string" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:91:21:91:28 | "string" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:91:21:91:28 | "string" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:95:5:109:5 | match my_nested_enum { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:95:11:95:24 | my_nested_enum | | pattern_matching.rs:8:1:11:1 | MyEnum | | pattern_matching.rs:95:11:95:24 | my_nested_enum | T1 | pattern_matching.rs:1:1:4:1 | MyRecordStruct | | pattern_matching.rs:95:11:95:24 | my_nested_enum | T1.T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:95:11:95:24 | my_nested_enum | T1.T2 | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:95:11:95:24 | my_nested_enum | T1.T2.&T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:95:11:95:24 | my_nested_enum | T1.T2.TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:95:11:95:24 | my_nested_enum | T2 | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:96:9:102:9 | ...::Variant2(...) | | pattern_matching.rs:8:1:11:1 | MyEnum | | pattern_matching.rs:96:9:102:9 | ...::Variant2(...) | T1 | pattern_matching.rs:1:1:4:1 | MyRecordStruct | | pattern_matching.rs:96:9:102:9 | ...::Variant2(...) | T1.T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:96:9:102:9 | ...::Variant2(...) | T1.T2 | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:96:9:102:9 | ...::Variant2(...) | T1.T2.&T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:96:9:102:9 | ...::Variant2(...) | T1.T2.TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:96:9:102:9 | ...::Variant2(...) | T2 | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:97:13:97:18 | value1 | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:98:13:101:13 | MyRecordStruct {...} | | pattern_matching.rs:1:1:4:1 | MyRecordStruct | | pattern_matching.rs:98:13:101:13 | MyRecordStruct {...} | T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:98:13:101:13 | MyRecordStruct {...} | T2 | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:98:13:101:13 | MyRecordStruct {...} | T2.&T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:98:13:101:13 | MyRecordStruct {...} | T2.TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:99:25:99:25 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:100:25:100:25 | y | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:100:25:100:25 | y | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:100:25:100:25 | y | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:102:14:107:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:103:17:103:17 | a | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:103:21:103:26 | value1 | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:104:17:104:17 | b | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:104:21:104:21 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:105:17:105:17 | c | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:105:17:105:17 | c | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:105:17:105:17 | c | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:105:21:105:21 | y | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:105:21:105:21 | y | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:105:21:105:21 | y | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:106:13:106:14 | TupleExpr | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:108:9:108:9 | _ | | pattern_matching.rs:8:1:11:1 | MyEnum | | pattern_matching.rs:108:9:108:9 | _ | T1 | pattern_matching.rs:1:1:4:1 | MyRecordStruct | | pattern_matching.rs:108:9:108:9 | _ | T1.T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:108:9:108:9 | _ | T1.T2 | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:108:9:108:9 | _ | T1.T2.&T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:108:9:108:9 | _ | T1.T2.TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:108:9:108:9 | _ | T2 | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:108:14:108:15 | TupleExpr | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:111:9:111:12 | opt1 | | {EXTERNAL LOCATION} | Option | @@ -6894,7 +6894,7 @@ inferType | pattern_matching.rs:174:17:174:29 | literal_match | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:174:33:174:37 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:175:22:175:42 | "Literal pattern: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:175:22:175:42 | "Literal pattern: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:175:22:175:42 | "Literal pattern: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:175:22:175:57 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:175:22:175:57 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:175:45:175:57 | literal_match | | {EXTERNAL LOCATION} | i32 | @@ -6903,7 +6903,7 @@ inferType | pattern_matching.rs:178:17:178:32 | negative_literal | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:178:36:178:40 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:179:22:179:43 | "Negative literal: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:179:22:179:43 | "Negative literal: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:179:22:179:43 | "Negative literal: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:179:22:179:61 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:179:22:179:61 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:179:46:179:61 | negative_literal | | {EXTERNAL LOCATION} | i32 | @@ -6912,7 +6912,7 @@ inferType | pattern_matching.rs:182:17:182:28 | zero_literal | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:182:32:182:36 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:183:22:183:39 | "Zero literal: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:183:22:183:39 | "Zero literal: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:183:22:183:39 | "Zero literal: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:183:22:183:53 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:183:22:183:53 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:183:42:183:53 | zero_literal | | {EXTERNAL LOCATION} | i32 | @@ -6927,34 +6927,34 @@ inferType | pattern_matching.rs:191:17:191:24 | pi_match | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:191:28:191:36 | float_val | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:192:22:192:37 | "Pi matched: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:192:22:192:37 | "Pi matched: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:192:22:192:37 | "Pi matched: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:192:22:192:47 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:192:22:192:47 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:192:40:192:47 | pi_match | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:194:9:194:9 | _ | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:194:14:194:15 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:197:9:197:18 | string_val | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:197:9:197:18 | string_val | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:197:9:197:18 | string_val | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:197:22:197:28 | "hello" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:197:22:197:28 | "hello" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:197:22:197:28 | "hello" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:198:5:204:5 | match string_val { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:198:11:198:20 | string_val | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:198:11:198:20 | string_val | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:198:11:198:20 | string_val | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:199:9:199:15 | "hello" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:199:9:199:15 | "hello" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:199:9:199:15 | "hello" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:199:20:202:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:200:17:200:27 | hello_match | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:200:17:200:27 | hello_match | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:200:17:200:27 | hello_match | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:200:31:200:40 | string_val | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:200:31:200:40 | string_val | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:200:31:200:40 | string_val | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:201:22:201:41 | "String literal: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:201:22:201:41 | "String literal: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:201:22:201:41 | "String literal: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:201:22:201:54 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:201:22:201:54 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:201:44:201:54 | hello_match | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:201:44:201:54 | hello_match | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:201:44:201:54 | hello_match | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:203:9:203:9 | _ | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:203:9:203:9 | _ | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:203:9:203:9 | _ | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:203:14:203:15 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:206:9:206:16 | bool_val | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:206:20:206:23 | true | | {EXTERNAL LOCATION} | bool | @@ -6965,7 +6965,7 @@ inferType | pattern_matching.rs:209:17:209:26 | true_match | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:209:30:209:37 | bool_val | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:210:22:210:39 | "True literal: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:210:22:210:39 | "True literal: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:210:22:210:39 | "True literal: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:210:22:210:51 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:210:22:210:51 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:210:42:210:51 | true_match | | {EXTERNAL LOCATION} | bool | @@ -6974,7 +6974,7 @@ inferType | pattern_matching.rs:213:17:213:27 | false_match | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:213:31:213:38 | bool_val | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:214:22:214:40 | "False literal: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:214:22:214:40 | "False literal: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:214:22:214:40 | "False literal: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:214:22:214:53 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:214:22:214:53 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:214:43:214:53 | false_match | | {EXTERNAL LOCATION} | bool | @@ -6988,31 +6988,31 @@ inferType | pattern_matching.rs:225:17:225:27 | bound_value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:225:31:225:31 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:226:22:226:45 | "Identifier pattern: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:226:22:226:45 | "Identifier pattern: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:226:22:226:45 | "Identifier pattern: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:226:22:226:58 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:226:22:226:58 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:226:48:226:58 | bound_value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:231:5:236:5 | match ... { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:231:11:231:16 | &value | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:231:11:231:16 | &value | &T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:231:11:231:16 | &value | TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:231:12:231:16 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:232:13:232:13 | x | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:232:13:232:13 | x | &T | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:232:13:232:13 | x | &T.&T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:232:13:232:13 | x | TRef | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:232:13:232:13 | x | TRef.TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:232:18:235:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:233:17:233:25 | ref_bound | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:233:17:233:25 | ref_bound | &T | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:233:17:233:25 | ref_bound | &T.&T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:233:17:233:25 | ref_bound | TRef | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:233:17:233:25 | ref_bound | TRef.TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:233:29:233:29 | x | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:233:29:233:29 | x | &T | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:233:29:233:29 | x | &T.&T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:233:29:233:29 | x | TRef | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:233:29:233:29 | x | TRef.TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:234:22:234:49 | "Reference identifier: {:?}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:234:22:234:49 | "Reference identifier: {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:234:22:234:49 | "Reference identifier: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:234:22:234:60 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:234:22:234:60 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:234:52:234:60 | ref_bound | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:234:52:234:60 | ref_bound | &T | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:234:52:234:60 | ref_bound | &T.&T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:234:52:234:60 | ref_bound | TRef | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:234:52:234:60 | ref_bound | TRef.TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:239:13:239:25 | mutable_value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:239:29:239:33 | 10i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:240:5:246:5 | match mutable_value { ... } | | {EXTERNAL LOCATION} | () | @@ -7025,7 +7025,7 @@ inferType | pattern_matching.rs:243:13:243:18 | ... += ... | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:243:18:243:18 | 1 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:244:22:244:45 | "Mutable identifier: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:244:22:244:45 | "Mutable identifier: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:244:22:244:45 | "Mutable identifier: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:244:22:244:56 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:244:22:244:56 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:244:48:244:56 | mut_bound | | {EXTERNAL LOCATION} | i32 | @@ -7045,7 +7045,7 @@ inferType | pattern_matching.rs:252:17:252:24 | at_bound | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:252:28:252:28 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:253:22:253:49 | "@ pattern with literal: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:253:22:253:49 | "@ pattern with literal: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:253:22:253:49 | "@ pattern with literal: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:253:22:253:59 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:253:22:253:59 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:253:52:253:59 | at_bound | | {EXTERNAL LOCATION} | i32 | @@ -7058,7 +7058,7 @@ inferType | pattern_matching.rs:256:17:256:30 | range_at_bound | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:256:34:256:34 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:257:22:257:47 | "@ pattern with range: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:257:22:257:47 | "@ pattern with range: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:257:22:257:47 | "@ pattern with range: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:257:22:257:63 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:257:22:257:63 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:257:50:257:63 | range_at_bound | | {EXTERNAL LOCATION} | i32 | @@ -7069,7 +7069,7 @@ inferType | pattern_matching.rs:260:17:260:26 | some_bound | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:260:30:260:30 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:261:22:261:37 | "Some value: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:261:22:261:37 | "Some value: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:261:22:261:37 | "Some value: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:261:22:261:49 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:261:22:261:49 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:261:40:261:49 | some_bound | | {EXTERNAL LOCATION} | i32 | @@ -7077,35 +7077,35 @@ inferType | pattern_matching.rs:263:9:263:22 | ...::None | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:263:27:265:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:264:22:264:33 | "None value\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:264:22:264:33 | "None value\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:264:22:264:33 | "None value\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:264:22:264:33 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:264:22:264:33 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:269:13:269:23 | ref_mut_val | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:269:27:269:30 | 5i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:270:5:276:5 | match ... { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:270:11:270:26 | &mut ref_mut_val | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:270:11:270:26 | &mut ref_mut_val | &T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:270:11:270:26 | &mut ref_mut_val | TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:270:16:270:26 | ref_mut_val | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:271:17:271:17 | x | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:271:17:271:17 | x | &T | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:271:17:271:17 | x | &T.&T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:271:17:271:17 | x | TRef | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:271:17:271:17 | x | TRef.TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:271:22:275:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:272:17:272:29 | ref_mut_bound | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:272:17:272:29 | ref_mut_bound | &T | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:272:17:272:29 | ref_mut_bound | &T.&T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:272:17:272:29 | ref_mut_bound | TRef | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:272:17:272:29 | ref_mut_bound | TRef.TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:272:33:272:33 | x | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:272:33:272:33 | x | &T | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:272:33:272:33 | x | &T.&T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:272:33:272:33 | x | TRef | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:272:33:272:33 | x | TRef.TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:273:13:273:27 | * ... | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:273:13:273:32 | ... += ... | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:273:14:273:27 | * ... | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:273:14:273:27 | * ... | &T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:273:14:273:27 | * ... | TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:273:15:273:27 | ref_mut_bound | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:273:15:273:27 | ref_mut_bound | &T | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:273:15:273:27 | ref_mut_bound | &T.&T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:273:15:273:27 | ref_mut_bound | TRef | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:273:15:273:27 | ref_mut_bound | TRef.TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:273:32:273:32 | 1 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:274:22:274:38 | "Ref mut pattern\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:274:22:274:38 | "Ref mut pattern\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:274:22:274:38 | "Ref mut pattern\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:274:22:274:38 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:274:22:274:38 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:279:28:290:1 | { ... } | | {EXTERNAL LOCATION} | () | @@ -7116,7 +7116,7 @@ inferType | pattern_matching.rs:283:9:283:10 | 42 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:283:15:283:40 | MacroExpr | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:283:24:283:39 | "Specific match\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:283:24:283:39 | "Specific match\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:283:24:283:39 | "Specific match\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:283:24:283:39 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:283:24:283:39 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:285:9:285:9 | _ | | {EXTERNAL LOCATION} | i32 | @@ -7124,7 +7124,7 @@ inferType | pattern_matching.rs:286:17:286:32 | wildcard_context | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:286:36:286:40 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:287:22:287:47 | "Wildcard pattern for: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:287:22:287:47 | "Wildcard pattern for: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:287:22:287:47 | "Wildcard pattern for: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:287:22:287:65 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:287:22:287:65 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:287:50:287:65 | wildcard_context | | {EXTERNAL LOCATION} | i32 | @@ -7140,7 +7140,7 @@ inferType | pattern_matching.rs:298:17:298:31 | range_inclusive | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:298:35:298:39 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:299:22:299:42 | "Range inclusive: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:299:22:299:42 | "Range inclusive: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:299:22:299:42 | "Range inclusive: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:299:22:299:59 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:299:22:299:59 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:299:45:299:59 | range_inclusive | | {EXTERNAL LOCATION} | i32 | @@ -7150,7 +7150,7 @@ inferType | pattern_matching.rs:302:17:302:26 | range_from | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:302:30:302:34 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:303:22:303:40 | "Range from 11: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:303:22:303:40 | "Range from 11: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:303:22:303:40 | "Range from 11: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:303:22:303:52 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:303:22:303:52 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:303:43:303:52 | range_from | | {EXTERNAL LOCATION} | i32 | @@ -7160,7 +7160,7 @@ inferType | pattern_matching.rs:306:17:306:34 | range_to_inclusive | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:306:38:306:42 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:307:22:307:47 | "Range to 0 inclusive: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:307:22:307:47 | "Range to 0 inclusive: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:307:22:307:47 | "Range to 0 inclusive: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:307:22:307:67 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:307:22:307:67 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:307:50:307:67 | range_to_inclusive | | {EXTERNAL LOCATION} | i32 | @@ -7177,7 +7177,7 @@ inferType | pattern_matching.rs:315:17:315:30 | lowercase_char | | {EXTERNAL LOCATION} | char | | pattern_matching.rs:315:34:315:41 | char_val | | {EXTERNAL LOCATION} | char | | pattern_matching.rs:316:22:316:41 | "Lowercase char: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:316:22:316:41 | "Lowercase char: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:316:22:316:41 | "Lowercase char: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:316:22:316:57 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:316:22:316:57 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:316:44:316:57 | lowercase_char | | {EXTERNAL LOCATION} | char | @@ -7188,7 +7188,7 @@ inferType | pattern_matching.rs:319:17:319:30 | uppercase_char | | {EXTERNAL LOCATION} | char | | pattern_matching.rs:319:34:319:41 | char_val | | {EXTERNAL LOCATION} | char | | pattern_matching.rs:320:22:320:41 | "Uppercase char: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:320:22:320:41 | "Uppercase char: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:320:22:320:41 | "Uppercase char: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:320:22:320:57 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:320:22:320:57 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:320:44:320:57 | uppercase_char | | {EXTERNAL LOCATION} | char | @@ -7201,70 +7201,70 @@ inferType | pattern_matching.rs:328:29:328:33 | 10i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:331:5:340:5 | match ... { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:331:11:331:16 | &value | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:331:11:331:16 | &value | &T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:331:11:331:16 | &value | TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:331:12:331:16 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:332:9:332:11 | &42 | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:332:9:332:11 | &42 | &T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:332:9:332:11 | &42 | TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:332:10:332:11 | 42 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:332:16:335:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:333:17:333:27 | deref_match | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:333:31:333:35 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:334:22:334:45 | "Dereferenced match: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:334:22:334:45 | "Dereferenced match: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:334:22:334:45 | "Dereferenced match: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:334:22:334:58 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:334:22:334:58 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:334:48:334:58 | deref_match | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:336:9:336:10 | &... | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:336:9:336:10 | &... | &T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:336:9:336:10 | &... | TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:336:10:336:10 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:336:15:339:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:337:17:337:27 | deref_bound | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:337:31:337:31 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:338:22:338:47 | "Dereferenced binding: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:338:22:338:47 | "Dereferenced binding: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:338:22:338:47 | "Dereferenced binding: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:338:22:338:60 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:338:22:338:60 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:338:50:338:60 | deref_bound | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:342:5:347:5 | match ... { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:342:11:342:28 | &mut mutable_value | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:342:11:342:28 | &mut mutable_value | &T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:342:11:342:28 | &mut mutable_value | TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:342:16:342:28 | mutable_value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:343:9:343:18 | &mut ... | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:343:9:343:18 | &mut ... | &T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:343:9:343:18 | &mut ... | TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:343:18:343:18 | x | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:343:18:343:18 | x | &T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:343:18:343:18 | x | TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:343:23:346:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:344:17:344:29 | mut_ref_bound | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:344:17:344:29 | mut_ref_bound | &T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:344:17:344:29 | mut_ref_bound | TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:344:33:344:33 | x | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:344:33:344:33 | x | &T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:344:33:344:33 | x | TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:345:22:345:46 | "Mutable ref pattern: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:345:22:345:46 | "Mutable ref pattern: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:345:22:345:46 | "Mutable ref pattern: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:345:22:345:61 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:345:22:345:61 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:345:49:345:61 | mut_ref_bound | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:345:49:345:61 | mut_ref_bound | &T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:345:49:345:61 | mut_ref_bound | TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:349:5:354:5 | match ... { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:349:11:349:16 | &value | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:349:11:349:16 | &value | &T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:349:11:349:16 | &value | TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:349:12:349:16 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:350:13:350:13 | x | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:350:13:350:13 | x | &T | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:350:13:350:13 | x | &T.&T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:350:13:350:13 | x | TRef | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:350:13:350:13 | x | TRef.TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:350:18:353:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:351:17:351:27 | ref_pattern | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:351:17:351:27 | ref_pattern | &T | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:351:17:351:27 | ref_pattern | &T.&T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:351:17:351:27 | ref_pattern | TRef | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:351:17:351:27 | ref_pattern | TRef.TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:351:31:351:31 | x | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:351:31:351:31 | x | &T | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:351:31:351:31 | x | &T.&T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:351:31:351:31 | x | TRef | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:351:31:351:31 | x | TRef.TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:352:22:352:44 | "Reference pattern: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:352:22:352:44 | "Reference pattern: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:352:22:352:44 | "Reference pattern: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:352:22:352:57 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:352:22:352:57 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:352:47:352:57 | ref_pattern | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:352:47:352:57 | ref_pattern | &T | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:352:47:352:57 | ref_pattern | &T.&T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:352:47:352:57 | ref_pattern | TRef | {EXTERNAL LOCATION} | & | +| pattern_matching.rs:352:47:352:57 | ref_pattern | TRef.TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:357:26:398:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:358:9:358:13 | point | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:358:17:358:38 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | @@ -7279,7 +7279,7 @@ inferType | pattern_matching.rs:363:17:363:22 | origin | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:363:26:363:30 | point | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:364:22:364:41 | "Origin point: {:?}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:364:22:364:41 | "Origin point: {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:364:22:364:41 | "Origin point: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:364:22:364:49 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:364:22:364:49 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:364:44:364:49 | origin | | pattern_matching.rs:135:1:140:1 | Point | @@ -7292,7 +7292,7 @@ inferType | pattern_matching.rs:368:17:368:28 | x_axis_point | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:368:32:368:36 | point | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:369:22:369:56 | "Point on x-axis: x={}, point=... | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:369:22:369:56 | "Point on x-axis: x={}, point=... | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:369:22:369:56 | "Point on x-axis: x={}, point=... | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:369:22:369:80 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:369:22:369:80 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:369:59:369:66 | x_axis_x | | {EXTERNAL LOCATION} | i32 | @@ -7303,7 +7303,7 @@ inferType | pattern_matching.rs:372:17:372:27 | ten_x_point | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:372:31:372:35 | point | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:373:22:373:44 | "Point with x=10: {:?}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:373:22:373:44 | "Point with x=10: {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:373:22:373:44 | "Point with x=10: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:373:22:373:57 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:373:22:373:57 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:373:47:373:57 | ten_x_point | | pattern_matching.rs:135:1:140:1 | Point | @@ -7316,7 +7316,7 @@ inferType | pattern_matching.rs:377:17:377:25 | general_y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:377:29:377:29 | y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:378:22:378:46 | "General point: ({}, {})\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:378:22:378:46 | "General point: ({}, {})\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:378:22:378:46 | "General point: ({}, {})\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:378:22:378:68 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:378:22:378:68 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:378:49:378:57 | general_x | | {EXTERNAL LOCATION} | i32 | @@ -7336,7 +7336,7 @@ inferType | pattern_matching.rs:393:17:393:27 | rect_height | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:393:31:393:31 | h | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:394:22:394:39 | "Rectangle: {}x{}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:394:22:394:39 | "Rectangle: {}x{}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:394:22:394:39 | "Rectangle: {}x{}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:394:22:394:64 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:394:22:394:64 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:394:42:394:51 | rect_width | | {EXTERNAL LOCATION} | f64 | @@ -7362,7 +7362,7 @@ inferType | pattern_matching.rs:406:17:406:25 | red_color | | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:406:29:406:33 | color | | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:407:22:407:37 | "Pure red: {:?}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:407:22:407:37 | "Pure red: {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:407:22:407:37 | "Pure red: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:407:22:407:48 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:407:22:407:48 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:407:40:407:48 | red_color | | pattern_matching.rs:142:1:143:25 | Color | @@ -7378,7 +7378,7 @@ inferType | pattern_matching.rs:412:17:412:30 | blue_component | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:412:34:412:34 | b | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:414:17:414:37 | "Color: ({}, {}, {})\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:414:17:414:37 | "Color: ({}, {}, {})\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:414:17:414:37 | "Color: ({}, {}, {})\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:414:17:415:62 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:414:17:415:62 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:415:17:415:29 | red_component | | {EXTERNAL LOCATION} | u8 | @@ -7394,7 +7394,7 @@ inferType | pattern_matching.rs:423:17:423:29 | reddish_color | | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:423:33:423:37 | color | | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:424:22:424:42 | "Reddish color: {:?}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:424:22:424:42 | "Reddish color: {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:424:22:424:42 | "Reddish color: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:424:22:424:57 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:424:22:424:57 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:424:45:424:57 | reddish_color | | pattern_matching.rs:142:1:143:25 | Color | @@ -7405,7 +7405,7 @@ inferType | pattern_matching.rs:427:17:427:23 | any_red | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:427:27:427:27 | r | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:428:22:428:45 | "Any color with red: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:428:22:428:45 | "Any color with red: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:428:22:428:45 | "Any color with red: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:428:22:428:54 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:428:22:428:54 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:428:48:428:54 | any_red | | {EXTERNAL LOCATION} | u8 | @@ -7420,39 +7420,39 @@ inferType | pattern_matching.rs:437:17:437:29 | wrapped_value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:437:33:437:33 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:438:22:438:34 | "Wrapped: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:438:22:438:34 | "Wrapped: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:438:22:438:34 | "Wrapped: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:438:22:438:49 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:438:22:438:49 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:438:37:438:49 | wrapped_value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:443:25:498:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:444:9:444:13 | tuple | | {EXTERNAL LOCATION} | (T_3) | -| pattern_matching.rs:444:9:444:13 | tuple | 0(3) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:444:9:444:13 | tuple | 1(3) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:444:9:444:13 | tuple | 1(3) | {EXTERNAL LOCATION} | i64 | -| pattern_matching.rs:444:9:444:13 | tuple | 2(3) | {EXTERNAL LOCATION} | f32 | -| pattern_matching.rs:444:9:444:13 | tuple | 2(3) | {EXTERNAL LOCATION} | f64 | +| pattern_matching.rs:444:9:444:13 | tuple | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:444:9:444:13 | tuple | T1 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:444:9:444:13 | tuple | T1 | {EXTERNAL LOCATION} | i64 | +| pattern_matching.rs:444:9:444:13 | tuple | T2 | {EXTERNAL LOCATION} | f32 | +| pattern_matching.rs:444:9:444:13 | tuple | T2 | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:444:17:444:36 | TupleExpr | | {EXTERNAL LOCATION} | (T_3) | -| pattern_matching.rs:444:17:444:36 | TupleExpr | 0(3) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:444:17:444:36 | TupleExpr | 1(3) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:444:17:444:36 | TupleExpr | 1(3) | {EXTERNAL LOCATION} | i64 | -| pattern_matching.rs:444:17:444:36 | TupleExpr | 2(3) | {EXTERNAL LOCATION} | f32 | -| pattern_matching.rs:444:17:444:36 | TupleExpr | 2(3) | {EXTERNAL LOCATION} | f64 | +| pattern_matching.rs:444:17:444:36 | TupleExpr | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:444:17:444:36 | TupleExpr | T1 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:444:17:444:36 | TupleExpr | T1 | {EXTERNAL LOCATION} | i64 | +| pattern_matching.rs:444:17:444:36 | TupleExpr | T2 | {EXTERNAL LOCATION} | f32 | +| pattern_matching.rs:444:17:444:36 | TupleExpr | T2 | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:444:18:444:21 | 1i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:444:24:444:27 | 2i64 | | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:444:30:444:35 | 3.0f32 | | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:447:5:458:5 | match tuple { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:447:11:447:15 | tuple | | {EXTERNAL LOCATION} | (T_3) | -| pattern_matching.rs:447:11:447:15 | tuple | 0(3) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:447:11:447:15 | tuple | 1(3) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:447:11:447:15 | tuple | 1(3) | {EXTERNAL LOCATION} | i64 | -| pattern_matching.rs:447:11:447:15 | tuple | 2(3) | {EXTERNAL LOCATION} | f32 | -| pattern_matching.rs:447:11:447:15 | tuple | 2(3) | {EXTERNAL LOCATION} | f64 | +| pattern_matching.rs:447:11:447:15 | tuple | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:447:11:447:15 | tuple | T1 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:447:11:447:15 | tuple | T1 | {EXTERNAL LOCATION} | i64 | +| pattern_matching.rs:447:11:447:15 | tuple | T2 | {EXTERNAL LOCATION} | f32 | +| pattern_matching.rs:447:11:447:15 | tuple | T2 | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:448:9:448:19 | TuplePat | | {EXTERNAL LOCATION} | (T_3) | -| pattern_matching.rs:448:9:448:19 | TuplePat | 0(3) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:448:9:448:19 | TuplePat | 1(3) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:448:9:448:19 | TuplePat | 1(3) | {EXTERNAL LOCATION} | i64 | -| pattern_matching.rs:448:9:448:19 | TuplePat | 2(3) | {EXTERNAL LOCATION} | f32 | -| pattern_matching.rs:448:9:448:19 | TuplePat | 2(3) | {EXTERNAL LOCATION} | f64 | +| pattern_matching.rs:448:9:448:19 | TuplePat | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:448:9:448:19 | TuplePat | T1 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:448:9:448:19 | TuplePat | T1 | {EXTERNAL LOCATION} | i64 | +| pattern_matching.rs:448:9:448:19 | TuplePat | T2 | {EXTERNAL LOCATION} | f32 | +| pattern_matching.rs:448:9:448:19 | TuplePat | T2 | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:448:10:448:10 | 1 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:448:13:448:13 | 2 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:448:13:448:13 | 2 | | {EXTERNAL LOCATION} | i64 | @@ -7460,33 +7460,33 @@ inferType | pattern_matching.rs:448:16:448:18 | 3.0 | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:448:24:451:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:449:17:449:27 | exact_tuple | | {EXTERNAL LOCATION} | (T_3) | -| pattern_matching.rs:449:17:449:27 | exact_tuple | 0(3) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:449:17:449:27 | exact_tuple | 1(3) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:449:17:449:27 | exact_tuple | 1(3) | {EXTERNAL LOCATION} | i64 | -| pattern_matching.rs:449:17:449:27 | exact_tuple | 2(3) | {EXTERNAL LOCATION} | f32 | -| pattern_matching.rs:449:17:449:27 | exact_tuple | 2(3) | {EXTERNAL LOCATION} | f64 | +| pattern_matching.rs:449:17:449:27 | exact_tuple | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:449:17:449:27 | exact_tuple | T1 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:449:17:449:27 | exact_tuple | T1 | {EXTERNAL LOCATION} | i64 | +| pattern_matching.rs:449:17:449:27 | exact_tuple | T2 | {EXTERNAL LOCATION} | f32 | +| pattern_matching.rs:449:17:449:27 | exact_tuple | T2 | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:449:31:449:35 | tuple | | {EXTERNAL LOCATION} | (T_3) | -| pattern_matching.rs:449:31:449:35 | tuple | 0(3) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:449:31:449:35 | tuple | 1(3) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:449:31:449:35 | tuple | 1(3) | {EXTERNAL LOCATION} | i64 | -| pattern_matching.rs:449:31:449:35 | tuple | 2(3) | {EXTERNAL LOCATION} | f32 | -| pattern_matching.rs:449:31:449:35 | tuple | 2(3) | {EXTERNAL LOCATION} | f64 | +| pattern_matching.rs:449:31:449:35 | tuple | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:449:31:449:35 | tuple | T1 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:449:31:449:35 | tuple | T1 | {EXTERNAL LOCATION} | i64 | +| pattern_matching.rs:449:31:449:35 | tuple | T2 | {EXTERNAL LOCATION} | f32 | +| pattern_matching.rs:449:31:449:35 | tuple | T2 | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:450:22:450:40 | "Exact tuple: {:?}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:450:22:450:40 | "Exact tuple: {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:450:22:450:40 | "Exact tuple: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:450:22:450:53 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:450:22:450:53 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:450:43:450:53 | exact_tuple | | {EXTERNAL LOCATION} | (T_3) | -| pattern_matching.rs:450:43:450:53 | exact_tuple | 0(3) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:450:43:450:53 | exact_tuple | 1(3) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:450:43:450:53 | exact_tuple | 1(3) | {EXTERNAL LOCATION} | i64 | -| pattern_matching.rs:450:43:450:53 | exact_tuple | 2(3) | {EXTERNAL LOCATION} | f32 | -| pattern_matching.rs:450:43:450:53 | exact_tuple | 2(3) | {EXTERNAL LOCATION} | f64 | +| pattern_matching.rs:450:43:450:53 | exact_tuple | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:450:43:450:53 | exact_tuple | T1 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:450:43:450:53 | exact_tuple | T1 | {EXTERNAL LOCATION} | i64 | +| pattern_matching.rs:450:43:450:53 | exact_tuple | T2 | {EXTERNAL LOCATION} | f32 | +| pattern_matching.rs:450:43:450:53 | exact_tuple | T2 | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:452:9:452:17 | TuplePat | | {EXTERNAL LOCATION} | (T_3) | -| pattern_matching.rs:452:9:452:17 | TuplePat | 0(3) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:452:9:452:17 | TuplePat | 1(3) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:452:9:452:17 | TuplePat | 1(3) | {EXTERNAL LOCATION} | i64 | -| pattern_matching.rs:452:9:452:17 | TuplePat | 2(3) | {EXTERNAL LOCATION} | f32 | -| pattern_matching.rs:452:9:452:17 | TuplePat | 2(3) | {EXTERNAL LOCATION} | f64 | +| pattern_matching.rs:452:9:452:17 | TuplePat | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:452:9:452:17 | TuplePat | T1 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:452:9:452:17 | TuplePat | T1 | {EXTERNAL LOCATION} | i64 | +| pattern_matching.rs:452:9:452:17 | TuplePat | T2 | {EXTERNAL LOCATION} | f32 | +| pattern_matching.rs:452:9:452:17 | TuplePat | T2 | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:452:10:452:10 | a | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:452:13:452:13 | b | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:452:13:452:13 | b | | {EXTERNAL LOCATION} | i64 | @@ -7504,7 +7504,7 @@ inferType | pattern_matching.rs:455:30:455:30 | c | | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:455:30:455:30 | c | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:456:22:456:42 | "Tuple: ({}, {}, {})\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:456:22:456:42 | "Tuple: ({}, {}, {})\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:456:22:456:42 | "Tuple: ({}, {}, {})\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:456:22:456:79 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:456:22:456:79 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:456:45:456:54 | first_elem | | {EXTERNAL LOCATION} | i32 | @@ -7514,20 +7514,20 @@ inferType | pattern_matching.rs:456:70:456:79 | third_elem | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:461:5:466:5 | match tuple { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:461:11:461:15 | tuple | | {EXTERNAL LOCATION} | (T_3) | -| pattern_matching.rs:461:11:461:15 | tuple | 0(3) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:461:11:461:15 | tuple | 1(3) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:461:11:461:15 | tuple | 1(3) | {EXTERNAL LOCATION} | i64 | -| pattern_matching.rs:461:11:461:15 | tuple | 2(3) | {EXTERNAL LOCATION} | f32 | -| pattern_matching.rs:461:11:461:15 | tuple | 2(3) | {EXTERNAL LOCATION} | f64 | +| pattern_matching.rs:461:11:461:15 | tuple | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:461:11:461:15 | tuple | T1 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:461:11:461:15 | tuple | T1 | {EXTERNAL LOCATION} | i64 | +| pattern_matching.rs:461:11:461:15 | tuple | T2 | {EXTERNAL LOCATION} | f32 | +| pattern_matching.rs:461:11:461:15 | tuple | T2 | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:462:9:462:19 | TuplePat | | {EXTERNAL LOCATION} | (T_3) | -| pattern_matching.rs:462:9:462:19 | TuplePat | 0(3) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:462:9:462:19 | TuplePat | 1(3) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:462:9:462:19 | TuplePat | 1(3) | {EXTERNAL LOCATION} | i64 | -| pattern_matching.rs:462:9:462:19 | TuplePat | 2(3) | {EXTERNAL LOCATION} | f32 | -| pattern_matching.rs:462:9:462:19 | TuplePat | 2(3) | {EXTERNAL LOCATION} | f64 | +| pattern_matching.rs:462:9:462:19 | TuplePat | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:462:9:462:19 | TuplePat | T1 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:462:9:462:19 | TuplePat | T1 | {EXTERNAL LOCATION} | i64 | +| pattern_matching.rs:462:9:462:19 | TuplePat | T2 | {EXTERNAL LOCATION} | f32 | +| pattern_matching.rs:462:9:462:19 | TuplePat | T2 | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:462:24:465:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:464:22:464:40 | "First element: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:464:22:464:40 | "First element: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:464:22:464:40 | "First element: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:464:22:464:53 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:464:22:464:53 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:469:9:469:12 | unit | | {EXTERNAL LOCATION} | () | @@ -7539,81 +7539,81 @@ inferType | pattern_matching.rs:472:17:472:26 | unit_value | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:472:30:472:33 | unit | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:473:22:473:39 | "Unit value: {:?}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:473:22:473:39 | "Unit value: {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:473:22:473:39 | "Unit value: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:473:22:473:51 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:473:22:473:51 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:473:42:473:51 | unit_value | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:478:9:478:14 | single | | {EXTERNAL LOCATION} | (T_1) | -| pattern_matching.rs:478:9:478:14 | single | 0(1) | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:478:9:478:14 | single | T0 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:478:18:478:25 | TupleExpr | | {EXTERNAL LOCATION} | (T_1) | -| pattern_matching.rs:478:18:478:25 | TupleExpr | 0(1) | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:478:18:478:25 | TupleExpr | T0 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:478:19:478:23 | 42i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:479:5:484:5 | match single { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:479:11:479:16 | single | | {EXTERNAL LOCATION} | (T_1) | -| pattern_matching.rs:479:11:479:16 | single | 0(1) | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:479:11:479:16 | single | T0 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:480:9:480:12 | TuplePat | | {EXTERNAL LOCATION} | (T_1) | -| pattern_matching.rs:480:9:480:12 | TuplePat | 0(1) | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:480:9:480:12 | TuplePat | T0 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:480:10:480:10 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:480:17:483:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:481:17:481:27 | single_elem | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:481:31:481:31 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:482:22:482:47 | "Single element tuple: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:482:22:482:47 | "Single element tuple: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:482:22:482:47 | "Single element tuple: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:482:22:482:60 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:482:22:482:60 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:482:50:482:60 | single_elem | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:487:9:487:18 | ref_tuple1 | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:487:9:487:18 | ref_tuple1 | &T | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:487:9:487:18 | ref_tuple1 | &T.0(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:487:9:487:18 | ref_tuple1 | &T.1(2) | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:487:9:487:18 | ref_tuple1 | TRef | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:487:9:487:18 | ref_tuple1 | TRef.T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:487:9:487:18 | ref_tuple1 | TRef.T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:487:35:487:41 | &... | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:487:35:487:41 | &... | &T | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:487:35:487:41 | &... | &T.0(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:487:35:487:41 | &... | &T.1(2) | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:487:35:487:41 | &... | TRef | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:487:35:487:41 | &... | TRef.T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:487:35:487:41 | &... | TRef.T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:487:36:487:41 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:487:36:487:41 | TupleExpr | 0(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:487:36:487:41 | TupleExpr | 1(2) | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:487:36:487:41 | TupleExpr | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:487:36:487:41 | TupleExpr | T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:487:37:487:37 | 1 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:487:40:487:40 | 2 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:488:5:491:5 | if ... {...} | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:488:12:488:17 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:488:21:488:30 | ref_tuple1 | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:488:21:488:30 | ref_tuple1 | &T | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:488:21:488:30 | ref_tuple1 | &T.0(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:488:21:488:30 | ref_tuple1 | &T.1(2) | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:488:21:488:30 | ref_tuple1 | TRef | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:488:21:488:30 | ref_tuple1 | TRef.T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:488:21:488:30 | ref_tuple1 | TRef.T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:488:32:491:5 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:489:18:489:24 | "n: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:489:18:489:24 | "n: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:489:18:489:24 | "n: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:489:18:489:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:489:18:489:27 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:490:18:490:24 | "m: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:490:18:490:24 | "m: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:490:18:490:24 | "m: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:490:18:490:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:490:18:490:27 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:494:9:494:18 | ref_tuple2 | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:494:9:494:18 | ref_tuple2 | &T | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:494:9:494:18 | ref_tuple2 | &T.0(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:494:9:494:18 | ref_tuple2 | &T.1(2) | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:494:9:494:18 | ref_tuple2 | TRef | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:494:9:494:18 | ref_tuple2 | TRef.T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:494:9:494:18 | ref_tuple2 | TRef.T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:494:35:494:41 | &... | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:494:35:494:41 | &... | &T | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:494:35:494:41 | &... | &T.0(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:494:35:494:41 | &... | &T.1(2) | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:494:35:494:41 | &... | TRef | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:494:35:494:41 | &... | TRef.T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:494:35:494:41 | &... | TRef.T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:494:36:494:41 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:494:36:494:41 | TupleExpr | 0(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:494:36:494:41 | TupleExpr | 1(2) | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:494:36:494:41 | TupleExpr | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:494:36:494:41 | TupleExpr | T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:494:37:494:37 | 1 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:494:40:494:40 | 2 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:495:9:495:14 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:495:18:495:27 | ref_tuple2 | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:495:18:495:27 | ref_tuple2 | &T | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:495:18:495:27 | ref_tuple2 | &T.0(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:495:18:495:27 | ref_tuple2 | &T.1(2) | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:495:18:495:27 | ref_tuple2 | TRef | {EXTERNAL LOCATION} | (T_2) | +| pattern_matching.rs:495:18:495:27 | ref_tuple2 | TRef.T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:495:18:495:27 | ref_tuple2 | TRef.T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:496:14:496:20 | "n: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:496:14:496:20 | "n: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:496:14:496:20 | "n: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:496:14:496:23 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:496:14:496:23 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:497:14:497:20 | "m: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:497:14:497:20 | "m: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:497:14:497:20 | "m: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:497:14:497:23 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:497:14:497:23 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:500:33:520:1 | { ... } | | {EXTERNAL LOCATION} | () | @@ -7627,25 +7627,25 @@ inferType | pattern_matching.rs:506:17:506:27 | paren_bound | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:506:31:506:31 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:507:22:507:48 | "Parenthesized pattern: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:507:22:507:48 | "Parenthesized pattern: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:507:22:507:48 | "Parenthesized pattern: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:507:22:507:61 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:507:22:507:61 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:507:51:507:61 | paren_bound | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:512:9:512:13 | tuple | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:512:9:512:13 | tuple | 0(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:512:9:512:13 | tuple | 1(2) | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:512:9:512:13 | tuple | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:512:9:512:13 | tuple | T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:512:17:512:28 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:512:17:512:28 | TupleExpr | 0(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:512:17:512:28 | TupleExpr | 1(2) | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:512:17:512:28 | TupleExpr | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:512:17:512:28 | TupleExpr | T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:512:18:512:21 | 1i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:512:24:512:27 | 2i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:513:5:519:5 | match tuple { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:513:11:513:15 | tuple | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:513:11:513:15 | tuple | 0(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:513:11:513:15 | tuple | 1(2) | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:513:11:513:15 | tuple | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:513:11:513:15 | tuple | T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:514:9:514:16 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:514:9:514:16 | TuplePat | 0(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:514:9:514:16 | TuplePat | 1(2) | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:514:9:514:16 | TuplePat | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:514:9:514:16 | TuplePat | T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:514:10:514:10 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:514:13:514:15 | (...) | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:514:14:514:14 | y | | {EXTERNAL LOCATION} | i32 | @@ -7655,22 +7655,22 @@ inferType | pattern_matching.rs:516:17:516:23 | paren_y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:516:27:516:27 | y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:517:22:517:53 | "Parenthesized in tuple: {}, {... | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:517:22:517:53 | "Parenthesized in tuple: {}, {... | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:517:22:517:53 | "Parenthesized in tuple: {}, {... | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:517:22:517:71 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:517:22:517:71 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:517:56:517:62 | paren_x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:517:65:517:71 | paren_y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:522:25:563:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:523:9:523:13 | slice | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:523:9:523:13 | slice | &T | {EXTERNAL LOCATION} | [] | -| pattern_matching.rs:523:9:523:13 | slice | &T.[T] | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:523:9:523:13 | slice | TRef | {EXTERNAL LOCATION} | [] | +| pattern_matching.rs:523:9:523:13 | slice | TRef.TSlice | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:523:25:523:40 | &... | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:523:25:523:40 | &... | &T | {EXTERNAL LOCATION} | [] | -| pattern_matching.rs:523:25:523:40 | &... | &T | {EXTERNAL LOCATION} | [;] | -| pattern_matching.rs:523:25:523:40 | &... | &T.[T;...] | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:523:25:523:40 | &... | &T.[T] | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:523:25:523:40 | &... | TRef | {EXTERNAL LOCATION} | [] | +| pattern_matching.rs:523:25:523:40 | &... | TRef | {EXTERNAL LOCATION} | [;] | +| pattern_matching.rs:523:25:523:40 | &... | TRef.TArray | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:523:25:523:40 | &... | TRef.TSlice | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:523:26:523:40 | [...] | | {EXTERNAL LOCATION} | [;] | -| pattern_matching.rs:523:26:523:40 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:523:26:523:40 | [...] | TArray | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:523:27:523:27 | 1 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:523:30:523:30 | 2 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:523:33:523:33 | 3 | | {EXTERNAL LOCATION} | i32 | @@ -7678,64 +7678,64 @@ inferType | pattern_matching.rs:523:39:523:39 | 5 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:526:5:551:5 | match slice { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:526:11:526:15 | slice | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:526:11:526:15 | slice | &T | {EXTERNAL LOCATION} | [] | -| pattern_matching.rs:526:11:526:15 | slice | &T.[T] | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:526:11:526:15 | slice | TRef | {EXTERNAL LOCATION} | [] | +| pattern_matching.rs:526:11:526:15 | slice | TRef.TSlice | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:527:9:527:10 | SlicePat | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:527:9:527:10 | SlicePat | &T | {EXTERNAL LOCATION} | [] | -| pattern_matching.rs:527:9:527:10 | SlicePat | &T.[T] | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:527:9:527:10 | SlicePat | TRef | {EXTERNAL LOCATION} | [] | +| pattern_matching.rs:527:9:527:10 | SlicePat | TRef.TSlice | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:527:15:530:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:528:17:528:27 | empty_slice | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:528:17:528:27 | empty_slice | &T | {EXTERNAL LOCATION} | [] | -| pattern_matching.rs:528:17:528:27 | empty_slice | &T.[T] | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:528:17:528:27 | empty_slice | TRef | {EXTERNAL LOCATION} | [] | +| pattern_matching.rs:528:17:528:27 | empty_slice | TRef.TSlice | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:528:31:528:35 | slice | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:528:31:528:35 | slice | &T | {EXTERNAL LOCATION} | [] | -| pattern_matching.rs:528:31:528:35 | slice | &T.[T] | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:528:31:528:35 | slice | TRef | {EXTERNAL LOCATION} | [] | +| pattern_matching.rs:528:31:528:35 | slice | TRef.TSlice | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:529:22:529:40 | "Empty slice: {:?}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:529:22:529:40 | "Empty slice: {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:529:22:529:40 | "Empty slice: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:529:22:529:53 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:529:22:529:53 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:529:43:529:53 | empty_slice | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:529:43:529:53 | empty_slice | &T | {EXTERNAL LOCATION} | [] | -| pattern_matching.rs:529:43:529:53 | empty_slice | &T.[T] | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:529:43:529:53 | empty_slice | TRef | {EXTERNAL LOCATION} | [] | +| pattern_matching.rs:529:43:529:53 | empty_slice | TRef.TSlice | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:531:9:531:11 | SlicePat | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:531:9:531:11 | SlicePat | &T | {EXTERNAL LOCATION} | [] | -| pattern_matching.rs:531:9:531:11 | SlicePat | &T.[T] | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:531:9:531:11 | SlicePat | TRef | {EXTERNAL LOCATION} | [] | +| pattern_matching.rs:531:9:531:11 | SlicePat | TRef.TSlice | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:531:16:534:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:533:22:533:41 | "Single element: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:533:22:533:41 | "Single element: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:533:22:533:41 | "Single element: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:533:22:533:54 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:533:22:533:54 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:535:9:535:23 | SlicePat | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:535:9:535:23 | SlicePat | &T | {EXTERNAL LOCATION} | [] | -| pattern_matching.rs:535:9:535:23 | SlicePat | &T.[T] | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:535:9:535:23 | SlicePat | TRef | {EXTERNAL LOCATION} | [] | +| pattern_matching.rs:535:9:535:23 | SlicePat | TRef.TSlice | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:535:28:539:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:538:22:538:43 | "Two elements: {}, {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:538:22:538:43 | "Two elements: {}, {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:538:22:538:43 | "Two elements: {}, {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:538:22:538:70 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:538:22:538:70 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:540:9:540:34 | SlicePat | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:540:9:540:34 | SlicePat | &T | {EXTERNAL LOCATION} | [] | -| pattern_matching.rs:540:9:540:34 | SlicePat | &T.[T] | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:540:9:540:34 | SlicePat | TRef | {EXTERNAL LOCATION} | [] | +| pattern_matching.rs:540:9:540:34 | SlicePat | TRef.TSlice | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:540:39:550:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:545:17:545:53 | "First: {}, last: {}, middle l... | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:545:17:545:53 | "First: {}, last: {}, middle l... | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:545:17:545:53 | "First: {}, last: {}, middle l... | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:545:17:548:34 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:545:17:548:34 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:554:9:554:13 | array | | {EXTERNAL LOCATION} | [;] | -| pattern_matching.rs:554:9:554:13 | array | [T;...] | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:554:9:554:13 | array | TArray | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:554:17:554:28 | [...] | | {EXTERNAL LOCATION} | [;] | -| pattern_matching.rs:554:17:554:28 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:554:17:554:28 | [...] | TArray | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:554:18:554:21 | 1i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:554:24:554:24 | 2 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:554:27:554:27 | 3 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:555:5:562:5 | match array { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:555:11:555:15 | array | | {EXTERNAL LOCATION} | [;] | -| pattern_matching.rs:555:11:555:15 | array | [T;...] | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:555:11:555:15 | array | TArray | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:556:9:556:17 | SlicePat | | {EXTERNAL LOCATION} | [;] | -| pattern_matching.rs:556:9:556:17 | SlicePat | [T;...] | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:556:9:556:17 | SlicePat | TArray | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:556:22:561:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:560:22:560:49 | "Array elements: {}, {}, {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:560:22:560:49 | "Array elements: {}, {}, {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:560:22:560:49 | "Array elements: {}, {}, {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:560:22:560:70 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:560:22:560:70 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:565:24:601:1 | { ... } | | {EXTERNAL LOCATION} | () | @@ -7749,7 +7749,7 @@ inferType | pattern_matching.rs:572:17:572:27 | const_match | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:572:31:572:35 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:573:22:573:43 | "Matches constant: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:573:22:573:43 | "Matches constant: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:573:22:573:43 | "Matches constant: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:573:22:573:56 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:573:22:573:56 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:573:46:573:56 | const_match | | {EXTERNAL LOCATION} | i32 | @@ -7767,7 +7767,7 @@ inferType | pattern_matching.rs:581:9:581:22 | ...::None | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:581:27:583:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:582:22:582:35 | "None variant\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:582:22:582:35 | "None variant\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:582:22:582:35 | "None variant\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:582:22:582:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:582:22:582:35 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:584:9:584:25 | ...::Some(...) | | pattern_matching.rs:152:1:156:1 | MyOption | @@ -7777,7 +7777,7 @@ inferType | pattern_matching.rs:585:17:585:26 | some_value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:585:30:585:30 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:586:22:586:37 | "Some value: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:586:22:586:37 | "Some value: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:586:22:586:37 | "Some value: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:586:22:586:49 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:586:22:586:49 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:586:40:586:49 | some_value | | {EXTERNAL LOCATION} | i32 | @@ -7794,7 +7794,7 @@ inferType | pattern_matching.rs:593:17:593:24 | ok_value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:593:28:593:28 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:594:22:594:35 | "Ok value: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:594:22:594:35 | "Ok value: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:594:22:594:35 | "Ok value: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:594:22:594:45 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:594:22:594:45 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:594:38:594:45 | ok_value | | {EXTERNAL LOCATION} | i32 | @@ -7806,7 +7806,7 @@ inferType | pattern_matching.rs:597:17:597:25 | err_value | | {EXTERNAL LOCATION} | usize | | pattern_matching.rs:597:29:597:29 | e | | {EXTERNAL LOCATION} | usize | | pattern_matching.rs:598:22:598:32 | "Error: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:598:22:598:32 | "Error: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:598:22:598:32 | "Error: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:598:22:598:43 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:598:22:598:43 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:598:35:598:43 | err_value | | {EXTERNAL LOCATION} | usize | @@ -7823,7 +7823,7 @@ inferType | pattern_matching.rs:609:17:609:25 | small_num | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:609:29:609:33 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:610:22:610:39 | "Small number: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:610:22:610:39 | "Small number: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:610:22:610:39 | "Small number: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:610:22:610:50 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:610:22:610:50 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:610:42:610:50 | small_num | | {EXTERNAL LOCATION} | i32 | @@ -7834,7 +7834,7 @@ inferType | pattern_matching.rs:613:17:613:25 | round_num | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:613:29:613:33 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:614:22:614:39 | "Round number: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:614:22:614:39 | "Round number: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:614:22:614:39 | "Round number: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:614:22:614:50 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:614:22:614:50 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:614:42:614:50 | round_num | | {EXTERNAL LOCATION} | i32 | @@ -7861,7 +7861,7 @@ inferType | pattern_matching.rs:624:17:624:22 | axis_y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:624:26:624:26 | y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:625:22:625:46 | "Point on axis: ({}, {})\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:625:22:625:46 | "Point on axis: ({}, {})\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:625:22:625:46 | "Point on axis: ({}, {})\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:625:22:625:62 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:625:22:625:62 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:625:49:625:54 | axis_x | | {EXTERNAL LOCATION} | i32 | @@ -7881,7 +7881,7 @@ inferType | pattern_matching.rs:633:17:633:30 | range_or_value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:633:34:633:38 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:634:22:634:35 | "In range: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:634:22:634:35 | "In range: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:634:22:634:35 | "In range: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:634:22:634:51 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:634:22:634:51 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:634:38:634:51 | range_or_value | | {EXTERNAL LOCATION} | i32 | @@ -7889,65 +7889,65 @@ inferType | pattern_matching.rs:636:14:636:15 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:640:24:674:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:641:9:641:13 | tuple | | {EXTERNAL LOCATION} | (T_4) | -| pattern_matching.rs:641:9:641:13 | tuple | 0(4) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:641:9:641:13 | tuple | 1(4) | {EXTERNAL LOCATION} | i64 | -| pattern_matching.rs:641:9:641:13 | tuple | 2(4) | {EXTERNAL LOCATION} | f32 | -| pattern_matching.rs:641:9:641:13 | tuple | 3(4) | {EXTERNAL LOCATION} | u8 | +| pattern_matching.rs:641:9:641:13 | tuple | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:641:9:641:13 | tuple | T1 | {EXTERNAL LOCATION} | i64 | +| pattern_matching.rs:641:9:641:13 | tuple | T2 | {EXTERNAL LOCATION} | f32 | +| pattern_matching.rs:641:9:641:13 | tuple | T3 | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:641:17:641:41 | TupleExpr | | {EXTERNAL LOCATION} | (T_4) | -| pattern_matching.rs:641:17:641:41 | TupleExpr | 0(4) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:641:17:641:41 | TupleExpr | 1(4) | {EXTERNAL LOCATION} | i64 | -| pattern_matching.rs:641:17:641:41 | TupleExpr | 2(4) | {EXTERNAL LOCATION} | f32 | -| pattern_matching.rs:641:17:641:41 | TupleExpr | 3(4) | {EXTERNAL LOCATION} | u8 | +| pattern_matching.rs:641:17:641:41 | TupleExpr | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:641:17:641:41 | TupleExpr | T1 | {EXTERNAL LOCATION} | i64 | +| pattern_matching.rs:641:17:641:41 | TupleExpr | T2 | {EXTERNAL LOCATION} | f32 | +| pattern_matching.rs:641:17:641:41 | TupleExpr | T3 | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:641:18:641:21 | 1i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:641:24:641:27 | 2i64 | | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:641:30:641:35 | 3.0f32 | | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:641:38:641:40 | 4u8 | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:644:5:649:5 | match tuple { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:644:11:644:15 | tuple | | {EXTERNAL LOCATION} | (T_4) | -| pattern_matching.rs:644:11:644:15 | tuple | 0(4) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:644:11:644:15 | tuple | 1(4) | {EXTERNAL LOCATION} | i64 | -| pattern_matching.rs:644:11:644:15 | tuple | 2(4) | {EXTERNAL LOCATION} | f32 | -| pattern_matching.rs:644:11:644:15 | tuple | 3(4) | {EXTERNAL LOCATION} | u8 | +| pattern_matching.rs:644:11:644:15 | tuple | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:644:11:644:15 | tuple | T1 | {EXTERNAL LOCATION} | i64 | +| pattern_matching.rs:644:11:644:15 | tuple | T2 | {EXTERNAL LOCATION} | f32 | +| pattern_matching.rs:644:11:644:15 | tuple | T3 | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:645:9:645:19 | TuplePat | | {EXTERNAL LOCATION} | (T_4) | -| pattern_matching.rs:645:9:645:19 | TuplePat | 0(4) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:645:9:645:19 | TuplePat | 1(4) | {EXTERNAL LOCATION} | i64 | -| pattern_matching.rs:645:9:645:19 | TuplePat | 2(4) | {EXTERNAL LOCATION} | f32 | -| pattern_matching.rs:645:9:645:19 | TuplePat | 3(4) | {EXTERNAL LOCATION} | u8 | +| pattern_matching.rs:645:9:645:19 | TuplePat | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:645:9:645:19 | TuplePat | T1 | {EXTERNAL LOCATION} | i64 | +| pattern_matching.rs:645:9:645:19 | TuplePat | T2 | {EXTERNAL LOCATION} | f32 | +| pattern_matching.rs:645:9:645:19 | TuplePat | T3 | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:645:24:648:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:647:22:647:42 | "First with rest: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:647:22:647:42 | "First with rest: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:647:22:647:42 | "First with rest: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:647:22:647:54 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:647:22:647:54 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:651:5:656:5 | match tuple { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:651:11:651:15 | tuple | | {EXTERNAL LOCATION} | (T_4) | -| pattern_matching.rs:651:11:651:15 | tuple | 0(4) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:651:11:651:15 | tuple | 1(4) | {EXTERNAL LOCATION} | i64 | -| pattern_matching.rs:651:11:651:15 | tuple | 2(4) | {EXTERNAL LOCATION} | f32 | -| pattern_matching.rs:651:11:651:15 | tuple | 3(4) | {EXTERNAL LOCATION} | u8 | +| pattern_matching.rs:651:11:651:15 | tuple | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:651:11:651:15 | tuple | T1 | {EXTERNAL LOCATION} | i64 | +| pattern_matching.rs:651:11:651:15 | tuple | T2 | {EXTERNAL LOCATION} | f32 | +| pattern_matching.rs:651:11:651:15 | tuple | T3 | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:652:9:652:18 | TuplePat | | {EXTERNAL LOCATION} | (T_4) | -| pattern_matching.rs:652:9:652:18 | TuplePat | 0(4) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:652:9:652:18 | TuplePat | 1(4) | {EXTERNAL LOCATION} | i64 | -| pattern_matching.rs:652:9:652:18 | TuplePat | 2(4) | {EXTERNAL LOCATION} | f32 | -| pattern_matching.rs:652:9:652:18 | TuplePat | 3(4) | {EXTERNAL LOCATION} | u8 | +| pattern_matching.rs:652:9:652:18 | TuplePat | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:652:9:652:18 | TuplePat | T1 | {EXTERNAL LOCATION} | i64 | +| pattern_matching.rs:652:9:652:18 | TuplePat | T2 | {EXTERNAL LOCATION} | f32 | +| pattern_matching.rs:652:9:652:18 | TuplePat | T3 | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:652:23:655:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:654:22:654:41 | "Last with rest: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:654:22:654:41 | "Last with rest: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:654:22:654:41 | "Last with rest: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:654:22:654:52 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:654:22:654:52 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:658:5:664:5 | match tuple { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:658:11:658:15 | tuple | | {EXTERNAL LOCATION} | (T_4) | -| pattern_matching.rs:658:11:658:15 | tuple | 0(4) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:658:11:658:15 | tuple | 1(4) | {EXTERNAL LOCATION} | i64 | -| pattern_matching.rs:658:11:658:15 | tuple | 2(4) | {EXTERNAL LOCATION} | f32 | -| pattern_matching.rs:658:11:658:15 | tuple | 3(4) | {EXTERNAL LOCATION} | u8 | +| pattern_matching.rs:658:11:658:15 | tuple | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:658:11:658:15 | tuple | T1 | {EXTERNAL LOCATION} | i64 | +| pattern_matching.rs:658:11:658:15 | tuple | T2 | {EXTERNAL LOCATION} | f32 | +| pattern_matching.rs:658:11:658:15 | tuple | T3 | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:659:9:659:25 | TuplePat | | {EXTERNAL LOCATION} | (T_4) | -| pattern_matching.rs:659:9:659:25 | TuplePat | 0(4) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:659:9:659:25 | TuplePat | 1(4) | {EXTERNAL LOCATION} | i64 | -| pattern_matching.rs:659:9:659:25 | TuplePat | 2(4) | {EXTERNAL LOCATION} | f32 | -| pattern_matching.rs:659:9:659:25 | TuplePat | 3(4) | {EXTERNAL LOCATION} | u8 | +| pattern_matching.rs:659:9:659:25 | TuplePat | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:659:9:659:25 | TuplePat | T1 | {EXTERNAL LOCATION} | i64 | +| pattern_matching.rs:659:9:659:25 | TuplePat | T2 | {EXTERNAL LOCATION} | f32 | +| pattern_matching.rs:659:9:659:25 | TuplePat | T3 | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:659:30:663:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:662:22:662:45 | "First and last: {}, {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:662:22:662:45 | "First and last: {}, {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:662:22:662:45 | "First and last: {}, {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:662:22:662:67 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:662:22:662:67 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:667:9:667:13 | point | | pattern_matching.rs:135:1:140:1 | Point | @@ -7962,7 +7962,7 @@ inferType | pattern_matching.rs:670:17:670:22 | rest_x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:670:26:670:26 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:671:22:671:39 | "X coordinate: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:671:22:671:39 | "X coordinate: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:671:22:671:39 | "X coordinate: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:671:22:671:47 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:671:22:671:47 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:671:42:671:47 | rest_x | | {EXTERNAL LOCATION} | i32 | @@ -7983,13 +7983,13 @@ inferType | pattern_matching.rs:695:28:695:28 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:698:34:724:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:700:9:700:20 | complex_data | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:700:9:700:20 | complex_data | 0(2) | pattern_matching.rs:135:1:140:1 | Point | -| pattern_matching.rs:700:9:700:20 | complex_data | 1(2) | pattern_matching.rs:152:1:156:1 | MyOption | -| pattern_matching.rs:700:9:700:20 | complex_data | 1(2).T | pattern_matching.rs:142:1:143:25 | Color | +| pattern_matching.rs:700:9:700:20 | complex_data | T0 | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:700:9:700:20 | complex_data | T1 | pattern_matching.rs:152:1:156:1 | MyOption | +| pattern_matching.rs:700:9:700:20 | complex_data | T1.T | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:700:24:700:79 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:700:24:700:79 | TupleExpr | 0(2) | pattern_matching.rs:135:1:140:1 | Point | -| pattern_matching.rs:700:24:700:79 | TupleExpr | 1(2) | pattern_matching.rs:152:1:156:1 | MyOption | -| pattern_matching.rs:700:24:700:79 | TupleExpr | 1(2).T | pattern_matching.rs:142:1:143:25 | Color | +| pattern_matching.rs:700:24:700:79 | TupleExpr | T0 | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:700:24:700:79 | TupleExpr | T1 | pattern_matching.rs:152:1:156:1 | MyOption | +| pattern_matching.rs:700:24:700:79 | TupleExpr | T1.T | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:700:25:700:44 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:700:36:700:36 | 1 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:700:42:700:42 | 2 | | {EXTERNAL LOCATION} | i32 | @@ -8001,13 +8001,13 @@ inferType | pattern_matching.rs:700:76:700:76 | 0 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:702:5:723:5 | match complex_data { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:702:11:702:22 | complex_data | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:702:11:702:22 | complex_data | 0(2) | pattern_matching.rs:135:1:140:1 | Point | -| pattern_matching.rs:702:11:702:22 | complex_data | 1(2) | pattern_matching.rs:152:1:156:1 | MyOption | -| pattern_matching.rs:702:11:702:22 | complex_data | 1(2).T | pattern_matching.rs:142:1:143:25 | Color | +| pattern_matching.rs:702:11:702:22 | complex_data | T0 | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:702:11:702:22 | complex_data | T1 | pattern_matching.rs:152:1:156:1 | MyOption | +| pattern_matching.rs:702:11:702:22 | complex_data | T1.T | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:704:9:704:61 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:704:9:704:61 | TuplePat | 0(2) | pattern_matching.rs:135:1:140:1 | Point | -| pattern_matching.rs:704:9:704:61 | TuplePat | 1(2) | pattern_matching.rs:152:1:156:1 | MyOption | -| pattern_matching.rs:704:9:704:61 | TuplePat | 1(2).T | pattern_matching.rs:142:1:143:25 | Color | +| pattern_matching.rs:704:9:704:61 | TuplePat | T0 | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:704:9:704:61 | TuplePat | T1 | pattern_matching.rs:152:1:156:1 | MyOption | +| pattern_matching.rs:704:9:704:61 | TuplePat | T1.T | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:704:10:704:26 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:704:21:704:21 | 1 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:704:24:704:24 | y | | {EXTERNAL LOCATION} | i32 | @@ -8026,28 +8026,28 @@ inferType | pattern_matching.rs:707:17:707:24 | nested_b | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:707:28:707:28 | b | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:709:17:709:57 | "Complex nested: y={}, green={... | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:709:17:709:57 | "Complex nested: y={}, green={... | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:709:17:709:57 | "Complex nested: y={}, green={... | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:709:17:710:44 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:709:17:710:44 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:710:17:710:24 | nested_y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:710:27:710:34 | nested_g | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:710:37:710:44 | nested_b | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:714:9:714:41 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:714:9:714:41 | TuplePat | 0(2) | pattern_matching.rs:135:1:140:1 | Point | -| pattern_matching.rs:714:9:714:41 | TuplePat | 1(2) | pattern_matching.rs:152:1:156:1 | MyOption | -| pattern_matching.rs:714:9:714:41 | TuplePat | 1(2).T | pattern_matching.rs:142:1:143:25 | Color | +| pattern_matching.rs:714:9:714:41 | TuplePat | T0 | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:714:9:714:41 | TuplePat | T1 | pattern_matching.rs:152:1:156:1 | MyOption | +| pattern_matching.rs:714:9:714:41 | TuplePat | T1.T | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:714:9:714:71 | ... \| ... | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:714:9:714:71 | ... \| ... | 0(2) | pattern_matching.rs:135:1:140:1 | Point | -| pattern_matching.rs:714:9:714:71 | ... \| ... | 1(2) | pattern_matching.rs:152:1:156:1 | MyOption | -| pattern_matching.rs:714:9:714:71 | ... \| ... | 1(2).T | pattern_matching.rs:142:1:143:25 | Color | +| pattern_matching.rs:714:9:714:71 | ... \| ... | T0 | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:714:9:714:71 | ... \| ... | T1 | pattern_matching.rs:152:1:156:1 | MyOption | +| pattern_matching.rs:714:9:714:71 | ... \| ... | T1.T | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:714:10:714:24 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:714:18:714:18 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:714:27:714:40 | ...::None | | pattern_matching.rs:152:1:156:1 | MyOption | | pattern_matching.rs:714:27:714:40 | ...::None | T | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:714:45:714:71 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:714:45:714:71 | TuplePat | 0(2) | pattern_matching.rs:135:1:140:1 | Point | -| pattern_matching.rs:714:45:714:71 | TuplePat | 1(2) | pattern_matching.rs:152:1:156:1 | MyOption | -| pattern_matching.rs:714:45:714:71 | TuplePat | 1(2).T | pattern_matching.rs:142:1:143:25 | Color | +| pattern_matching.rs:714:45:714:71 | TuplePat | T0 | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:714:45:714:71 | TuplePat | T1 | pattern_matching.rs:152:1:156:1 | MyOption | +| pattern_matching.rs:714:45:714:71 | TuplePat | T1.T | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:714:46:714:67 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:714:57:714:57 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:714:61:714:61 | 0 | | {EXTERNAL LOCATION} | i32 | @@ -8057,31 +8057,31 @@ inferType | pattern_matching.rs:715:17:715:29 | alt_complex_x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:715:33:715:33 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:716:22:716:50 | "Alternative complex: x={:?}\\n... | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:716:22:716:50 | "Alternative complex: x={:?}\\n... | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:716:22:716:50 | "Alternative complex: x={:?}\\n... | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:716:22:716:65 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:716:22:716:65 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:716:53:716:65 | alt_complex_x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:719:9:719:13 | other | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:719:9:719:13 | other | 0(2) | pattern_matching.rs:135:1:140:1 | Point | -| pattern_matching.rs:719:9:719:13 | other | 1(2) | pattern_matching.rs:152:1:156:1 | MyOption | -| pattern_matching.rs:719:9:719:13 | other | 1(2).T | pattern_matching.rs:142:1:143:25 | Color | +| pattern_matching.rs:719:9:719:13 | other | T0 | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:719:9:719:13 | other | T1 | pattern_matching.rs:152:1:156:1 | MyOption | +| pattern_matching.rs:719:9:719:13 | other | T1.T | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:719:18:722:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:720:17:720:29 | other_complex | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:720:17:720:29 | other_complex | 0(2) | pattern_matching.rs:135:1:140:1 | Point | -| pattern_matching.rs:720:17:720:29 | other_complex | 1(2) | pattern_matching.rs:152:1:156:1 | MyOption | -| pattern_matching.rs:720:17:720:29 | other_complex | 1(2).T | pattern_matching.rs:142:1:143:25 | Color | +| pattern_matching.rs:720:17:720:29 | other_complex | T0 | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:720:17:720:29 | other_complex | T1 | pattern_matching.rs:152:1:156:1 | MyOption | +| pattern_matching.rs:720:17:720:29 | other_complex | T1.T | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:720:33:720:37 | other | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:720:33:720:37 | other | 0(2) | pattern_matching.rs:135:1:140:1 | Point | -| pattern_matching.rs:720:33:720:37 | other | 1(2) | pattern_matching.rs:152:1:156:1 | MyOption | -| pattern_matching.rs:720:33:720:37 | other | 1(2).T | pattern_matching.rs:142:1:143:25 | Color | +| pattern_matching.rs:720:33:720:37 | other | T0 | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:720:33:720:37 | other | T1 | pattern_matching.rs:152:1:156:1 | MyOption | +| pattern_matching.rs:720:33:720:37 | other | T1.T | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:721:22:721:47 | "Other complex data: {:?}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:721:22:721:47 | "Other complex data: {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:721:22:721:47 | "Other complex data: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:721:22:721:62 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:721:22:721:62 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:721:50:721:62 | other_complex | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:721:50:721:62 | other_complex | 0(2) | pattern_matching.rs:135:1:140:1 | Point | -| pattern_matching.rs:721:50:721:62 | other_complex | 1(2) | pattern_matching.rs:152:1:156:1 | MyOption | -| pattern_matching.rs:721:50:721:62 | other_complex | 1(2).T | pattern_matching.rs:142:1:143:25 | Color | +| pattern_matching.rs:721:50:721:62 | other_complex | T0 | pattern_matching.rs:135:1:140:1 | Point | +| pattern_matching.rs:721:50:721:62 | other_complex | T1 | pattern_matching.rs:152:1:156:1 | MyOption | +| pattern_matching.rs:721:50:721:62 | other_complex | T1.T | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:726:37:758:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:728:9:728:13 | point | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:728:17:728:38 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | @@ -8096,27 +8096,27 @@ inferType | pattern_matching.rs:731:9:731:13 | let_y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:731:17:731:17 | y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:733:9:733:13 | tuple | | {EXTERNAL LOCATION} | (T_3) | -| pattern_matching.rs:733:9:733:13 | tuple | 0(3) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:733:9:733:13 | tuple | 1(3) | {EXTERNAL LOCATION} | i64 | -| pattern_matching.rs:733:9:733:13 | tuple | 2(3) | {EXTERNAL LOCATION} | f32 | +| pattern_matching.rs:733:9:733:13 | tuple | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:733:9:733:13 | tuple | T1 | {EXTERNAL LOCATION} | i64 | +| pattern_matching.rs:733:9:733:13 | tuple | T2 | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:733:17:733:36 | TupleExpr | | {EXTERNAL LOCATION} | (T_3) | -| pattern_matching.rs:733:17:733:36 | TupleExpr | 0(3) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:733:17:733:36 | TupleExpr | 1(3) | {EXTERNAL LOCATION} | i64 | -| pattern_matching.rs:733:17:733:36 | TupleExpr | 2(3) | {EXTERNAL LOCATION} | f32 | +| pattern_matching.rs:733:17:733:36 | TupleExpr | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:733:17:733:36 | TupleExpr | T1 | {EXTERNAL LOCATION} | i64 | +| pattern_matching.rs:733:17:733:36 | TupleExpr | T2 | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:733:18:733:21 | 1i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:733:24:733:27 | 2i64 | | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:733:30:733:35 | 3.0f32 | | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:734:9:734:17 | TuplePat | | {EXTERNAL LOCATION} | (T_3) | -| pattern_matching.rs:734:9:734:17 | TuplePat | 0(3) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:734:9:734:17 | TuplePat | 1(3) | {EXTERNAL LOCATION} | i64 | -| pattern_matching.rs:734:9:734:17 | TuplePat | 2(3) | {EXTERNAL LOCATION} | f32 | +| pattern_matching.rs:734:9:734:17 | TuplePat | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:734:9:734:17 | TuplePat | T1 | {EXTERNAL LOCATION} | i64 | +| pattern_matching.rs:734:9:734:17 | TuplePat | T2 | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:734:10:734:10 | a | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:734:13:734:13 | b | | {EXTERNAL LOCATION} | i64 | | pattern_matching.rs:734:16:734:16 | c | | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:734:21:734:25 | tuple | | {EXTERNAL LOCATION} | (T_3) | -| pattern_matching.rs:734:21:734:25 | tuple | 0(3) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:734:21:734:25 | tuple | 1(3) | {EXTERNAL LOCATION} | i64 | -| pattern_matching.rs:734:21:734:25 | tuple | 2(3) | {EXTERNAL LOCATION} | f32 | +| pattern_matching.rs:734:21:734:25 | tuple | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:734:21:734:25 | tuple | T1 | {EXTERNAL LOCATION} | i64 | +| pattern_matching.rs:734:21:734:25 | tuple | T2 | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:735:9:735:13 | let_a | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:735:17:735:17 | a | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:736:9:736:13 | let_b | | {EXTERNAL LOCATION} | i64 | @@ -8124,18 +8124,18 @@ inferType | pattern_matching.rs:737:9:737:13 | let_c | | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:737:17:737:17 | c | | {EXTERNAL LOCATION} | f32 | | pattern_matching.rs:739:9:739:13 | array | | {EXTERNAL LOCATION} | [;] | -| pattern_matching.rs:739:9:739:13 | array | [T;...] | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:739:9:739:13 | array | TArray | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:739:17:739:34 | [...] | | {EXTERNAL LOCATION} | [;] | -| pattern_matching.rs:739:17:739:34 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:739:17:739:34 | [...] | TArray | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:739:18:739:21 | 1i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:739:24:739:24 | 2 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:739:27:739:27 | 3 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:739:30:739:30 | 4 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:739:33:739:33 | 5 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:740:9:740:25 | SlicePat | | {EXTERNAL LOCATION} | [;] | -| pattern_matching.rs:740:9:740:25 | SlicePat | [T;...] | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:740:9:740:25 | SlicePat | TArray | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:740:29:740:33 | array | | {EXTERNAL LOCATION} | [;] | -| pattern_matching.rs:740:29:740:33 | array | [T;...] | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:740:29:740:33 | array | TArray | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:744:9:744:13 | color | | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:744:17:744:34 | Color(...) | | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:744:23:744:25 | 255 | | {EXTERNAL LOCATION} | i32 | @@ -8155,12 +8155,12 @@ inferType | pattern_matching.rs:751:9:751:13 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:751:17:751:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:752:13:752:19 | ref_val | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:752:13:752:19 | ref_val | &T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:752:13:752:19 | ref_val | TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:752:23:752:27 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:753:9:753:15 | let_ref | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:753:9:753:15 | let_ref | &T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:753:9:753:15 | let_ref | TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:753:19:753:25 | ref_val | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:753:19:753:25 | ref_val | &T | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:753:19:753:25 | ref_val | TRef | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:756:13:756:19 | mut_val | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:756:23:756:27 | 10i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:757:9:757:15 | let_mut | | {EXTERNAL LOCATION} | i32 | @@ -8170,15 +8170,15 @@ inferType | pattern_matching.rs:763:30:763:30 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:763:33:763:33 | y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:763:59:767:5 | { ... } | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:763:59:767:5 | { ... } | 0(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:763:59:767:5 | { ... } | 1(2) | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:763:59:767:5 | { ... } | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:763:59:767:5 | { ... } | T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:764:13:764:19 | param_x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:764:23:764:23 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:765:13:765:19 | param_y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:765:23:765:23 | y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:766:9:766:26 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:766:9:766:26 | TupleExpr | 0(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:766:9:766:26 | TupleExpr | 1(2) | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:766:9:766:26 | TupleExpr | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:766:9:766:26 | TupleExpr | T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:766:10:766:16 | param_x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:766:19:766:25 | param_y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:769:22:769:35 | Color(...) | | pattern_matching.rs:142:1:143:25 | Color | @@ -8190,22 +8190,22 @@ inferType | pattern_matching.rs:770:23:770:23 | r | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:771:9:771:15 | param_r | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:774:22:774:38 | TuplePat | | {EXTERNAL LOCATION} | (T_3) | -| pattern_matching.rs:774:22:774:38 | TuplePat | 0(3) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:774:22:774:38 | TuplePat | 1(3) | {EXTERNAL LOCATION} | f64 | -| pattern_matching.rs:774:22:774:38 | TuplePat | 2(3) | {EXTERNAL LOCATION} | bool | +| pattern_matching.rs:774:22:774:38 | TuplePat | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:774:22:774:38 | TuplePat | T1 | {EXTERNAL LOCATION} | f64 | +| pattern_matching.rs:774:22:774:38 | TuplePat | T2 | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:774:23:774:27 | first | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:774:30:774:30 | _ | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:774:33:774:37 | third | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:774:74:778:5 | { ... } | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:774:74:778:5 | { ... } | 0(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:774:74:778:5 | { ... } | 1(2) | {EXTERNAL LOCATION} | bool | +| pattern_matching.rs:774:74:778:5 | { ... } | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:774:74:778:5 | { ... } | T1 | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:775:13:775:23 | param_first | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:775:27:775:31 | first | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:776:13:776:23 | param_third | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:776:27:776:31 | third | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:777:9:777:34 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:777:9:777:34 | TupleExpr | 0(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:777:9:777:34 | TupleExpr | 1(2) | {EXTERNAL LOCATION} | bool | +| pattern_matching.rs:777:9:777:34 | TupleExpr | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:777:9:777:34 | TupleExpr | T1 | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:777:10:777:20 | param_first | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:777:23:777:33 | param_third | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:781:9:781:13 | point | | pattern_matching.rs:135:1:140:1 | Point | @@ -8213,11 +8213,11 @@ inferType | pattern_matching.rs:781:28:781:28 | 5 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:781:34:781:35 | 10 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:782:9:782:17 | extracted | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:782:9:782:17 | extracted | 0(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:782:9:782:17 | extracted | 1(2) | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:782:9:782:17 | extracted | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:782:9:782:17 | extracted | T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:782:21:782:40 | extract_point(...) | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:782:21:782:40 | extract_point(...) | 0(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:782:21:782:40 | extract_point(...) | 1(2) | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:782:21:782:40 | extract_point(...) | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:782:21:782:40 | extract_point(...) | T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:782:35:782:39 | point | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:784:9:784:13 | color | | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:784:17:784:35 | Color(...) | | pattern_matching.rs:142:1:143:25 | Color | @@ -8228,26 +8228,26 @@ inferType | pattern_matching.rs:785:15:785:34 | extract_color(...) | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:785:29:785:33 | color | | pattern_matching.rs:142:1:143:25 | Color | | pattern_matching.rs:787:9:787:13 | tuple | | {EXTERNAL LOCATION} | (T_3) | -| pattern_matching.rs:787:9:787:13 | tuple | 0(3) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:787:9:787:13 | tuple | 1(3) | {EXTERNAL LOCATION} | f64 | -| pattern_matching.rs:787:9:787:13 | tuple | 2(3) | {EXTERNAL LOCATION} | bool | +| pattern_matching.rs:787:9:787:13 | tuple | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:787:9:787:13 | tuple | T1 | {EXTERNAL LOCATION} | f64 | +| pattern_matching.rs:787:9:787:13 | tuple | T2 | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:787:17:787:38 | TupleExpr | | {EXTERNAL LOCATION} | (T_3) | -| pattern_matching.rs:787:17:787:38 | TupleExpr | 0(3) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:787:17:787:38 | TupleExpr | 1(3) | {EXTERNAL LOCATION} | f64 | -| pattern_matching.rs:787:17:787:38 | TupleExpr | 2(3) | {EXTERNAL LOCATION} | bool | +| pattern_matching.rs:787:17:787:38 | TupleExpr | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:787:17:787:38 | TupleExpr | T1 | {EXTERNAL LOCATION} | f64 | +| pattern_matching.rs:787:17:787:38 | TupleExpr | T2 | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:787:18:787:22 | 42i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:787:25:787:31 | 3.14f64 | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:787:34:787:37 | true | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:788:9:788:23 | tuple_extracted | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:788:9:788:23 | tuple_extracted | 0(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:788:9:788:23 | tuple_extracted | 1(2) | {EXTERNAL LOCATION} | bool | +| pattern_matching.rs:788:9:788:23 | tuple_extracted | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:788:9:788:23 | tuple_extracted | T1 | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:788:27:788:46 | extract_tuple(...) | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:788:27:788:46 | extract_tuple(...) | 0(2) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:788:27:788:46 | extract_tuple(...) | 1(2) | {EXTERNAL LOCATION} | bool | +| pattern_matching.rs:788:27:788:46 | extract_tuple(...) | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:788:27:788:46 | extract_tuple(...) | T1 | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:788:41:788:45 | tuple | | {EXTERNAL LOCATION} | (T_3) | -| pattern_matching.rs:788:41:788:45 | tuple | 0(3) | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:788:41:788:45 | tuple | 1(3) | {EXTERNAL LOCATION} | f64 | -| pattern_matching.rs:788:41:788:45 | tuple | 2(3) | {EXTERNAL LOCATION} | bool | +| pattern_matching.rs:788:41:788:45 | tuple | T0 | {EXTERNAL LOCATION} | i32 | +| pattern_matching.rs:788:41:788:45 | tuple | T1 | {EXTERNAL LOCATION} | f64 | +| pattern_matching.rs:788:41:788:45 | tuple | T2 | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:792:35:824:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:794:9:794:14 | points | | {EXTERNAL LOCATION} | Vec | | pattern_matching.rs:794:18:794:65 | MacroExpr | | {EXTERNAL LOCATION} | Vec | @@ -8270,7 +8270,7 @@ inferType | pattern_matching.rs:797:13:797:18 | loop_y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:797:22:797:22 | y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:798:18:798:42 | "Point in loop: ({}, {})\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:798:18:798:42 | "Point in loop: ({}, {})\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:798:18:798:42 | "Point in loop: ({}, {})\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:798:18:798:58 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:798:18:798:58 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:798:45:798:50 | loop_x | | {EXTERNAL LOCATION} | i32 | @@ -8291,7 +8291,7 @@ inferType | pattern_matching.rs:804:13:804:20 | if_let_x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:804:24:804:24 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:805:18:805:44 | "If let with @ pattern: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:805:18:805:44 | "If let with @ pattern: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:805:18:805:44 | "If let with @ pattern: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:805:18:805:54 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:805:18:805:54 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:805:47:805:54 | if_let_x | | {EXTERNAL LOCATION} | i32 | @@ -8317,7 +8317,7 @@ inferType | pattern_matching.rs:811:13:811:23 | while_let_x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:811:27:811:27 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:812:18:812:29 | "Popped: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:812:18:812:29 | "Popped: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:812:18:812:29 | "Popped: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:812:18:812:42 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:812:18:812:42 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:812:32:812:42 | while_let_x | | {EXTERNAL LOCATION} | i32 | @@ -8333,7 +8333,7 @@ inferType | pattern_matching.rs:819:17:819:23 | guard_x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:819:27:819:27 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:820:22:820:35 | "Positive: {}\\n" | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:820:22:820:35 | "Positive: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| pattern_matching.rs:820:22:820:35 | "Positive: {}\\n" | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:820:22:820:44 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:820:22:820:44 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:820:38:820:44 | guard_x | | {EXTERNAL LOCATION} | i32 | diff --git a/rust/tools/builtins/types.rs b/rust/tools/builtins/types.rs index 56a8a502e4c..0c6025b4d37 100644 --- a/rust/tools/builtins/types.rs +++ b/rust/tools/builtins/types.rs @@ -24,23 +24,25 @@ pub struct isize; pub struct f32; pub struct f64; -pub struct Slice; -pub struct Array; -pub struct Ref; // todo: add mut variant -pub struct Ptr; // todo: add mut variant +struct Slice; +struct Array; +struct Ref; // todo: add mut variant +struct Ptr; // todo: add mut variant // tuples -pub struct Tuple0; -pub struct Tuple1(T); -pub struct Tuple2(T1, T2); -pub struct Tuple3(T1, T2, T3); -pub struct Tuple4(T1, T2, T3, T4); -pub struct Tuple5(T1, T2, T3, T4, T5); -pub struct Tuple6(T1, T2, T3, T4, T5, T6); -pub struct Tuple7(T1, T2, T3, T4, T5, T6, T7); -pub struct Tuple8(T1, T2, T3, T4, T5, T6, T7, T8); -pub struct Tuple9(T1, T2, T3, T4, T5, T6, T7, T8, T9); -pub struct Tuple10( +struct Tuple0; +struct Tuple1(T0); +struct Tuple2(T0, T1); +struct Tuple3(T0, T1, T2); +struct Tuple4(T0, T1, T2, T3); +struct Tuple5(T0, T1, T2, T3, T4); +struct Tuple6(T0, T1, T2, T3, T4, T5); +struct Tuple7(T0, T1, T2, T3, T4, T5, T6); +struct Tuple8(T0, T1, T2, T3, T4, T5, T6, T7); +struct Tuple9(T0, T1, T2, T3, T4, T5, T6, T7, T8); +struct Tuple10(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9); +struct Tuple11( + T0, T1, T2, T3, @@ -52,7 +54,8 @@ pub struct Tuple10( T9, T10, ); -pub struct Tuple11( +struct Tuple12( + T0, T1, T2, T3, @@ -65,83 +68,3 @@ pub struct Tuple11( T10, T11, ); -pub struct Tuple12( - T1, - T2, - T3, - T4, - T5, - T6, - T7, - T8, - T9, - T10, - T11, - T12, -); -pub struct Tuple13( - T1, - T2, - T3, - T4, - T5, - T6, - T7, - T8, - T9, - T10, - T11, - T12, - T13, -); -pub struct Tuple14( - T1, - T2, - T3, - T4, - T5, - T6, - T7, - T8, - T9, - T10, - T11, - T12, - T13, - T14, -); -pub struct Tuple15( - T1, - T2, - T3, - T4, - T5, - T6, - T7, - T8, - T9, - T10, - T11, - T12, - T13, - T14, - T15, -); -pub struct Tuple16( - T1, - T2, - T3, - T4, - T5, - T6, - T7, - T8, - T9, - T10, - T11, - T12, - T13, - T14, - T15, - T16, -); From ddee385f371ab5b00d69ed3b251b9c24f2cf80fe Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 18 Nov 2025 17:18:05 +0100 Subject: [PATCH 085/127] Ripunzip: use releases from github This uses the ripunzip releases from github instead of building them ourselves. --- .gitattributes | 3 - .github/workflows/build-ripunzip.yml | 169 ------------------------- MODULE.bazel | 26 ++-- misc/ripunzip/BUILD.bazel | 2 +- misc/ripunzip/BUILD.ripunzip.bazel | 2 +- misc/ripunzip/ripunzip-Linux.tar.zst | 3 - misc/ripunzip/ripunzip-Windows.tar.zst | 3 - misc/ripunzip/ripunzip-macOS.tar.zst | 3 - misc/ripunzip/ripunzip.bzl | 51 ++++++++ 9 files changed, 62 insertions(+), 200 deletions(-) delete mode 100644 .github/workflows/build-ripunzip.yml delete mode 100644 misc/ripunzip/ripunzip-Linux.tar.zst delete mode 100644 misc/ripunzip/ripunzip-Windows.tar.zst delete mode 100644 misc/ripunzip/ripunzip-macOS.tar.zst create mode 100644 misc/ripunzip/ripunzip.bzl diff --git a/.gitattributes b/.gitattributes index df5bed028be..610342ef78b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -82,9 +82,6 @@ /csharp/paket.main.bzl linguist-generated=true /csharp/paket.main_extension.bzl linguist-generated=true -# ripunzip tool -/misc/ripunzip/ripunzip-* filter=lfs diff=lfs merge=lfs -text - # swift prebuilt resources /swift/third_party/resources/*.zip filter=lfs diff=lfs merge=lfs -text /swift/third_party/resources/*.tar.zst filter=lfs diff=lfs merge=lfs -text diff --git a/.github/workflows/build-ripunzip.yml b/.github/workflows/build-ripunzip.yml deleted file mode 100644 index 041d34bd046..00000000000 --- a/.github/workflows/build-ripunzip.yml +++ /dev/null @@ -1,169 +0,0 @@ -name: Build ripunzip - -on: - workflow_dispatch: - inputs: - ripunzip-version: - description: What reference to checkout from google/ripunzip. Latest by default - required: false - openssl-version: - description: What reference to checkout from openssl/openssl for Linux. Latest by default - required: false - open-pr: - description: Open a pull request updating the ripunzip versions committed to lfs - required: false - default: true # will be false on PRs - pull_request: - paths: - - .github/workflows/build-ripunzip.yml - -permissions: {} - -jobs: - versions: - runs-on: ubuntu-slim - outputs: - ripunzip-version: ${{ inputs.ripunzip-version || steps.fetch-ripunzip-version.outputs.version }} - openssl-version: ${{ inputs.openssl-version || steps.fetch-openssl-version.outputs.version }} - steps: - - name: Fetch latest ripunzip version - id: fetch-ripunzip-version - if: "!inputs.ripunzip-version" - run: &fetch-version - echo "version=$(gh release view --repo $REPO --json tagName --jq .tagName)" | tee -a $GITHUB_OUTPUT - env: - REPO: "google/ripunzip" - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Fetch latest openssl version - id: fetch-openssl-version - if: "!inputs.openssl-version" - run: *fetch-version - env: - REPO: "openssl/openssl" - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - build: - needs: versions - strategy: - fail-fast: false - matrix: - os: - - ubuntu-22.04 # keep at lowest supported ubuntu version for broader glibc compatibility - - macos-15 - - windows-2025 - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v5 - with: - repository: google/ripunzip - ref: ${{ needs.versions.outputs.ripunzip-version }} - # we need to avoid ripunzip dynamically linking into libssl - # see https://github.com/sfackler/rust-openssl/issues/183 - - if: runner.os == 'Linux' - name: checkout openssl - uses: actions/checkout@v5 - with: - repository: openssl/openssl - path: openssl - ref: ${{ needs.versions.outputs.openssl-version }} - - if: runner.os == 'Linux' - name: build and install openssl with fPIC - shell: bash - working-directory: openssl - run: | - ./config -fPIC --prefix=$HOME/.local --openssldir=$HOME/.local/ssl - make -j $(nproc) - make install_sw -j $(nproc) - - if: runner.os == 'Linux' - name: build (linux) - shell: bash - run: | - env OPENSSL_LIB_DIR=$HOME/.local/lib64 OPENSSL_INCLUDE_DIR=$HOME/.local/include OPENSSL_STATIC=yes cargo build --release - mv target/release/ripunzip ripunzip-linux - - if: runner.os == 'Windows' - name: build (windows) - shell: bash - run: | - cargo build --release - mv target/release/ripunzip ripunzip-windows - - name: build (macOS) - if: runner.os == 'macOS' - shell: bash - run: | - rustup target install x86_64-apple-darwin - rustup target install aarch64-apple-darwin - cargo build --target x86_64-apple-darwin --release - cargo build --target aarch64-apple-darwin --release - lipo -create -output ripunzip-macos \ - -arch x86_64 target/x86_64-apple-darwin/release/ripunzip \ - -arch arm64 target/aarch64-apple-darwin/release/ripunzip - - name: Archive - shell: bash - run: | - tar acf ripunzip-$RUNNER_OS.tar.zst ripunzip-$(echo $RUNNER_OS | tr '[:upper:]' '[:lower:]') - - name: Upload built binary - uses: actions/upload-artifact@v4 - with: - name: ripunzip-${{ runner.os }} - path: ripunzip-${{ runner.os }}.tar.zst - retention-days: 5 - compression: 0 - - name: Check built binary - shell: bash - run: | - rm -f ripunzip-*.tar.zst - ./ripunzip-* --version - publish: - needs: [versions, build] - if: inputs.open-pr == 'true' - permissions: - contents: write - pull-requests: write - runs-on: ubuntu-slim - steps: - # workaround for git-lfs not being installed yet on ubuntu-slim runners - - name: Ensure git-lfs is installed - shell: bash - run: | - if which git-lfs &>/dev/null; then - echo "git-lfs is already installed" - exit 0 - fi - cd $TMP - gh release download --repo git-lfs/git-lfs --pattern "git-lfs-linux-amd64-*.tar.gz" --clobber - tar xzf git-lfs-linux-amd64-*.tar.gz - rm git-lfs-linux-amd64-*.tar.gz - cd git-lfs-* - pwd | tee -a $GITHUB_PATH - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - uses: actions/checkout@v5 - with: - sparse-checkout: | - .github - misc/ripunzip - lfs: true - - name: Download built binaries - uses: actions/download-artifact@v4 - with: - merge-multiple: true - path: misc/ripunzip - - name: Open PR - shell: bash - run: | - git config --global user.name "github-actions[bot]" - git config --global user.email "github-actions[bot]@users.noreply.github.com" - git switch -c update-ripunzip - git add misc/ripunzip - git commit -m "Update ripunzip binaries to version $VERSION" - git push --set-upstream origin update-ripunzip --force - TITLE="Update ripunzip binaries to version $VERSION" - gh pr create \ - --draft \ - --title "$TITLE" \ - --body "Automated update of ripunzip binaries." \ - --assignee "$ACTOR" || - (gh pr edit --title "$TITLE" --add-assignee "$ACTOR" && gh pr ready --undo) - env: - ACTOR: ${{ github.actor }} - VERSION: ${{ needs.versions.outputs.ripunzip-version }} - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/MODULE.bazel b/MODULE.bazel index dfd2c469a5e..a17d0bd36c4 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -269,24 +269,16 @@ go_deps = use_extension("@gazelle//:extensions.bzl", "go_deps") go_deps.from_file(go_mod = "//go/extractor:go.mod") use_repo(go_deps, "org_golang_x_mod", "org_golang_x_tools") -lfs_archive = use_repo_rule("//misc/bazel:lfs.bzl", "lfs_archive") +ripunzip_archive = use_repo_rule("//misc/ripunzip:ripunzip.bzl", "ripunzip_archive") -lfs_archive( - name = "ripunzip-linux", - src = "//misc/ripunzip:ripunzip-Linux.tar.zst", - build_file = "//misc/ripunzip:BUILD.ripunzip.bazel", -) - -lfs_archive( - name = "ripunzip-windows", - src = "//misc/ripunzip:ripunzip-Windows.tar.zst", - build_file = "//misc/ripunzip:BUILD.ripunzip.bazel", -) - -lfs_archive( - name = "ripunzip-macos", - src = "//misc/ripunzip:ripunzip-macOS.tar.zst", - build_file = "//misc/ripunzip:BUILD.ripunzip.bazel", +# go to https://github.com/GoogleChrome/ripunzip/releases to find latest version and corresponding sha256s +ripunzip_archive( + name = "ripunzip", + version = "2.0.3", + sha256_linux = "ee0e8a957687a5dc3a66b2a4b25883bf762df4c9c07f0651af527a32a405054b", + sha256_windows = "66d0c1375301bf5ab815348048f43b110631d3fa7200acd50d50a8ed8655ca62", + sha256_macos_intel = "4457a18bfcc5feabe09f5ea3d1157128e07b4873392cb404a870e611924abf64", + sha256_macos_arm = "8a88eea54eac232d162a72a42065e0429b82dbf4f05e9642915dff9d7a81f846", ) register_toolchains( diff --git a/misc/ripunzip/BUILD.bazel b/misc/ripunzip/BUILD.bazel index fb33124f3b2..abd9c082887 100644 --- a/misc/ripunzip/BUILD.bazel +++ b/misc/ripunzip/BUILD.bazel @@ -2,7 +2,7 @@ load("@rules_shell//shell:sh_binary.bzl", "sh_binary") alias( name = "ripunzip", - actual = select({"@platforms//os:" + os: "@ripunzip-%s//:ripunzip" % os for os in ("linux", "windows", "macos")}), + actual = "@ripunzip", visibility = ["//visibility:public"], ) diff --git a/misc/ripunzip/BUILD.ripunzip.bazel b/misc/ripunzip/BUILD.ripunzip.bazel index e2832d1e275..582138dd3e1 100644 --- a/misc/ripunzip/BUILD.ripunzip.bazel +++ b/misc/ripunzip/BUILD.ripunzip.bazel @@ -2,7 +2,7 @@ load("@bazel_skylib//rules:native_binary.bzl", "native_binary") native_binary( name = "ripunzip", - src = glob(["ripunzip-*"])[0], + src = glob(["bin/ripunzip*"])[0], out = "ripunzip" + select({ "@platforms//os:windows": ".exe", "//conditions:default": "", diff --git a/misc/ripunzip/ripunzip-Linux.tar.zst b/misc/ripunzip/ripunzip-Linux.tar.zst deleted file mode 100644 index c9a5ff1e590..00000000000 --- a/misc/ripunzip/ripunzip-Linux.tar.zst +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:252a54114fde9932d2bf3e7a1592bc6767611682a913519585402b9c51d6e2c7 -size 4707184 diff --git a/misc/ripunzip/ripunzip-Windows.tar.zst b/misc/ripunzip/ripunzip-Windows.tar.zst deleted file mode 100644 index 80e41538135..00000000000 --- a/misc/ripunzip/ripunzip-Windows.tar.zst +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3a4388816c72e0bc8c30741aaae05dc91b46174db406133cad40c783acf4fad6 -size 1765498 diff --git a/misc/ripunzip/ripunzip-macOS.tar.zst b/misc/ripunzip/ripunzip-macOS.tar.zst deleted file mode 100644 index 3ff3253ca5d..00000000000 --- a/misc/ripunzip/ripunzip-macOS.tar.zst +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5a5d8ca7ed78b0da3a572b91556fbf03431c99770072060743c63e2d581d8580 -size 3796231 diff --git a/misc/ripunzip/ripunzip.bzl b/misc/ripunzip/ripunzip.bzl new file mode 100644 index 00000000000..ce2dfbba785 --- /dev/null +++ b/misc/ripunzip/ripunzip.bzl @@ -0,0 +1,51 @@ +def _impl(repository_ctx): + version = repository_ctx.attr.version + url_prefix = "https://github.com/GoogleChrome/ripunzip/releases/download/v%s" % version + build_file = Label("//misc/ripunzip:BUILD.ripunzip.bazel") + if repository_ctx.os.name == "linux": + repository_ctx.download_and_extract( + url="%s/ripunzip_%s-1_amd64.deb" % (url_prefix, version), + sha256=repository_ctx.attr.sha256_linux, + canonical_id="ripunzip-deb", + output="deb", + ) + repository_ctx.extract( + "deb/data.tar.xz", + strip_prefix="usr", + ) + elif repository_ctx.os.name == "windows": + repository_ctx.download_and_extract( + url="%s/ripunzip_v%s-x86_64-pc-windows-msvc.zip" % (url_prefix, version), + sha256=repository_ctx.attr.sha256_windows, + output="bin", + ) + elif repository_ctx.os.name == "macos": + arch = repository_ctx.os.arch + if arch == "x86_64": + suffix = "x86_64-apple-darwin" + sha256 = repository_ctx.attr.sha256_macos_intel + elif arch == "aarch64": + suffix = "aarch64-apple-darwin" + sha256 = repository_ctx.attr.sha256_macos_arm + else: + fail("Unsupported macOS architecture: %s" % arch) + repository_ctx.download_and_extract( + url="%s/ripunzip_v%s-%s.tar.gz" % (url_prefix, version, suffix), + sha256=sha256, + output="bin", + ) + else: + fail("Unsupported OS: %s" % repository_ctx.os.name) + repository_ctx.file("WORKSPACE.bazel") + repository_ctx.symlink(build_file, "BUILD.bazel") + +ripunzip_archive = repository_rule( + implementation=_impl, + attrs={ + "version": attr.string(mandatory=True), + "sha256_linux": attr.string(mandatory=True), + "sha256_windows": attr.string(mandatory=True), + "sha256_macos_intel": attr.string(mandatory=True), + "sha256_macos_arm": attr.string(mandatory=True), + }, +) From a5601ce7344cc2f8ed5b84948d49549f39681b49 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 18 Nov 2025 19:52:05 +0000 Subject: [PATCH 086/127] C++: Lift 'getTypeOperand' to the superclass. --- cpp/ql/lib/semmle/code/cpp/exprs/Cast.qll | 30 ++++++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/exprs/Cast.qll b/cpp/ql/lib/semmle/code/cpp/exprs/Cast.qll index 83364e422eb..e5df5cb160f 100644 --- a/cpp/ql/lib/semmle/code/cpp/exprs/Cast.qll +++ b/cpp/ql/lib/semmle/code/cpp/exprs/Cast.qll @@ -750,6 +750,16 @@ class SizeofPackTypeOperator extends SizeofPackOperator { */ class SizeofOperator extends Expr, @runtime_sizeof { override int getPrecedence() { result = 16 } + + /** + * Gets the contained type of this `sizeof`. For example, + * the result is `int` in both cases below: + * ``` + * sizeof(int); + * sizeof(42); + * ``` + */ + Type getTypeOperand() { none() } // overridden in subclasses } /** @@ -766,6 +776,8 @@ class SizeofExprOperator extends SizeofOperator { /** Gets the contained expression. */ Expr getExprOperand() { result = this.getChild(0) } + override Type getTypeOperand() { result = this.getExprOperand().getType() } + override string toString() { result = "sizeof()" } override predicate mayBeImpure() { this.getExprOperand().mayBeImpure() } @@ -784,8 +796,7 @@ class SizeofTypeOperator extends SizeofOperator { override string getAPrimaryQlClass() { result = "SizeofTypeOperator" } - /** Gets the contained type. */ - Type getTypeOperand() { sizeof_bind(underlyingElement(this), unresolveElement(result)) } + override Type getTypeOperand() { sizeof_bind(underlyingElement(this), unresolveElement(result)) } override string toString() { result = "sizeof(" + this.getTypeOperand().getName() + ")" } @@ -842,6 +853,16 @@ class AlignofTypeOperator extends AlignofOperator { */ class DatasizeofOperator extends Expr, @datasizeof { override int getPrecedence() { result = 16 } + + /** + * Gets the contained type of this `__datasizeof`. For example, + * the result is `int` in both cases below: + * ``` + * __datasizeof(int); + * __datasizeof(42); + * ``` + */ + Type getTypeOperand() { none() } } /** @@ -855,6 +876,8 @@ class DatasizeofExprOperator extends DatasizeofOperator { /** Gets the contained expression. */ Expr getExprOperand() { result = this.getChild(0) } + override Type getTypeOperand() { result = this.getExprOperand().getType() } + override string toString() { result = "__datasizeof()" } override predicate mayBeImpure() { this.getExprOperand().mayBeImpure() } @@ -870,8 +893,7 @@ class DatasizeofTypeOperator extends DatasizeofOperator { override string getAPrimaryQlClass() { result = "DatasizeofTypeOperator" } - /** Gets the contained type. */ - Type getTypeOperand() { sizeof_bind(underlyingElement(this), unresolveElement(result)) } + override Type getTypeOperand() { sizeof_bind(underlyingElement(this), unresolveElement(result)) } override string toString() { result = "__datasizeof(" + this.getTypeOperand().getName() + ")" } From d4a8dbb5f3f5ac168be028d1b9b6aec9142993d1 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 18 Nov 2025 19:52:30 +0000 Subject: [PATCH 087/127] C++: Slightly modify a test so that we can see the effect of this change. --- cpp/ql/test/library-tests/types/sizeof/sizeof.expected | 6 ++++++ cpp/ql/test/library-tests/types/sizeof/sizeof.ql | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/cpp/ql/test/library-tests/types/sizeof/sizeof.expected b/cpp/ql/test/library-tests/types/sizeof/sizeof.expected index c0d075126df..1e2963bc93b 100644 --- a/cpp/ql/test/library-tests/types/sizeof/sizeof.expected +++ b/cpp/ql/test/library-tests/types/sizeof/sizeof.expected @@ -3,8 +3,14 @@ | sizeof.cpp:21:15:21:27 | sizeof(int *) | 8 | SizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | int * | | sizeof.cpp:22:15:22:29 | sizeof(MyClass) | 16 | SizeofTypeOperator.getTypeOperand() | sizeof.cpp:4:7:4:13 | MyClass | | sizeof.cpp:23:15:23:23 | sizeof() | 4 | SizeofExprOperator.getExprOperand() | sizeof.cpp:23:22:23:22 | i | +| sizeof.cpp:23:15:23:23 | sizeof() | 4 | SizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | int | | sizeof.cpp:24:15:24:23 | sizeof() | 1 | SizeofExprOperator.getExprOperand() | sizeof.cpp:24:22:24:22 | c | +| sizeof.cpp:24:15:24:23 | sizeof() | 1 | SizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | char | | sizeof.cpp:25:15:25:25 | sizeof() | 8 | SizeofExprOperator.getExprOperand() | sizeof.cpp:25:22:25:24 | ptr | +| sizeof.cpp:25:15:25:25 | sizeof() | 8 | SizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | int * | | sizeof.cpp:26:15:26:24 | sizeof() | 16 | SizeofExprOperator.getExprOperand() | sizeof.cpp:26:22:26:23 | mc | +| sizeof.cpp:26:15:26:24 | sizeof() | 16 | SizeofTypeOperator.getTypeOperand() | sizeof.cpp:4:7:4:13 | MyClass | | sizeof.cpp:27:15:27:25 | sizeof() | 40 | SizeofExprOperator.getExprOperand() | sizeof.cpp:27:22:27:24 | arr | +| sizeof.cpp:27:15:27:25 | sizeof() | 40 | SizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | int[10] | | sizeof.cpp:28:16:28:29 | sizeof() | 4 | SizeofExprOperator.getExprOperand() | sizeof.cpp:28:23:28:28 | access to array | +| sizeof.cpp:28:16:28:29 | sizeof() | 4 | SizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | int | diff --git a/cpp/ql/test/library-tests/types/sizeof/sizeof.ql b/cpp/ql/test/library-tests/types/sizeof/sizeof.ql index 531f55ee45c..0ec6711adb8 100644 --- a/cpp/ql/test/library-tests/types/sizeof/sizeof.ql +++ b/cpp/ql/test/library-tests/types/sizeof/sizeof.ql @@ -3,7 +3,7 @@ import cpp from SizeofOperator sto, string elemDesc, Element e where elemDesc = "SizeofTypeOperator.getTypeOperand()" and - e = sto.(SizeofTypeOperator).getTypeOperand() + e = sto.(SizeofOperator).getTypeOperand() or elemDesc = "SizeofExprOperator.getExprOperand()" and e = sto.(SizeofExprOperator).getExprOperand() From 6b136e3a53229352370d314aa4207d6c89ccd298 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 18 Nov 2025 20:00:32 +0000 Subject: [PATCH 088/127] Update cpp/ql/test/library-tests/types/sizeof/sizeof.ql Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- cpp/ql/test/library-tests/types/sizeof/sizeof.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/test/library-tests/types/sizeof/sizeof.ql b/cpp/ql/test/library-tests/types/sizeof/sizeof.ql index 0ec6711adb8..46d78ebbe60 100644 --- a/cpp/ql/test/library-tests/types/sizeof/sizeof.ql +++ b/cpp/ql/test/library-tests/types/sizeof/sizeof.ql @@ -2,7 +2,7 @@ import cpp from SizeofOperator sto, string elemDesc, Element e where - elemDesc = "SizeofTypeOperator.getTypeOperand()" and + elemDesc = "SizeofOperator.getTypeOperand()" and e = sto.(SizeofOperator).getTypeOperand() or elemDesc = "SizeofExprOperator.getExprOperand()" and From a27ac9d59dc47d49ddfd5d64dba052a4e85e5d35 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 18 Nov 2025 20:03:10 +0000 Subject: [PATCH 089/127] C++: Updated expected after Copilot change. --- .../types/sizeof/sizeof.expected | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/cpp/ql/test/library-tests/types/sizeof/sizeof.expected b/cpp/ql/test/library-tests/types/sizeof/sizeof.expected index 1e2963bc93b..ac55caf5a02 100644 --- a/cpp/ql/test/library-tests/types/sizeof/sizeof.expected +++ b/cpp/ql/test/library-tests/types/sizeof/sizeof.expected @@ -1,16 +1,16 @@ -| sizeof.cpp:19:15:19:25 | sizeof(int) | 4 | SizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | int | -| sizeof.cpp:20:15:20:26 | sizeof(char) | 1 | SizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | char | -| sizeof.cpp:21:15:21:27 | sizeof(int *) | 8 | SizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | int * | -| sizeof.cpp:22:15:22:29 | sizeof(MyClass) | 16 | SizeofTypeOperator.getTypeOperand() | sizeof.cpp:4:7:4:13 | MyClass | +| sizeof.cpp:19:15:19:25 | sizeof(int) | 4 | SizeofOperator.getTypeOperand() | file://:0:0:0:0 | int | +| sizeof.cpp:20:15:20:26 | sizeof(char) | 1 | SizeofOperator.getTypeOperand() | file://:0:0:0:0 | char | +| sizeof.cpp:21:15:21:27 | sizeof(int *) | 8 | SizeofOperator.getTypeOperand() | file://:0:0:0:0 | int * | +| sizeof.cpp:22:15:22:29 | sizeof(MyClass) | 16 | SizeofOperator.getTypeOperand() | sizeof.cpp:4:7:4:13 | MyClass | | sizeof.cpp:23:15:23:23 | sizeof() | 4 | SizeofExprOperator.getExprOperand() | sizeof.cpp:23:22:23:22 | i | -| sizeof.cpp:23:15:23:23 | sizeof() | 4 | SizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | int | +| sizeof.cpp:23:15:23:23 | sizeof() | 4 | SizeofOperator.getTypeOperand() | file://:0:0:0:0 | int | | sizeof.cpp:24:15:24:23 | sizeof() | 1 | SizeofExprOperator.getExprOperand() | sizeof.cpp:24:22:24:22 | c | -| sizeof.cpp:24:15:24:23 | sizeof() | 1 | SizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | char | +| sizeof.cpp:24:15:24:23 | sizeof() | 1 | SizeofOperator.getTypeOperand() | file://:0:0:0:0 | char | | sizeof.cpp:25:15:25:25 | sizeof() | 8 | SizeofExprOperator.getExprOperand() | sizeof.cpp:25:22:25:24 | ptr | -| sizeof.cpp:25:15:25:25 | sizeof() | 8 | SizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | int * | +| sizeof.cpp:25:15:25:25 | sizeof() | 8 | SizeofOperator.getTypeOperand() | file://:0:0:0:0 | int * | | sizeof.cpp:26:15:26:24 | sizeof() | 16 | SizeofExprOperator.getExprOperand() | sizeof.cpp:26:22:26:23 | mc | -| sizeof.cpp:26:15:26:24 | sizeof() | 16 | SizeofTypeOperator.getTypeOperand() | sizeof.cpp:4:7:4:13 | MyClass | +| sizeof.cpp:26:15:26:24 | sizeof() | 16 | SizeofOperator.getTypeOperand() | sizeof.cpp:4:7:4:13 | MyClass | | sizeof.cpp:27:15:27:25 | sizeof() | 40 | SizeofExprOperator.getExprOperand() | sizeof.cpp:27:22:27:24 | arr | -| sizeof.cpp:27:15:27:25 | sizeof() | 40 | SizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | int[10] | +| sizeof.cpp:27:15:27:25 | sizeof() | 40 | SizeofOperator.getTypeOperand() | file://:0:0:0:0 | int[10] | | sizeof.cpp:28:16:28:29 | sizeof() | 4 | SizeofExprOperator.getExprOperand() | sizeof.cpp:28:23:28:28 | access to array | -| sizeof.cpp:28:16:28:29 | sizeof() | 4 | SizeofTypeOperator.getTypeOperand() | file://:0:0:0:0 | int | +| sizeof.cpp:28:16:28:29 | sizeof() | 4 | SizeofOperator.getTypeOperand() | file://:0:0:0:0 | int | From 4279a970fa8dd14b555775bbb0746feef8212d54 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 18 Nov 2025 20:03:24 +0000 Subject: [PATCH 090/127] C++: Remove unnecessary cast. --- cpp/ql/test/library-tests/types/sizeof/sizeof.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/test/library-tests/types/sizeof/sizeof.ql b/cpp/ql/test/library-tests/types/sizeof/sizeof.ql index 46d78ebbe60..31834e0180f 100644 --- a/cpp/ql/test/library-tests/types/sizeof/sizeof.ql +++ b/cpp/ql/test/library-tests/types/sizeof/sizeof.ql @@ -3,7 +3,7 @@ import cpp from SizeofOperator sto, string elemDesc, Element e where elemDesc = "SizeofOperator.getTypeOperand()" and - e = sto.(SizeofOperator).getTypeOperand() + e = sto.getTypeOperand() or elemDesc = "SizeofExprOperator.getExprOperand()" and e = sto.(SizeofExprOperator).getExprOperand() From 702d1bbbeacb4e3999f0d4ee516d6be9b851a5e0 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 19 Nov 2025 08:05:17 +0100 Subject: [PATCH 091/127] Ripunzip: fix mac os string --- misc/ripunzip/ripunzip.bzl | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/misc/ripunzip/ripunzip.bzl b/misc/ripunzip/ripunzip.bzl index ce2dfbba785..f9046af95a0 100644 --- a/misc/ripunzip/ripunzip.bzl +++ b/misc/ripunzip/ripunzip.bzl @@ -6,7 +6,7 @@ def _impl(repository_ctx): repository_ctx.download_and_extract( url="%s/ripunzip_%s-1_amd64.deb" % (url_prefix, version), sha256=repository_ctx.attr.sha256_linux, - canonical_id="ripunzip-deb", + canonical_id="ripunzip-linux", output="deb", ) repository_ctx.extract( @@ -16,22 +16,26 @@ def _impl(repository_ctx): elif repository_ctx.os.name == "windows": repository_ctx.download_and_extract( url="%s/ripunzip_v%s-x86_64-pc-windows-msvc.zip" % (url_prefix, version), + canonical_id="ripunzip-windows", sha256=repository_ctx.attr.sha256_windows, output="bin", ) - elif repository_ctx.os.name == "macos": + elif repository_ctx.os.name == "mac os x": arch = repository_ctx.os.arch if arch == "x86_64": suffix = "x86_64-apple-darwin" sha256 = repository_ctx.attr.sha256_macos_intel + canonical_id = "ripunzip-macos-intel" elif arch == "aarch64": suffix = "aarch64-apple-darwin" sha256 = repository_ctx.attr.sha256_macos_arm + canonical_id = "ripunzip-macos-arm" else: fail("Unsupported macOS architecture: %s" % arch) repository_ctx.download_and_extract( url="%s/ripunzip_v%s-%s.tar.gz" % (url_prefix, version, suffix), sha256=sha256, + canonical_id=canonical_id, output="bin", ) else: From f1afe5cd9d3a30af59cba095858b535d577ac3c9 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 19 Nov 2025 08:06:17 +0100 Subject: [PATCH 092/127] Bazel: format --- MODULE.bazel | 6 +++--- misc/ripunzip/ripunzip.bzl | 40 +++++++++++++++++++------------------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index a17d0bd36c4..fc6acfc1137 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -274,11 +274,11 @@ ripunzip_archive = use_repo_rule("//misc/ripunzip:ripunzip.bzl", "ripunzip_archi # go to https://github.com/GoogleChrome/ripunzip/releases to find latest version and corresponding sha256s ripunzip_archive( name = "ripunzip", - version = "2.0.3", sha256_linux = "ee0e8a957687a5dc3a66b2a4b25883bf762df4c9c07f0651af527a32a405054b", - sha256_windows = "66d0c1375301bf5ab815348048f43b110631d3fa7200acd50d50a8ed8655ca62", - sha256_macos_intel = "4457a18bfcc5feabe09f5ea3d1157128e07b4873392cb404a870e611924abf64", sha256_macos_arm = "8a88eea54eac232d162a72a42065e0429b82dbf4f05e9642915dff9d7a81f846", + sha256_macos_intel = "4457a18bfcc5feabe09f5ea3d1157128e07b4873392cb404a870e611924abf64", + sha256_windows = "66d0c1375301bf5ab815348048f43b110631d3fa7200acd50d50a8ed8655ca62", + version = "2.0.3", ) register_toolchains( diff --git a/misc/ripunzip/ripunzip.bzl b/misc/ripunzip/ripunzip.bzl index f9046af95a0..b843cdff76b 100644 --- a/misc/ripunzip/ripunzip.bzl +++ b/misc/ripunzip/ripunzip.bzl @@ -4,21 +4,21 @@ def _impl(repository_ctx): build_file = Label("//misc/ripunzip:BUILD.ripunzip.bazel") if repository_ctx.os.name == "linux": repository_ctx.download_and_extract( - url="%s/ripunzip_%s-1_amd64.deb" % (url_prefix, version), - sha256=repository_ctx.attr.sha256_linux, - canonical_id="ripunzip-linux", - output="deb", + url = "%s/ripunzip_%s-1_amd64.deb" % (url_prefix, version), + sha256 = repository_ctx.attr.sha256_linux, + canonical_id = "ripunzip-linux", + output = "deb", ) repository_ctx.extract( "deb/data.tar.xz", - strip_prefix="usr", + strip_prefix = "usr", ) elif repository_ctx.os.name == "windows": repository_ctx.download_and_extract( - url="%s/ripunzip_v%s-x86_64-pc-windows-msvc.zip" % (url_prefix, version), - canonical_id="ripunzip-windows", - sha256=repository_ctx.attr.sha256_windows, - output="bin", + url = "%s/ripunzip_v%s-x86_64-pc-windows-msvc.zip" % (url_prefix, version), + canonical_id = "ripunzip-windows", + sha256 = repository_ctx.attr.sha256_windows, + output = "bin", ) elif repository_ctx.os.name == "mac os x": arch = repository_ctx.os.arch @@ -33,10 +33,10 @@ def _impl(repository_ctx): else: fail("Unsupported macOS architecture: %s" % arch) repository_ctx.download_and_extract( - url="%s/ripunzip_v%s-%s.tar.gz" % (url_prefix, version, suffix), - sha256=sha256, - canonical_id=canonical_id, - output="bin", + url = "%s/ripunzip_v%s-%s.tar.gz" % (url_prefix, version, suffix), + sha256 = sha256, + canonical_id = canonical_id, + output = "bin", ) else: fail("Unsupported OS: %s" % repository_ctx.os.name) @@ -44,12 +44,12 @@ def _impl(repository_ctx): repository_ctx.symlink(build_file, "BUILD.bazel") ripunzip_archive = repository_rule( - implementation=_impl, - attrs={ - "version": attr.string(mandatory=True), - "sha256_linux": attr.string(mandatory=True), - "sha256_windows": attr.string(mandatory=True), - "sha256_macos_intel": attr.string(mandatory=True), - "sha256_macos_arm": attr.string(mandatory=True), + implementation = _impl, + attrs = { + "version": attr.string(mandatory = True), + "sha256_linux": attr.string(mandatory = True), + "sha256_windows": attr.string(mandatory = True), + "sha256_macos_intel": attr.string(mandatory = True), + "sha256_macos_arm": attr.string(mandatory = True), }, ) From 69ee9cdb9f91fdbc10f51db052dad976f7e09ce1 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 19 Nov 2025 08:12:07 +0100 Subject: [PATCH 093/127] Ripunzip: fix mac os and windows URLs --- misc/ripunzip/ripunzip.bzl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/misc/ripunzip/ripunzip.bzl b/misc/ripunzip/ripunzip.bzl index b843cdff76b..823b563b60d 100644 --- a/misc/ripunzip/ripunzip.bzl +++ b/misc/ripunzip/ripunzip.bzl @@ -15,7 +15,7 @@ def _impl(repository_ctx): ) elif repository_ctx.os.name == "windows": repository_ctx.download_and_extract( - url = "%s/ripunzip_v%s-x86_64-pc-windows-msvc.zip" % (url_prefix, version), + url = "%s/ripunzip_v%s_x86_64-pc-windows-msvc.zip" % (url_prefix, version), canonical_id = "ripunzip-windows", sha256 = repository_ctx.attr.sha256_windows, output = "bin", @@ -33,7 +33,7 @@ def _impl(repository_ctx): else: fail("Unsupported macOS architecture: %s" % arch) repository_ctx.download_and_extract( - url = "%s/ripunzip_v%s-%s.tar.gz" % (url_prefix, version, suffix), + url = "%s/ripunzip_v%s_%s.tar.gz" % (url_prefix, version, suffix), sha256 = sha256, canonical_id = canonical_id, output = "bin", From 3be8591370b2018506e96473d2a36ad86352c1e5 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 19 Nov 2025 08:56:06 +0100 Subject: [PATCH 094/127] Ripunzip: fix windows os check, add comments --- misc/ripunzip/ripunzip.bzl | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/misc/ripunzip/ripunzip.bzl b/misc/ripunzip/ripunzip.bzl index 823b563b60d..2e707c267e2 100644 --- a/misc/ripunzip/ripunzip.bzl +++ b/misc/ripunzip/ripunzip.bzl @@ -1,8 +1,10 @@ -def _impl(repository_ctx): +def _ripunzip_archive_impl(repository_ctx): version = repository_ctx.attr.version url_prefix = "https://github.com/GoogleChrome/ripunzip/releases/download/v%s" % version build_file = Label("//misc/ripunzip:BUILD.ripunzip.bazel") - if repository_ctx.os.name == "linux": + if "linux" in repository_ctx.os.name: + # ripunzip only provides a deb package for Linux: we fish the binary out of it + # a deb archive contains a data.tar.xz one which contains the files to be installed under usr/bin repository_ctx.download_and_extract( url = "%s/ripunzip_%s-1_amd64.deb" % (url_prefix, version), sha256 = repository_ctx.attr.sha256_linux, @@ -11,16 +13,17 @@ def _impl(repository_ctx): ) repository_ctx.extract( "deb/data.tar.xz", - strip_prefix = "usr", + strip_prefix = "usr/bin", + output = "bin", ) - elif repository_ctx.os.name == "windows": + elif "windows" in repository_ctx.os.name: repository_ctx.download_and_extract( url = "%s/ripunzip_v%s_x86_64-pc-windows-msvc.zip" % (url_prefix, version), canonical_id = "ripunzip-windows", sha256 = repository_ctx.attr.sha256_windows, output = "bin", ) - elif repository_ctx.os.name == "mac os x": + elif "mac os" in repository_ctx.os.name: arch = repository_ctx.os.arch if arch == "x86_64": suffix = "x86_64-apple-darwin" @@ -44,7 +47,8 @@ def _impl(repository_ctx): repository_ctx.symlink(build_file, "BUILD.bazel") ripunzip_archive = repository_rule( - implementation = _impl, + implementation = _ripunzip_archive_impl, + doc = "Downloads a prebuilt ripunzip binary for the host platform from https://github.com/GoogleChrome/ripunzip/releases", attrs = { "version": attr.string(mandatory = True), "sha256_linux": attr.string(mandatory = True), From 8acfc7f75201d518d7d441716a0da2750495649b Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Sat, 15 Nov 2025 15:10:08 +0100 Subject: [PATCH 095/127] Rust: Handle `pub extern crate` in path resolution --- rust/ql/lib/codeql/rust/internal/PathResolution.qll | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index 54df4a3ca0c..f4346062f37 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -259,8 +259,7 @@ abstract class ItemNode extends Locatable { kind.isInternal() and useOpt.isNone() or - externCrateEdge(this, name, result) and - kind.isInternal() and + externCrateEdge(this, name, kind, result) and useOpt.isNone() or macroExportEdge(this, name, result) and @@ -276,7 +275,7 @@ abstract class ItemNode extends Locatable { result = use_.getASuccessor(name, kind, _) ) or - exists(ExternCrateItemNode ec | result = ec.(ItemNode).getASuccessor(name, kind, useOpt) | + exists(ExternCrateItemNode ec | result = ec.getASuccessor(name, kind, useOpt) | ec = this.getASuccessor(_, _, _) or // if the extern crate appears in the crate root, then the crate name is also added @@ -527,7 +526,7 @@ class ExternCrateItemNode extends ItemNode instanceof ExternCrate { override Namespace getNamespace() { none() } - override Visibility getVisibility() { none() } + override Visibility getVisibility() { result = ExternCrate.super.getVisibility() } override Attr getAnAttr() { result = ExternCrate.super.getAnAttr() } @@ -2107,8 +2106,11 @@ private predicate useImportEdge(Use use, string name, ItemNode item, SuccessorKi /** Holds if `ec` imports `crate` as `name`. */ pragma[nomagic] -private predicate externCrateEdge(ExternCrateItemNode ec, string name, CrateItemNode crate) { +private predicate externCrateEdge( + ExternCrateItemNode ec, string name, SuccessorKind kind, CrateItemNode crate +) { name = ec.getName() and + (if ec.isPublic() then kind.isBoth() else kind.isInternal()) and exists(SourceFile f, string s | ec.getFile() = f.getFile() and s = ec.(ExternCrate).getIdentifier().getText() From 3d49eff4a570e7d71453bb4dc864235f11bf79fa Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 19 Nov 2025 09:38:26 +0100 Subject: [PATCH 096/127] Rust: Add integration test for `pub extern crate` resolution --- rust/ql/integration-tests/hello-workspace/exe/src/main.rs | 1 + rust/ql/integration-tests/hello-workspace/functions.expected | 2 +- rust/ql/integration-tests/hello-workspace/lib/src/lib.rs | 2 ++ .../integration-tests/hello-workspace/summary.cargo.expected | 4 ++-- .../hello-workspace/summary.rust-project.expected | 4 ++-- 5 files changed, 8 insertions(+), 5 deletions(-) diff --git a/rust/ql/integration-tests/hello-workspace/exe/src/main.rs b/rust/ql/integration-tests/hello-workspace/exe/src/main.rs index 5bb9375719e..63670ff63a3 100644 --- a/rust/ql/integration-tests/hello-workspace/exe/src/main.rs +++ b/rust/ql/integration-tests/hello-workspace/exe/src/main.rs @@ -7,4 +7,5 @@ mod a_module; fn main() { my_macro2!(); // $ item=my_macro2 hello(); // $ item=HELLO + lib::extern_crate_alias::a_module::hello(); // $ item=HELLO } diff --git a/rust/ql/integration-tests/hello-workspace/functions.expected b/rust/ql/integration-tests/hello-workspace/functions.expected index 6d8aa73cd83..b6d54fa07d3 100644 --- a/rust/ql/integration-tests/hello-workspace/functions.expected +++ b/rust/ql/integration-tests/hello-workspace/functions.expected @@ -1,2 +1,2 @@ -| exe/src/main.rs:7:1:10:1 | fn main | +| exe/src/main.rs:7:1:11:1 | fn main | | lib/src/a_module/mod.rs:1:1:4:1 | fn hello | diff --git a/rust/ql/integration-tests/hello-workspace/lib/src/lib.rs b/rust/ql/integration-tests/hello-workspace/lib/src/lib.rs index f313f76edad..7999517c72d 100644 --- a/rust/ql/integration-tests/hello-workspace/lib/src/lib.rs +++ b/rust/ql/integration-tests/hello-workspace/lib/src/lib.rs @@ -15,3 +15,5 @@ mod macros { } pub mod a_module; + +pub extern crate self as extern_crate_alias; diff --git a/rust/ql/integration-tests/hello-workspace/summary.cargo.expected b/rust/ql/integration-tests/hello-workspace/summary.cargo.expected index cb07b66d437..11fba34f901 100644 --- a/rust/ql/integration-tests/hello-workspace/summary.cargo.expected +++ b/rust/ql/integration-tests/hello-workspace/summary.cargo.expected @@ -9,8 +9,8 @@ | Inconsistencies - Path resolution | 0 | | Inconsistencies - SSA | 0 | | Inconsistencies - data flow | 0 | -| Lines of code extracted | 21 | -| Lines of user code extracted | 21 | +| Lines of code extracted | 23 | +| Lines of user code extracted | 23 | | Macro calls - resolved | 10 | | Macro calls - total | 10 | | Macro calls - unresolved | 0 | diff --git a/rust/ql/integration-tests/hello-workspace/summary.rust-project.expected b/rust/ql/integration-tests/hello-workspace/summary.rust-project.expected index cb07b66d437..11fba34f901 100644 --- a/rust/ql/integration-tests/hello-workspace/summary.rust-project.expected +++ b/rust/ql/integration-tests/hello-workspace/summary.rust-project.expected @@ -9,8 +9,8 @@ | Inconsistencies - Path resolution | 0 | | Inconsistencies - SSA | 0 | | Inconsistencies - data flow | 0 | -| Lines of code extracted | 21 | -| Lines of user code extracted | 21 | +| Lines of code extracted | 23 | +| Lines of user code extracted | 23 | | Macro calls - resolved | 10 | | Macro calls - total | 10 | | Macro calls - unresolved | 0 | From b3c09389c8349616b1b4aa52a8848e8ee600dfbf Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 19 Nov 2025 11:57:38 +0100 Subject: [PATCH 097/127] Java: add missing QLDoc The check for QLDoc comments was unfortunately broken for some time, so we missed this. --- .../code/java/dataflow/internal/rangeanalysis/BoundSpecific.qll | 1 + 1 file changed, 1 insertion(+) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/BoundSpecific.qll b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/BoundSpecific.qll index 3ed92f4c551..cd85883f7bc 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/BoundSpecific.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/BoundSpecific.qll @@ -9,6 +9,7 @@ private import semmle.code.java.dataflow.SSA as Ssa private import semmle.code.java.dataflow.RangeUtils as RU class SsaVariable extends Ssa::SsaDefinition { + /** Gets a use of this variable. */ Expr getAUse() { result = super.getARead() } } From e235e0473ad3ffd9a2d60febd0df14185e436f01 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 19 Nov 2025 12:49:02 +0100 Subject: [PATCH 098/127] C++: Fix `getAnExpandedArgument` The fix was accidentially lost when rebasing the branch that introduced this predicate. --- cpp/ql/lib/semmle/code/cpp/Compilation.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/Compilation.qll b/cpp/ql/lib/semmle/code/cpp/Compilation.qll index c4b3796dec8..87bf586842c 100644 --- a/cpp/ql/lib/semmle/code/cpp/Compilation.qll +++ b/cpp/ql/lib/semmle/code/cpp/Compilation.qll @@ -97,7 +97,7 @@ class Compilation extends @compilation { /** * Gets an expanded argument passed to the extractor on this invocation. */ - string getAnExpandedArgument() { result = this.getArgument(_) } + string getAnExpandedArgument() { result = this.getExpandedArgument(_) } /** * Gets the `i`th expanded argument passed to the extractor on this From fe3f90e0415b8923955aad56c89b663dfcdded08 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Wed, 19 Nov 2025 12:49:54 +0100 Subject: [PATCH 099/127] C++: Make `getExpandedArgument` more robust This make the predicate give back sensible results on (upgraded) databases where we do not have expanded arguments, and avoid having to write case distinctions in places where we would want to use `getExpandedArgument`. --- cpp/ql/lib/semmle/code/cpp/Compilation.qll | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/Compilation.qll b/cpp/ql/lib/semmle/code/cpp/Compilation.qll index 87bf586842c..6f19be0481a 100644 --- a/cpp/ql/lib/semmle/code/cpp/Compilation.qll +++ b/cpp/ql/lib/semmle/code/cpp/Compilation.qll @@ -107,7 +107,11 @@ class Compilation extends @compilation { * includes the arguments from that file, rather than just taking the * argument literally. */ - string getExpandedArgument(int i) { compilation_expanded_args(this, i, result) } + string getExpandedArgument(int i) { + if exists(string arg | compilation_expanded_args(this, _, arg)) + then compilation_expanded_args(this, i, result) + else result = this.getArgument(i) + } /** * Gets the total amount of CPU time spent processing all the files in the From 481f627ae0b8d581b18267f221081dba9989127f Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Wed, 19 Nov 2025 13:34:26 +0100 Subject: [PATCH 100/127] Rust: Add string literal test --- .../extractor-tests/literal/literal.expected | 48 +++++++++---------- .../test/extractor-tests/literal/literal.rs | 11 +++++ 2 files changed, 35 insertions(+), 24 deletions(-) diff --git a/rust/ql/test/extractor-tests/literal/literal.expected b/rust/ql/test/extractor-tests/literal/literal.expected index d229d968467..90857eebe63 100644 --- a/rust/ql/test/extractor-tests/literal/literal.expected +++ b/rust/ql/test/extractor-tests/literal/literal.expected @@ -17,29 +17,29 @@ stringLiteral | literal.rs:22:5:22:11 | "\\\\x52" | | literal.rs:23:5:23:11 | r"\\x52" | integerLiteral -| literal.rs:28:5:28:7 | 123 | | -| literal.rs:29:5:29:10 | 123i32 | i32 | -| literal.rs:30:5:30:10 | 123u32 | u32 | -| literal.rs:31:5:31:11 | 123_u32 | u32 | -| literal.rs:33:5:33:8 | 0xff | | -| literal.rs:34:5:34:11 | 0xff_u8 | u8 | -| literal.rs:35:5:35:12 | 0x01_f32 | | -| literal.rs:36:5:36:11 | 0x01_e3 | | -| literal.rs:38:5:38:8 | 0o70 | | -| literal.rs:39:5:39:12 | 0o70_i16 | i16 | -| literal.rs:41:5:41:25 | 0b1111_1111_1001_0000 | | -| literal.rs:42:5:42:28 | 0b1111_1111_1001_0000i64 | i64 | -| literal.rs:43:5:43:15 | 0b________1 | | -| literal.rs:45:5:45:10 | 0usize | usize | -| literal.rs:48:5:49:10 | 128_i8 | i8 | -| literal.rs:50:5:51:10 | 256_u8 | u8 | +| literal.rs:39:5:39:7 | 123 | | +| literal.rs:40:5:40:10 | 123i32 | i32 | +| literal.rs:41:5:41:10 | 123u32 | u32 | +| literal.rs:42:5:42:11 | 123_u32 | u32 | +| literal.rs:44:5:44:8 | 0xff | | +| literal.rs:45:5:45:11 | 0xff_u8 | u8 | +| literal.rs:46:5:46:12 | 0x01_f32 | | +| literal.rs:47:5:47:11 | 0x01_e3 | | +| literal.rs:49:5:49:8 | 0o70 | | +| literal.rs:50:5:50:12 | 0o70_i16 | i16 | +| literal.rs:52:5:52:25 | 0b1111_1111_1001_0000 | | +| literal.rs:53:5:53:28 | 0b1111_1111_1001_0000i64 | i64 | +| literal.rs:54:5:54:15 | 0b________1 | | +| literal.rs:56:5:56:10 | 0usize | usize | +| literal.rs:59:5:60:10 | 128_i8 | i8 | +| literal.rs:61:5:62:10 | 256_u8 | u8 | floatLiteral -| literal.rs:56:5:56:8 | 5f32 | f32 | -| literal.rs:58:5:58:12 | 123.0f64 | f64 | -| literal.rs:59:5:59:10 | 0.1f64 | f64 | -| literal.rs:60:5:60:10 | 0.1f32 | f32 | -| literal.rs:61:5:61:14 | 12E+99_f64 | f64 | -| literal.rs:62:18:62:19 | 2. | | +| literal.rs:67:5:67:8 | 5f32 | f32 | +| literal.rs:69:5:69:12 | 123.0f64 | f64 | +| literal.rs:70:5:70:10 | 0.1f64 | f64 | +| literal.rs:71:5:71:10 | 0.1f32 | f32 | +| literal.rs:72:5:72:14 | 12E+99_f64 | f64 | +| literal.rs:73:18:73:19 | 2. | | booleanLiteral -| literal.rs:66:5:66:8 | true | -| literal.rs:67:5:67:9 | false | +| literal.rs:77:5:77:8 | true | +| literal.rs:78:5:78:9 | false | diff --git a/rust/ql/test/extractor-tests/literal/literal.rs b/rust/ql/test/extractor-tests/literal/literal.rs index ea4ccdece63..4a91c3e7041 100644 --- a/rust/ql/test/extractor-tests/literal/literal.rs +++ b/rust/ql/test/extractor-tests/literal/literal.rs @@ -21,6 +21,17 @@ fn string_literals() { r"R"; // R "\\x52"; r"\x52"; // \x52 + + " + A normal string literal + across many + lines + "; + + r#" + A raw string literal + across multiple lines + "#; } fn integer_literals() { From 0e539dbca5716c6e643620770309704ef579ec23 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Wed, 19 Nov 2025 13:39:48 +0100 Subject: [PATCH 101/127] Rust: Handle string literals with line breaks --- rust/ql/lib/codeql/rust/elements/internal/LiteralExprImpl.qll | 2 +- rust/ql/test/extractor-tests/literal/literal.expected | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/rust/ql/lib/codeql/rust/elements/internal/LiteralExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/LiteralExprImpl.qll index a836a4c4075..45c18ac3a9d 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/LiteralExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/LiteralExprImpl.qll @@ -68,7 +68,7 @@ module Impl { * [1]: https://doc.rust-lang.org/reference/tokens.html#string-literals */ class StringLiteralExpr extends LiteralExpr { - StringLiteralExpr() { this.getTextValue().regexpMatch("r?#*\".*\"#*") } + StringLiteralExpr() { this.getTextValue().charAt(0) = ["\"", "r"] } override string getAPrimaryQlClass() { result = "StringLiteralExpr" } } diff --git a/rust/ql/test/extractor-tests/literal/literal.expected b/rust/ql/test/extractor-tests/literal/literal.expected index 90857eebe63..bc08d37fc96 100644 --- a/rust/ql/test/extractor-tests/literal/literal.expected +++ b/rust/ql/test/extractor-tests/literal/literal.expected @@ -16,6 +16,8 @@ stringLiteral | literal.rs:21:5:21:8 | r"R" | | literal.rs:22:5:22:11 | "\\\\x52" | | literal.rs:23:5:23:11 | r"\\x52" | +| literal.rs:25:5:29:5 | "\n A normal string literal\n... | +| literal.rs:31:5:34:6 | r#"\n A raw string literal\n ... | integerLiteral | literal.rs:39:5:39:7 | 123 | | | literal.rs:40:5:40:10 | 123i32 | i32 | From 8fef60464ed311a7e176cf09c3865828acadde3c Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 19 Nov 2025 13:46:10 +0100 Subject: [PATCH 102/127] JS: Remove out-commented code --- javascript/ql/lib/semmle/javascript/internal/CachedStages.qll | 2 -- 1 file changed, 2 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/internal/CachedStages.qll b/javascript/ql/lib/semmle/javascript/internal/CachedStages.qll index ae9fe0bce27..17aa82ced6c 100644 --- a/javascript/ql/lib/semmle/javascript/internal/CachedStages.qll +++ b/javascript/ql/lib/semmle/javascript/internal/CachedStages.qll @@ -171,8 +171,6 @@ module Stages { or exists(any(DataFlow::PropRef ref).getBase()) or - // exists(any(DataFlow::ClassNode cls)) // Depends on AnalyzedNode - // or exists(any(DataFlow::CallNode node).getArgument(_)) or exists(any(DataFlow::CallNode node).getAnArgument()) From efa438a352d8f3dde7ea6516ef089e2eb6f8cb86 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 19 Nov 2025 13:47:30 +0100 Subject: [PATCH 103/127] JS: Move identityFunctionStep back into CachedSteps module --- .../dataflow/internal/FlowSteps.qll | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSteps.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSteps.qll index 0f5eff53258..2d199887296 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSteps.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSteps.qll @@ -520,23 +520,23 @@ private module CachedSteps { predicate receiverPropWrite(Function f, string prop, DataFlow::Node rhs) { DataFlow::thisNode(f).hasPropertyWrite(prop, rhs) } + + /** + * Holds if there is a step from `pred` to `succ` through a call to an identity function. + */ + overlay[local] + cached + predicate identityFunctionStep(DataFlow::Node pred, DataFlow::CallNode succ) { + exists(DataFlow::GlobalVarRefNode global | + global.getName() = "Object" and + succ.(DataFlow::MethodCallNode).calls(global, ["freeze", "seal"]) and + pred = succ.getArgument(0) + ) + } } import CachedSteps -/** - * Holds if there is a step from `pred` to `succ` through a call to an identity function. - */ -overlay[local] -cached -predicate identityFunctionStep(DataFlow::Node pred, DataFlow::CallNode succ) { - exists(DataFlow::GlobalVarRefNode global | - global.getName() = "Object" and - succ.(DataFlow::MethodCallNode).calls(global, ["freeze", "seal"]) and - pred = succ.getArgument(0) - ) -} - /** * A utility class that is equivalent to `boolean` but does not require type joining. */ From 2c20d3ffebe5f9fb8f231026061af7d22056cfb7 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 9 Jul 2025 14:55:27 +0100 Subject: [PATCH 104/127] Move weak crypto algorithm query out of experimental --- go/ql/src/{experimental => Security}/CWE-327/CryptoLibraries.qll | 0 .../{experimental => Security}/CWE-327/WeakCryptoAlgorithm.qhelp | 0 .../src/{experimental => Security}/CWE-327/WeakCryptoAlgorithm.ql | 0 .../CWE-327/WeakCryptoAlgorithmCustomizations.qll | 0 go/ql/src/{experimental => Security}/CWE-327/examples/Crypto.go | 0 .../CWE-327/examples/InsecureRandomness.go | 0 6 files changed, 0 insertions(+), 0 deletions(-) rename go/ql/src/{experimental => Security}/CWE-327/CryptoLibraries.qll (100%) rename go/ql/src/{experimental => Security}/CWE-327/WeakCryptoAlgorithm.qhelp (100%) rename go/ql/src/{experimental => Security}/CWE-327/WeakCryptoAlgorithm.ql (100%) rename go/ql/src/{experimental => Security}/CWE-327/WeakCryptoAlgorithmCustomizations.qll (100%) rename go/ql/src/{experimental => Security}/CWE-327/examples/Crypto.go (100%) rename go/ql/src/{experimental => Security}/CWE-327/examples/InsecureRandomness.go (100%) diff --git a/go/ql/src/experimental/CWE-327/CryptoLibraries.qll b/go/ql/src/Security/CWE-327/CryptoLibraries.qll similarity index 100% rename from go/ql/src/experimental/CWE-327/CryptoLibraries.qll rename to go/ql/src/Security/CWE-327/CryptoLibraries.qll diff --git a/go/ql/src/experimental/CWE-327/WeakCryptoAlgorithm.qhelp b/go/ql/src/Security/CWE-327/WeakCryptoAlgorithm.qhelp similarity index 100% rename from go/ql/src/experimental/CWE-327/WeakCryptoAlgorithm.qhelp rename to go/ql/src/Security/CWE-327/WeakCryptoAlgorithm.qhelp diff --git a/go/ql/src/experimental/CWE-327/WeakCryptoAlgorithm.ql b/go/ql/src/Security/CWE-327/WeakCryptoAlgorithm.ql similarity index 100% rename from go/ql/src/experimental/CWE-327/WeakCryptoAlgorithm.ql rename to go/ql/src/Security/CWE-327/WeakCryptoAlgorithm.ql diff --git a/go/ql/src/experimental/CWE-327/WeakCryptoAlgorithmCustomizations.qll b/go/ql/src/Security/CWE-327/WeakCryptoAlgorithmCustomizations.qll similarity index 100% rename from go/ql/src/experimental/CWE-327/WeakCryptoAlgorithmCustomizations.qll rename to go/ql/src/Security/CWE-327/WeakCryptoAlgorithmCustomizations.qll diff --git a/go/ql/src/experimental/CWE-327/examples/Crypto.go b/go/ql/src/Security/CWE-327/examples/Crypto.go similarity index 100% rename from go/ql/src/experimental/CWE-327/examples/Crypto.go rename to go/ql/src/Security/CWE-327/examples/Crypto.go diff --git a/go/ql/src/experimental/CWE-327/examples/InsecureRandomness.go b/go/ql/src/Security/CWE-327/examples/InsecureRandomness.go similarity index 100% rename from go/ql/src/experimental/CWE-327/examples/InsecureRandomness.go rename to go/ql/src/Security/CWE-327/examples/InsecureRandomness.go From a71bb4ba9a77ef0336bc18b6aeed7521ff9a0b8b Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 18 Jul 2025 22:28:40 +0100 Subject: [PATCH 105/127] Convert test to inline expectations --- .../query-tests/Security/CWE-327/Crypto.go | 12 ++++--- .../CWE-327/WeakCryptoAlgorithm.expected | 32 +++++++++---------- .../CWE-327/WeakCryptoAlgorithm.qlref | 5 ++- 3 files changed, 27 insertions(+), 22 deletions(-) diff --git a/go/ql/test/query-tests/Security/CWE-327/Crypto.go b/go/ql/test/query-tests/Security/CWE-327/Crypto.go index 75229b020a8..a58052df38d 100644 --- a/go/ql/test/query-tests/Security/CWE-327/Crypto.go +++ b/go/ql/test/query-tests/Security/CWE-327/Crypto.go @@ -13,19 +13,21 @@ func crypto() { public := []byte("hello") password := []byte("123456") - buf := password // testing dataflow by passing into different variable + + // testing dataflow by passing into different variable + buf := password // $ Source // BAD, des is a weak crypto algorithm and password is sensitive data - des.NewTripleDESCipher(buf) + des.NewTripleDESCipher(buf) // $ Alert // BAD, md5 is a weak crypto algorithm and password is sensitive data - md5.Sum(buf) + md5.Sum(buf) // $ Alert // BAD, rc4 is a weak crypto algorithm and password is sensitive data - rc4.NewCipher(buf) + rc4.NewCipher(buf) // $ Alert // BAD, sha1 is a weak crypto algorithm and password is sensitive data - sha1.Sum(buf) + sha1.Sum(buf) // $ Alert // GOOD, password is sensitive data but aes is a strong crypto algorithm aes.NewCipher(buf) diff --git a/go/ql/test/query-tests/Security/CWE-327/WeakCryptoAlgorithm.expected b/go/ql/test/query-tests/Security/CWE-327/WeakCryptoAlgorithm.expected index 53cfd40145d..6f40dfcc7ad 100644 --- a/go/ql/test/query-tests/Security/CWE-327/WeakCryptoAlgorithm.expected +++ b/go/ql/test/query-tests/Security/CWE-327/WeakCryptoAlgorithm.expected @@ -1,17 +1,17 @@ -edges -| Crypto.go:16:9:16:16 | password | Crypto.go:19:25:19:27 | buf | provenance | | -| Crypto.go:16:9:16:16 | password | Crypto.go:22:10:22:12 | buf | provenance | | -| Crypto.go:16:9:16:16 | password | Crypto.go:25:16:25:18 | buf | provenance | | -| Crypto.go:16:9:16:16 | password | Crypto.go:28:11:28:13 | buf | provenance | | -nodes -| Crypto.go:16:9:16:16 | password | semmle.label | password | -| Crypto.go:19:25:19:27 | buf | semmle.label | buf | -| Crypto.go:22:10:22:12 | buf | semmle.label | buf | -| Crypto.go:25:16:25:18 | buf | semmle.label | buf | -| Crypto.go:28:11:28:13 | buf | semmle.label | buf | -subpaths #select -| Crypto.go:19:25:19:27 | buf | Crypto.go:16:9:16:16 | password | Crypto.go:19:25:19:27 | buf | $@ is used in a weak cryptographic algorithm. | Crypto.go:16:9:16:16 | password | Sensitive data | -| Crypto.go:22:10:22:12 | buf | Crypto.go:16:9:16:16 | password | Crypto.go:22:10:22:12 | buf | $@ is used in a weak cryptographic algorithm. | Crypto.go:16:9:16:16 | password | Sensitive data | -| Crypto.go:25:16:25:18 | buf | Crypto.go:16:9:16:16 | password | Crypto.go:25:16:25:18 | buf | $@ is used in a weak cryptographic algorithm. | Crypto.go:16:9:16:16 | password | Sensitive data | -| Crypto.go:28:11:28:13 | buf | Crypto.go:16:9:16:16 | password | Crypto.go:28:11:28:13 | buf | $@ is used in a weak cryptographic algorithm. | Crypto.go:16:9:16:16 | password | Sensitive data | +| Crypto.go:21:25:21:27 | buf | Crypto.go:18:9:18:16 | password | Crypto.go:21:25:21:27 | buf | $@ is used in a weak cryptographic algorithm. | Crypto.go:18:9:18:16 | password | Sensitive data | +| Crypto.go:24:10:24:12 | buf | Crypto.go:18:9:18:16 | password | Crypto.go:24:10:24:12 | buf | $@ is used in a weak cryptographic algorithm. | Crypto.go:18:9:18:16 | password | Sensitive data | +| Crypto.go:27:16:27:18 | buf | Crypto.go:18:9:18:16 | password | Crypto.go:27:16:27:18 | buf | $@ is used in a weak cryptographic algorithm. | Crypto.go:18:9:18:16 | password | Sensitive data | +| Crypto.go:30:11:30:13 | buf | Crypto.go:18:9:18:16 | password | Crypto.go:30:11:30:13 | buf | $@ is used in a weak cryptographic algorithm. | Crypto.go:18:9:18:16 | password | Sensitive data | +edges +| Crypto.go:18:9:18:16 | password | Crypto.go:21:25:21:27 | buf | provenance | | +| Crypto.go:18:9:18:16 | password | Crypto.go:24:10:24:12 | buf | provenance | | +| Crypto.go:18:9:18:16 | password | Crypto.go:27:16:27:18 | buf | provenance | | +| Crypto.go:18:9:18:16 | password | Crypto.go:30:11:30:13 | buf | provenance | | +nodes +| Crypto.go:18:9:18:16 | password | semmle.label | password | +| Crypto.go:21:25:21:27 | buf | semmle.label | buf | +| Crypto.go:24:10:24:12 | buf | semmle.label | buf | +| Crypto.go:27:16:27:18 | buf | semmle.label | buf | +| Crypto.go:30:11:30:13 | buf | semmle.label | buf | +subpaths diff --git a/go/ql/test/query-tests/Security/CWE-327/WeakCryptoAlgorithm.qlref b/go/ql/test/query-tests/Security/CWE-327/WeakCryptoAlgorithm.qlref index 00d68df5a7c..cdc89fa3080 100644 --- a/go/ql/test/query-tests/Security/CWE-327/WeakCryptoAlgorithm.qlref +++ b/go/ql/test/query-tests/Security/CWE-327/WeakCryptoAlgorithm.qlref @@ -1 +1,4 @@ -experimental/CWE-327/WeakCryptoAlgorithm.ql +query: Security/CWE-327/WeakCryptoAlgorithm.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql From 188b25f11faf9c5da9ed9036e90c9f2c304707f1 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 9 Jul 2025 14:55:54 +0100 Subject: [PATCH 106/127] Remove `experimental` tag from query metadata --- go/ql/src/Security/CWE-327/WeakCryptoAlgorithm.ql | 1 - 1 file changed, 1 deletion(-) diff --git a/go/ql/src/Security/CWE-327/WeakCryptoAlgorithm.ql b/go/ql/src/Security/CWE-327/WeakCryptoAlgorithm.ql index ffaaae8e02a..c649bc8e374 100644 --- a/go/ql/src/Security/CWE-327/WeakCryptoAlgorithm.ql +++ b/go/ql/src/Security/CWE-327/WeakCryptoAlgorithm.ql @@ -5,7 +5,6 @@ * @problem.severity error * @id go/weak-crypto-algorithm * @tags security - * experimental * external/cwe/cwe-327 * external/cwe/cwe-328 */ From 92a3bccfd655755f14da5fbe5a902394ede9388d Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 10 Jul 2025 16:29:48 +0100 Subject: [PATCH 107/127] Align metadata with related queries --- go/ql/src/Security/CWE-327/WeakCryptoAlgorithm.ql | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/go/ql/src/Security/CWE-327/WeakCryptoAlgorithm.ql b/go/ql/src/Security/CWE-327/WeakCryptoAlgorithm.ql index c649bc8e374..3de3a8d34ce 100644 --- a/go/ql/src/Security/CWE-327/WeakCryptoAlgorithm.ql +++ b/go/ql/src/Security/CWE-327/WeakCryptoAlgorithm.ql @@ -1,8 +1,10 @@ /** - * @name Use of a weak cryptographic algorithm - * @description Using weak cryptographic algorithms can allow an attacker to compromise security. + * @name Use of a broken or weak cryptographic algorithm + * @description Using broken or weak cryptographic algorithms can compromise security. * @kind path-problem - * @problem.severity error + * @problem.severity warning + * @security-severity 7.5 + * @precision high * @id go/weak-crypto-algorithm * @tags security * external/cwe/cwe-327 From 5c403d374e7734d9e14d37e4d6a277c92b608391 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 17 Jul 2025 14:56:38 +0100 Subject: [PATCH 108/127] Move crypto qll files from query pack to library pack --- .../CWE-327 => lib/semmle/go/frameworks}/CryptoLibraries.qll | 0 .../semmle/go/security}/WeakCryptoAlgorithmCustomizations.qll | 2 +- go/ql/src/Security/CWE-327/WeakCryptoAlgorithm.ql | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename go/ql/{src/Security/CWE-327 => lib/semmle/go/frameworks}/CryptoLibraries.qll (100%) rename go/ql/{src/Security/CWE-327 => lib/semmle/go/security}/WeakCryptoAlgorithmCustomizations.qll (97%) diff --git a/go/ql/src/Security/CWE-327/CryptoLibraries.qll b/go/ql/lib/semmle/go/frameworks/CryptoLibraries.qll similarity index 100% rename from go/ql/src/Security/CWE-327/CryptoLibraries.qll rename to go/ql/lib/semmle/go/frameworks/CryptoLibraries.qll diff --git a/go/ql/src/Security/CWE-327/WeakCryptoAlgorithmCustomizations.qll b/go/ql/lib/semmle/go/security/WeakCryptoAlgorithmCustomizations.qll similarity index 97% rename from go/ql/src/Security/CWE-327/WeakCryptoAlgorithmCustomizations.qll rename to go/ql/lib/semmle/go/security/WeakCryptoAlgorithmCustomizations.qll index b9104f1fe09..6e25789531f 100644 --- a/go/ql/src/Security/CWE-327/WeakCryptoAlgorithmCustomizations.qll +++ b/go/ql/lib/semmle/go/security/WeakCryptoAlgorithmCustomizations.qll @@ -5,8 +5,8 @@ */ import go +private import semmle.go.frameworks.CryptoLibraries private import semmle.go.security.SensitiveActions -private import CryptoLibraries /** * Provides default sources, sinks and sanitizers for reasoning about diff --git a/go/ql/src/Security/CWE-327/WeakCryptoAlgorithm.ql b/go/ql/src/Security/CWE-327/WeakCryptoAlgorithm.ql index 3de3a8d34ce..58adfc00344 100644 --- a/go/ql/src/Security/CWE-327/WeakCryptoAlgorithm.ql +++ b/go/ql/src/Security/CWE-327/WeakCryptoAlgorithm.ql @@ -12,7 +12,7 @@ */ import go -import WeakCryptoAlgorithmCustomizations +import semmle.go.security.WeakCryptoAlgorithmCustomizations import WeakCryptoAlgorithm::Flow::PathGraph from WeakCryptoAlgorithm::Flow::PathNode source, WeakCryptoAlgorithm::Flow::PathNode sink From 34b2e3e2bf339fdd0425e9fedd9ea05b18624e45 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 18 Jul 2025 16:14:45 +0100 Subject: [PATCH 109/127] Copy the structure of the Javascript query --- go/ql/lib/go.qll | 1 + go/ql/lib/qlpack.yml | 1 + go/ql/lib/semmle/go/Concepts.qll | 32 ++++ .../semmle/go/frameworks/CryptoLibraries.qll | 179 ++---------------- .../BrokenCryptoAlgorithmCustomizations.qll | 58 ++++++ .../security/BrokenCryptoAlgorithmQuery.qll | 41 ++++ .../WeakCryptoAlgorithmCustomizations.qll | 66 ------- ...ithm.qhelp => BrokenCryptoAlgorithm.qhelp} | 0 ...oAlgorithm.ql => BrokenCryptoAlgorithm.ql} | 8 +- ...xpected => BrokenCryptoAlgorithm.expected} | 0 ...ithm.qlref => BrokenCryptoAlgorithm.qlref} | 2 +- 11 files changed, 153 insertions(+), 235 deletions(-) create mode 100644 go/ql/lib/semmle/go/security/BrokenCryptoAlgorithmCustomizations.qll create mode 100644 go/ql/lib/semmle/go/security/BrokenCryptoAlgorithmQuery.qll delete mode 100644 go/ql/lib/semmle/go/security/WeakCryptoAlgorithmCustomizations.qll rename go/ql/src/Security/CWE-327/{WeakCryptoAlgorithm.qhelp => BrokenCryptoAlgorithm.qhelp} (100%) rename go/ql/src/Security/CWE-327/{WeakCryptoAlgorithm.ql => BrokenCryptoAlgorithm.ql} (66%) rename go/ql/test/query-tests/Security/CWE-327/{WeakCryptoAlgorithm.expected => BrokenCryptoAlgorithm.expected} (100%) rename go/ql/test/query-tests/Security/CWE-327/{WeakCryptoAlgorithm.qlref => BrokenCryptoAlgorithm.qlref} (65%) diff --git a/go/ql/lib/go.qll b/go/ql/lib/go.qll index 16f2f1702fa..688214aae85 100644 --- a/go/ql/lib/go.qll +++ b/go/ql/lib/go.qll @@ -33,6 +33,7 @@ import semmle.go.frameworks.AwsLambda import semmle.go.frameworks.Beego import semmle.go.frameworks.BeegoOrm import semmle.go.frameworks.Bun +import semmle.go.frameworks.CryptoLibraries import semmle.go.frameworks.RsCors import semmle.go.frameworks.Couchbase import semmle.go.frameworks.Echo diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 97c351dfe8a..6d64828d63c 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -6,6 +6,7 @@ extractor: go library: true upgrades: upgrades dependencies: + codeql/concepts: ${workspace} codeql/dataflow: ${workspace} codeql/mad: ${workspace} codeql/threat-models: ${workspace} diff --git a/go/ql/lib/semmle/go/Concepts.qll b/go/ql/lib/semmle/go/Concepts.qll index 1931f16871a..0f30519d0be 100644 --- a/go/ql/lib/semmle/go/Concepts.qll +++ b/go/ql/lib/semmle/go/Concepts.qll @@ -8,6 +8,10 @@ import go import semmle.go.dataflow.FunctionInputsAndOutputs import semmle.go.concepts.HTTP import semmle.go.concepts.GeneratedFile +private import codeql.concepts.ConceptsShared +private import semmle.go.dataflow.internal.DataFlowImplSpecific + +private module ConceptsShared = ConceptsMake; /** * A data-flow node that executes an operating system command, @@ -505,3 +509,31 @@ module UnmarshalingFunction { abstract string getFormat(); } } + +/** + * Provides models for cryptographic things. + */ +module Cryptography { + private import ConceptsShared::Cryptography as SC + + /** + * A data-flow node that is an application of a cryptographic algorithm. For example, + * encryption, decryption, signature-validation. + * + * Extend this class to refine existing API models. If you want to model new APIs, + * extend `CryptographicOperation::Range` instead. + */ + class CryptographicOperation extends SC::CryptographicOperation { } + + class EncryptionAlgorithm = SC::EncryptionAlgorithm; + + class HashingAlgorithm = SC::HashingAlgorithm; + + class PasswordHashingAlgorithm = SC::PasswordHashingAlgorithm; + + module CryptographicOperation = SC::CryptographicOperation; + + class BlockMode = SC::BlockMode; + + class CryptographicAlgorithm = SC::CryptographicAlgorithm; +} diff --git a/go/ql/lib/semmle/go/frameworks/CryptoLibraries.qll b/go/ql/lib/semmle/go/frameworks/CryptoLibraries.qll index 5518067b668..9cc0235cbbb 100644 --- a/go/ql/lib/semmle/go/frameworks/CryptoLibraries.qll +++ b/go/ql/lib/semmle/go/frameworks/CryptoLibraries.qll @@ -3,180 +3,31 @@ */ import go - -/** - * Names of cryptographic algorithms, separated into strong and weak variants. - * - * The names are normalized: upper-case, no spaces, dashes or underscores. - * - * The names are inspired by the names used in real world crypto libraries. - * - * The classification into strong and weak are based on OWASP and Wikipedia (2020). - * - * Sources (more links in qhelp file): - * https://en.wikipedia.org/wiki/Strong_cryptography#Cryptographically_strong_algorithms - * https://en.wikipedia.org/wiki/Strong_cryptography#Examples - * https://cheatsheetseries.owasp.org/cheatsheets/Cryptographic_Storage_Cheat_Sheet.html - */ -private module AlgorithmNames { - predicate isStrongHashingAlgorithm(string name) { - name = - [ - "DSA", "ED25519", "SHA256", "SHA384", "SHA512", "SHA3", "ES256", "ECDSA256", "ES384", - "ECDSA384", "ES512", "ECDSA512", "SHA2", "SHA224" - ] - } - - predicate isWeakHashingAlgorithm(string name) { - name = - [ - "HAVEL128", "MD2", "SHA1", "MD4", "MD5", "PANAMA", "RIPEMD", "RIPEMD128", "RIPEMD256", - "RIPEMD320", "SHA0" - ] - } - - predicate isStrongEncryptionAlgorithm(string name) { - name = ["AES", "AES128", "AES192", "AES256", "AES512", "RSA", "RABBIT", "BLOWFISH"] - } - - predicate isWeakEncryptionAlgorithm(string name) { - name = - [ - "DES", "3DES", "ARC5", "RC5", "TRIPLEDES", "TDEA", "TRIPLEDEA", "ARC2", "RC2", "ARC4", - "RC4", "ARCFOUR" - ] - } - - predicate isStrongPasswordHashingAlgorithm(string name) { - name = ["ARGON2", "PBKDF2", "BCRYPT", "SCRYPT"] - } - - predicate isWeakPasswordHashingAlgorithm(string name) { none() } -} - -private import AlgorithmNames - -/** - * A cryptographic algorithm. - */ -private newtype TCryptographicAlgorithm = - MkHashingAlgorithm(string name, boolean isWeak) { - isStrongHashingAlgorithm(name) and isWeak = false - or - isWeakHashingAlgorithm(name) and isWeak = true - } or - MkEncryptionAlgorithm(string name, boolean isWeak) { - isStrongEncryptionAlgorithm(name) and isWeak = false - or - isWeakEncryptionAlgorithm(name) and isWeak = true - } or - MkPasswordHashingAlgorithm(string name, boolean isWeak) { - isStrongPasswordHashingAlgorithm(name) and isWeak = false - or - isWeakPasswordHashingAlgorithm(name) and isWeak = true - } - -/** - * A cryptographic algorithm. - */ -abstract class CryptographicAlgorithm extends TCryptographicAlgorithm { - /** Gets a textual representation of this element. */ - string toString() { result = this.getName() } - - /** - * Gets the name of this algorithm. - */ - abstract string getName(); - - /** - * Holds if the name of this algorithm matches `name` modulo case, - * white space, dashes and underscores. - */ - bindingset[name] - predicate matchesName(string name) { - exists(name.regexpReplaceAll("[-_]", "").regexpFind("(?i)\\Q" + this.getName() + "\\E", _, _)) - } - - /** - * Holds if this algorithm is weak. - */ - abstract predicate isWeak(); -} - -/** - * A hashing algorithm such as `MD5` or `SHA512`. - */ -class HashingAlgorithm extends MkHashingAlgorithm, CryptographicAlgorithm { - string name; - boolean isWeak; - - HashingAlgorithm() { this = MkHashingAlgorithm(name, isWeak) } - - override string getName() { result = name } - - override predicate isWeak() { isWeak = true } -} - -/** - * An encryption algorithm such as `DES` or `AES512`. - */ -class EncryptionAlgorithm extends MkEncryptionAlgorithm, CryptographicAlgorithm { - string name; - boolean isWeak; - - EncryptionAlgorithm() { this = MkEncryptionAlgorithm(name, isWeak) } - - override string getName() { result = name } - - override predicate isWeak() { isWeak = true } -} - -/** - * A password hashing algorithm such as `PBKDF2` or `SCRYPT`. - */ -class PasswordHashingAlgorithm extends MkPasswordHashingAlgorithm, CryptographicAlgorithm { - string name; - boolean isWeak; - - PasswordHashingAlgorithm() { this = MkPasswordHashingAlgorithm(name, isWeak) } - - override string getName() { result = name } - - override predicate isWeak() { isWeak = true } -} - -/** - * An application of a cryptographic algorithm. - */ -abstract class CryptographicOperation extends DataFlow::Node { - /** - * Gets the input the algorithm is used on, e.g. the plain text input to be encrypted. - */ - abstract Expr getInput(); - - /** - * Gets the applied algorithm. - */ - abstract CryptographicAlgorithm getAlgorithm(); -} +import semmle.go.Concepts::Cryptography +private import codeql.concepts.internal.CryptoAlgorithmNames /** * A cryptographic operation from the `crypto/md5` package. */ -class Md5 extends CryptographicOperation, DataFlow::CallNode { - Md5() { this.getTarget().hasQualifiedName("crypto/md5", ["New", "Sum"]) } +private module CryptoMd5 { + private class Md5 extends CryptographicOperation::Range instanceof DataFlow::CallNode { + Md5() { this.getTarget().hasQualifiedName("crypto/md5", ["New", "Sum"]) } - override Expr getInput() { result = this.getArgument(0).asExpr() } + override DataFlow::Node getInitialization() { result = this } - override CryptographicAlgorithm getAlgorithm() { - result.matchesName(this.getTarget().getPackage().getName()) + override CryptographicAlgorithm getAlgorithm() { result.matchesName("MD5") } + + override DataFlow::Node getAnInput() { result = super.getArgument(0) } + + // not relevant for md5 + override BlockMode getBlockMode() { none() } } } /** * A cryptographic operation from the `crypto/sha1` package. */ -class Sha1 extends CryptographicOperation, DataFlow::CallNode { +class Sha1 extends CryptographicOperation::Range instanceof DataFlow::CallNode { Sha1() { this.getTarget().hasQualifiedName("crypto/sha1", ["New", "Sum"]) } override Expr getInput() { result = this.getArgument(0).asExpr() } @@ -189,7 +40,7 @@ class Sha1 extends CryptographicOperation, DataFlow::CallNode { /** * A cryptographic operation from the `crypto/des` package. */ -class Des extends CryptographicOperation, DataFlow::CallNode { +class Des extends CryptographicOperation::Range instanceof DataFlow::CallNode { Des() { this.getTarget().hasQualifiedName("crypto/des", ["NewCipher", "NewTripleDESCipher"]) } override Expr getInput() { result = this.getArgument(0).asExpr() } @@ -202,7 +53,7 @@ class Des extends CryptographicOperation, DataFlow::CallNode { /** * A cryptographic operation from the `crypto/rc4` package. */ -class Rc4 extends CryptographicOperation, DataFlow::CallNode { +class Rc4 extends CryptographicOperation::Range instanceof DataFlow::CallNode { Rc4() { this.getTarget().hasQualifiedName("crypto/rc4", "NewCipher") } override Expr getInput() { result = this.getArgument(0).asExpr() } diff --git a/go/ql/lib/semmle/go/security/BrokenCryptoAlgorithmCustomizations.qll b/go/ql/lib/semmle/go/security/BrokenCryptoAlgorithmCustomizations.qll new file mode 100644 index 00000000000..e5ac77fbb75 --- /dev/null +++ b/go/ql/lib/semmle/go/security/BrokenCryptoAlgorithmCustomizations.qll @@ -0,0 +1,58 @@ +/** + * Provides default sources, sinks and sanitizers for reasoning about + * sensitive information in weak cryptographic algorithms, + * as well as extension points for adding your own. + */ + +import go +private import semmle.go.security.SensitiveActions + +/** + * Provides default sources, sinks and sanitizers for reasoning about + * sensitive information in weak cryptographic algorithms, + * as well as extension points for adding your own. + */ +module BrokenCryptoAlgorithm { + /** + * A data flow source for sensitive information in broken or weak cryptographic algorithms. + */ + abstract class Source extends DataFlow::Node { } + + /** + * A data flow sink for sensitive information in broken or weak cryptographic algorithms. + */ + abstract class Sink extends DataFlow::Node { + /** Gets the data-flow node where the cryptographic algorithm used in this operation is configured. */ + abstract DataFlow::Node getInitialization(); + } + + /** + * A sanitizer for sensitive information in broken or weak cryptographic algorithms. + */ + abstract class Sanitizer extends DataFlow::Node { } + + /** + * A sensitive source. + */ + class SensitiveSource extends Source { + SensitiveSource() { this.asExpr() instanceof SensitiveExpr } + } + + /** + * An expression used by a broken or weak cryptographic algorithm. + */ + class WeakCryptographicOperationSink extends Sink { + CryptographicOperation application; + + WeakCryptographicOperationSink() { + ( + application.getAlgorithm().isWeak() + or + application.getBlockMode().isWeak() + ) and + this = application.getAnInput() + } + + override DataFlow::Node getInitialization() { result = application.getInitialization() } + } +} diff --git a/go/ql/lib/semmle/go/security/BrokenCryptoAlgorithmQuery.qll b/go/ql/lib/semmle/go/security/BrokenCryptoAlgorithmQuery.qll new file mode 100644 index 00000000000..2e400c76c85 --- /dev/null +++ b/go/ql/lib/semmle/go/security/BrokenCryptoAlgorithmQuery.qll @@ -0,0 +1,41 @@ +/** + * Provides a taint tracking configuration for reasoning about + * sensitive information in broken or weak cryptographic algorithms. + * + * Note, for performance reasons: only import this file if + * `BrokenCryptoAlgorithm::Configuration` is needed, otherwise + * `BrokenCryptoAlgorithmCustomizations` should be imported instead. + */ + +import go +import BrokenCryptoAlgorithmCustomizations::BrokenCryptoAlgorithm + +/** + * A taint tracking configuration for sensitive information in broken or weak cryptographic algorithms. + * + * This configuration identifies flows from `Source`s, which are sources of + * sensitive data, to `Sink`s, which is an abstract class representing all + * the places sensitive data may used in broken or weak cryptographic algorithms. Additional sources or sinks can be + * added either by extending the relevant class, or by subclassing this configuration itself, + * and amending the sources and sinks. + */ +private module BrokenCryptoAlgorithmConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source instanceof Source } + + predicate isSink(DataFlow::Node sink) { sink instanceof Sink } + + predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + result = sink.(Sink).getLocation() + or + result = sink.(Sink).getInitialization().getLocation() + } +} + +/** + * Taint tracking flow for sensitive information in broken or weak cryptographic algorithms. + */ +module BrokenCryptoAlgorithmFlow = TaintTracking::Global; diff --git a/go/ql/lib/semmle/go/security/WeakCryptoAlgorithmCustomizations.qll b/go/ql/lib/semmle/go/security/WeakCryptoAlgorithmCustomizations.qll deleted file mode 100644 index 6e25789531f..00000000000 --- a/go/ql/lib/semmle/go/security/WeakCryptoAlgorithmCustomizations.qll +++ /dev/null @@ -1,66 +0,0 @@ -/** - * Provides default sources, sinks and sanitizers for reasoning about - * sensitive information in weak cryptographic algorithms, - * as well as extension points for adding your own. - */ - -import go -private import semmle.go.frameworks.CryptoLibraries -private import semmle.go.security.SensitiveActions - -/** - * Provides default sources, sinks and sanitizers for reasoning about - * sensitive information in weak cryptographic algorithms, - * as well as extension points for adding your own. - */ -module WeakCryptoAlgorithm { - /** - * A data flow source for sensitive information in weak cryptographic algorithms. - */ - abstract class Source extends DataFlow::Node { } - - /** - * A data flow sink for sensitive information in weak cryptographic algorithms. - */ - abstract class Sink extends DataFlow::Node { } - - /** - * A sanitizer for sensitive information in weak cryptographic algorithms. - */ - abstract class Sanitizer extends DataFlow::Node { } - - /** - * A sensitive source. - */ - class SensitiveSource extends Source { - SensitiveSource() { this.asExpr() instanceof SensitiveExpr } - } - - /** - * An expression used by a weak cryptographic algorithm. - */ - class WeakCryptographicOperationSink extends Sink { - WeakCryptographicOperationSink() { - exists(CryptographicOperation application | - application.getAlgorithm().isWeak() and - this.asExpr() = application.getInput() - ) - } - } - - private module Config implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { source instanceof Source } - - predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer } - - predicate observeDiffInformedIncrementalMode() { any() } - } - - /** - * Tracks taint flow from sensitive information to weak cryptographic - * algorithms. - */ - module Flow = TaintTracking::Global; -} diff --git a/go/ql/src/Security/CWE-327/WeakCryptoAlgorithm.qhelp b/go/ql/src/Security/CWE-327/BrokenCryptoAlgorithm.qhelp similarity index 100% rename from go/ql/src/Security/CWE-327/WeakCryptoAlgorithm.qhelp rename to go/ql/src/Security/CWE-327/BrokenCryptoAlgorithm.qhelp diff --git a/go/ql/src/Security/CWE-327/WeakCryptoAlgorithm.ql b/go/ql/src/Security/CWE-327/BrokenCryptoAlgorithm.ql similarity index 66% rename from go/ql/src/Security/CWE-327/WeakCryptoAlgorithm.ql rename to go/ql/src/Security/CWE-327/BrokenCryptoAlgorithm.ql index 58adfc00344..714a1cc7b3e 100644 --- a/go/ql/src/Security/CWE-327/WeakCryptoAlgorithm.ql +++ b/go/ql/src/Security/CWE-327/BrokenCryptoAlgorithm.ql @@ -12,10 +12,10 @@ */ import go -import semmle.go.security.WeakCryptoAlgorithmCustomizations -import WeakCryptoAlgorithm::Flow::PathGraph +import semmle.go.security.BrokenCryptoAlgorithmQuery +import BrokenCryptoAlgorithmFlow::PathGraph -from WeakCryptoAlgorithm::Flow::PathNode source, WeakCryptoAlgorithm::Flow::PathNode sink -where WeakCryptoAlgorithm::Flow::flowPath(source, sink) +from BrokenCryptoAlgorithmFlow::PathNode source, BrokenCryptoAlgorithmFlow::PathNode sink +where BrokenCryptoAlgorithmFlow::flowPath(source, sink) select sink.getNode(), source, sink, "$@ is used in a weak cryptographic algorithm.", source.getNode(), "Sensitive data" diff --git a/go/ql/test/query-tests/Security/CWE-327/WeakCryptoAlgorithm.expected b/go/ql/test/query-tests/Security/CWE-327/BrokenCryptoAlgorithm.expected similarity index 100% rename from go/ql/test/query-tests/Security/CWE-327/WeakCryptoAlgorithm.expected rename to go/ql/test/query-tests/Security/CWE-327/BrokenCryptoAlgorithm.expected diff --git a/go/ql/test/query-tests/Security/CWE-327/WeakCryptoAlgorithm.qlref b/go/ql/test/query-tests/Security/CWE-327/BrokenCryptoAlgorithm.qlref similarity index 65% rename from go/ql/test/query-tests/Security/CWE-327/WeakCryptoAlgorithm.qlref rename to go/ql/test/query-tests/Security/CWE-327/BrokenCryptoAlgorithm.qlref index cdc89fa3080..a618df1ed20 100644 --- a/go/ql/test/query-tests/Security/CWE-327/WeakCryptoAlgorithm.qlref +++ b/go/ql/test/query-tests/Security/CWE-327/BrokenCryptoAlgorithm.qlref @@ -1,4 +1,4 @@ -query: Security/CWE-327/WeakCryptoAlgorithm.ql +query: Security/CWE-327/BrokenCryptoAlgorithm.ql postprocess: - utils/test/PrettyPrintModels.ql - utils/test/InlineExpectationsTestQuery.ql From fac5296efca15fa78cb19a95d89af4aef606ed1d Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 14 Oct 2025 13:52:20 +0100 Subject: [PATCH 110/127] Avoid duplicate results using in-barriers --- go/ql/lib/semmle/go/security/BrokenCryptoAlgorithmQuery.qll | 2 ++ 1 file changed, 2 insertions(+) diff --git a/go/ql/lib/semmle/go/security/BrokenCryptoAlgorithmQuery.qll b/go/ql/lib/semmle/go/security/BrokenCryptoAlgorithmQuery.qll index 2e400c76c85..ba24dcf5707 100644 --- a/go/ql/lib/semmle/go/security/BrokenCryptoAlgorithmQuery.qll +++ b/go/ql/lib/semmle/go/security/BrokenCryptoAlgorithmQuery.qll @@ -24,6 +24,8 @@ private module BrokenCryptoAlgorithmConfig implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node sink) { sink instanceof Sink } + predicate isBarrierIn(DataFlow::Node node) { isSource(node) } + predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer } predicate observeDiffInformedIncrementalMode() { any() } From f34a625ac2fa2820a4cd3c301585d1bda2da0fad Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 15 Oct 2025 12:10:22 +0100 Subject: [PATCH 111/127] Model cryptographic operations --- go/ql/lib/semmle/go/Concepts.qll | 67 +++ .../semmle/go/frameworks/CryptoLibraries.qll | 494 ++++++++++++++++-- .../CWE-327/BrokenCryptoAlgorithm.expected | 92 +++- .../query-tests/Security/CWE-327/Crypto.go | 275 ++++++++-- .../Security/CWE-327/CryptoAlgorithm.expected | 2 + .../Security/CWE-327/CryptoAlgorithm.ql | 47 ++ .../test/query-tests/Security/CWE-327/go.mod | 3 + .../internal/CryptoAlgorithmNames.qll | 3 +- 8 files changed, 896 insertions(+), 87 deletions(-) create mode 100644 go/ql/test/query-tests/Security/CWE-327/CryptoAlgorithm.expected create mode 100644 go/ql/test/query-tests/Security/CWE-327/CryptoAlgorithm.ql create mode 100644 go/ql/test/query-tests/Security/CWE-327/go.mod diff --git a/go/ql/lib/semmle/go/Concepts.qll b/go/ql/lib/semmle/go/Concepts.qll index 0f30519d0be..acb16b62d07 100644 --- a/go/ql/lib/semmle/go/Concepts.qll +++ b/go/ql/lib/semmle/go/Concepts.qll @@ -536,4 +536,71 @@ module Cryptography { class BlockMode = SC::BlockMode; class CryptographicAlgorithm = SC::CryptographicAlgorithm; + + /** A data flow node that initializes a hash algorithm. */ + abstract class HashAlgorithmInit extends DataFlow::Node { + /** Gets the hash algorithm being initialized. */ + abstract HashingAlgorithm getAlgorithm(); + } + + /** A data flow node that is an application of a hash algorithm. */ + abstract class HashOperation extends CryptographicOperation::Range { + override BlockMode getBlockMode() { none() } + } + + /** A data flow node that initializes an encryption algorithm. */ + abstract class EncryptionAlgorithmInit extends DataFlow::Node { + /** Gets the encryption algorithm being initialized. */ + abstract EncryptionAlgorithm getAlgorithm(); + } + + /** + * A data flow node that initializes a block cipher mode of operation, and + * may also propagate taint for encryption algorithms. + */ + abstract class BlockModeInit extends DataFlow::CallNode { + /** Gets the block cipher mode of operation being initialized. */ + abstract BlockMode getMode(); + + /** Gets a step propagating the encryption algorithm through this call. */ + abstract predicate step(DataFlow::Node node1, DataFlow::Node node2); + } + + /** + * A data flow node that is an application of an encryption algorithm, where + * the encryption algorithm and the block cipher mode of operation (if there + * is one) have been initialized separately. + */ + abstract class EncryptionOperation extends CryptographicOperation::Range { + DataFlow::Node encryptionFlowTarget; + DataFlow::Node inputNode; + + override DataFlow::Node getInitialization() { + EncryptionFlow::flow(result, encryptionFlowTarget) + } + + override EncryptionAlgorithm getAlgorithm() { + result = this.getInitialization().(EncryptionAlgorithmInit).getAlgorithm() + } + + override DataFlow::Node getAnInput() { result = inputNode } + + override BlockMode getBlockMode() { + result = this.getInitialization().(BlockModeInit).getMode() + } + } + + /** + * An `EncryptionOperation` which is a method call where the encryption + * algorithm and block cipher mode of operation (if there is one) flow to the + * receiver and the input is an argument. + */ + abstract class EncryptionMethodCall extends EncryptionOperation instanceof DataFlow::CallNode { + int inputArg; + + EncryptionMethodCall() { + encryptionFlowTarget = super.getReceiver() and + inputNode = super.getArgument(inputArg) + } + } } diff --git a/go/ql/lib/semmle/go/frameworks/CryptoLibraries.qll b/go/ql/lib/semmle/go/frameworks/CryptoLibraries.qll index 9cc0235cbbb..0c56d8c7e6a 100644 --- a/go/ql/lib/semmle/go/frameworks/CryptoLibraries.qll +++ b/go/ql/lib/semmle/go/frameworks/CryptoLibraries.qll @@ -7,58 +7,482 @@ import semmle.go.Concepts::Cryptography private import codeql.concepts.internal.CryptoAlgorithmNames /** - * A cryptographic operation from the `crypto/md5` package. + * A data flow call node that is an application of a hash operation where the + * hash algorithm is defined in any earlier initialization node, and the input + * is the first argument of the call. */ -private module CryptoMd5 { - private class Md5 extends CryptographicOperation::Range instanceof DataFlow::CallNode { - Md5() { this.getTarget().hasQualifiedName("crypto/md5", ["New", "Sum"]) } +abstract class DirectHashOperation extends HashOperation instanceof DataFlow::CallNode { + override DataFlow::Node getInitialization() { result = this } - override DataFlow::Node getInitialization() { result = this } + override DataFlow::Node getAnInput() { result = super.getArgument(0) } +} - override CryptographicAlgorithm getAlgorithm() { result.matchesName("MD5") } +private module HashConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source instanceof HashAlgorithmInit } + + predicate isSink(DataFlow::Node sink) { any() } + + predicate observeDiffInformedIncrementalMode() { any() } +} + +/** Tracks the flow of hash algorithms. */ +module HashFlow = DataFlow::Global; + +/** + * A data flow node that initializes a block mode and propagates the encryption + * algorithm from the first argument to the receiver. + */ +abstract class StdLibNewEncrypter extends BlockModeInit { + override predicate step(DataFlow::Node node1, DataFlow::Node node2) { + node1 = this.getArgument(0) and + node2 = this.getResult(0) + } +} + +private module EncryptionConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source instanceof EncryptionAlgorithmInit or + source instanceof BlockModeInit + } + + predicate isSink(DataFlow::Node sink) { any() } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + any(BlockModeInit nbcm).step(node1, node2) + } + + predicate observeDiffInformedIncrementalMode() { any() } +} + +/** + * Tracks algorithms and block cipher modes of operation used for encryption. + */ +module EncryptionFlow = DataFlow::Global; + +private module Crypto { + private module Aes { + private class NewCipher extends EncryptionAlgorithmInit { + NewCipher() { + exists(Function f | this = f.getACall().getResult(0) | + f.hasQualifiedName("crypto/aes", "NewCipher") + ) + } + + override EncryptionAlgorithm getAlgorithm() { result.matchesName("AES") } + } + } + + private module Des { + private class NewCipher extends EncryptionAlgorithmInit { + NewCipher() { + exists(Function f | this = f.getACall().getResult(0) | + f.hasQualifiedName("crypto/des", "NewCipher") + ) + } + + override EncryptionAlgorithm getAlgorithm() { result.matchesName("DES") } + } + + private class NewTripleDESCipher extends EncryptionAlgorithmInit { + NewTripleDESCipher() { + exists(Function f | this = f.getACall().getResult(0) | + f.hasQualifiedName("crypto/des", "NewTripleDESCipher") + ) + } + + override EncryptionAlgorithm getAlgorithm() { result.matchesName("TRIPLEDES") } + } + } + + private module Md5 { + private class Sum extends DirectHashOperation instanceof DataFlow::CallNode { + Sum() { this.getTarget().hasQualifiedName("crypto/md5", "Sum") } + + override HashingAlgorithm getAlgorithm() { result.matchesName("MD5") } + } + + private class New extends HashAlgorithmInit instanceof DataFlow::CallNode { + New() { this.getTarget().hasQualifiedName("crypto/md5", "New") } + + override HashingAlgorithm getAlgorithm() { result.matchesName("MD5") } + } + } + + private module Rc4 { + private class CipherXORKeyStream extends CryptographicOperation::Range instanceof DataFlow::CallNode + { + CipherXORKeyStream() { + this.(DataFlow::MethodCallNode) + .getTarget() + .hasQualifiedName("crypto/rc4", "Cipher", "XORKeyStream") + } + + override DataFlow::Node getInitialization() { result = this } + + override EncryptionAlgorithm getAlgorithm() { result.matchesName("RC4") } + + override DataFlow::Node getAnInput() { result = super.getArgument(1) } + + override BlockMode getBlockMode() { none() } + } + } + + /** + * Cryptographic operations from the `crypto/sha1` package. + */ + private module Sha1 { + private class Sum extends DirectHashOperation instanceof DataFlow::CallNode { + Sum() { this.getTarget().hasQualifiedName("crypto/sha1", "Sum") } + + override HashingAlgorithm getAlgorithm() { result.matchesName("SHA1") } + } + + private class New extends HashAlgorithmInit instanceof DataFlow::CallNode { + New() { this.getTarget().hasQualifiedName("crypto/sha1", "New") } + + override HashingAlgorithm getAlgorithm() { result.matchesName("SHA1") } + } + } + + /** + * Cryptographic operations from the `crypto/sha256` package. + */ + private module Sha256 { + private class Sum256 extends DirectHashOperation instanceof DataFlow::CallNode { + Sum256() { this.getTarget().hasQualifiedName("crypto/sha256", "Sum256") } + + override HashingAlgorithm getAlgorithm() { result.matchesName("SHA256") } + } + + private class Sum224 extends DirectHashOperation instanceof DataFlow::CallNode { + Sum224() { this.getTarget().hasQualifiedName("crypto/sha256", "Sum224") } + + override HashingAlgorithm getAlgorithm() { result.matchesName("SHA224") } + } + + private class New extends HashAlgorithmInit instanceof DataFlow::CallNode { + New() { this.getTarget().hasQualifiedName("crypto/sha256", "New") } + + override HashingAlgorithm getAlgorithm() { result.matchesName("SHA256") } + } + + private class New224 extends HashAlgorithmInit instanceof DataFlow::CallNode { + New224() { this.getTarget().hasQualifiedName("crypto/sha256", "New224") } + + override HashingAlgorithm getAlgorithm() { result.matchesName("SHA224") } + } + } + + private module Sha3 { + private class Sum224 extends DirectHashOperation instanceof DataFlow::CallNode { + Sum224() { this.getTarget().hasQualifiedName("crypto/sha3", "Sum224") } + + override HashingAlgorithm getAlgorithm() { result.matchesName("SHA3224") } + } + + private class Sum256 extends DirectHashOperation instanceof DataFlow::CallNode { + Sum256() { this.getTarget().hasQualifiedName("crypto/sha3", "Sum256") } + + override HashingAlgorithm getAlgorithm() { result.matchesName("SHA3256") } + } + + private class Sum384 extends DirectHashOperation instanceof DataFlow::CallNode { + Sum384() { this.getTarget().hasQualifiedName("crypto/sha3", "Sum384") } + + override HashingAlgorithm getAlgorithm() { result.matchesName("SHA3384") } + } + + private class Sum512 extends DirectHashOperation instanceof DataFlow::CallNode { + Sum512() { this.getTarget().hasQualifiedName("crypto/sha3", "Sum512") } + + override HashingAlgorithm getAlgorithm() { result.matchesName("SHA3512") } + } + + private class SumShake128 extends DirectHashOperation instanceof DataFlow::CallNode { + SumShake128() { this.getTarget().hasQualifiedName("crypto/sha3", "SumSHAKE128") } + + override HashingAlgorithm getAlgorithm() { result.matchesName("SHAKE128") } + } + + private class SumShake256 extends DirectHashOperation instanceof DataFlow::CallNode { + SumShake256() { this.getTarget().hasQualifiedName("crypto/sha3", "SumSHAKE256") } + + override HashingAlgorithm getAlgorithm() { result.matchesName("SHAKE256") } + } + + private class New224 extends HashAlgorithmInit instanceof DataFlow::CallNode { + New224() { this.getTarget().hasQualifiedName("crypto/sha3", "New224") } + + override HashingAlgorithm getAlgorithm() { result.matchesName("SHA3224") } + } + + private class New256 extends HashAlgorithmInit instanceof DataFlow::CallNode { + New256() { this.getTarget().hasQualifiedName("crypto/sha3", "New256") } + + override HashingAlgorithm getAlgorithm() { result.matchesName("SHA3256") } + } + + private class New384 extends HashAlgorithmInit instanceof DataFlow::CallNode { + New384() { this.getTarget().hasQualifiedName("crypto/sha3", "New384") } + + override HashingAlgorithm getAlgorithm() { result.matchesName("SHA3384") } + } + + private class New512 extends HashAlgorithmInit instanceof DataFlow::CallNode { + New512() { this.getTarget().hasQualifiedName("crypto/sha3", "New512") } + + override HashingAlgorithm getAlgorithm() { result.matchesName("SHA3512") } + } + + private class NewShake128 extends HashAlgorithmInit instanceof DataFlow::CallNode { + NewShake128() { + this.getTarget().hasQualifiedName("crypto/sha3", ["NewCSHAKE128", "NewSHAKE128"]) + } + + override HashingAlgorithm getAlgorithm() { result.matchesName("SHAKE128") } + } + + private class NewShake256 extends HashAlgorithmInit instanceof DataFlow::CallNode { + NewShake256() { + this.getTarget().hasQualifiedName("crypto/sha3", ["NewCSHAKE256", "NewSHAKE256"]) + } + + override HashingAlgorithm getAlgorithm() { result.matchesName("SHAKE256") } + } + + private class ShakeWrite extends HashOperation instanceof DataFlow::MethodCallNode { + ShakeWrite() { this.getTarget().hasQualifiedName("crypto/sha3", "SHAKE", "Write") } + + override HashAlgorithmInit getInitialization() { HashFlow::flow(result, super.getReceiver()) } + + override HashingAlgorithm getAlgorithm() { result = this.getInitialization().getAlgorithm() } + + override DataFlow::Node getAnInput() { result = super.getArgument(0) } + } + } + + private module Sha512 { + private class Sum384 extends DirectHashOperation instanceof DataFlow::CallNode { + Sum384() { this.getTarget().hasQualifiedName("crypto/sha512", "Sum384") } + + override HashingAlgorithm getAlgorithm() { result.matchesName("SHA384") } + } + + private class Sum512 extends DirectHashOperation instanceof DataFlow::CallNode { + Sum512() { this.getTarget().hasQualifiedName("crypto/sha512", "Sum512") } + + override HashingAlgorithm getAlgorithm() { result.matchesName("SHA512") } + } + + private class Sum512_224 extends DirectHashOperation instanceof DataFlow::CallNode { + Sum512_224() { this.getTarget().hasQualifiedName("crypto/sha512", "Sum512_224") } + + override HashingAlgorithm getAlgorithm() { result.matchesName("SHA512224") } + } + + private class Sum512_256 extends DirectHashOperation instanceof DataFlow::CallNode { + Sum512_256() { this.getTarget().hasQualifiedName("crypto/sha512", "Sum512_256") } + + override HashingAlgorithm getAlgorithm() { result.matchesName("SHA512256") } + } + + private class New extends HashAlgorithmInit instanceof DataFlow::CallNode { + New() { this.getTarget().hasQualifiedName("crypto/sha512", "New") } + + override HashingAlgorithm getAlgorithm() { result.matchesName("SHA512") } + } + + private class New384 extends HashAlgorithmInit instanceof DataFlow::CallNode { + New384() { this.getTarget().hasQualifiedName("crypto/sha512", "New384") } + + override HashingAlgorithm getAlgorithm() { result.matchesName("SHA384") } + } + + private class New512_224 extends HashAlgorithmInit instanceof DataFlow::CallNode { + New512_224() { this.getTarget().hasQualifiedName("crypto/sha512", "New512_224") } + + override HashingAlgorithm getAlgorithm() { result.matchesName("SHA512224") } + } + + private class New512_256 extends HashAlgorithmInit instanceof DataFlow::CallNode { + New512_256() { this.getTarget().hasQualifiedName("crypto/sha512", "New512_256") } + + override HashingAlgorithm getAlgorithm() { result.matchesName("SHA512256") } + } + } + + private module Cipher { + private class NewCBCEncrypter extends StdLibNewEncrypter { + NewCBCEncrypter() { this.getTarget().hasQualifiedName("crypto/cipher", "NewCBCEncrypter") } + + override BlockMode getMode() { result = "CBC" } + } + + private class NewCFBEncrypter extends StdLibNewEncrypter { + NewCFBEncrypter() { this.getTarget().hasQualifiedName("crypto/cipher", "NewCFBEncrypter") } + + override BlockMode getMode() { result = "CFB" } + } + + private class NewCTR extends StdLibNewEncrypter { + NewCTR() { this.getTarget().hasQualifiedName("crypto/cipher", "NewCTR") } + + override BlockMode getMode() { result = "CTR" } + } + + private class NewGCM extends StdLibNewEncrypter { + NewGCM() { + exists(string name | this.getTarget().hasQualifiedName("crypto/cipher", name) | + name = ["NewGCM", "NewGCMWithNonceSize", "NewGCMWithRandomNonce", "NewGCMWithTagSize"] + ) + } + + override BlockMode getMode() { result = "GCM" } + } + + private class NewOFB extends StdLibNewEncrypter { + NewOFB() { this.getTarget().hasQualifiedName("crypto/cipher", "NewOFB") } + + override BlockMode getMode() { result = "OFB" } + } + + private class AeadSeal extends EncryptionMethodCall { + AeadSeal() { + this.(DataFlow::MethodCallNode) + .getTarget() + .hasQualifiedName("crypto/cipher", "AEAD", "Seal") and + inputArg = 2 + } + } + + private class BlockEncrypt extends EncryptionMethodCall { + BlockEncrypt() { + this.(DataFlow::MethodCallNode) + .getTarget() + .hasQualifiedName("crypto/cipher", "Block", "Encrypt") and + inputArg = 1 + } + } + + private class BlockModeCryptBlocks extends EncryptionMethodCall { + BlockModeCryptBlocks() { + this.(DataFlow::MethodCallNode) + .getTarget() + .hasQualifiedName("crypto/cipher", "BlockMode", "CryptBlocks") and + inputArg = 1 + } + } + + private class StreamXORKeyStream extends EncryptionMethodCall { + StreamXORKeyStream() { + this.(DataFlow::MethodCallNode) + .getTarget() + .hasQualifiedName("crypto/cipher", "Stream", "XORKeyStream") and + inputArg = 1 + } + } + + private class StreamReader extends EncryptionOperation { + StreamReader() { + lookThroughPointerType(this.getType()).hasQualifiedName("crypto/cipher", "StreamReader") and + exists(DataFlow::Write w, DataFlow::Node base, Field f | + f.hasQualifiedName("crypto/cipher", "StreamReader", "S") and + w.writesField(base, f, encryptionFlowTarget) and + DataFlow::localFlow(base, this) + ) and + exists(DataFlow::Write w, DataFlow::Node base, Field f | + f.hasQualifiedName("crypto/cipher", "StreamReader", "R") and + w.writesField(base, f, inputNode) and + DataFlow::localFlow(base, this) + ) + } + } + + /** + * Limitation: StreamWriter wraps a Writer, so we need to look forward to + * where the Writer is written to. Currently this is done using local flow, + * so it only works within one function. + */ + private class StreamWriter extends EncryptionOperation { + StreamWriter() { + lookThroughPointerType(this.getType()).hasQualifiedName("crypto/cipher", "StreamWriter") and + inputNode = this and + exists(DataFlow::Write w, DataFlow::Node base, Field f | + w.writesField(base, f, encryptionFlowTarget) and + f.hasQualifiedName("crypto/cipher", "StreamWriter", "S") + | + base = this or + TaintTracking::localTaint(base, this.(DataFlow::PostUpdateNode).getPreUpdateNode()) + ) + } + } + } +} + +private module Hash { + private class HashSum extends HashOperation instanceof DataFlow::MethodCallNode { + HashSum() { this.getTarget().implements("hash", "Hash", "Sum") } + + override HashAlgorithmInit getInitialization() { HashFlow::flow(result, super.getReceiver()) } + + override HashingAlgorithm getAlgorithm() { result = this.getInitialization().getAlgorithm() } override DataFlow::Node getAnInput() { result = super.getArgument(0) } - - // not relevant for md5 - override BlockMode getBlockMode() { none() } } } +private DataFlow::Node getANonIoWriterPredecessor(DataFlow::Node node) { + node.getType().implements("io", "Writer") and + exists(DataFlow::Node pre | TaintTracking::localTaintStep(pre, node) | + if pre.getType().implements("io", "Writer") + then result = getANonIoWriterPredecessor(pre) + else result = pre + ) +} + /** - * A cryptographic operation from the `crypto/sha1` package. + * Taint flowing to an `io.Writer` (such as `hash.Hash` or `*sha3.SHAKE`) via + * its implementation of the `io.Writer` interface. */ -class Sha1 extends CryptographicOperation::Range instanceof DataFlow::CallNode { - Sha1() { this.getTarget().hasQualifiedName("crypto/sha1", ["New", "Sum"]) } +private class FlowToIoWriter extends HashOperation instanceof DataFlow::Node { + HashAlgorithmInit init; + DataFlow::Node input; - override Expr getInput() { result = this.getArgument(0).asExpr() } - - override CryptographicAlgorithm getAlgorithm() { - result.matchesName(this.getTarget().getPackage().getName()) + FlowToIoWriter() { + this.getType().implements("io", "Writer") and + HashFlow::flow(init, this) and + // If we have `h.Write(taint)` or `io.WriteString(h, taint)` then it's + // the post-update node of `h` that gets tainted. + exists(DataFlow::PostUpdateNode pun | pun.getPreUpdateNode() = this | + input = getANonIoWriterPredecessor(pun) + ) } + + override HashAlgorithmInit getInitialization() { result = init } + + override HashingAlgorithm getAlgorithm() { result = this.getInitialization().getAlgorithm() } + + override DataFlow::Node getAnInput() { result = input } } /** - * A cryptographic operation from the `crypto/des` package. + * Currently only weak algorithms from the `golang.org/x/crypto` module are + * modeled here. */ -class Des extends CryptographicOperation::Range instanceof DataFlow::CallNode { - Des() { this.getTarget().hasQualifiedName("crypto/des", ["NewCipher", "NewTripleDESCipher"]) } +private module GolangOrgXCrypto { + private module Md4 { + private class New extends HashAlgorithmInit instanceof DataFlow::CallNode { + New() { this.getTarget().hasQualifiedName("golang.org/x/crypto/md4", "New") } - override Expr getInput() { result = this.getArgument(0).asExpr() } + override HashingAlgorithm getAlgorithm() { result.matchesName("MD4") } + } + } - override CryptographicAlgorithm getAlgorithm() { - result.matchesName(this.getTarget().getPackage().getName()) - } -} - -/** - * A cryptographic operation from the `crypto/rc4` package. - */ -class Rc4 extends CryptographicOperation::Range instanceof DataFlow::CallNode { - Rc4() { this.getTarget().hasQualifiedName("crypto/rc4", "NewCipher") } - - override Expr getInput() { result = this.getArgument(0).asExpr() } - - override CryptographicAlgorithm getAlgorithm() { - result.matchesName(this.getTarget().getPackage().getName()) + private module Ripemd160 { + private class New extends HashAlgorithmInit instanceof DataFlow::CallNode { + New() { this.getTarget().hasQualifiedName("golang.org/x/crypto/ripemd160", "New") } + + override HashingAlgorithm getAlgorithm() { result.matchesName("RIPEMD160") } + } } } diff --git a/go/ql/test/query-tests/Security/CWE-327/BrokenCryptoAlgorithm.expected b/go/ql/test/query-tests/Security/CWE-327/BrokenCryptoAlgorithm.expected index 6f40dfcc7ad..4fbf77dda62 100644 --- a/go/ql/test/query-tests/Security/CWE-327/BrokenCryptoAlgorithm.expected +++ b/go/ql/test/query-tests/Security/CWE-327/BrokenCryptoAlgorithm.expected @@ -1,17 +1,83 @@ #select -| Crypto.go:21:25:21:27 | buf | Crypto.go:18:9:18:16 | password | Crypto.go:21:25:21:27 | buf | $@ is used in a weak cryptographic algorithm. | Crypto.go:18:9:18:16 | password | Sensitive data | -| Crypto.go:24:10:24:12 | buf | Crypto.go:18:9:18:16 | password | Crypto.go:24:10:24:12 | buf | $@ is used in a weak cryptographic algorithm. | Crypto.go:18:9:18:16 | password | Sensitive data | -| Crypto.go:27:16:27:18 | buf | Crypto.go:18:9:18:16 | password | Crypto.go:27:16:27:18 | buf | $@ is used in a weak cryptographic algorithm. | Crypto.go:18:9:18:16 | password | Sensitive data | -| Crypto.go:30:11:30:13 | buf | Crypto.go:18:9:18:16 | password | Crypto.go:30:11:30:13 | buf | $@ is used in a weak cryptographic algorithm. | Crypto.go:18:9:18:16 | password | Sensitive data | +| Crypto.go:36:21:36:28 | password | Crypto.go:36:21:36:28 | password | Crypto.go:36:21:36:28 | password | $@ is used in a weak cryptographic algorithm. | Crypto.go:36:21:36:28 | password | Sensitive data | +| Crypto.go:41:22:41:29 | password | Crypto.go:41:22:41:29 | password | Crypto.go:41:22:41:29 | password | $@ is used in a weak cryptographic algorithm. | Crypto.go:41:22:41:29 | password | Sensitive data | +| Crypto.go:46:22:46:29 | password | Crypto.go:46:22:46:29 | password | Crypto.go:46:22:46:29 | password | $@ is used in a weak cryptographic algorithm. | Crypto.go:46:22:46:29 | password | Sensitive data | +| Crypto.go:51:22:51:29 | password | Crypto.go:51:22:51:29 | password | Crypto.go:51:22:51:29 | password | $@ is used in a weak cryptographic algorithm. | Crypto.go:51:22:51:29 | password | Sensitive data | +| Crypto.go:56:22:56:29 | password | Crypto.go:56:22:56:29 | password | Crypto.go:56:22:56:29 | password | $@ is used in a weak cryptographic algorithm. | Crypto.go:56:22:56:29 | password | Sensitive data | +| Crypto.go:61:32:61:39 | password | Crypto.go:61:32:61:39 | password | Crypto.go:61:32:61:39 | password | $@ is used in a weak cryptographic algorithm. | Crypto.go:61:32:61:39 | password | Sensitive data | +| Crypto.go:66:30:66:37 | password | Crypto.go:66:30:66:37 | password | Crypto.go:66:30:66:37 | password | $@ is used in a weak cryptographic algorithm. | Crypto.go:66:30:66:37 | password | Sensitive data | +| Crypto.go:68:59:68:83 | call to NewReader | Crypto.go:68:75:68:82 | password | Crypto.go:68:59:68:83 | call to NewReader | $@ is used in a weak cryptographic algorithm. | Crypto.go:68:75:68:82 | password | Sensitive data | +| Crypto.go:72:10:72:24 | ctrStreamWriter [postupdate] | Crypto.go:72:43:72:50 | password | Crypto.go:72:10:72:24 | ctrStreamWriter [postupdate] | $@ is used in a weak cryptographic algorithm. | Crypto.go:72:43:72:50 | password | Sensitive data | +| Crypto.go:78:30:78:37 | password | Crypto.go:78:30:78:37 | password | Crypto.go:78:30:78:37 | password | $@ is used in a weak cryptographic algorithm. | Crypto.go:78:30:78:37 | password | Sensitive data | +| Crypto.go:83:30:83:37 | password | Crypto.go:83:30:83:37 | password | Crypto.go:83:30:83:37 | password | $@ is used in a weak cryptographic algorithm. | Crypto.go:83:30:83:37 | password | Sensitive data | +| Crypto.go:91:21:91:33 | call to getPassword | Crypto.go:91:21:91:33 | call to getPassword | Crypto.go:91:21:91:33 | call to getPassword | $@ is used in a weak cryptographic algorithm. | Crypto.go:91:21:91:33 | call to getPassword | Sensitive data | +| Crypto.go:96:22:96:34 | call to getPassword | Crypto.go:96:22:96:34 | call to getPassword | Crypto.go:96:22:96:34 | call to getPassword | $@ is used in a weak cryptographic algorithm. | Crypto.go:96:22:96:34 | call to getPassword | Sensitive data | +| Crypto.go:101:22:101:34 | call to getPassword | Crypto.go:101:22:101:34 | call to getPassword | Crypto.go:101:22:101:34 | call to getPassword | $@ is used in a weak cryptographic algorithm. | Crypto.go:101:22:101:34 | call to getPassword | Sensitive data | +| Crypto.go:106:22:106:29 | password | Crypto.go:106:22:106:29 | password | Crypto.go:106:22:106:29 | password | $@ is used in a weak cryptographic algorithm. | Crypto.go:106:22:106:29 | password | Sensitive data | +| Crypto.go:111:22:111:29 | password | Crypto.go:111:22:111:29 | password | Crypto.go:111:22:111:29 | password | $@ is used in a weak cryptographic algorithm. | Crypto.go:111:22:111:29 | password | Sensitive data | +| Crypto.go:116:32:116:44 | call to getPassword | Crypto.go:116:32:116:44 | call to getPassword | Crypto.go:116:32:116:44 | call to getPassword | $@ is used in a weak cryptographic algorithm. | Crypto.go:116:32:116:44 | call to getPassword | Sensitive data | +| Crypto.go:121:30:121:42 | call to getPassword | Crypto.go:121:30:121:42 | call to getPassword | Crypto.go:121:30:121:42 | call to getPassword | $@ is used in a weak cryptographic algorithm. | Crypto.go:121:30:121:42 | call to getPassword | Sensitive data | +| Crypto.go:123:59:123:88 | call to NewReader | Crypto.go:123:75:123:87 | call to getPassword | Crypto.go:123:59:123:88 | call to NewReader | $@ is used in a weak cryptographic algorithm. | Crypto.go:123:75:123:87 | call to getPassword | Sensitive data | +| Crypto.go:127:10:127:24 | ctrStreamWriter [postupdate] | Crypto.go:127:43:127:55 | call to getPassword | Crypto.go:127:10:127:24 | ctrStreamWriter [postupdate] | $@ is used in a weak cryptographic algorithm. | Crypto.go:127:43:127:55 | call to getPassword | Sensitive data | +| Crypto.go:133:30:133:37 | password | Crypto.go:133:30:133:37 | password | Crypto.go:133:30:133:37 | password | $@ is used in a weak cryptographic algorithm. | Crypto.go:133:30:133:37 | password | Sensitive data | +| Crypto.go:138:30:138:37 | password | Crypto.go:138:30:138:37 | password | Crypto.go:138:30:138:37 | password | $@ is used in a weak cryptographic algorithm. | Crypto.go:138:30:138:37 | password | Sensitive data | +| Crypto.go:198:22:198:34 | call to getPassword | Crypto.go:198:22:198:34 | call to getPassword | Crypto.go:198:22:198:34 | call to getPassword | $@ is used in a weak cryptographic algorithm. | Crypto.go:198:22:198:34 | call to getPassword | Sensitive data | +| Crypto.go:205:8:205:10 | buf | Crypto.go:202:9:202:16 | password | Crypto.go:205:8:205:10 | buf | $@ is used in a weak cryptographic algorithm. | Crypto.go:202:9:202:16 | password | Sensitive data | +| Crypto.go:206:10:206:12 | buf | Crypto.go:202:9:202:16 | password | Crypto.go:206:10:206:12 | buf | $@ is used in a weak cryptographic algorithm. | Crypto.go:202:9:202:16 | password | Sensitive data | +| Crypto.go:207:20:207:33 | passwordString | Crypto.go:207:20:207:33 | passwordString | Crypto.go:207:20:207:33 | passwordString | $@ is used in a weak cryptographic algorithm. | Crypto.go:207:20:207:33 | passwordString | Sensitive data | +| Crypto.go:208:10:208:12 | buf | Crypto.go:202:9:202:16 | password | Crypto.go:208:10:208:12 | buf | $@ is used in a weak cryptographic algorithm. | Crypto.go:202:9:202:16 | password | Sensitive data | +| Crypto.go:210:17:210:19 | buf | Crypto.go:202:9:202:16 | password | Crypto.go:210:17:210:19 | buf | $@ is used in a weak cryptographic algorithm. | Crypto.go:202:9:202:16 | password | Sensitive data | +| Crypto.go:211:11:211:13 | buf | Crypto.go:202:9:202:16 | password | Crypto.go:211:11:211:13 | buf | $@ is used in a weak cryptographic algorithm. | Crypto.go:202:9:202:16 | password | Sensitive data | edges -| Crypto.go:18:9:18:16 | password | Crypto.go:21:25:21:27 | buf | provenance | | -| Crypto.go:18:9:18:16 | password | Crypto.go:24:10:24:12 | buf | provenance | | -| Crypto.go:18:9:18:16 | password | Crypto.go:27:16:27:18 | buf | provenance | | -| Crypto.go:18:9:18:16 | password | Crypto.go:30:11:30:13 | buf | provenance | | +| Crypto.go:68:75:68:82 | password | Crypto.go:68:59:68:83 | call to NewReader | provenance | MaD:1 | +| Crypto.go:72:27:72:51 | call to NewReader | Crypto.go:72:10:72:24 | ctrStreamWriter [postupdate] | provenance | MaD:2 | +| Crypto.go:72:43:72:50 | password | Crypto.go:72:27:72:51 | call to NewReader | provenance | MaD:1 | +| Crypto.go:123:75:123:87 | call to getPassword | Crypto.go:123:59:123:88 | call to NewReader | provenance | MaD:1 | +| Crypto.go:127:27:127:56 | call to NewReader | Crypto.go:127:10:127:24 | ctrStreamWriter [postupdate] | provenance | MaD:2 | +| Crypto.go:127:43:127:55 | call to getPassword | Crypto.go:127:27:127:56 | call to NewReader | provenance | MaD:1 | +| Crypto.go:202:9:202:16 | password | Crypto.go:205:8:205:10 | buf | provenance | | +| Crypto.go:202:9:202:16 | password | Crypto.go:206:10:206:12 | buf | provenance | | +| Crypto.go:202:9:202:16 | password | Crypto.go:208:10:208:12 | buf | provenance | | +| Crypto.go:202:9:202:16 | password | Crypto.go:210:17:210:19 | buf | provenance | | +| Crypto.go:202:9:202:16 | password | Crypto.go:211:11:211:13 | buf | provenance | | +models +| 1 | Summary: bytes; ; false; NewReader; ; ; Argument[0]; ReturnValue; taint; manual | +| 2 | Summary: io; ; false; Copy; ; ; Argument[1]; Argument[0]; taint; manual | nodes -| Crypto.go:18:9:18:16 | password | semmle.label | password | -| Crypto.go:21:25:21:27 | buf | semmle.label | buf | -| Crypto.go:24:10:24:12 | buf | semmle.label | buf | -| Crypto.go:27:16:27:18 | buf | semmle.label | buf | -| Crypto.go:30:11:30:13 | buf | semmle.label | buf | +| Crypto.go:36:21:36:28 | password | semmle.label | password | +| Crypto.go:41:22:41:29 | password | semmle.label | password | +| Crypto.go:46:22:46:29 | password | semmle.label | password | +| Crypto.go:51:22:51:29 | password | semmle.label | password | +| Crypto.go:56:22:56:29 | password | semmle.label | password | +| Crypto.go:61:32:61:39 | password | semmle.label | password | +| Crypto.go:66:30:66:37 | password | semmle.label | password | +| Crypto.go:68:59:68:83 | call to NewReader | semmle.label | call to NewReader | +| Crypto.go:68:75:68:82 | password | semmle.label | password | +| Crypto.go:72:10:72:24 | ctrStreamWriter [postupdate] | semmle.label | ctrStreamWriter [postupdate] | +| Crypto.go:72:27:72:51 | call to NewReader | semmle.label | call to NewReader | +| Crypto.go:72:43:72:50 | password | semmle.label | password | +| Crypto.go:78:30:78:37 | password | semmle.label | password | +| Crypto.go:83:30:83:37 | password | semmle.label | password | +| Crypto.go:91:21:91:33 | call to getPassword | semmle.label | call to getPassword | +| Crypto.go:96:22:96:34 | call to getPassword | semmle.label | call to getPassword | +| Crypto.go:101:22:101:34 | call to getPassword | semmle.label | call to getPassword | +| Crypto.go:106:22:106:29 | password | semmle.label | password | +| Crypto.go:111:22:111:29 | password | semmle.label | password | +| Crypto.go:116:32:116:44 | call to getPassword | semmle.label | call to getPassword | +| Crypto.go:121:30:121:42 | call to getPassword | semmle.label | call to getPassword | +| Crypto.go:123:59:123:88 | call to NewReader | semmle.label | call to NewReader | +| Crypto.go:123:75:123:87 | call to getPassword | semmle.label | call to getPassword | +| Crypto.go:127:10:127:24 | ctrStreamWriter [postupdate] | semmle.label | ctrStreamWriter [postupdate] | +| Crypto.go:127:27:127:56 | call to NewReader | semmle.label | call to NewReader | +| Crypto.go:127:43:127:55 | call to getPassword | semmle.label | call to getPassword | +| Crypto.go:133:30:133:37 | password | semmle.label | password | +| Crypto.go:138:30:138:37 | password | semmle.label | password | +| Crypto.go:198:22:198:34 | call to getPassword | semmle.label | call to getPassword | +| Crypto.go:202:9:202:16 | password | semmle.label | password | +| Crypto.go:205:8:205:10 | buf | semmle.label | buf | +| Crypto.go:206:10:206:12 | buf | semmle.label | buf | +| Crypto.go:207:20:207:33 | passwordString | semmle.label | passwordString | +| Crypto.go:208:10:208:12 | buf | semmle.label | buf | +| Crypto.go:210:17:210:19 | buf | semmle.label | buf | +| Crypto.go:211:11:211:13 | buf | semmle.label | buf | subpaths diff --git a/go/ql/test/query-tests/Security/CWE-327/Crypto.go b/go/ql/test/query-tests/Security/CWE-327/Crypto.go index a58052df38d..1a7afc35cb9 100644 --- a/go/ql/test/query-tests/Security/CWE-327/Crypto.go +++ b/go/ql/test/query-tests/Security/CWE-327/Crypto.go @@ -1,55 +1,254 @@ package main import ( + "bytes" "crypto/aes" + "crypto/cipher" "crypto/des" "crypto/md5" "crypto/rc4" "crypto/sha1" "crypto/sha256" + "crypto/sha3" + "crypto/sha512" + "io" + "os" ) -func crypto() { - public := []byte("hello") +var dst []byte = make([]byte, 16) +var password []byte = []byte("123456") - password := []byte("123456") +const passwordString string = "correct horse battery staple" - // testing dataflow by passing into different variable +var public []byte = []byte("hello") + +func getPassword() []byte { + return []byte("123456") +} + +// Note that we do not alert on decryption as we may need to decrypt legacy formats + +func BlockCipherDes() { + // BAD, des is a weak crypto algorithm + block, _ := des.NewCipher(nil) + + block.Encrypt(dst, public) // $ CryptographicOperation="DES. init from line 33." + block.Encrypt(dst, password) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="DES. init from line 33." + block.Decrypt(dst, password) + + gcm1, _ := cipher.NewGCM(block) + gcm1.Seal(nil, nil, public, nil) // $ CryptographicOperation="DES. init from line 33." + gcm1.Seal(nil, nil, password, nil) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="DES. init from line 33." + gcm1.Open(nil, nil, password, nil) + + gcm2, _ := cipher.NewGCMWithNonceSize(block, 12) + gcm2.Seal(nil, nil, public, nil) // $ CryptographicOperation="DES. init from line 33." + gcm2.Seal(nil, nil, password, nil) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="DES. init from line 33." + gcm2.Open(nil, nil, password, nil) + + gcm3, _ := cipher.NewGCMWithRandomNonce(block) + gcm3.Seal(nil, nil, public, nil) // $ CryptographicOperation="DES. init from line 33." + gcm3.Seal(nil, nil, password, nil) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="DES. init from line 33." + gcm3.Open(nil, nil, password, nil) + + gcm4, _ := cipher.NewGCMWithTagSize(block, 12) + gcm4.Seal(nil, nil, public, nil) // $ CryptographicOperation="DES. init from line 33." + gcm4.Seal(nil, nil, password, nil) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="DES. init from line 33." + gcm4.Open(nil, nil, password, nil) + + cbcEncrypter := cipher.NewCBCEncrypter(block, nil) + cbcEncrypter.CryptBlocks(dst, public) // $ CryptographicOperation="DES. blockMode: CBC. init from lines 33,59." + cbcEncrypter.CryptBlocks(dst, password) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="DES. blockMode: CBC. init from lines 33,59." + cipher.NewCBCDecrypter(block, nil).CryptBlocks(dst, password) + + ctrStream := cipher.NewCTR(block, nil) + ctrStream.XORKeyStream(dst, public) // $ CryptographicOperation="DES. blockMode: CTR. init from lines 33,64." + ctrStream.XORKeyStream(dst, password) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="DES. blockMode: CTR. init from lines 33,64." + + ctrStreamReader := &cipher.StreamReader{S: ctrStream, R: bytes.NewReader(password)} // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="DES. blockMode: CTR. init from lines 33,64." + io.Copy(os.Stdout, ctrStreamReader) + + ctrStreamWriter := &cipher.StreamWriter{S: ctrStream, W: os.Stdout} // $ CryptographicOperation="DES. blockMode: CTR. init from lines 33,64." + io.Copy(ctrStreamWriter, bytes.NewReader(password)) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="DES. blockMode: CTR. init from lines 33,64." + + // deprecated + + cfbStream := cipher.NewCFBEncrypter(block, nil) + cfbStream.XORKeyStream(dst, public) // $ CryptographicOperation="DES. blockMode: CFB. init from lines 33,76." + cfbStream.XORKeyStream(dst, password) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="DES. blockMode: CFB. init from lines 33,76." + cipher.NewCFBDecrypter(block, nil).XORKeyStream(dst, password) + + ofbStream := cipher.NewOFB(block, nil) + ofbStream.XORKeyStream(dst, public) // $ CryptographicOperation="DES. blockMode: OFB. init from lines 33,81." + ofbStream.XORKeyStream(dst, password) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="DES. blockMode: OFB. init from lines 33,81." +} + +func BlockCipherTripleDes() { + // BAD, triple des is a weak crypto algorithm and password is sensitive data + block, _ := des.NewTripleDESCipher(nil) + + block.Encrypt(dst, public) // $ CryptographicOperation="TRIPLEDES. init from line 88." + block.Encrypt(dst, getPassword()) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="TRIPLEDES. init from line 88." + block.Decrypt(dst, getPassword()) + + gcm1, _ := cipher.NewGCM(block) + gcm1.Seal(nil, nil, public, nil) // $ CryptographicOperation="TRIPLEDES. init from line 88." + gcm1.Seal(nil, nil, getPassword(), nil) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="TRIPLEDES. init from line 88." + gcm1.Open(nil, nil, getPassword(), nil) + + gcm2, _ := cipher.NewGCMWithNonceSize(block, 12) + gcm2.Seal(nil, nil, public, nil) // $ CryptographicOperation="TRIPLEDES. init from line 88." + gcm2.Seal(nil, nil, getPassword(), nil) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="TRIPLEDES. init from line 88." + gcm2.Open(nil, nil, getPassword(), nil) + + gcm3, _ := cipher.NewGCMWithRandomNonce(block) + gcm3.Seal(nil, nil, public, nil) // $ CryptographicOperation="TRIPLEDES. init from line 88." + gcm3.Seal(nil, nil, password, nil) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="TRIPLEDES. init from line 88." + gcm3.Open(nil, nil, password, nil) + + gcm4, _ := cipher.NewGCMWithTagSize(block, 12) + gcm4.Seal(nil, nil, public, nil) // $ CryptographicOperation="TRIPLEDES. init from line 88." + gcm4.Seal(nil, nil, password, nil) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="TRIPLEDES. init from line 88." + gcm4.Open(nil, nil, password, nil) + + cbcEncrypter := cipher.NewCBCEncrypter(block, nil) + cbcEncrypter.CryptBlocks(dst, public) // $ CryptographicOperation="TRIPLEDES. blockMode: CBC. init from lines 114,88." + cbcEncrypter.CryptBlocks(dst, getPassword()) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="TRIPLEDES. blockMode: CBC. init from lines 114,88." + cipher.NewCBCDecrypter(block, nil).CryptBlocks(dst, getPassword()) + + ctrStream := cipher.NewCTR(block, nil) + ctrStream.XORKeyStream(dst, public) // $ CryptographicOperation="TRIPLEDES. blockMode: CTR. init from lines 119,88." + ctrStream.XORKeyStream(dst, getPassword()) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="TRIPLEDES. blockMode: CTR. init from lines 119,88." + + ctrStreamReader := &cipher.StreamReader{S: ctrStream, R: bytes.NewReader(getPassword())} // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="TRIPLEDES. blockMode: CTR. init from lines 119,88." + io.Copy(os.Stdout, ctrStreamReader) + + ctrStreamWriter := &cipher.StreamWriter{S: ctrStream, W: os.Stdout} // $ CryptographicOperation="TRIPLEDES. blockMode: CTR. init from lines 119,88." + io.Copy(ctrStreamWriter, bytes.NewReader(getPassword())) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="TRIPLEDES. blockMode: CTR. init from lines 119,88." + + // deprecated + + cfbStream := cipher.NewCFBEncrypter(block, nil) + cfbStream.XORKeyStream(dst, public) // $ CryptographicOperation="TRIPLEDES. blockMode: CFB. init from lines 131,88." + cfbStream.XORKeyStream(dst, password) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="TRIPLEDES. blockMode: CFB. init from lines 131,88." + cipher.NewCFBDecrypter(block, nil).XORKeyStream(dst, password) + + ofbStream := cipher.NewOFB(block, nil) + ofbStream.XORKeyStream(dst, public) // $ CryptographicOperation="TRIPLEDES. blockMode: OFB. init from lines 136,88." + ofbStream.XORKeyStream(dst, password) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="TRIPLEDES. blockMode: OFB. init from lines 136,88." +} + +func BlockCipherAes() { + // GOOD, aes is a strong crypto algorithm + block, _ := aes.NewCipher(nil) + + block.Encrypt(dst, public) // $ CryptographicOperation="AES. init from line 143." + block.Encrypt(dst, password) // $ CryptographicOperation="AES. init from line 143." + block.Decrypt(dst, password) + + gcm1, _ := cipher.NewGCM(block) + gcm1.Seal(nil, nil, public, nil) // $ CryptographicOperation="AES. init from line 143." + gcm1.Seal(nil, nil, password, nil) // $ CryptographicOperation="AES. init from line 143." + gcm1.Open(nil, nil, password, nil) + + gcm2, _ := cipher.NewGCMWithNonceSize(block, 12) + gcm2.Seal(nil, nil, public, nil) // $ CryptographicOperation="AES. init from line 143." + gcm2.Seal(nil, nil, password, nil) // $ CryptographicOperation="AES. init from line 143." + gcm2.Open(nil, nil, password, nil) + + gcm3, _ := cipher.NewGCMWithRandomNonce(block) + gcm3.Seal(nil, nil, public, nil) // $ CryptographicOperation="AES. init from line 143." + gcm3.Seal(nil, nil, password, nil) // $ CryptographicOperation="AES. init from line 143." + gcm3.Open(nil, nil, password, nil) + + gcm4, _ := cipher.NewGCMWithTagSize(block, 12) + gcm4.Seal(nil, nil, public, nil) // $ CryptographicOperation="AES. init from line 143." + gcm4.Seal(nil, nil, password, nil) // $ CryptographicOperation="AES. init from line 143." + gcm4.Open(nil, nil, password, nil) + + cbcEncrypter := cipher.NewCBCEncrypter(block, nil) + cbcEncrypter.CryptBlocks(dst, public) // $ CryptographicOperation="AES. blockMode: CBC. init from lines 143,169." + cbcEncrypter.CryptBlocks(dst, password) // $ CryptographicOperation="AES. blockMode: CBC. init from lines 143,169." + cipher.NewCBCDecrypter(block, nil).CryptBlocks(dst, password) + + ctrStream := cipher.NewCTR(block, nil) + ctrStream.XORKeyStream(dst, public) // $ CryptographicOperation="AES. blockMode: CTR. init from lines 143,174." + ctrStream.XORKeyStream(dst, password) // $ CryptographicOperation="AES. blockMode: CTR. init from lines 143,174." + + ctrStreamReader := &cipher.StreamReader{S: ctrStream, R: bytes.NewReader(password)} // $ CryptographicOperation="AES. blockMode: CTR. init from lines 143,174." + io.Copy(os.Stdout, ctrStreamReader) + + ctrStreamWriter := &cipher.StreamWriter{S: ctrStream, W: os.Stdout} // $ CryptographicOperation="AES. blockMode: CTR. init from lines 143,174." + io.Copy(ctrStreamWriter, bytes.NewReader(password)) // $ CryptographicOperation="AES. blockMode: CTR. init from lines 143,174." + + // deprecated + + cfbStream := cipher.NewCFBEncrypter(block, nil) + cfbStream.XORKeyStream(dst, public) // $ CryptographicOperation="AES. blockMode: CFB. init from lines 143,186." + cfbStream.XORKeyStream(dst, password) // $ CryptographicOperation="AES. blockMode: CFB. init from lines 143,186." + cipher.NewCFBDecrypter(block, nil).XORKeyStream(dst, password) + + ofbStream := cipher.NewOFB(block, nil) + ofbStream.XORKeyStream(dst, public) // $ CryptographicOperation="AES. blockMode: OFB. init from lines 143,191." + ofbStream.XORKeyStream(dst, password) // $ CryptographicOperation="AES. blockMode: OFB. init from lines 143,191." +} + +func CipherRc4() { + c, _ := rc4.NewCipher(nil) + c.XORKeyStream(dst, getPassword()) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="RC4. init from line 198." +} + +func WeakHashes() { buf := password // $ Source - // BAD, des is a weak crypto algorithm and password is sensitive data - des.NewTripleDESCipher(buf) // $ Alert + h := md5.New() + h.Sum(buf) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="MD5. init from line 204." + h.Write(buf) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="MD5. init from line 204." + io.WriteString(h, passwordString) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="MD5. init from line 204." + md5.Sum(buf) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="MD5. init from line 208." - // BAD, md5 is a weak crypto algorithm and password is sensitive data - md5.Sum(buf) // $ Alert - - // BAD, rc4 is a weak crypto algorithm and password is sensitive data - rc4.NewCipher(buf) // $ Alert - - // BAD, sha1 is a weak crypto algorithm and password is sensitive data - sha1.Sum(buf) // $ Alert - - // GOOD, password is sensitive data but aes is a strong crypto algorithm - aes.NewCipher(buf) - - // GOOD, password is sensitive data but sha256 is a strong crypto algorithm - sha256.Sum256(buf) - - // GOOD, des is a weak crypto algorithm but public is not sensitive data - des.NewTripleDESCipher(public) - - // GOOD, md5 is a weak crypto algorithm but public is not sensitive data - md5.Sum(public) - - // GOOD, rc4 is a weak crypto algorithm but public is not sensitive data - rc4.NewCipher(public) - - // GOOD, sha1 is a weak crypto algorithm but public is not sensitive data - sha1.Sum(public) - - // GOOD, aes is a strong crypto algorithm and public is not sensitive data - aes.NewCipher(public) - - // GOOD, sha256 is a strong crypto algorithm and public is not sensitive data - sha256.Sum256(public) + sha1.New().Sum(buf) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="SHA1. init from line 210." + sha1.Sum(buf) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="SHA1. init from line 211." +} + +func StrongHashes() { + buf := password + + sha256.New224().Sum(buf) // $ CryptographicOperation="SHA224. init from line 217." + sha256.Sum224(buf) // $ CryptographicOperation="SHA224. init from line 218." + + sha256.New().Sum(buf) // $ CryptographicOperation="SHA256. init from line 220." + sha256.Sum256(buf) // $ CryptographicOperation="SHA256. init from line 221." + + sha512.New().Sum(buf) // $ CryptographicOperation="SHA512. init from line 223." + sha512.Sum512(buf) // $ CryptographicOperation="SHA512. init from line 224." + + sha512.New384().Sum(buf) // $ CryptographicOperation="SHA384. init from line 226." + sha512.Sum384(buf) // $ CryptographicOperation="SHA384. init from line 227." + + sha512.New512_224().Sum(buf) // $ CryptographicOperation="SHA512224. init from line 229." + sha512.Sum512_224(buf) // $ CryptographicOperation="SHA512224. init from line 230." + + sha512.New512_256().Sum(buf) // $ CryptographicOperation="SHA512256. init from line 232." + sha512.Sum512_256(buf) // $ CryptographicOperation="SHA512256. init from line 233." + + sha3.New224().Sum(buf) // $ CryptographicOperation="SHA3224. init from line 235." + sha3.Sum224(buf) // $ CryptographicOperation="SHA3224. init from line 236." + + sha3.New256().Sum(buf) // $ CryptographicOperation="SHA3256. init from line 238." + sha3.Sum256(buf) // $ CryptographicOperation="SHA3256. init from line 239." + + sha3.New384().Sum(buf) // $ CryptographicOperation="SHA3384. init from line 241." + sha3.Sum384(buf) // $ CryptographicOperation="SHA3384. init from line 242." + + sha3.New512().Sum(buf) // $ CryptographicOperation="SHA3512. init from line 244." + sha3.Sum512(buf) // $ CryptographicOperation="SHA3512. init from line 245." + + sha3.NewSHAKE128().Write(buf) // $ CryptographicOperation="SHAKE128. init from line 247." + sha3.NewCSHAKE128(nil, nil).Write(buf) // $ CryptographicOperation="SHAKE128. init from line 248." + sha3.SumSHAKE128(buf, 100) // $ CryptographicOperation="SHAKE128. init from line 249." + + sha3.NewSHAKE256().Write(buf) // $ CryptographicOperation="SHAKE256. init from line 251." + sha3.NewCSHAKE256(nil, nil).Write(buf) // $ CryptographicOperation="SHAKE256. init from line 252." + sha3.SumSHAKE256(buf, 100) // $ CryptographicOperation="SHAKE256. init from line 253." } diff --git a/go/ql/test/query-tests/Security/CWE-327/CryptoAlgorithm.expected b/go/ql/test/query-tests/Security/CWE-327/CryptoAlgorithm.expected new file mode 100644 index 00000000000..55e9aed2e93 --- /dev/null +++ b/go/ql/test/query-tests/Security/CWE-327/CryptoAlgorithm.expected @@ -0,0 +1,2 @@ +testFailures +invalidModelRow diff --git a/go/ql/test/query-tests/Security/CWE-327/CryptoAlgorithm.ql b/go/ql/test/query-tests/Security/CWE-327/CryptoAlgorithm.ql new file mode 100644 index 00000000000..ab096f9df2a --- /dev/null +++ b/go/ql/test/query-tests/Security/CWE-327/CryptoAlgorithm.ql @@ -0,0 +1,47 @@ +import go +import ModelValidation +import utils.test.InlineExpectationsTest + +module Test implements TestSig { + string getARelevantTag() { result = "CryptographicOperation" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "CryptographicOperation" and + exists( + CryptographicOperation::Range ho, string algorithm, string initialization, string blockMode + | + algorithm = ho.getAlgorithm().toString() + "." and + ( + blockMode = " blockMode: " + ho.getBlockMode().toString() + "." + or + not exists(ho.getBlockMode()) and blockMode = "" + ) and + exists(int c | c = count(ho.getInitialization()) | + c = 0 and initialization = "" + or + c = 1 and + initialization = + " init from line " + + strictconcat(DataFlow::Node init | + init = ho.getInitialization() + | + init.getStartLine().toString(), "," + ) + "." + or + c > 1 and + initialization = + " init from lines " + + strictconcat(DataFlow::Node init | + init = ho.getInitialization() + | + init.getStartLine().toString(), "," + ) + "." + ) and + ho.getLocation() = location and + element = ho.toString() and + value = "\"" + algorithm + blockMode + initialization + "\"" + ) + } +} + +import MakeTest diff --git a/go/ql/test/query-tests/Security/CWE-327/go.mod b/go/ql/test/query-tests/Security/CWE-327/go.mod new file mode 100644 index 00000000000..bf42b84feef --- /dev/null +++ b/go/ql/test/query-tests/Security/CWE-327/go.mod @@ -0,0 +1,3 @@ +module test + +go 1.24 diff --git a/shared/concepts/codeql/concepts/internal/CryptoAlgorithmNames.qll b/shared/concepts/codeql/concepts/internal/CryptoAlgorithmNames.qll index efcd870c724..86392890caf 100644 --- a/shared/concepts/codeql/concepts/internal/CryptoAlgorithmNames.qll +++ b/shared/concepts/codeql/concepts/internal/CryptoAlgorithmNames.qll @@ -23,7 +23,8 @@ predicate isStrongHashingAlgorithm(string name) { "BLAKE3", // "DSA", "ED25519", "ES256", "ECDSA256", "ES384", "ECDSA384", "ES512", "ECDSA512", "SHA2", - "SHA224", "SHA256", "SHA384", "SHA512", "SHA3", "SHA3224", "SHA3256", "SHA3384", "SHA3512", + "SHA224", "SHA256", "SHA384", "SHA512", "SHA512224", "SHA512256", "SHA3", "SHA3224", + "SHA3256", "SHA3384", "SHA3512", // see https://cryptography.io/en/latest/hazmat/primitives/cryptographic-hashes/#cryptography.hazmat.primitives.hashes.SHAKE128 "SHAKE128", "SHAKE256", // see https://cryptography.io/en/latest/hazmat/primitives/cryptographic-hashes/#sm3 From 713e19f6f11bfc307dda3584f94768f4a29e994e Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 31 Oct 2025 15:55:54 +0000 Subject: [PATCH 112/127] Make non-path query for encryption only --- .../BrokenCryptoAlgorithmCustomizations.qll | 58 ---- .../security/BrokenCryptoAlgorithmQuery.qll | 43 --- .../Security/CWE-327/BrokenCryptoAlgorithm.ql | 28 +- .../CWE-327/BrokenCryptoAlgorithm.expected | 112 ++------ .../query-tests/Security/CWE-327/Crypto.go | 254 ------------------ .../Security/CWE-327/encryption.go | 167 ++++++++++++ 6 files changed, 216 insertions(+), 446 deletions(-) delete mode 100644 go/ql/lib/semmle/go/security/BrokenCryptoAlgorithmCustomizations.qll delete mode 100644 go/ql/lib/semmle/go/security/BrokenCryptoAlgorithmQuery.qll delete mode 100644 go/ql/test/query-tests/Security/CWE-327/Crypto.go create mode 100644 go/ql/test/query-tests/Security/CWE-327/encryption.go diff --git a/go/ql/lib/semmle/go/security/BrokenCryptoAlgorithmCustomizations.qll b/go/ql/lib/semmle/go/security/BrokenCryptoAlgorithmCustomizations.qll deleted file mode 100644 index e5ac77fbb75..00000000000 --- a/go/ql/lib/semmle/go/security/BrokenCryptoAlgorithmCustomizations.qll +++ /dev/null @@ -1,58 +0,0 @@ -/** - * Provides default sources, sinks and sanitizers for reasoning about - * sensitive information in weak cryptographic algorithms, - * as well as extension points for adding your own. - */ - -import go -private import semmle.go.security.SensitiveActions - -/** - * Provides default sources, sinks and sanitizers for reasoning about - * sensitive information in weak cryptographic algorithms, - * as well as extension points for adding your own. - */ -module BrokenCryptoAlgorithm { - /** - * A data flow source for sensitive information in broken or weak cryptographic algorithms. - */ - abstract class Source extends DataFlow::Node { } - - /** - * A data flow sink for sensitive information in broken or weak cryptographic algorithms. - */ - abstract class Sink extends DataFlow::Node { - /** Gets the data-flow node where the cryptographic algorithm used in this operation is configured. */ - abstract DataFlow::Node getInitialization(); - } - - /** - * A sanitizer for sensitive information in broken or weak cryptographic algorithms. - */ - abstract class Sanitizer extends DataFlow::Node { } - - /** - * A sensitive source. - */ - class SensitiveSource extends Source { - SensitiveSource() { this.asExpr() instanceof SensitiveExpr } - } - - /** - * An expression used by a broken or weak cryptographic algorithm. - */ - class WeakCryptographicOperationSink extends Sink { - CryptographicOperation application; - - WeakCryptographicOperationSink() { - ( - application.getAlgorithm().isWeak() - or - application.getBlockMode().isWeak() - ) and - this = application.getAnInput() - } - - override DataFlow::Node getInitialization() { result = application.getInitialization() } - } -} diff --git a/go/ql/lib/semmle/go/security/BrokenCryptoAlgorithmQuery.qll b/go/ql/lib/semmle/go/security/BrokenCryptoAlgorithmQuery.qll deleted file mode 100644 index ba24dcf5707..00000000000 --- a/go/ql/lib/semmle/go/security/BrokenCryptoAlgorithmQuery.qll +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Provides a taint tracking configuration for reasoning about - * sensitive information in broken or weak cryptographic algorithms. - * - * Note, for performance reasons: only import this file if - * `BrokenCryptoAlgorithm::Configuration` is needed, otherwise - * `BrokenCryptoAlgorithmCustomizations` should be imported instead. - */ - -import go -import BrokenCryptoAlgorithmCustomizations::BrokenCryptoAlgorithm - -/** - * A taint tracking configuration for sensitive information in broken or weak cryptographic algorithms. - * - * This configuration identifies flows from `Source`s, which are sources of - * sensitive data, to `Sink`s, which is an abstract class representing all - * the places sensitive data may used in broken or weak cryptographic algorithms. Additional sources or sinks can be - * added either by extending the relevant class, or by subclassing this configuration itself, - * and amending the sources and sinks. - */ -private module BrokenCryptoAlgorithmConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { source instanceof Source } - - predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - predicate isBarrierIn(DataFlow::Node node) { isSource(node) } - - predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer } - - predicate observeDiffInformedIncrementalMode() { any() } - - Location getASelectedSinkLocation(DataFlow::Node sink) { - result = sink.(Sink).getLocation() - or - result = sink.(Sink).getInitialization().getLocation() - } -} - -/** - * Taint tracking flow for sensitive information in broken or weak cryptographic algorithms. - */ -module BrokenCryptoAlgorithmFlow = TaintTracking::Global; diff --git a/go/ql/src/Security/CWE-327/BrokenCryptoAlgorithm.ql b/go/ql/src/Security/CWE-327/BrokenCryptoAlgorithm.ql index 714a1cc7b3e..67b2d0d6d2b 100644 --- a/go/ql/src/Security/CWE-327/BrokenCryptoAlgorithm.ql +++ b/go/ql/src/Security/CWE-327/BrokenCryptoAlgorithm.ql @@ -1,21 +1,33 @@ /** * @name Use of a broken or weak cryptographic algorithm * @description Using broken or weak cryptographic algorithms can compromise security. - * @kind path-problem + * @kind problem * @problem.severity warning * @security-severity 7.5 * @precision high - * @id go/weak-crypto-algorithm + * @id go/weak-cryptographic-algorithm * @tags security * external/cwe/cwe-327 * external/cwe/cwe-328 */ import go -import semmle.go.security.BrokenCryptoAlgorithmQuery -import BrokenCryptoAlgorithmFlow::PathGraph -from BrokenCryptoAlgorithmFlow::PathNode source, BrokenCryptoAlgorithmFlow::PathNode sink -where BrokenCryptoAlgorithmFlow::flowPath(source, sink) -select sink.getNode(), source, sink, "$@ is used in a weak cryptographic algorithm.", - source.getNode(), "Sensitive data" +from Cryptography::CryptographicOperation operation, string msgPrefix, DataFlow::Node init +where + init = operation.getInitialization() and + // `init` may be a `BlockModeInit`, a `EncryptionAlgorithmInit`, or `operation` itself. + ( + not init instanceof BlockModeInit and + exists(Cryptography::CryptographicAlgorithm algorithm | + algorithm = operation.getAlgorithm() and + algorithm.isWeak() and + msgPrefix = "The cryptographic algorithm " + algorithm.getName() and + not algorithm instanceof Cryptography::HashingAlgorithm + ) + or + not init instanceof EncryptionAlgorithmInit and + operation.getBlockMode().isWeak() and + msgPrefix = "The block mode " + operation.getBlockMode() + ) +select operation, "$@ is broken or weak, and should not be used.", init, msgPrefix diff --git a/go/ql/test/query-tests/Security/CWE-327/BrokenCryptoAlgorithm.expected b/go/ql/test/query-tests/Security/CWE-327/BrokenCryptoAlgorithm.expected index 4fbf77dda62..00eb67fea0b 100644 --- a/go/ql/test/query-tests/Security/CWE-327/BrokenCryptoAlgorithm.expected +++ b/go/ql/test/query-tests/Security/CWE-327/BrokenCryptoAlgorithm.expected @@ -1,83 +1,29 @@ -#select -| Crypto.go:36:21:36:28 | password | Crypto.go:36:21:36:28 | password | Crypto.go:36:21:36:28 | password | $@ is used in a weak cryptographic algorithm. | Crypto.go:36:21:36:28 | password | Sensitive data | -| Crypto.go:41:22:41:29 | password | Crypto.go:41:22:41:29 | password | Crypto.go:41:22:41:29 | password | $@ is used in a weak cryptographic algorithm. | Crypto.go:41:22:41:29 | password | Sensitive data | -| Crypto.go:46:22:46:29 | password | Crypto.go:46:22:46:29 | password | Crypto.go:46:22:46:29 | password | $@ is used in a weak cryptographic algorithm. | Crypto.go:46:22:46:29 | password | Sensitive data | -| Crypto.go:51:22:51:29 | password | Crypto.go:51:22:51:29 | password | Crypto.go:51:22:51:29 | password | $@ is used in a weak cryptographic algorithm. | Crypto.go:51:22:51:29 | password | Sensitive data | -| Crypto.go:56:22:56:29 | password | Crypto.go:56:22:56:29 | password | Crypto.go:56:22:56:29 | password | $@ is used in a weak cryptographic algorithm. | Crypto.go:56:22:56:29 | password | Sensitive data | -| Crypto.go:61:32:61:39 | password | Crypto.go:61:32:61:39 | password | Crypto.go:61:32:61:39 | password | $@ is used in a weak cryptographic algorithm. | Crypto.go:61:32:61:39 | password | Sensitive data | -| Crypto.go:66:30:66:37 | password | Crypto.go:66:30:66:37 | password | Crypto.go:66:30:66:37 | password | $@ is used in a weak cryptographic algorithm. | Crypto.go:66:30:66:37 | password | Sensitive data | -| Crypto.go:68:59:68:83 | call to NewReader | Crypto.go:68:75:68:82 | password | Crypto.go:68:59:68:83 | call to NewReader | $@ is used in a weak cryptographic algorithm. | Crypto.go:68:75:68:82 | password | Sensitive data | -| Crypto.go:72:10:72:24 | ctrStreamWriter [postupdate] | Crypto.go:72:43:72:50 | password | Crypto.go:72:10:72:24 | ctrStreamWriter [postupdate] | $@ is used in a weak cryptographic algorithm. | Crypto.go:72:43:72:50 | password | Sensitive data | -| Crypto.go:78:30:78:37 | password | Crypto.go:78:30:78:37 | password | Crypto.go:78:30:78:37 | password | $@ is used in a weak cryptographic algorithm. | Crypto.go:78:30:78:37 | password | Sensitive data | -| Crypto.go:83:30:83:37 | password | Crypto.go:83:30:83:37 | password | Crypto.go:83:30:83:37 | password | $@ is used in a weak cryptographic algorithm. | Crypto.go:83:30:83:37 | password | Sensitive data | -| Crypto.go:91:21:91:33 | call to getPassword | Crypto.go:91:21:91:33 | call to getPassword | Crypto.go:91:21:91:33 | call to getPassword | $@ is used in a weak cryptographic algorithm. | Crypto.go:91:21:91:33 | call to getPassword | Sensitive data | -| Crypto.go:96:22:96:34 | call to getPassword | Crypto.go:96:22:96:34 | call to getPassword | Crypto.go:96:22:96:34 | call to getPassword | $@ is used in a weak cryptographic algorithm. | Crypto.go:96:22:96:34 | call to getPassword | Sensitive data | -| Crypto.go:101:22:101:34 | call to getPassword | Crypto.go:101:22:101:34 | call to getPassword | Crypto.go:101:22:101:34 | call to getPassword | $@ is used in a weak cryptographic algorithm. | Crypto.go:101:22:101:34 | call to getPassword | Sensitive data | -| Crypto.go:106:22:106:29 | password | Crypto.go:106:22:106:29 | password | Crypto.go:106:22:106:29 | password | $@ is used in a weak cryptographic algorithm. | Crypto.go:106:22:106:29 | password | Sensitive data | -| Crypto.go:111:22:111:29 | password | Crypto.go:111:22:111:29 | password | Crypto.go:111:22:111:29 | password | $@ is used in a weak cryptographic algorithm. | Crypto.go:111:22:111:29 | password | Sensitive data | -| Crypto.go:116:32:116:44 | call to getPassword | Crypto.go:116:32:116:44 | call to getPassword | Crypto.go:116:32:116:44 | call to getPassword | $@ is used in a weak cryptographic algorithm. | Crypto.go:116:32:116:44 | call to getPassword | Sensitive data | -| Crypto.go:121:30:121:42 | call to getPassword | Crypto.go:121:30:121:42 | call to getPassword | Crypto.go:121:30:121:42 | call to getPassword | $@ is used in a weak cryptographic algorithm. | Crypto.go:121:30:121:42 | call to getPassword | Sensitive data | -| Crypto.go:123:59:123:88 | call to NewReader | Crypto.go:123:75:123:87 | call to getPassword | Crypto.go:123:59:123:88 | call to NewReader | $@ is used in a weak cryptographic algorithm. | Crypto.go:123:75:123:87 | call to getPassword | Sensitive data | -| Crypto.go:127:10:127:24 | ctrStreamWriter [postupdate] | Crypto.go:127:43:127:55 | call to getPassword | Crypto.go:127:10:127:24 | ctrStreamWriter [postupdate] | $@ is used in a weak cryptographic algorithm. | Crypto.go:127:43:127:55 | call to getPassword | Sensitive data | -| Crypto.go:133:30:133:37 | password | Crypto.go:133:30:133:37 | password | Crypto.go:133:30:133:37 | password | $@ is used in a weak cryptographic algorithm. | Crypto.go:133:30:133:37 | password | Sensitive data | -| Crypto.go:138:30:138:37 | password | Crypto.go:138:30:138:37 | password | Crypto.go:138:30:138:37 | password | $@ is used in a weak cryptographic algorithm. | Crypto.go:138:30:138:37 | password | Sensitive data | -| Crypto.go:198:22:198:34 | call to getPassword | Crypto.go:198:22:198:34 | call to getPassword | Crypto.go:198:22:198:34 | call to getPassword | $@ is used in a weak cryptographic algorithm. | Crypto.go:198:22:198:34 | call to getPassword | Sensitive data | -| Crypto.go:205:8:205:10 | buf | Crypto.go:202:9:202:16 | password | Crypto.go:205:8:205:10 | buf | $@ is used in a weak cryptographic algorithm. | Crypto.go:202:9:202:16 | password | Sensitive data | -| Crypto.go:206:10:206:12 | buf | Crypto.go:202:9:202:16 | password | Crypto.go:206:10:206:12 | buf | $@ is used in a weak cryptographic algorithm. | Crypto.go:202:9:202:16 | password | Sensitive data | -| Crypto.go:207:20:207:33 | passwordString | Crypto.go:207:20:207:33 | passwordString | Crypto.go:207:20:207:33 | passwordString | $@ is used in a weak cryptographic algorithm. | Crypto.go:207:20:207:33 | passwordString | Sensitive data | -| Crypto.go:208:10:208:12 | buf | Crypto.go:202:9:202:16 | password | Crypto.go:208:10:208:12 | buf | $@ is used in a weak cryptographic algorithm. | Crypto.go:202:9:202:16 | password | Sensitive data | -| Crypto.go:210:17:210:19 | buf | Crypto.go:202:9:202:16 | password | Crypto.go:210:17:210:19 | buf | $@ is used in a weak cryptographic algorithm. | Crypto.go:202:9:202:16 | password | Sensitive data | -| Crypto.go:211:11:211:13 | buf | Crypto.go:202:9:202:16 | password | Crypto.go:211:11:211:13 | buf | $@ is used in a weak cryptographic algorithm. | Crypto.go:202:9:202:16 | password | Sensitive data | -edges -| Crypto.go:68:75:68:82 | password | Crypto.go:68:59:68:83 | call to NewReader | provenance | MaD:1 | -| Crypto.go:72:27:72:51 | call to NewReader | Crypto.go:72:10:72:24 | ctrStreamWriter [postupdate] | provenance | MaD:2 | -| Crypto.go:72:43:72:50 | password | Crypto.go:72:27:72:51 | call to NewReader | provenance | MaD:1 | -| Crypto.go:123:75:123:87 | call to getPassword | Crypto.go:123:59:123:88 | call to NewReader | provenance | MaD:1 | -| Crypto.go:127:27:127:56 | call to NewReader | Crypto.go:127:10:127:24 | ctrStreamWriter [postupdate] | provenance | MaD:2 | -| Crypto.go:127:43:127:55 | call to getPassword | Crypto.go:127:27:127:56 | call to NewReader | provenance | MaD:1 | -| Crypto.go:202:9:202:16 | password | Crypto.go:205:8:205:10 | buf | provenance | | -| Crypto.go:202:9:202:16 | password | Crypto.go:206:10:206:12 | buf | provenance | | -| Crypto.go:202:9:202:16 | password | Crypto.go:208:10:208:12 | buf | provenance | | -| Crypto.go:202:9:202:16 | password | Crypto.go:210:17:210:19 | buf | provenance | | -| Crypto.go:202:9:202:16 | password | Crypto.go:211:11:211:13 | buf | provenance | | -models -| 1 | Summary: bytes; ; false; NewReader; ; ; Argument[0]; ReturnValue; taint; manual | -| 2 | Summary: io; ; false; Copy; ; ; Argument[1]; Argument[0]; taint; manual | -nodes -| Crypto.go:36:21:36:28 | password | semmle.label | password | -| Crypto.go:41:22:41:29 | password | semmle.label | password | -| Crypto.go:46:22:46:29 | password | semmle.label | password | -| Crypto.go:51:22:51:29 | password | semmle.label | password | -| Crypto.go:56:22:56:29 | password | semmle.label | password | -| Crypto.go:61:32:61:39 | password | semmle.label | password | -| Crypto.go:66:30:66:37 | password | semmle.label | password | -| Crypto.go:68:59:68:83 | call to NewReader | semmle.label | call to NewReader | -| Crypto.go:68:75:68:82 | password | semmle.label | password | -| Crypto.go:72:10:72:24 | ctrStreamWriter [postupdate] | semmle.label | ctrStreamWriter [postupdate] | -| Crypto.go:72:27:72:51 | call to NewReader | semmle.label | call to NewReader | -| Crypto.go:72:43:72:50 | password | semmle.label | password | -| Crypto.go:78:30:78:37 | password | semmle.label | password | -| Crypto.go:83:30:83:37 | password | semmle.label | password | -| Crypto.go:91:21:91:33 | call to getPassword | semmle.label | call to getPassword | -| Crypto.go:96:22:96:34 | call to getPassword | semmle.label | call to getPassword | -| Crypto.go:101:22:101:34 | call to getPassword | semmle.label | call to getPassword | -| Crypto.go:106:22:106:29 | password | semmle.label | password | -| Crypto.go:111:22:111:29 | password | semmle.label | password | -| Crypto.go:116:32:116:44 | call to getPassword | semmle.label | call to getPassword | -| Crypto.go:121:30:121:42 | call to getPassword | semmle.label | call to getPassword | -| Crypto.go:123:59:123:88 | call to NewReader | semmle.label | call to NewReader | -| Crypto.go:123:75:123:87 | call to getPassword | semmle.label | call to getPassword | -| Crypto.go:127:10:127:24 | ctrStreamWriter [postupdate] | semmle.label | ctrStreamWriter [postupdate] | -| Crypto.go:127:27:127:56 | call to NewReader | semmle.label | call to NewReader | -| Crypto.go:127:43:127:55 | call to getPassword | semmle.label | call to getPassword | -| Crypto.go:133:30:133:37 | password | semmle.label | password | -| Crypto.go:138:30:138:37 | password | semmle.label | password | -| Crypto.go:198:22:198:34 | call to getPassword | semmle.label | call to getPassword | -| Crypto.go:202:9:202:16 | password | semmle.label | password | -| Crypto.go:205:8:205:10 | buf | semmle.label | buf | -| Crypto.go:206:10:206:12 | buf | semmle.label | buf | -| Crypto.go:207:20:207:33 | passwordString | semmle.label | passwordString | -| Crypto.go:208:10:208:12 | buf | semmle.label | buf | -| Crypto.go:210:17:210:19 | buf | semmle.label | buf | -| Crypto.go:211:11:211:13 | buf | semmle.label | buf | -subpaths +| encryption.go:30:2:30:36 | call to Encrypt | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | ... := ...[0] | The cryptographic algorithm DES | +| encryption.go:34:2:34:42 | call to Seal | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | ... := ...[0] | The cryptographic algorithm DES | +| encryption.go:38:2:38:42 | call to Seal | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | ... := ...[0] | The cryptographic algorithm DES | +| encryption.go:42:2:42:42 | call to Seal | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | ... := ...[0] | The cryptographic algorithm DES | +| encryption.go:46:2:46:42 | call to Seal | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | ... := ...[0] | The cryptographic algorithm DES | +| encryption.go:50:2:50:47 | call to CryptBlocks | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | ... := ...[0] | The cryptographic algorithm DES | +| encryption.go:54:2:54:45 | call to XORKeyStream | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | ... := ...[0] | The cryptographic algorithm DES | +| encryption.go:56:22:56:91 | struct literal | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | ... := ...[0] | The cryptographic algorithm DES | +| encryption.go:59:21:59:68 | &... [postupdate] | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | ... := ...[0] | The cryptographic algorithm DES | +| encryption.go:59:22:59:68 | struct literal | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | ... := ...[0] | The cryptographic algorithm DES | +| encryption.go:59:22:59:68 | struct literal [postupdate] | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | ... := ...[0] | The cryptographic algorithm DES | +| encryption.go:60:10:60:24 | ctrStreamWriter [postupdate] | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | ... := ...[0] | The cryptographic algorithm DES | +| encryption.go:65:2:65:45 | call to XORKeyStream | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | ... := ...[0] | The cryptographic algorithm DES | +| encryption.go:69:2:69:45 | call to XORKeyStream | $@ is broken or weak, and should not be used. | encryption.go:28:2:28:31 | ... := ...[0] | The cryptographic algorithm DES | +| encryption.go:76:2:76:32 | call to Encrypt | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | ... := ...[0] | The cryptographic algorithm TRIPLEDES | +| encryption.go:80:2:80:38 | call to Seal | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | ... := ...[0] | The cryptographic algorithm TRIPLEDES | +| encryption.go:84:2:84:38 | call to Seal | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | ... := ...[0] | The cryptographic algorithm TRIPLEDES | +| encryption.go:88:2:88:42 | call to Seal | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | ... := ...[0] | The cryptographic algorithm TRIPLEDES | +| encryption.go:92:2:92:42 | call to Seal | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | ... := ...[0] | The cryptographic algorithm TRIPLEDES | +| encryption.go:96:2:96:43 | call to CryptBlocks | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | ... := ...[0] | The cryptographic algorithm TRIPLEDES | +| encryption.go:100:2:100:41 | call to XORKeyStream | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | ... := ...[0] | The cryptographic algorithm TRIPLEDES | +| encryption.go:102:22:102:87 | struct literal | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | ... := ...[0] | The cryptographic algorithm TRIPLEDES | +| encryption.go:105:21:105:68 | &... [postupdate] | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | ... := ...[0] | The cryptographic algorithm TRIPLEDES | +| encryption.go:105:22:105:68 | struct literal | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | ... := ...[0] | The cryptographic algorithm TRIPLEDES | +| encryption.go:105:22:105:68 | struct literal [postupdate] | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | ... := ...[0] | The cryptographic algorithm TRIPLEDES | +| encryption.go:106:10:106:24 | ctrStreamWriter [postupdate] | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | ... := ...[0] | The cryptographic algorithm TRIPLEDES | +| encryption.go:111:2:111:45 | call to XORKeyStream | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | ... := ...[0] | The cryptographic algorithm TRIPLEDES | +| encryption.go:115:2:115:45 | call to XORKeyStream | $@ is broken or weak, and should not be used. | encryption.go:74:2:74:40 | ... := ...[0] | The cryptographic algorithm TRIPLEDES | +| encryption.go:166:2:166:33 | call to XORKeyStream | $@ is broken or weak, and should not be used. | encryption.go:166:2:166:33 | call to XORKeyStream | The cryptographic algorithm RC4 | diff --git a/go/ql/test/query-tests/Security/CWE-327/Crypto.go b/go/ql/test/query-tests/Security/CWE-327/Crypto.go deleted file mode 100644 index 1a7afc35cb9..00000000000 --- a/go/ql/test/query-tests/Security/CWE-327/Crypto.go +++ /dev/null @@ -1,254 +0,0 @@ -package main - -import ( - "bytes" - "crypto/aes" - "crypto/cipher" - "crypto/des" - "crypto/md5" - "crypto/rc4" - "crypto/sha1" - "crypto/sha256" - "crypto/sha3" - "crypto/sha512" - "io" - "os" -) - -var dst []byte = make([]byte, 16) -var password []byte = []byte("123456") - -const passwordString string = "correct horse battery staple" - -var public []byte = []byte("hello") - -func getPassword() []byte { - return []byte("123456") -} - -// Note that we do not alert on decryption as we may need to decrypt legacy formats - -func BlockCipherDes() { - // BAD, des is a weak crypto algorithm - block, _ := des.NewCipher(nil) - - block.Encrypt(dst, public) // $ CryptographicOperation="DES. init from line 33." - block.Encrypt(dst, password) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="DES. init from line 33." - block.Decrypt(dst, password) - - gcm1, _ := cipher.NewGCM(block) - gcm1.Seal(nil, nil, public, nil) // $ CryptographicOperation="DES. init from line 33." - gcm1.Seal(nil, nil, password, nil) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="DES. init from line 33." - gcm1.Open(nil, nil, password, nil) - - gcm2, _ := cipher.NewGCMWithNonceSize(block, 12) - gcm2.Seal(nil, nil, public, nil) // $ CryptographicOperation="DES. init from line 33." - gcm2.Seal(nil, nil, password, nil) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="DES. init from line 33." - gcm2.Open(nil, nil, password, nil) - - gcm3, _ := cipher.NewGCMWithRandomNonce(block) - gcm3.Seal(nil, nil, public, nil) // $ CryptographicOperation="DES. init from line 33." - gcm3.Seal(nil, nil, password, nil) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="DES. init from line 33." - gcm3.Open(nil, nil, password, nil) - - gcm4, _ := cipher.NewGCMWithTagSize(block, 12) - gcm4.Seal(nil, nil, public, nil) // $ CryptographicOperation="DES. init from line 33." - gcm4.Seal(nil, nil, password, nil) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="DES. init from line 33." - gcm4.Open(nil, nil, password, nil) - - cbcEncrypter := cipher.NewCBCEncrypter(block, nil) - cbcEncrypter.CryptBlocks(dst, public) // $ CryptographicOperation="DES. blockMode: CBC. init from lines 33,59." - cbcEncrypter.CryptBlocks(dst, password) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="DES. blockMode: CBC. init from lines 33,59." - cipher.NewCBCDecrypter(block, nil).CryptBlocks(dst, password) - - ctrStream := cipher.NewCTR(block, nil) - ctrStream.XORKeyStream(dst, public) // $ CryptographicOperation="DES. blockMode: CTR. init from lines 33,64." - ctrStream.XORKeyStream(dst, password) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="DES. blockMode: CTR. init from lines 33,64." - - ctrStreamReader := &cipher.StreamReader{S: ctrStream, R: bytes.NewReader(password)} // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="DES. blockMode: CTR. init from lines 33,64." - io.Copy(os.Stdout, ctrStreamReader) - - ctrStreamWriter := &cipher.StreamWriter{S: ctrStream, W: os.Stdout} // $ CryptographicOperation="DES. blockMode: CTR. init from lines 33,64." - io.Copy(ctrStreamWriter, bytes.NewReader(password)) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="DES. blockMode: CTR. init from lines 33,64." - - // deprecated - - cfbStream := cipher.NewCFBEncrypter(block, nil) - cfbStream.XORKeyStream(dst, public) // $ CryptographicOperation="DES. blockMode: CFB. init from lines 33,76." - cfbStream.XORKeyStream(dst, password) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="DES. blockMode: CFB. init from lines 33,76." - cipher.NewCFBDecrypter(block, nil).XORKeyStream(dst, password) - - ofbStream := cipher.NewOFB(block, nil) - ofbStream.XORKeyStream(dst, public) // $ CryptographicOperation="DES. blockMode: OFB. init from lines 33,81." - ofbStream.XORKeyStream(dst, password) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="DES. blockMode: OFB. init from lines 33,81." -} - -func BlockCipherTripleDes() { - // BAD, triple des is a weak crypto algorithm and password is sensitive data - block, _ := des.NewTripleDESCipher(nil) - - block.Encrypt(dst, public) // $ CryptographicOperation="TRIPLEDES. init from line 88." - block.Encrypt(dst, getPassword()) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="TRIPLEDES. init from line 88." - block.Decrypt(dst, getPassword()) - - gcm1, _ := cipher.NewGCM(block) - gcm1.Seal(nil, nil, public, nil) // $ CryptographicOperation="TRIPLEDES. init from line 88." - gcm1.Seal(nil, nil, getPassword(), nil) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="TRIPLEDES. init from line 88." - gcm1.Open(nil, nil, getPassword(), nil) - - gcm2, _ := cipher.NewGCMWithNonceSize(block, 12) - gcm2.Seal(nil, nil, public, nil) // $ CryptographicOperation="TRIPLEDES. init from line 88." - gcm2.Seal(nil, nil, getPassword(), nil) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="TRIPLEDES. init from line 88." - gcm2.Open(nil, nil, getPassword(), nil) - - gcm3, _ := cipher.NewGCMWithRandomNonce(block) - gcm3.Seal(nil, nil, public, nil) // $ CryptographicOperation="TRIPLEDES. init from line 88." - gcm3.Seal(nil, nil, password, nil) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="TRIPLEDES. init from line 88." - gcm3.Open(nil, nil, password, nil) - - gcm4, _ := cipher.NewGCMWithTagSize(block, 12) - gcm4.Seal(nil, nil, public, nil) // $ CryptographicOperation="TRIPLEDES. init from line 88." - gcm4.Seal(nil, nil, password, nil) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="TRIPLEDES. init from line 88." - gcm4.Open(nil, nil, password, nil) - - cbcEncrypter := cipher.NewCBCEncrypter(block, nil) - cbcEncrypter.CryptBlocks(dst, public) // $ CryptographicOperation="TRIPLEDES. blockMode: CBC. init from lines 114,88." - cbcEncrypter.CryptBlocks(dst, getPassword()) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="TRIPLEDES. blockMode: CBC. init from lines 114,88." - cipher.NewCBCDecrypter(block, nil).CryptBlocks(dst, getPassword()) - - ctrStream := cipher.NewCTR(block, nil) - ctrStream.XORKeyStream(dst, public) // $ CryptographicOperation="TRIPLEDES. blockMode: CTR. init from lines 119,88." - ctrStream.XORKeyStream(dst, getPassword()) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="TRIPLEDES. blockMode: CTR. init from lines 119,88." - - ctrStreamReader := &cipher.StreamReader{S: ctrStream, R: bytes.NewReader(getPassword())} // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="TRIPLEDES. blockMode: CTR. init from lines 119,88." - io.Copy(os.Stdout, ctrStreamReader) - - ctrStreamWriter := &cipher.StreamWriter{S: ctrStream, W: os.Stdout} // $ CryptographicOperation="TRIPLEDES. blockMode: CTR. init from lines 119,88." - io.Copy(ctrStreamWriter, bytes.NewReader(getPassword())) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="TRIPLEDES. blockMode: CTR. init from lines 119,88." - - // deprecated - - cfbStream := cipher.NewCFBEncrypter(block, nil) - cfbStream.XORKeyStream(dst, public) // $ CryptographicOperation="TRIPLEDES. blockMode: CFB. init from lines 131,88." - cfbStream.XORKeyStream(dst, password) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="TRIPLEDES. blockMode: CFB. init from lines 131,88." - cipher.NewCFBDecrypter(block, nil).XORKeyStream(dst, password) - - ofbStream := cipher.NewOFB(block, nil) - ofbStream.XORKeyStream(dst, public) // $ CryptographicOperation="TRIPLEDES. blockMode: OFB. init from lines 136,88." - ofbStream.XORKeyStream(dst, password) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="TRIPLEDES. blockMode: OFB. init from lines 136,88." -} - -func BlockCipherAes() { - // GOOD, aes is a strong crypto algorithm - block, _ := aes.NewCipher(nil) - - block.Encrypt(dst, public) // $ CryptographicOperation="AES. init from line 143." - block.Encrypt(dst, password) // $ CryptographicOperation="AES. init from line 143." - block.Decrypt(dst, password) - - gcm1, _ := cipher.NewGCM(block) - gcm1.Seal(nil, nil, public, nil) // $ CryptographicOperation="AES. init from line 143." - gcm1.Seal(nil, nil, password, nil) // $ CryptographicOperation="AES. init from line 143." - gcm1.Open(nil, nil, password, nil) - - gcm2, _ := cipher.NewGCMWithNonceSize(block, 12) - gcm2.Seal(nil, nil, public, nil) // $ CryptographicOperation="AES. init from line 143." - gcm2.Seal(nil, nil, password, nil) // $ CryptographicOperation="AES. init from line 143." - gcm2.Open(nil, nil, password, nil) - - gcm3, _ := cipher.NewGCMWithRandomNonce(block) - gcm3.Seal(nil, nil, public, nil) // $ CryptographicOperation="AES. init from line 143." - gcm3.Seal(nil, nil, password, nil) // $ CryptographicOperation="AES. init from line 143." - gcm3.Open(nil, nil, password, nil) - - gcm4, _ := cipher.NewGCMWithTagSize(block, 12) - gcm4.Seal(nil, nil, public, nil) // $ CryptographicOperation="AES. init from line 143." - gcm4.Seal(nil, nil, password, nil) // $ CryptographicOperation="AES. init from line 143." - gcm4.Open(nil, nil, password, nil) - - cbcEncrypter := cipher.NewCBCEncrypter(block, nil) - cbcEncrypter.CryptBlocks(dst, public) // $ CryptographicOperation="AES. blockMode: CBC. init from lines 143,169." - cbcEncrypter.CryptBlocks(dst, password) // $ CryptographicOperation="AES. blockMode: CBC. init from lines 143,169." - cipher.NewCBCDecrypter(block, nil).CryptBlocks(dst, password) - - ctrStream := cipher.NewCTR(block, nil) - ctrStream.XORKeyStream(dst, public) // $ CryptographicOperation="AES. blockMode: CTR. init from lines 143,174." - ctrStream.XORKeyStream(dst, password) // $ CryptographicOperation="AES. blockMode: CTR. init from lines 143,174." - - ctrStreamReader := &cipher.StreamReader{S: ctrStream, R: bytes.NewReader(password)} // $ CryptographicOperation="AES. blockMode: CTR. init from lines 143,174." - io.Copy(os.Stdout, ctrStreamReader) - - ctrStreamWriter := &cipher.StreamWriter{S: ctrStream, W: os.Stdout} // $ CryptographicOperation="AES. blockMode: CTR. init from lines 143,174." - io.Copy(ctrStreamWriter, bytes.NewReader(password)) // $ CryptographicOperation="AES. blockMode: CTR. init from lines 143,174." - - // deprecated - - cfbStream := cipher.NewCFBEncrypter(block, nil) - cfbStream.XORKeyStream(dst, public) // $ CryptographicOperation="AES. blockMode: CFB. init from lines 143,186." - cfbStream.XORKeyStream(dst, password) // $ CryptographicOperation="AES. blockMode: CFB. init from lines 143,186." - cipher.NewCFBDecrypter(block, nil).XORKeyStream(dst, password) - - ofbStream := cipher.NewOFB(block, nil) - ofbStream.XORKeyStream(dst, public) // $ CryptographicOperation="AES. blockMode: OFB. init from lines 143,191." - ofbStream.XORKeyStream(dst, password) // $ CryptographicOperation="AES. blockMode: OFB. init from lines 143,191." -} - -func CipherRc4() { - c, _ := rc4.NewCipher(nil) - c.XORKeyStream(dst, getPassword()) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="RC4. init from line 198." -} - -func WeakHashes() { - buf := password // $ Source - - h := md5.New() - h.Sum(buf) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="MD5. init from line 204." - h.Write(buf) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="MD5. init from line 204." - io.WriteString(h, passwordString) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="MD5. init from line 204." - md5.Sum(buf) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="MD5. init from line 208." - - sha1.New().Sum(buf) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="SHA1. init from line 210." - sha1.Sum(buf) // $ Alert[go/weak-crypto-algorithm] CryptographicOperation="SHA1. init from line 211." -} - -func StrongHashes() { - buf := password - - sha256.New224().Sum(buf) // $ CryptographicOperation="SHA224. init from line 217." - sha256.Sum224(buf) // $ CryptographicOperation="SHA224. init from line 218." - - sha256.New().Sum(buf) // $ CryptographicOperation="SHA256. init from line 220." - sha256.Sum256(buf) // $ CryptographicOperation="SHA256. init from line 221." - - sha512.New().Sum(buf) // $ CryptographicOperation="SHA512. init from line 223." - sha512.Sum512(buf) // $ CryptographicOperation="SHA512. init from line 224." - - sha512.New384().Sum(buf) // $ CryptographicOperation="SHA384. init from line 226." - sha512.Sum384(buf) // $ CryptographicOperation="SHA384. init from line 227." - - sha512.New512_224().Sum(buf) // $ CryptographicOperation="SHA512224. init from line 229." - sha512.Sum512_224(buf) // $ CryptographicOperation="SHA512224. init from line 230." - - sha512.New512_256().Sum(buf) // $ CryptographicOperation="SHA512256. init from line 232." - sha512.Sum512_256(buf) // $ CryptographicOperation="SHA512256. init from line 233." - - sha3.New224().Sum(buf) // $ CryptographicOperation="SHA3224. init from line 235." - sha3.Sum224(buf) // $ CryptographicOperation="SHA3224. init from line 236." - - sha3.New256().Sum(buf) // $ CryptographicOperation="SHA3256. init from line 238." - sha3.Sum256(buf) // $ CryptographicOperation="SHA3256. init from line 239." - - sha3.New384().Sum(buf) // $ CryptographicOperation="SHA3384. init from line 241." - sha3.Sum384(buf) // $ CryptographicOperation="SHA3384. init from line 242." - - sha3.New512().Sum(buf) // $ CryptographicOperation="SHA3512. init from line 244." - sha3.Sum512(buf) // $ CryptographicOperation="SHA3512. init from line 245." - - sha3.NewSHAKE128().Write(buf) // $ CryptographicOperation="SHAKE128. init from line 247." - sha3.NewCSHAKE128(nil, nil).Write(buf) // $ CryptographicOperation="SHAKE128. init from line 248." - sha3.SumSHAKE128(buf, 100) // $ CryptographicOperation="SHAKE128. init from line 249." - - sha3.NewSHAKE256().Write(buf) // $ CryptographicOperation="SHAKE256. init from line 251." - sha3.NewCSHAKE256(nil, nil).Write(buf) // $ CryptographicOperation="SHAKE256. init from line 252." - sha3.SumSHAKE256(buf, 100) // $ CryptographicOperation="SHAKE256. init from line 253." -} diff --git a/go/ql/test/query-tests/Security/CWE-327/encryption.go b/go/ql/test/query-tests/Security/CWE-327/encryption.go new file mode 100644 index 00000000000..2a1bd53440b --- /dev/null +++ b/go/ql/test/query-tests/Security/CWE-327/encryption.go @@ -0,0 +1,167 @@ +package main + +import ( + "bytes" + "crypto/aes" + "crypto/cipher" + "crypto/des" + "crypto/rc4" + "io" + "os" +) + +var dst []byte = make([]byte, 16) +var secretByteSlice []byte = []byte("") + +const secretString string = "" + +var public []byte = []byte("") + +func getUserID() []byte { + return []byte("") +} + +// Note that we do not alert on decryption as we may need to decrypt legacy formats + +func BlockCipherDes() { + // BAD, des is a weak crypto algorithm + block, _ := des.NewCipher(nil) + + block.Encrypt(dst, secretByteSlice) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. init from line 28." + block.Decrypt(dst, secretByteSlice) + + gcm1, _ := cipher.NewGCM(block) + gcm1.Seal(nil, nil, secretByteSlice, nil) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. init from line 28." + gcm1.Open(nil, nil, secretByteSlice, nil) + + gcm2, _ := cipher.NewGCMWithNonceSize(block, 12) + gcm2.Seal(nil, nil, secretByteSlice, nil) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. init from line 28." + gcm2.Open(nil, nil, secretByteSlice, nil) + + gcm3, _ := cipher.NewGCMWithRandomNonce(block) + gcm3.Seal(nil, nil, secretByteSlice, nil) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. init from line 28." + gcm3.Open(nil, nil, secretByteSlice, nil) + + gcm4, _ := cipher.NewGCMWithTagSize(block, 12) + gcm4.Seal(nil, nil, secretByteSlice, nil) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. init from line 28." + gcm4.Open(nil, nil, secretByteSlice, nil) + + cbcEncrypter := cipher.NewCBCEncrypter(block, nil) + cbcEncrypter.CryptBlocks(dst, secretByteSlice) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. blockMode: CBC. init from lines 28,49." + cipher.NewCBCDecrypter(block, nil).CryptBlocks(dst, secretByteSlice) + + ctrStream := cipher.NewCTR(block, nil) + ctrStream.XORKeyStream(dst, secretByteSlice) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. blockMode: CTR. init from lines 28,53." + + ctrStreamReader := &cipher.StreamReader{S: ctrStream, R: bytes.NewReader(secretByteSlice)} // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. blockMode: CTR. init from lines 28,53." + io.Copy(os.Stdout, ctrStreamReader) + + ctrStreamWriter := &cipher.StreamWriter{S: ctrStream, W: os.Stdout} // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. blockMode: CTR. init from lines 28,53." + io.Copy(ctrStreamWriter, bytes.NewReader(secretByteSlice)) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. blockMode: CTR. init from lines 28,53." + + // deprecated + + cfbStream := cipher.NewCFBEncrypter(block, nil) + cfbStream.XORKeyStream(dst, secretByteSlice) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. blockMode: CFB. init from lines 28,64." + cipher.NewCFBDecrypter(block, nil).XORKeyStream(dst, secretByteSlice) + + ofbStream := cipher.NewOFB(block, nil) + ofbStream.XORKeyStream(dst, secretByteSlice) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. blockMode: OFB. init from lines 28,68." +} + +func BlockCipherTripleDes() { + // BAD, triple des is a weak crypto algorithm and secretByteSlice is sensitive data + block, _ := des.NewTripleDESCipher(nil) + + block.Encrypt(dst, getUserID()) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. init from line 74." + block.Decrypt(dst, getUserID()) + + gcm1, _ := cipher.NewGCM(block) + gcm1.Seal(nil, nil, getUserID(), nil) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. init from line 74." + gcm1.Open(nil, nil, getUserID(), nil) + + gcm2, _ := cipher.NewGCMWithNonceSize(block, 12) + gcm2.Seal(nil, nil, getUserID(), nil) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. init from line 74." + gcm2.Open(nil, nil, getUserID(), nil) + + gcm3, _ := cipher.NewGCMWithRandomNonce(block) + gcm3.Seal(nil, nil, secretByteSlice, nil) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. init from line 74." + gcm3.Open(nil, nil, secretByteSlice, nil) + + gcm4, _ := cipher.NewGCMWithTagSize(block, 12) + gcm4.Seal(nil, nil, secretByteSlice, nil) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. init from line 74." + gcm4.Open(nil, nil, secretByteSlice, nil) + + cbcEncrypter := cipher.NewCBCEncrypter(block, nil) + cbcEncrypter.CryptBlocks(dst, getUserID()) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. blockMode: CBC. init from lines 74,95." + cipher.NewCBCDecrypter(block, nil).CryptBlocks(dst, getUserID()) + + ctrStream := cipher.NewCTR(block, nil) + ctrStream.XORKeyStream(dst, getUserID()) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. blockMode: CTR. init from lines 74,99." + + ctrStreamReader := &cipher.StreamReader{S: ctrStream, R: bytes.NewReader(getUserID())} // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. blockMode: CTR. init from lines 74,99." + io.Copy(os.Stdout, ctrStreamReader) + + ctrStreamWriter := &cipher.StreamWriter{S: ctrStream, W: os.Stdout} // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. blockMode: CTR. init from lines 74,99." + io.Copy(ctrStreamWriter, bytes.NewReader(getUserID())) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. blockMode: CTR. init from lines 74,99." + + // deprecated + + cfbStream := cipher.NewCFBEncrypter(block, nil) + cfbStream.XORKeyStream(dst, secretByteSlice) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. blockMode: CFB. init from lines 110,74." + cipher.NewCFBDecrypter(block, nil).XORKeyStream(dst, secretByteSlice) + + ofbStream := cipher.NewOFB(block, nil) + ofbStream.XORKeyStream(dst, secretByteSlice) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. blockMode: OFB. init from lines 114,74." +} + +func BlockCipherAes() { + // GOOD, aes is a strong crypto algorithm + block, _ := aes.NewCipher(nil) + + block.Encrypt(dst, secretByteSlice) // $ CryptographicOperation="AES. init from line 120." + block.Decrypt(dst, secretByteSlice) + + gcm1, _ := cipher.NewGCM(block) + gcm1.Seal(nil, nil, secretByteSlice, nil) // $ CryptographicOperation="AES. init from line 120." + gcm1.Open(nil, nil, secretByteSlice, nil) + + gcm2, _ := cipher.NewGCMWithNonceSize(block, 12) + gcm2.Seal(nil, nil, secretByteSlice, nil) // $ CryptographicOperation="AES. init from line 120." + gcm2.Open(nil, nil, secretByteSlice, nil) + + gcm3, _ := cipher.NewGCMWithRandomNonce(block) + gcm3.Seal(nil, nil, secretByteSlice, nil) // $ CryptographicOperation="AES. init from line 120." + gcm3.Open(nil, nil, secretByteSlice, nil) + + gcm4, _ := cipher.NewGCMWithTagSize(block, 12) + gcm4.Seal(nil, nil, secretByteSlice, nil) // $ CryptographicOperation="AES. init from line 120." + gcm4.Open(nil, nil, secretByteSlice, nil) + + cbcEncrypter := cipher.NewCBCEncrypter(block, nil) + cbcEncrypter.CryptBlocks(dst, secretByteSlice) // $ CryptographicOperation="AES. blockMode: CBC. init from lines 120,141." + cipher.NewCBCDecrypter(block, nil).CryptBlocks(dst, secretByteSlice) + + ctrStream := cipher.NewCTR(block, nil) + ctrStream.XORKeyStream(dst, secretByteSlice) // $ CryptographicOperation="AES. blockMode: CTR. init from lines 120,145." + + ctrStreamReader := &cipher.StreamReader{S: ctrStream, R: bytes.NewReader(secretByteSlice)} // $ CryptographicOperation="AES. blockMode: CTR. init from lines 120,145." + io.Copy(os.Stdout, ctrStreamReader) + + ctrStreamWriter := &cipher.StreamWriter{S: ctrStream, W: os.Stdout} // $ CryptographicOperation="AES. blockMode: CTR. init from lines 120,145." + io.Copy(ctrStreamWriter, bytes.NewReader(secretByteSlice)) // $ CryptographicOperation="AES. blockMode: CTR. init from lines 120,145." + + // deprecated + + cfbStream := cipher.NewCFBEncrypter(block, nil) + cfbStream.XORKeyStream(dst, secretByteSlice) // $ CryptographicOperation="AES. blockMode: CFB. init from lines 120,156." + cipher.NewCFBDecrypter(block, nil).XORKeyStream(dst, secretByteSlice) + + ofbStream := cipher.NewOFB(block, nil) + ofbStream.XORKeyStream(dst, secretByteSlice) // $ CryptographicOperation="AES. blockMode: OFB. init from lines 120,160." +} + +func CipherRc4() { + c, _ := rc4.NewCipher(nil) + c.XORKeyStream(dst, getUserID()) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="RC4. init from line 166." +} From 52d7e2dd18c8035e9bea279d961d5279c8212b92 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 31 Oct 2025 15:56:18 +0000 Subject: [PATCH 113/127] Add query for hashing sensitive data with weak hashing algorithm --- ...WeakSensitiveDataHashingCustomizations.qll | 172 ++++++++++++++++++ .../CWE-327/WeakSensitiveDataHashing.qhelp | 104 +++++++++++ .../CWE-327/WeakSensitiveDataHashing.ql | 114 ++++++++++++ .../CWE-327/WeakSensitiveDataHashing.expected | 22 +++ .../CWE-327/WeakSensitiveDataHashing.qlref | 4 + .../test/query-tests/Security/CWE-327/go.mod | 4 +- .../query-tests/Security/CWE-327/hashing.go | 81 +++++++++ .../vendor/golang.org/x/crypto/md4/stub.go | 16 ++ .../golang.org/x/crypto/ripemd160/stub.go | 16 ++ .../Security/CWE-327/vendor/modules.txt | 4 + 10 files changed, 536 insertions(+), 1 deletion(-) create mode 100644 go/ql/lib/semmle/go/security/WeakSensitiveDataHashingCustomizations.qll create mode 100644 go/ql/src/Security/CWE-327/WeakSensitiveDataHashing.qhelp create mode 100644 go/ql/src/Security/CWE-327/WeakSensitiveDataHashing.ql create mode 100644 go/ql/test/query-tests/Security/CWE-327/WeakSensitiveDataHashing.expected create mode 100644 go/ql/test/query-tests/Security/CWE-327/WeakSensitiveDataHashing.qlref create mode 100644 go/ql/test/query-tests/Security/CWE-327/hashing.go create mode 100644 go/ql/test/query-tests/Security/CWE-327/vendor/golang.org/x/crypto/md4/stub.go create mode 100644 go/ql/test/query-tests/Security/CWE-327/vendor/golang.org/x/crypto/ripemd160/stub.go create mode 100644 go/ql/test/query-tests/Security/CWE-327/vendor/modules.txt diff --git a/go/ql/lib/semmle/go/security/WeakSensitiveDataHashingCustomizations.qll b/go/ql/lib/semmle/go/security/WeakSensitiveDataHashingCustomizations.qll new file mode 100644 index 00000000000..f03b93eb7c2 --- /dev/null +++ b/go/ql/lib/semmle/go/security/WeakSensitiveDataHashingCustomizations.qll @@ -0,0 +1,172 @@ +/** + * Provides default sources, sinks and sanitizers for detecting "use of a + * broken or weak cryptographic hashing algorithm on sensitive data" + * vulnerabilities, as well as extension points for adding your own. This is + * divided into two general cases: + * - hashing sensitive data + * - hashing passwords (which requires the hashing algorithm to be + * sufficiently computationally expensive in addition to other requirements) + */ + +import go +import semmle.go.dataflow.internal.DataFlowPrivate +private import semmle.go.security.SensitiveActions + +/** + * Provides default sources, sinks and sanitizers for detecting "use of a broken or weak + * cryptographic hashing algorithm on sensitive data" vulnerabilities on sensitive data that does + * NOT require computationally expensive hashing, as well as extension points for adding your own. + * + * Also see the `ComputationallyExpensiveHashFunction` module. + */ +module NormalHashFunction { + /** + * A data flow source for "use of a broken or weak cryptographic hashing algorithm on sensitive + * data" vulnerabilities that does not require computationally expensive hashing. That is, a + * piece of sensitive data that is not a password. + */ + abstract class Source extends DataFlow::Node { + Source() { not this instanceof ComputationallyExpensiveHashFunction::Source } + + /** + * Gets the classification of the sensitive data. + */ + abstract string getClassification(); + } + + /** + * A data flow sink for "use of a broken or weak cryptographic hashing algorithm on sensitive + * data" vulnerabilities that applies to data that does not require computationally expensive + * hashing. That is, a broken or weak hashing algorithm. + */ + abstract class Sink extends DataFlow::Node { + /** + * Gets the name of the weak hashing algorithm. + */ + abstract string getAlgorithmName(); + } + + /** + * A barrier for "use of a broken or weak cryptographic hashing algorithm on sensitive data" + * vulnerabilities that applies to data that does not require computationally expensive hashing. + */ + abstract class Barrier extends DataFlow::Node { } + + /** + * A flow source modeled by the `SensitiveData` library. + */ + class SensitiveDataAsSource extends Source { + SensitiveExpr::Classification classification; + + SensitiveDataAsSource() { + classification = this.asExpr().(SensitiveExpr).getClassification() and + not classification = SensitiveExpr::password() and // (covered in ComputationallyExpensiveHashFunction) + not classification = SensitiveExpr::id() // (not accurate enough) + } + + override SensitiveExpr::Classification getClassification() { result = classification } + } + + /** + * A flow sink modeled by the `Cryptography` module. + */ + class WeakHashingOperationInputAsSink extends Sink { + Cryptography::HashingAlgorithm algorithm; + + WeakHashingOperationInputAsSink() { + exists(Cryptography::CryptographicOperation operation | + algorithm.isWeak() and + algorithm = operation.getAlgorithm() and + this = operation.getAnInput() + ) + } + + override string getAlgorithmName() { result = algorithm.getName() } + } +} + +/** + * Provides default sources, sinks and sanitizers for detecting "use of a broken or weak + * cryptographic hashing algorithm on sensitive data" vulnerabilities on sensitive data that DOES + * require computationally expensive hashing, as well as extension points for adding your own. + * + * Also see the `NormalHashFunction` module. + */ +module ComputationallyExpensiveHashFunction { + /** + * A data flow source for "use of a broken or weak cryptographic hashing algorithm on sensitive + * data" vulnerabilities that does require computationally expensive hashing. That is, a + * password. + */ + abstract class Source extends DataFlow::Node { + /** + * Gets the classification of the sensitive data. + */ + abstract string getClassification(); + } + + /** + * A data flow sink for "use of a broken or weak cryptographic hashing algorithm on sensitive + * data" vulnerabilities that applies to data that does require computationally expensive + * hashing. That is, a broken or weak hashing algorithm or one that is not computationally + * expensive enough for password hashing. + */ + abstract class Sink extends DataFlow::Node { + /** + * Gets the name of the weak hashing algorithm. + */ + abstract string getAlgorithmName(); + + /** + * Holds if this sink is for a computationally expensive hash function (meaning that hash + * function is just weak in some other regard. + */ + abstract predicate isComputationallyExpensive(); + } + + /** + * A barrier for "use of a broken or weak cryptographic hashing algorithm on sensitive data" + * vulnerabilities that applies to data that does require computationally expensive hashing. + */ + abstract class Barrier extends DataFlow::Node { } + + /** + * A flow source modeled by the `SensitiveData` library. + */ + class PasswordAsSource extends Source { + SensitiveExpr::Classification classification; + + PasswordAsSource() { + classification = this.asExpr().(SensitiveExpr).getClassification() and + classification = SensitiveExpr::password() + } + + override SensitiveExpr::Classification getClassification() { result = classification } + } + + /** + * A flow sink modeled by the `Cryptography` module. + */ + class WeakPasswordHashingOperationInputSink extends Sink { + Cryptography::CryptographicAlgorithm algorithm; + + WeakPasswordHashingOperationInputSink() { + exists(Cryptography::CryptographicOperation operation | + ( + algorithm instanceof Cryptography::PasswordHashingAlgorithm and + algorithm.isWeak() + or + algorithm instanceof Cryptography::HashingAlgorithm // Note that HashingAlgorithm and PasswordHashingAlgorithm are disjoint + ) and + algorithm = operation.getAlgorithm() and + this = operation.getAnInput() + ) + } + + override string getAlgorithmName() { result = algorithm.getName() } + + override predicate isComputationallyExpensive() { + algorithm instanceof Cryptography::PasswordHashingAlgorithm + } + } +} diff --git a/go/ql/src/Security/CWE-327/WeakSensitiveDataHashing.qhelp b/go/ql/src/Security/CWE-327/WeakSensitiveDataHashing.qhelp new file mode 100644 index 00000000000..422cbb83514 --- /dev/null +++ b/go/ql/src/Security/CWE-327/WeakSensitiveDataHashing.qhelp @@ -0,0 +1,104 @@ + + + +

+ Using a broken or weak cryptographic hash function can leave data + vulnerable, and should not be used in security related code. +

+ +

+ A strong cryptographic hash function should be resistant to: +

+
    +
  • + pre-image attacks: if you know a hash value h(x), + you should not be able to easily find the input x. +
  • +
  • + collision attacks: if you know a hash value h(x), + you should not be able to easily find a different input y + with the same hash value h(x) = h(y). +
  • +
+

+ In cases with a limited input space, such as for passwords, the hash + function also needs to be computationally expensive to be resistant to + brute-force attacks. Passwords should also have an unique salt applied + before hashing, but that is not considered by this query. +

+ +

+ As an example, both MD5 and SHA-1 are known to be vulnerable to collision attacks. +

+ +

+ Since it's OK to use a weak cryptographic hash function in a non-security + context, this query only alerts when these are used to hash sensitive + data (such as passwords, certificates, usernames). +

+ +

+ Use of broken or weak cryptographic algorithms that are not hashing algorithms, is + handled by the rb/weak-cryptographic-algorithm query. +

+ +
+ + +

+ Ensure that you use a strong, modern cryptographic hash function: +

+ +
    +
  • + such as Argon2, scrypt, bcrypt, or PBKDF2 for passwords and other data with limited input space. +
  • +
  • + such as SHA-2, or SHA-3 in other cases. +
  • +
+ +
+ + +

+ The following example shows two functions for checking whether the hash + of a certificate matches a known value -- to prevent tampering. + + The first function uses MD5 that is known to be vulnerable to collision attacks. + + The second function uses SHA-256 that is a strong cryptographic hashing function. +

+ + + +
+ +

+ The following example shows two functions for hashing passwords. + + The first function uses SHA-256 to hash passwords. Although SHA-256 is a + strong cryptographic hash function, it is not suitable for password + hashing since it is not computationally expensive. +

+ + + + +

+ The second function uses Argon2 (through the argon2 + gem), which is a strong password hashing algorithm (and + includes a per-password salt by default). +

+ + + +
+ + +
  • OWASP: Password Storage Cheat Sheet
  • +
    + +
    diff --git a/go/ql/src/Security/CWE-327/WeakSensitiveDataHashing.ql b/go/ql/src/Security/CWE-327/WeakSensitiveDataHashing.ql new file mode 100644 index 00000000000..bd46bd50a83 --- /dev/null +++ b/go/ql/src/Security/CWE-327/WeakSensitiveDataHashing.ql @@ -0,0 +1,114 @@ +/** + * @name Use of a broken or weak cryptographic hashing algorithm on sensitive data + * @description Using broken or weak cryptographic hashing algorithms can compromise security. + * @kind path-problem + * @problem.severity warning + * @security-severity 7.5 + * @precision high + * @id go/weak-sensitive-data-hashing + * @tags security + * external/cwe/cwe-327 + * external/cwe/cwe-328 + * external/cwe/cwe-916 + */ + +import go +import semmle.go.security.WeakSensitiveDataHashingCustomizations + +/** + * Provides a taint-tracking configuration for detecting use of a broken or weak + * cryptographic hash function on sensitive data, that does NOT require a + * computationally expensive hash function. + */ +module NormalHashFunctionFlow { + import NormalHashFunction + + private module Config implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source instanceof Source } + + predicate isSink(DataFlow::Node sink) { sink instanceof Sink } + + predicate isBarrier(DataFlow::Node node) { node instanceof Barrier } + + predicate isBarrierIn(DataFlow::Node node) { + // make sources barriers so that we only report the closest instance + isSource(node) + } + + predicate isBarrierOut(DataFlow::Node node) { + // make sinks barriers so that we only report the closest instance + isSink(node) + } + } + + import TaintTracking::Global +} + +/** + * Provides a taint-tracking configuration for detecting use of a broken or weak + * cryptographic hashing algorithm on passwords. + * + * Passwords has stricter requirements on the hashing algorithm used (must be + * computationally expensive to prevent brute-force attacks). + */ +module ComputationallyExpensiveHashFunctionFlow { + import ComputationallyExpensiveHashFunction + + private module Config implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source instanceof Source } + + predicate isSink(DataFlow::Node sink) { sink instanceof Sink } + + predicate isBarrier(DataFlow::Node node) { node instanceof Barrier } + + predicate isBarrierIn(DataFlow::Node node) { + // make sources barriers so that we only report the closest instance + isSource(node) + } + + predicate isBarrierOut(DataFlow::Node node) { + // make sinks barriers so that we only report the closest instance + isSink(node) + } + } + + import TaintTracking::Global +} + +/** + * Global taint-tracking for detecting both variants of "use of a broken or weak + * cryptographic hashing algorithm on sensitive data" vulnerabilities. The two configurations are + * merged to generate a combined path graph. + */ +module WeakSensitiveDataHashingFlow = + DataFlow::MergePathGraph; + +import WeakSensitiveDataHashingFlow::PathGraph + +from + WeakSensitiveDataHashingFlow::PathNode source, WeakSensitiveDataHashingFlow::PathNode sink, + string ending, string algorithmName, string classification +where + NormalHashFunctionFlow::flowPath(source.asPathNode1(), sink.asPathNode1()) and + algorithmName = sink.getNode().(NormalHashFunction::Sink).getAlgorithmName() and + classification = source.getNode().(NormalHashFunction::Source).getClassification() and + ending = "." + or + ComputationallyExpensiveHashFunctionFlow::flowPath(source.asPathNode2(), sink.asPathNode2()) and + algorithmName = sink.getNode().(ComputationallyExpensiveHashFunction::Sink).getAlgorithmName() and + classification = + source.getNode().(ComputationallyExpensiveHashFunction::Source).getClassification() and + ( + sink.getNode().(ComputationallyExpensiveHashFunction::Sink).isComputationallyExpensive() and + ending = "." + or + not sink.getNode().(ComputationallyExpensiveHashFunction::Sink).isComputationallyExpensive() and + ending = + " for " + classification + + " hashing, since it is not a computationally expensive hash function." + ) +select sink.getNode(), source, sink, + "$@ is used in a hashing algorithm (" + algorithmName + ") that is insecure" + ending, + source.getNode(), "Sensitive data (" + classification + ")" diff --git a/go/ql/test/query-tests/Security/CWE-327/WeakSensitiveDataHashing.expected b/go/ql/test/query-tests/Security/CWE-327/WeakSensitiveDataHashing.expected new file mode 100644 index 00000000000..301658e22cb --- /dev/null +++ b/go/ql/test/query-tests/Security/CWE-327/WeakSensitiveDataHashing.expected @@ -0,0 +1,22 @@ +#select +| hashing.go:20:8:20:22 | secretByteSlice | hashing.go:20:8:20:22 | secretByteSlice | hashing.go:20:8:20:22 | secretByteSlice | $@ is used in a hashing algorithm (MD5) that is insecure. | hashing.go:20:8:20:22 | secretByteSlice | Sensitive data (secret) | +| hashing.go:21:10:21:24 | secretByteSlice | hashing.go:21:10:21:24 | secretByteSlice | hashing.go:21:10:21:24 | secretByteSlice | $@ is used in a hashing algorithm (MD5) that is insecure. | hashing.go:21:10:21:24 | secretByteSlice | Sensitive data (secret) | +| hashing.go:22:20:22:31 | secretString | hashing.go:22:20:22:31 | secretString | hashing.go:22:20:22:31 | secretString | $@ is used in a hashing algorithm (MD5) that is insecure. | hashing.go:22:20:22:31 | secretString | Sensitive data (secret) | +| hashing.go:23:10:23:24 | secretByteSlice | hashing.go:23:10:23:24 | secretByteSlice | hashing.go:23:10:23:24 | secretByteSlice | $@ is used in a hashing algorithm (MD5) that is insecure. | hashing.go:23:10:23:24 | secretByteSlice | Sensitive data (secret) | +| hashing.go:25:17:25:31 | secretByteSlice | hashing.go:25:17:25:31 | secretByteSlice | hashing.go:25:17:25:31 | secretByteSlice | $@ is used in a hashing algorithm (SHA1) that is insecure. | hashing.go:25:17:25:31 | secretByteSlice | Sensitive data (secret) | +| hashing.go:26:11:26:25 | secretByteSlice | hashing.go:26:11:26:25 | secretByteSlice | hashing.go:26:11:26:25 | secretByteSlice | $@ is used in a hashing algorithm (SHA1) that is insecure. | hashing.go:26:11:26:25 | secretByteSlice | Sensitive data (secret) | +| hashing.go:28:16:28:30 | secretByteSlice | hashing.go:28:16:28:30 | secretByteSlice | hashing.go:28:16:28:30 | secretByteSlice | $@ is used in a hashing algorithm (MD4) that is insecure. | hashing.go:28:16:28:30 | secretByteSlice | Sensitive data (secret) | +| hashing.go:29:22:29:36 | secretByteSlice | hashing.go:29:22:29:36 | secretByteSlice | hashing.go:29:22:29:36 | secretByteSlice | $@ is used in a hashing algorithm (RIPEMD160) that is insecure. | hashing.go:29:22:29:36 | secretByteSlice | Sensitive data (secret) | +| hashing.go:80:16:80:23 | password | hashing.go:80:16:80:23 | password | hashing.go:80:16:80:23 | password | $@ is used in a hashing algorithm (SHA256) that is insecure for password hashing, since it is not a computationally expensive hash function. | hashing.go:80:16:80:23 | password | Sensitive data (password) | +edges +nodes +| hashing.go:20:8:20:22 | secretByteSlice | semmle.label | secretByteSlice | +| hashing.go:21:10:21:24 | secretByteSlice | semmle.label | secretByteSlice | +| hashing.go:22:20:22:31 | secretString | semmle.label | secretString | +| hashing.go:23:10:23:24 | secretByteSlice | semmle.label | secretByteSlice | +| hashing.go:25:17:25:31 | secretByteSlice | semmle.label | secretByteSlice | +| hashing.go:26:11:26:25 | secretByteSlice | semmle.label | secretByteSlice | +| hashing.go:28:16:28:30 | secretByteSlice | semmle.label | secretByteSlice | +| hashing.go:29:22:29:36 | secretByteSlice | semmle.label | secretByteSlice | +| hashing.go:80:16:80:23 | password | semmle.label | password | +subpaths diff --git a/go/ql/test/query-tests/Security/CWE-327/WeakSensitiveDataHashing.qlref b/go/ql/test/query-tests/Security/CWE-327/WeakSensitiveDataHashing.qlref new file mode 100644 index 00000000000..ec9ae0993a2 --- /dev/null +++ b/go/ql/test/query-tests/Security/CWE-327/WeakSensitiveDataHashing.qlref @@ -0,0 +1,4 @@ +query: Security/CWE-327/WeakSensitiveDataHashing.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql diff --git a/go/ql/test/query-tests/Security/CWE-327/go.mod b/go/ql/test/query-tests/Security/CWE-327/go.mod index bf42b84feef..59c69723ef5 100644 --- a/go/ql/test/query-tests/Security/CWE-327/go.mod +++ b/go/ql/test/query-tests/Security/CWE-327/go.mod @@ -1,3 +1,5 @@ module test -go 1.24 +go 1.24.0 + +require golang.org/x/crypto v0.43.0 diff --git a/go/ql/test/query-tests/Security/CWE-327/hashing.go b/go/ql/test/query-tests/Security/CWE-327/hashing.go new file mode 100644 index 00000000000..4943da35384 --- /dev/null +++ b/go/ql/test/query-tests/Security/CWE-327/hashing.go @@ -0,0 +1,81 @@ +package main + +//go:generate depstubber -vendor golang.org/x/crypto/md4 "" New +//go:generate depstubber -vendor golang.org/x/crypto/ripemd160 "" New + +import ( + "crypto/md5" + "crypto/sha1" + "crypto/sha256" + "crypto/sha3" + "crypto/sha512" + "io" + + "golang.org/x/crypto/md4" + "golang.org/x/crypto/ripemd160" +) + +func WeakHashes() { + h := md5.New() + h.Sum(secretByteSlice) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="MD5. init from line 19." + h.Write(secretByteSlice) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="MD5. init from line 19." + io.WriteString(h, secretString) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="MD5. init from line 19." + md5.Sum(secretByteSlice) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="MD5. init from line 23." + + sha1.New().Sum(secretByteSlice) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="SHA1. init from line 25." + sha1.Sum(secretByteSlice) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="SHA1. init from line 26." + + md4.New().Sum(secretByteSlice) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="MD4. init from line 28." + ripemd160.New().Sum(secretByteSlice) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="RIPEMD160. init from line 29." + + // Only alert when sensitive data is hashed. + md5.New().Sum(public) // $ CryptographicOperation="MD5. init from line 32." + md5.Sum(public) // $ CryptographicOperation="MD5. init from line 33." + sha1.New().Sum(public) // $ CryptographicOperation="SHA1. init from line 34." + sha1.Sum(public) // $ CryptographicOperation="SHA1. init from line 35." +} + +func StrongHashes() { + sha256.New224().Sum(secretByteSlice) // $ CryptographicOperation="SHA224. init from line 39." + sha256.Sum224(secretByteSlice) // $ CryptographicOperation="SHA224. init from line 40." + + sha256.New().Sum(secretByteSlice) // $ CryptographicOperation="SHA256. init from line 42." + sha256.Sum256(secretByteSlice) // $ CryptographicOperation="SHA256. init from line 43." + + sha512.New().Sum(secretByteSlice) // $ CryptographicOperation="SHA512. init from line 45." + sha512.Sum512(secretByteSlice) // $ CryptographicOperation="SHA512. init from line 46." + + sha512.New384().Sum(secretByteSlice) // $ CryptographicOperation="SHA384. init from line 48." + sha512.Sum384(secretByteSlice) // $ CryptographicOperation="SHA384. init from line 49." + + sha512.New512_224().Sum(secretByteSlice) // $ CryptographicOperation="SHA512224. init from line 51." + sha512.Sum512_224(secretByteSlice) // $ CryptographicOperation="SHA512224. init from line 52." + + sha512.New512_256().Sum(secretByteSlice) // $ CryptographicOperation="SHA512256. init from line 54." + sha512.Sum512_256(secretByteSlice) // $ CryptographicOperation="SHA512256. init from line 55." + + sha3.New224().Sum(secretByteSlice) // $ CryptographicOperation="SHA3224. init from line 57." + sha3.Sum224(secretByteSlice) // $ CryptographicOperation="SHA3224. init from line 58." + + sha3.New256().Sum(secretByteSlice) // $ CryptographicOperation="SHA3256. init from line 60." + sha3.Sum256(secretByteSlice) // $ CryptographicOperation="SHA3256. init from line 61." + + sha3.New384().Sum(secretByteSlice) // $ CryptographicOperation="SHA3384. init from line 63." + sha3.Sum384(secretByteSlice) // $ CryptographicOperation="SHA3384. init from line 64." + + sha3.New512().Sum(secretByteSlice) // $ CryptographicOperation="SHA3512. init from line 66." + sha3.Sum512(secretByteSlice) // $ CryptographicOperation="SHA3512. init from line 67." + + sha3.NewSHAKE128().Write(secretByteSlice) // $ CryptographicOperation="SHAKE128. init from line 69." + sha3.NewCSHAKE128(nil, nil).Write(secretByteSlice) // $ CryptographicOperation="SHAKE128. init from line 70." + sha3.SumSHAKE128(secretByteSlice, 100) // $ CryptographicOperation="SHAKE128. init from line 71." + + sha3.NewSHAKE256().Write(secretByteSlice) // $ CryptographicOperation="SHAKE256. init from line 73." + sha3.NewCSHAKE256(nil, nil).Write(secretByteSlice) // $ CryptographicOperation="SHAKE256. init from line 74." + sha3.SumSHAKE256(secretByteSlice, 100) // $ CryptographicOperation="SHAKE256. init from line 75." +} + +func PasswordHashing() { + password := []byte("") + sha256.Sum256(password) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="SHA256. init from line 80." +} diff --git a/go/ql/test/query-tests/Security/CWE-327/vendor/golang.org/x/crypto/md4/stub.go b/go/ql/test/query-tests/Security/CWE-327/vendor/golang.org/x/crypto/md4/stub.go new file mode 100644 index 00000000000..777cc50c0c1 --- /dev/null +++ b/go/ql/test/query-tests/Security/CWE-327/vendor/golang.org/x/crypto/md4/stub.go @@ -0,0 +1,16 @@ +// Code generated by depstubber. DO NOT EDIT. +// This is a simple stub for golang.org/x/crypto/md4, strictly for use in testing. + +// See the LICENSE file for information about the licensing of the original library. +// Source: golang.org/x/crypto/md4 (exports: ; functions: New) + +// Package md4 is a stub of golang.org/x/crypto/md4, generated by depstubber. +package md4 + +import ( + hash "hash" +) + +func New() hash.Hash { + return nil +} diff --git a/go/ql/test/query-tests/Security/CWE-327/vendor/golang.org/x/crypto/ripemd160/stub.go b/go/ql/test/query-tests/Security/CWE-327/vendor/golang.org/x/crypto/ripemd160/stub.go new file mode 100644 index 00000000000..995d3339d8c --- /dev/null +++ b/go/ql/test/query-tests/Security/CWE-327/vendor/golang.org/x/crypto/ripemd160/stub.go @@ -0,0 +1,16 @@ +// Code generated by depstubber. DO NOT EDIT. +// This is a simple stub for golang.org/x/crypto/ripemd160, strictly for use in testing. + +// See the LICENSE file for information about the licensing of the original library. +// Source: golang.org/x/crypto/ripemd160 (exports: ; functions: New) + +// Package ripemd160 is a stub of golang.org/x/crypto/ripemd160, generated by depstubber. +package ripemd160 + +import ( + hash "hash" +) + +func New() hash.Hash { + return nil +} diff --git a/go/ql/test/query-tests/Security/CWE-327/vendor/modules.txt b/go/ql/test/query-tests/Security/CWE-327/vendor/modules.txt new file mode 100644 index 00000000000..1927762821c --- /dev/null +++ b/go/ql/test/query-tests/Security/CWE-327/vendor/modules.txt @@ -0,0 +1,4 @@ +# golang.org/x/crypto v0.43.0 +## explicit +golang.org/x/crypto/md4 +golang.org/x/crypto/ripemd160 From d2033ca1d5b0b7db7871d7153e81cf177ba60b6f Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 21 Oct 2025 16:15:43 +0100 Subject: [PATCH 114/127] Add change note --- .../src/change-notes/2025-10-21-go-weak-crypto-algorithm.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 go/ql/src/change-notes/2025-10-21-go-weak-crypto-algorithm.md diff --git a/go/ql/src/change-notes/2025-10-21-go-weak-crypto-algorithm.md b/go/ql/src/change-notes/2025-10-21-go-weak-crypto-algorithm.md new file mode 100644 index 00000000000..d5f9a08fb7f --- /dev/null +++ b/go/ql/src/change-notes/2025-10-21-go-weak-crypto-algorithm.md @@ -0,0 +1,5 @@ +--- +category: newQuery +--- +* Added a new query, `go/weak-crypto-algorithm`, to detect the use of a broken or weak cryptographic algorithm. A very simple version of this query was originally contributed as an [experimental query by @dilanbhalla](https://github.com/github/codeql-go/pull/284). +* Added a new query, `go/weak-sensitive-data-hashing`, to detect the use of a broken or weak cryptographic hash algorithm on sensitive data. From 2cfafe53cac2e9448e5b9ce7c9ce656b29a38068 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 21 Oct 2025 21:28:19 +0100 Subject: [PATCH 115/127] Fix failing ruby crypto test that lists all algorithms --- ruby/ql/test/library-tests/security/CryptoAlgorithms.expected | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ruby/ql/test/library-tests/security/CryptoAlgorithms.expected b/ruby/ql/test/library-tests/security/CryptoAlgorithms.expected index eedddb2df9f..3f1ba8e12c6 100644 --- a/ruby/ql/test/library-tests/security/CryptoAlgorithms.expected +++ b/ruby/ql/test/library-tests/security/CryptoAlgorithms.expected @@ -34,6 +34,8 @@ strongHashingAlgorithms | SHA3256 | | SHA3384 | | SHA3512 | +| SHA512224 | +| SHA512256 | | SHAKE128 | | SHAKE256 | | SM3 | From 970b5d74965e08d7db08530fcb16255f4d5b78af Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 21 Oct 2025 21:59:46 +0100 Subject: [PATCH 116/127] Fix query suite integration tests --- .../integration-tests/query-suite/go-code-scanning.qls.expected | 2 ++ .../query-suite/go-security-and-quality.qls.expected | 2 ++ .../query-suite/go-security-extended.qls.expected | 2 ++ .../integration-tests/query-suite/not_included_in_qls.expected | 1 - 4 files changed, 6 insertions(+), 1 deletion(-) diff --git a/go/ql/integration-tests/query-suite/go-code-scanning.qls.expected b/go/ql/integration-tests/query-suite/go-code-scanning.qls.expected index 20fcacbc389..d8d3e0a13e7 100644 --- a/go/ql/integration-tests/query-suite/go-code-scanning.qls.expected +++ b/go/ql/integration-tests/query-suite/go-code-scanning.qls.expected @@ -18,7 +18,9 @@ ql/go/ql/src/Security/CWE-295/DisabledCertificateCheck.ql ql/go/ql/src/Security/CWE-312/CleartextLogging.ql ql/go/ql/src/Security/CWE-322/InsecureHostKeyCallback.ql ql/go/ql/src/Security/CWE-326/InsufficientKeySize.ql +ql/go/ql/src/Security/CWE-327/BrokenCryptoAlgorithm.ql ql/go/ql/src/Security/CWE-327/InsecureTLS.ql +ql/go/ql/src/Security/CWE-327/WeakSensitiveDataHashing.ql ql/go/ql/src/Security/CWE-338/InsecureRandomness.ql ql/go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.ql ql/go/ql/src/Security/CWE-352/ConstantOauth2State.ql diff --git a/go/ql/integration-tests/query-suite/go-security-and-quality.qls.expected b/go/ql/integration-tests/query-suite/go-security-and-quality.qls.expected index ee0ec8f42ba..71bcb2b0330 100644 --- a/go/ql/integration-tests/query-suite/go-security-and-quality.qls.expected +++ b/go/ql/integration-tests/query-suite/go-security-and-quality.qls.expected @@ -41,7 +41,9 @@ ql/go/ql/src/Security/CWE-295/DisabledCertificateCheck.ql ql/go/ql/src/Security/CWE-312/CleartextLogging.ql ql/go/ql/src/Security/CWE-322/InsecureHostKeyCallback.ql ql/go/ql/src/Security/CWE-326/InsufficientKeySize.ql +ql/go/ql/src/Security/CWE-327/BrokenCryptoAlgorithm.ql ql/go/ql/src/Security/CWE-327/InsecureTLS.ql +ql/go/ql/src/Security/CWE-327/WeakSensitiveDataHashing.ql ql/go/ql/src/Security/CWE-338/InsecureRandomness.ql ql/go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.ql ql/go/ql/src/Security/CWE-352/ConstantOauth2State.ql diff --git a/go/ql/integration-tests/query-suite/go-security-extended.qls.expected b/go/ql/integration-tests/query-suite/go-security-extended.qls.expected index 9116f7b7ebf..b0447a6c3eb 100644 --- a/go/ql/integration-tests/query-suite/go-security-extended.qls.expected +++ b/go/ql/integration-tests/query-suite/go-security-extended.qls.expected @@ -19,7 +19,9 @@ ql/go/ql/src/Security/CWE-295/DisabledCertificateCheck.ql ql/go/ql/src/Security/CWE-312/CleartextLogging.ql ql/go/ql/src/Security/CWE-322/InsecureHostKeyCallback.ql ql/go/ql/src/Security/CWE-326/InsufficientKeySize.ql +ql/go/ql/src/Security/CWE-327/BrokenCryptoAlgorithm.ql ql/go/ql/src/Security/CWE-327/InsecureTLS.ql +ql/go/ql/src/Security/CWE-327/WeakSensitiveDataHashing.ql ql/go/ql/src/Security/CWE-338/InsecureRandomness.ql ql/go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.ql ql/go/ql/src/Security/CWE-352/ConstantOauth2State.ql diff --git a/go/ql/integration-tests/query-suite/not_included_in_qls.expected b/go/ql/integration-tests/query-suite/not_included_in_qls.expected index 3b79e47da44..7b8b86a7a53 100644 --- a/go/ql/integration-tests/query-suite/not_included_in_qls.expected +++ b/go/ql/integration-tests/query-suite/not_included_in_qls.expected @@ -14,7 +14,6 @@ ql/go/ql/src/experimental/CWE-203/Timing.ql ql/go/ql/src/experimental/CWE-285/PamAuthBypass.ql ql/go/ql/src/experimental/CWE-287/ImproperLdapAuth.ql ql/go/ql/src/experimental/CWE-321-V2/HardCodedKeys.ql -ql/go/ql/src/experimental/CWE-327/WeakCryptoAlgorithm.ql ql/go/ql/src/experimental/CWE-369/DivideByZero.ql ql/go/ql/src/experimental/CWE-400/DatabaseCallInLoop.ql ql/go/ql/src/experimental/CWE-522-DecompressionBombs/DecompressionBombs.ql From 69ecdcb4cd21e74015f9d9fef69e4a44cc30efc6 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 31 Oct 2025 16:06:24 +0000 Subject: [PATCH 117/127] Fix capitalization of class names --- .../semmle/go/frameworks/CryptoLibraries.qll | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/go/ql/lib/semmle/go/frameworks/CryptoLibraries.qll b/go/ql/lib/semmle/go/frameworks/CryptoLibraries.qll index 0c56d8c7e6a..6fe299c39ed 100644 --- a/go/ql/lib/semmle/go/frameworks/CryptoLibraries.qll +++ b/go/ql/lib/semmle/go/frameworks/CryptoLibraries.qll @@ -109,9 +109,9 @@ private module Crypto { } private module Rc4 { - private class CipherXORKeyStream extends CryptographicOperation::Range instanceof DataFlow::CallNode + private class CipherXorKeyStream extends CryptographicOperation::Range instanceof DataFlow::CallNode { - CipherXORKeyStream() { + CipherXorKeyStream() { this.(DataFlow::MethodCallNode) .getTarget() .hasQualifiedName("crypto/rc4", "Cipher", "XORKeyStream") @@ -312,26 +312,26 @@ private module Crypto { } private module Cipher { - private class NewCBCEncrypter extends StdLibNewEncrypter { - NewCBCEncrypter() { this.getTarget().hasQualifiedName("crypto/cipher", "NewCBCEncrypter") } + private class NewCbcEncrypter extends StdLibNewEncrypter { + NewCbcEncrypter() { this.getTarget().hasQualifiedName("crypto/cipher", "NewCBCEncrypter") } override BlockMode getMode() { result = "CBC" } } - private class NewCFBEncrypter extends StdLibNewEncrypter { - NewCFBEncrypter() { this.getTarget().hasQualifiedName("crypto/cipher", "NewCFBEncrypter") } + private class NewCfbEncrypter extends StdLibNewEncrypter { + NewCfbEncrypter() { this.getTarget().hasQualifiedName("crypto/cipher", "NewCFBEncrypter") } override BlockMode getMode() { result = "CFB" } } - private class NewCTR extends StdLibNewEncrypter { - NewCTR() { this.getTarget().hasQualifiedName("crypto/cipher", "NewCTR") } + private class NewCtr extends StdLibNewEncrypter { + NewCtr() { this.getTarget().hasQualifiedName("crypto/cipher", "NewCTR") } override BlockMode getMode() { result = "CTR" } } - private class NewGCM extends StdLibNewEncrypter { - NewGCM() { + private class NewGcm extends StdLibNewEncrypter { + NewGcm() { exists(string name | this.getTarget().hasQualifiedName("crypto/cipher", name) | name = ["NewGCM", "NewGCMWithNonceSize", "NewGCMWithRandomNonce", "NewGCMWithTagSize"] ) @@ -340,8 +340,8 @@ private module Crypto { override BlockMode getMode() { result = "GCM" } } - private class NewOFB extends StdLibNewEncrypter { - NewOFB() { this.getTarget().hasQualifiedName("crypto/cipher", "NewOFB") } + private class NewOfb extends StdLibNewEncrypter { + NewOfb() { this.getTarget().hasQualifiedName("crypto/cipher", "NewOFB") } override BlockMode getMode() { result = "OFB" } } @@ -373,8 +373,8 @@ private module Crypto { } } - private class StreamXORKeyStream extends EncryptionMethodCall { - StreamXORKeyStream() { + private class StreamXorKeyStream extends EncryptionMethodCall { + StreamXorKeyStream() { this.(DataFlow::MethodCallNode) .getTarget() .hasQualifiedName("crypto/cipher", "Stream", "XORKeyStream") and From 8d7b2757bfecdf7e9b8d737085bee165e97156e5 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Mon, 3 Nov 2025 13:23:11 +0000 Subject: [PATCH 118/127] Add query help examples --- .../CWE-327/BrokenCryptoAlgorithm.qhelp | 8 +-- .../CWE-327/WeakSensitiveDataHashing.qhelp | 23 +++----- go/ql/src/Security/CWE-327/examples/Crypto.go | 57 ++++--------------- .../CWE-327/examples/WeakPasswordHashing.go | 21 +++++++ .../CWE-327/examples/WeakSecretHashing.go | 19 +++++++ 5 files changed, 64 insertions(+), 64 deletions(-) create mode 100644 go/ql/src/Security/CWE-327/examples/WeakPasswordHashing.go create mode 100644 go/ql/src/Security/CWE-327/examples/WeakSecretHashing.go diff --git a/go/ql/src/Security/CWE-327/BrokenCryptoAlgorithm.qhelp b/go/ql/src/Security/CWE-327/BrokenCryptoAlgorithm.qhelp index 0283e142fba..a65af78c0ae 100644 --- a/go/ql/src/Security/CWE-327/BrokenCryptoAlgorithm.qhelp +++ b/go/ql/src/Security/CWE-327/BrokenCryptoAlgorithm.qhelp @@ -28,10 +28,10 @@

    - The following code uses the different packages to encrypt/hash - some secret data. The first few examples uses DES, MD5, RC4, and SHA1, - which are older algorithms that are now considered weak. The following - examples use AES and SHA256, which are stronger, more modern algorithms. + The following code uses the different packages to encrypt + some secret data. The first example uses DES, + which is an older algorithm that is now considered weak. The following + example uses AES, which is a stronger, more modern algorithm.

    diff --git a/go/ql/src/Security/CWE-327/WeakSensitiveDataHashing.qhelp b/go/ql/src/Security/CWE-327/WeakSensitiveDataHashing.qhelp index 422cbb83514..1fa64e4adaf 100644 --- a/go/ql/src/Security/CWE-327/WeakSensitiveDataHashing.qhelp +++ b/go/ql/src/Security/CWE-327/WeakSensitiveDataHashing.qhelp @@ -65,35 +65,28 @@

    The following example shows two functions for checking whether the hash - of a certificate matches a known value -- to prevent tampering. + of a secret matches a known value. - The first function uses MD5 that is known to be vulnerable to collision attacks. + The first function uses SHA-1 that is known to be vulnerable to collision attacks. The second function uses SHA-256 that is a strong cryptographic hashing function.

    - +

    The following example shows two functions for hashing passwords. - The first function uses SHA-256 to hash passwords. Although SHA-256 is a - strong cryptographic hash function, it is not suitable for password + The first example uses SHA-256 to hash passwords. Although + SHA-256 is a strong cryptographic hash function, it is not suitable for password hashing since it is not computationally expensive. + + The second function uses PBKDF2, which is a strong password hashing algorithm.

    - - - -

    - The second function uses Argon2 (through the argon2 - gem), which is a strong password hashing algorithm (and - includes a per-password salt by default). -

    - - +
    diff --git a/go/ql/src/Security/CWE-327/examples/Crypto.go b/go/ql/src/Security/CWE-327/examples/Crypto.go index bc2b2fdeba4..b3f71f0772b 100644 --- a/go/ql/src/Security/CWE-327/examples/Crypto.go +++ b/go/ql/src/Security/CWE-327/examples/Crypto.go @@ -3,51 +3,18 @@ package main import ( "crypto/aes" "crypto/des" - "crypto/md5" - "crypto/rc4" - "crypto/sha1" - "crypto/sha256" ) -func main() { - public := []byte("hello") - - password := []byte("123456") - buf := password // testing dataflow by passing into different variable - - // BAD, des is a weak crypto algorithm and password is sensitive data - des.NewTripleDESCipher(buf) - - // BAD, md5 is a weak crypto algorithm and password is sensitive data - md5.Sum(buf) - - // BAD, rc4 is a weak crypto algorithm and password is sensitive data - rc4.NewCipher(buf) - - // BAD, sha1 is a weak crypto algorithm and password is sensitive data - sha1.Sum(buf) - - // GOOD, password is sensitive data but aes is a strong crypto algorithm - aes.NewCipher(buf) - - // GOOD, password is sensitive data but sha256 is a strong crypto algorithm - sha256.Sum256(buf) - - // GOOD, des is a weak crypto algorithm but public is not sensitive data - des.NewTripleDESCipher(public) - - // GOOD, md5 is a weak crypto algorithm but public is not sensitive data - md5.Sum(public) - - // GOOD, rc4 is a weak crypto algorithm but public is not sensitive data - rc4.NewCipher(public) - - // GOOD, sha1 is a weak crypto algorithm but public is not sensitive data - sha1.Sum(public) - - // GOOD, aes is a strong crypto algorithm and public is not sensitive data - aes.NewCipher(public) - - // GOOD, sha256 is a strong crypto algorithm and public is not sensitive data - sha256.Sum256(public) +func EncryptMessageWeak(key []byte, message []byte) (dst []byte) { + // BAD, DES is a weak crypto algorithm + block, _ := des.NewCipher(key) + block.Encrypt(dst, message) + return +} + +func EncryptMessageStrong(key []byte, message []byte) (dst []byte) { + // GOOD, AES is a weak crypto algorithm + block, _ := aes.NewCipher(key) + block.Encrypt(dst, message) + return } diff --git a/go/ql/src/Security/CWE-327/examples/WeakPasswordHashing.go b/go/ql/src/Security/CWE-327/examples/WeakPasswordHashing.go new file mode 100644 index 00000000000..671edede7d3 --- /dev/null +++ b/go/ql/src/Security/CWE-327/examples/WeakPasswordHashing.go @@ -0,0 +1,21 @@ +package main + +import ( + "crypto/pbkdf2" + "crypto/rand" + "crypto/sha256" + "crypto/sha512" +) + +func GetPasswordHashBad(password string) [32]byte { + // BAD, SHA256 is a strong hashing algorithm but it is not computationally expensive + return sha256.Sum256([]byte(password)) +} + +func GetPasswordHashGood(password string) []byte { + // GOOD, PBKDF2 is a strong hashing algorithm and it is computationally expensive + salt := make([]byte, 16) + rand.Read(salt) + key, _ := pbkdf2.Key(sha512.New, password, salt, 4096, 32) + return key +} diff --git a/go/ql/src/Security/CWE-327/examples/WeakSecretHashing.go b/go/ql/src/Security/CWE-327/examples/WeakSecretHashing.go new file mode 100644 index 00000000000..fd65b802548 --- /dev/null +++ b/go/ql/src/Security/CWE-327/examples/WeakSecretHashing.go @@ -0,0 +1,19 @@ +package main + +import ( + "crypto/sha1" + "crypto/sha256" + "slices" +) + +func SecretMatchesKnownHashBad(secret []byte, known_hash []byte) bool { + // BAD, SHA1 is a weak crypto algorithm and secret is sensitive data + h := sha1.New() + return slices.Equal(h.Sum(secret), known_hash) +} + +func SecretMatchesKnownHashGood(secret []byte, known_hash []byte) bool { + // GOOD, SHA256 is a strong hashing algorithm + h := sha256.New() + return slices.Equal(h.Sum(secret), known_hash) +} From 7d7af193dc9331ed1875866114da3a0c6c7fadb5 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Mon, 3 Nov 2025 13:23:43 +0000 Subject: [PATCH 119/127] Fix small mistake in Ruby query help --- .../src/queries/security/cwe-327/WeakSensitiveDataHashing.qhelp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby/ql/src/queries/security/cwe-327/WeakSensitiveDataHashing.qhelp b/ruby/ql/src/queries/security/cwe-327/WeakSensitiveDataHashing.qhelp index 422cbb83514..33d0c845a66 100644 --- a/ruby/ql/src/queries/security/cwe-327/WeakSensitiveDataHashing.qhelp +++ b/ruby/ql/src/queries/security/cwe-327/WeakSensitiveDataHashing.qhelp @@ -67,7 +67,7 @@ The following example shows two functions for checking whether the hash of a certificate matches a known value -- to prevent tampering. - The first function uses MD5 that is known to be vulnerable to collision attacks. + The first function uses SHA-1 that is known to be vulnerable to collision attacks. The second function uses SHA-256 that is a strong cryptographic hashing function.

    From adbc1efe59d3df5adb018897311fd839c8529e84 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Mon, 3 Nov 2025 17:20:19 +0000 Subject: [PATCH 120/127] Fix diff-informed predicates --- go/ql/lib/semmle/go/frameworks/CryptoLibraries.qll | 4 ---- go/ql/src/Security/CWE-327/WeakSensitiveDataHashing.ql | 4 ++++ 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/go/ql/lib/semmle/go/frameworks/CryptoLibraries.qll b/go/ql/lib/semmle/go/frameworks/CryptoLibraries.qll index 6fe299c39ed..154ac82e7a2 100644 --- a/go/ql/lib/semmle/go/frameworks/CryptoLibraries.qll +++ b/go/ql/lib/semmle/go/frameworks/CryptoLibraries.qll @@ -21,8 +21,6 @@ private module HashConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof HashAlgorithmInit } predicate isSink(DataFlow::Node sink) { any() } - - predicate observeDiffInformedIncrementalMode() { any() } } /** Tracks the flow of hash algorithms. */ @@ -50,8 +48,6 @@ private module EncryptionConfig implements DataFlow::ConfigSig { predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { any(BlockModeInit nbcm).step(node1, node2) } - - predicate observeDiffInformedIncrementalMode() { any() } } /** diff --git a/go/ql/src/Security/CWE-327/WeakSensitiveDataHashing.ql b/go/ql/src/Security/CWE-327/WeakSensitiveDataHashing.ql index bd46bd50a83..0a38d9729f0 100644 --- a/go/ql/src/Security/CWE-327/WeakSensitiveDataHashing.ql +++ b/go/ql/src/Security/CWE-327/WeakSensitiveDataHashing.ql @@ -39,6 +39,8 @@ module NormalHashFunctionFlow { // make sinks barriers so that we only report the closest instance isSink(node) } + + predicate observeDiffInformedIncrementalMode() { any() } } import TaintTracking::Global @@ -70,6 +72,8 @@ module ComputationallyExpensiveHashFunctionFlow { // make sinks barriers so that we only report the closest instance isSink(node) } + + predicate observeDiffInformedIncrementalMode() { any() } } import TaintTracking::Global From 349e8ca5897e56c2d6cfab61cb2b4dcf4f5a837b Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 4 Nov 2025 10:33:04 +0000 Subject: [PATCH 121/127] Remove unnecessary import --- .../go/security/WeakSensitiveDataHashingCustomizations.qll | 1 - 1 file changed, 1 deletion(-) diff --git a/go/ql/lib/semmle/go/security/WeakSensitiveDataHashingCustomizations.qll b/go/ql/lib/semmle/go/security/WeakSensitiveDataHashingCustomizations.qll index f03b93eb7c2..4893193ef4f 100644 --- a/go/ql/lib/semmle/go/security/WeakSensitiveDataHashingCustomizations.qll +++ b/go/ql/lib/semmle/go/security/WeakSensitiveDataHashingCustomizations.qll @@ -9,7 +9,6 @@ */ import go -import semmle.go.dataflow.internal.DataFlowPrivate private import semmle.go.security.SensitiveActions /** From f562b3d26ed22631e37f31d536890d11005ef6cb Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 18 Nov 2025 22:51:26 +0000 Subject: [PATCH 122/127] Make line differences in test comments relative --- .../Security/CWE-327/CryptoAlgorithm.ql | 22 ++---- .../Security/CWE-327/encryption.go | 74 +++++++++--------- .../query-tests/Security/CWE-327/hashing.go | 78 +++++++++---------- 3 files changed, 83 insertions(+), 91 deletions(-) diff --git a/go/ql/test/query-tests/Security/CWE-327/CryptoAlgorithm.ql b/go/ql/test/query-tests/Security/CWE-327/CryptoAlgorithm.ql index ab096f9df2a..e3b7147be3a 100644 --- a/go/ql/test/query-tests/Security/CWE-327/CryptoAlgorithm.ql +++ b/go/ql/test/query-tests/Security/CWE-327/CryptoAlgorithm.ql @@ -19,23 +19,15 @@ module Test implements TestSig { exists(int c | c = count(ho.getInitialization()) | c = 0 and initialization = "" or - c = 1 and + c > 0 and initialization = - " init from line " + - strictconcat(DataFlow::Node init | - init = ho.getInitialization() + " init from " + + strictconcat(DataFlow::Node init, int n | + init = ho.getInitialization() and + n = ho.getStartLine() - init.getStartLine() | - init.getStartLine().toString(), "," - ) + "." - or - c > 1 and - initialization = - " init from lines " + - strictconcat(DataFlow::Node init | - init = ho.getInitialization() - | - init.getStartLine().toString(), "," - ) + "." + n.toString(), "," + ) + " lines above." ) and ho.getLocation() = location and element = ho.toString() and diff --git a/go/ql/test/query-tests/Security/CWE-327/encryption.go b/go/ql/test/query-tests/Security/CWE-327/encryption.go index 2a1bd53440b..e6cc712474f 100644 --- a/go/ql/test/query-tests/Security/CWE-327/encryption.go +++ b/go/ql/test/query-tests/Security/CWE-327/encryption.go @@ -27,141 +27,141 @@ func BlockCipherDes() { // BAD, des is a weak crypto algorithm block, _ := des.NewCipher(nil) - block.Encrypt(dst, secretByteSlice) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. init from line 28." + block.Encrypt(dst, secretByteSlice) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. init from 2 lines above." block.Decrypt(dst, secretByteSlice) gcm1, _ := cipher.NewGCM(block) - gcm1.Seal(nil, nil, secretByteSlice, nil) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. init from line 28." + gcm1.Seal(nil, nil, secretByteSlice, nil) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. init from 6 lines above." gcm1.Open(nil, nil, secretByteSlice, nil) gcm2, _ := cipher.NewGCMWithNonceSize(block, 12) - gcm2.Seal(nil, nil, secretByteSlice, nil) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. init from line 28." + gcm2.Seal(nil, nil, secretByteSlice, nil) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. init from 10 lines above." gcm2.Open(nil, nil, secretByteSlice, nil) gcm3, _ := cipher.NewGCMWithRandomNonce(block) - gcm3.Seal(nil, nil, secretByteSlice, nil) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. init from line 28." + gcm3.Seal(nil, nil, secretByteSlice, nil) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. init from 14 lines above." gcm3.Open(nil, nil, secretByteSlice, nil) gcm4, _ := cipher.NewGCMWithTagSize(block, 12) - gcm4.Seal(nil, nil, secretByteSlice, nil) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. init from line 28." + gcm4.Seal(nil, nil, secretByteSlice, nil) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. init from 18 lines above." gcm4.Open(nil, nil, secretByteSlice, nil) cbcEncrypter := cipher.NewCBCEncrypter(block, nil) - cbcEncrypter.CryptBlocks(dst, secretByteSlice) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. blockMode: CBC. init from lines 28,49." + cbcEncrypter.CryptBlocks(dst, secretByteSlice) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. blockMode: CBC. init from 1,22 lines above." cipher.NewCBCDecrypter(block, nil).CryptBlocks(dst, secretByteSlice) ctrStream := cipher.NewCTR(block, nil) - ctrStream.XORKeyStream(dst, secretByteSlice) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. blockMode: CTR. init from lines 28,53." + ctrStream.XORKeyStream(dst, secretByteSlice) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. blockMode: CTR. init from 1,26 lines above." - ctrStreamReader := &cipher.StreamReader{S: ctrStream, R: bytes.NewReader(secretByteSlice)} // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. blockMode: CTR. init from lines 28,53." + ctrStreamReader := &cipher.StreamReader{S: ctrStream, R: bytes.NewReader(secretByteSlice)} // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. blockMode: CTR. init from 28,3 lines above." io.Copy(os.Stdout, ctrStreamReader) - ctrStreamWriter := &cipher.StreamWriter{S: ctrStream, W: os.Stdout} // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. blockMode: CTR. init from lines 28,53." - io.Copy(ctrStreamWriter, bytes.NewReader(secretByteSlice)) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. blockMode: CTR. init from lines 28,53." + ctrStreamWriter := &cipher.StreamWriter{S: ctrStream, W: os.Stdout} // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. blockMode: CTR. init from 31,6 lines above." + io.Copy(ctrStreamWriter, bytes.NewReader(secretByteSlice)) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. blockMode: CTR. init from 32,7 lines above." // deprecated cfbStream := cipher.NewCFBEncrypter(block, nil) - cfbStream.XORKeyStream(dst, secretByteSlice) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. blockMode: CFB. init from lines 28,64." + cfbStream.XORKeyStream(dst, secretByteSlice) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. blockMode: CFB. init from 1,37 lines above." cipher.NewCFBDecrypter(block, nil).XORKeyStream(dst, secretByteSlice) ofbStream := cipher.NewOFB(block, nil) - ofbStream.XORKeyStream(dst, secretByteSlice) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. blockMode: OFB. init from lines 28,68." + ofbStream.XORKeyStream(dst, secretByteSlice) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="DES. blockMode: OFB. init from 1,41 lines above." } func BlockCipherTripleDes() { // BAD, triple des is a weak crypto algorithm and secretByteSlice is sensitive data block, _ := des.NewTripleDESCipher(nil) - block.Encrypt(dst, getUserID()) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. init from line 74." + block.Encrypt(dst, getUserID()) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. init from 2 lines above." block.Decrypt(dst, getUserID()) gcm1, _ := cipher.NewGCM(block) - gcm1.Seal(nil, nil, getUserID(), nil) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. init from line 74." + gcm1.Seal(nil, nil, getUserID(), nil) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. init from 6 lines above." gcm1.Open(nil, nil, getUserID(), nil) gcm2, _ := cipher.NewGCMWithNonceSize(block, 12) - gcm2.Seal(nil, nil, getUserID(), nil) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. init from line 74." + gcm2.Seal(nil, nil, getUserID(), nil) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. init from 10 lines above." gcm2.Open(nil, nil, getUserID(), nil) gcm3, _ := cipher.NewGCMWithRandomNonce(block) - gcm3.Seal(nil, nil, secretByteSlice, nil) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. init from line 74." + gcm3.Seal(nil, nil, secretByteSlice, nil) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. init from 14 lines above." gcm3.Open(nil, nil, secretByteSlice, nil) gcm4, _ := cipher.NewGCMWithTagSize(block, 12) - gcm4.Seal(nil, nil, secretByteSlice, nil) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. init from line 74." + gcm4.Seal(nil, nil, secretByteSlice, nil) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. init from 18 lines above." gcm4.Open(nil, nil, secretByteSlice, nil) cbcEncrypter := cipher.NewCBCEncrypter(block, nil) - cbcEncrypter.CryptBlocks(dst, getUserID()) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. blockMode: CBC. init from lines 74,95." + cbcEncrypter.CryptBlocks(dst, getUserID()) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. blockMode: CBC. init from 1,22 lines above." cipher.NewCBCDecrypter(block, nil).CryptBlocks(dst, getUserID()) ctrStream := cipher.NewCTR(block, nil) - ctrStream.XORKeyStream(dst, getUserID()) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. blockMode: CTR. init from lines 74,99." + ctrStream.XORKeyStream(dst, getUserID()) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. blockMode: CTR. init from 1,26 lines above." - ctrStreamReader := &cipher.StreamReader{S: ctrStream, R: bytes.NewReader(getUserID())} // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. blockMode: CTR. init from lines 74,99." + ctrStreamReader := &cipher.StreamReader{S: ctrStream, R: bytes.NewReader(getUserID())} // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. blockMode: CTR. init from 28,3 lines above." io.Copy(os.Stdout, ctrStreamReader) - ctrStreamWriter := &cipher.StreamWriter{S: ctrStream, W: os.Stdout} // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. blockMode: CTR. init from lines 74,99." - io.Copy(ctrStreamWriter, bytes.NewReader(getUserID())) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. blockMode: CTR. init from lines 74,99." + ctrStreamWriter := &cipher.StreamWriter{S: ctrStream, W: os.Stdout} // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. blockMode: CTR. init from 31,6 lines above." + io.Copy(ctrStreamWriter, bytes.NewReader(getUserID())) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. blockMode: CTR. init from 32,7 lines above." // deprecated cfbStream := cipher.NewCFBEncrypter(block, nil) - cfbStream.XORKeyStream(dst, secretByteSlice) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. blockMode: CFB. init from lines 110,74." + cfbStream.XORKeyStream(dst, secretByteSlice) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. blockMode: CFB. init from 1,37 lines above." cipher.NewCFBDecrypter(block, nil).XORKeyStream(dst, secretByteSlice) ofbStream := cipher.NewOFB(block, nil) - ofbStream.XORKeyStream(dst, secretByteSlice) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. blockMode: OFB. init from lines 114,74." + ofbStream.XORKeyStream(dst, secretByteSlice) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="TRIPLEDES. blockMode: OFB. init from 1,41 lines above." } func BlockCipherAes() { // GOOD, aes is a strong crypto algorithm block, _ := aes.NewCipher(nil) - block.Encrypt(dst, secretByteSlice) // $ CryptographicOperation="AES. init from line 120." + block.Encrypt(dst, secretByteSlice) // $ CryptographicOperation="AES. init from 2 lines above." block.Decrypt(dst, secretByteSlice) gcm1, _ := cipher.NewGCM(block) - gcm1.Seal(nil, nil, secretByteSlice, nil) // $ CryptographicOperation="AES. init from line 120." + gcm1.Seal(nil, nil, secretByteSlice, nil) // $ CryptographicOperation="AES. init from 6 lines above." gcm1.Open(nil, nil, secretByteSlice, nil) gcm2, _ := cipher.NewGCMWithNonceSize(block, 12) - gcm2.Seal(nil, nil, secretByteSlice, nil) // $ CryptographicOperation="AES. init from line 120." + gcm2.Seal(nil, nil, secretByteSlice, nil) // $ CryptographicOperation="AES. init from 10 lines above." gcm2.Open(nil, nil, secretByteSlice, nil) gcm3, _ := cipher.NewGCMWithRandomNonce(block) - gcm3.Seal(nil, nil, secretByteSlice, nil) // $ CryptographicOperation="AES. init from line 120." + gcm3.Seal(nil, nil, secretByteSlice, nil) // $ CryptographicOperation="AES. init from 14 lines above." gcm3.Open(nil, nil, secretByteSlice, nil) gcm4, _ := cipher.NewGCMWithTagSize(block, 12) - gcm4.Seal(nil, nil, secretByteSlice, nil) // $ CryptographicOperation="AES. init from line 120." + gcm4.Seal(nil, nil, secretByteSlice, nil) // $ CryptographicOperation="AES. init from 18 lines above." gcm4.Open(nil, nil, secretByteSlice, nil) cbcEncrypter := cipher.NewCBCEncrypter(block, nil) - cbcEncrypter.CryptBlocks(dst, secretByteSlice) // $ CryptographicOperation="AES. blockMode: CBC. init from lines 120,141." + cbcEncrypter.CryptBlocks(dst, secretByteSlice) // $ CryptographicOperation="AES. blockMode: CBC. init from 1,22 lines above." cipher.NewCBCDecrypter(block, nil).CryptBlocks(dst, secretByteSlice) ctrStream := cipher.NewCTR(block, nil) - ctrStream.XORKeyStream(dst, secretByteSlice) // $ CryptographicOperation="AES. blockMode: CTR. init from lines 120,145." + ctrStream.XORKeyStream(dst, secretByteSlice) // $ CryptographicOperation="AES. blockMode: CTR. init from 1,26 lines above." - ctrStreamReader := &cipher.StreamReader{S: ctrStream, R: bytes.NewReader(secretByteSlice)} // $ CryptographicOperation="AES. blockMode: CTR. init from lines 120,145." + ctrStreamReader := &cipher.StreamReader{S: ctrStream, R: bytes.NewReader(secretByteSlice)} // $ CryptographicOperation="AES. blockMode: CTR. init from 28,3 lines above." io.Copy(os.Stdout, ctrStreamReader) - ctrStreamWriter := &cipher.StreamWriter{S: ctrStream, W: os.Stdout} // $ CryptographicOperation="AES. blockMode: CTR. init from lines 120,145." - io.Copy(ctrStreamWriter, bytes.NewReader(secretByteSlice)) // $ CryptographicOperation="AES. blockMode: CTR. init from lines 120,145." + ctrStreamWriter := &cipher.StreamWriter{S: ctrStream, W: os.Stdout} // $ CryptographicOperation="AES. blockMode: CTR. init from 31,6 lines above." + io.Copy(ctrStreamWriter, bytes.NewReader(secretByteSlice)) // $ CryptographicOperation="AES. blockMode: CTR. init from 32,7 lines above." // deprecated cfbStream := cipher.NewCFBEncrypter(block, nil) - cfbStream.XORKeyStream(dst, secretByteSlice) // $ CryptographicOperation="AES. blockMode: CFB. init from lines 120,156." + cfbStream.XORKeyStream(dst, secretByteSlice) // $ CryptographicOperation="AES. blockMode: CFB. init from 1,37 lines above." cipher.NewCFBDecrypter(block, nil).XORKeyStream(dst, secretByteSlice) ofbStream := cipher.NewOFB(block, nil) - ofbStream.XORKeyStream(dst, secretByteSlice) // $ CryptographicOperation="AES. blockMode: OFB. init from lines 120,160." + ofbStream.XORKeyStream(dst, secretByteSlice) // $ CryptographicOperation="AES. blockMode: OFB. init from 1,41 lines above." } func CipherRc4() { c, _ := rc4.NewCipher(nil) - c.XORKeyStream(dst, getUserID()) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="RC4. init from line 166." + c.XORKeyStream(dst, getUserID()) // $ Alert[go/weak-cryptographic-algorithm] CryptographicOperation="RC4. init from 0 lines above." } diff --git a/go/ql/test/query-tests/Security/CWE-327/hashing.go b/go/ql/test/query-tests/Security/CWE-327/hashing.go index 4943da35384..0b0cbb56e74 100644 --- a/go/ql/test/query-tests/Security/CWE-327/hashing.go +++ b/go/ql/test/query-tests/Security/CWE-327/hashing.go @@ -17,65 +17,65 @@ import ( func WeakHashes() { h := md5.New() - h.Sum(secretByteSlice) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="MD5. init from line 19." - h.Write(secretByteSlice) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="MD5. init from line 19." - io.WriteString(h, secretString) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="MD5. init from line 19." - md5.Sum(secretByteSlice) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="MD5. init from line 23." + h.Sum(secretByteSlice) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="MD5. init from 1 lines above." + h.Write(secretByteSlice) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="MD5. init from 2 lines above." + io.WriteString(h, secretString) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="MD5. init from 3 lines above." + md5.Sum(secretByteSlice) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="MD5. init from 0 lines above." - sha1.New().Sum(secretByteSlice) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="SHA1. init from line 25." - sha1.Sum(secretByteSlice) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="SHA1. init from line 26." + sha1.New().Sum(secretByteSlice) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="SHA1. init from 0 lines above." + sha1.Sum(secretByteSlice) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="SHA1. init from 0 lines above." - md4.New().Sum(secretByteSlice) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="MD4. init from line 28." - ripemd160.New().Sum(secretByteSlice) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="RIPEMD160. init from line 29." + md4.New().Sum(secretByteSlice) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="MD4. init from 0 lines above." + ripemd160.New().Sum(secretByteSlice) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="RIPEMD160. init from 0 lines above." // Only alert when sensitive data is hashed. - md5.New().Sum(public) // $ CryptographicOperation="MD5. init from line 32." - md5.Sum(public) // $ CryptographicOperation="MD5. init from line 33." - sha1.New().Sum(public) // $ CryptographicOperation="SHA1. init from line 34." - sha1.Sum(public) // $ CryptographicOperation="SHA1. init from line 35." + md5.New().Sum(public) // $ CryptographicOperation="MD5. init from 0 lines above." + md5.Sum(public) // $ CryptographicOperation="MD5. init from 0 lines above." + sha1.New().Sum(public) // $ CryptographicOperation="SHA1. init from 0 lines above." + sha1.Sum(public) // $ CryptographicOperation="SHA1. init from 0 lines above." } func StrongHashes() { - sha256.New224().Sum(secretByteSlice) // $ CryptographicOperation="SHA224. init from line 39." - sha256.Sum224(secretByteSlice) // $ CryptographicOperation="SHA224. init from line 40." + sha256.New224().Sum(secretByteSlice) // $ CryptographicOperation="SHA224. init from 0 lines above." + sha256.Sum224(secretByteSlice) // $ CryptographicOperation="SHA224. init from 0 lines above." - sha256.New().Sum(secretByteSlice) // $ CryptographicOperation="SHA256. init from line 42." - sha256.Sum256(secretByteSlice) // $ CryptographicOperation="SHA256. init from line 43." + sha256.New().Sum(secretByteSlice) // $ CryptographicOperation="SHA256. init from 0 lines above." + sha256.Sum256(secretByteSlice) // $ CryptographicOperation="SHA256. init from 0 lines above." - sha512.New().Sum(secretByteSlice) // $ CryptographicOperation="SHA512. init from line 45." - sha512.Sum512(secretByteSlice) // $ CryptographicOperation="SHA512. init from line 46." + sha512.New().Sum(secretByteSlice) // $ CryptographicOperation="SHA512. init from 0 lines above." + sha512.Sum512(secretByteSlice) // $ CryptographicOperation="SHA512. init from 0 lines above." - sha512.New384().Sum(secretByteSlice) // $ CryptographicOperation="SHA384. init from line 48." - sha512.Sum384(secretByteSlice) // $ CryptographicOperation="SHA384. init from line 49." + sha512.New384().Sum(secretByteSlice) // $ CryptographicOperation="SHA384. init from 0 lines above." + sha512.Sum384(secretByteSlice) // $ CryptographicOperation="SHA384. init from 0 lines above." - sha512.New512_224().Sum(secretByteSlice) // $ CryptographicOperation="SHA512224. init from line 51." - sha512.Sum512_224(secretByteSlice) // $ CryptographicOperation="SHA512224. init from line 52." + sha512.New512_224().Sum(secretByteSlice) // $ CryptographicOperation="SHA512224. init from 0 lines above." + sha512.Sum512_224(secretByteSlice) // $ CryptographicOperation="SHA512224. init from 0 lines above." - sha512.New512_256().Sum(secretByteSlice) // $ CryptographicOperation="SHA512256. init from line 54." - sha512.Sum512_256(secretByteSlice) // $ CryptographicOperation="SHA512256. init from line 55." + sha512.New512_256().Sum(secretByteSlice) // $ CryptographicOperation="SHA512256. init from 0 lines above." + sha512.Sum512_256(secretByteSlice) // $ CryptographicOperation="SHA512256. init from 0 lines above." - sha3.New224().Sum(secretByteSlice) // $ CryptographicOperation="SHA3224. init from line 57." - sha3.Sum224(secretByteSlice) // $ CryptographicOperation="SHA3224. init from line 58." + sha3.New224().Sum(secretByteSlice) // $ CryptographicOperation="SHA3224. init from 0 lines above." + sha3.Sum224(secretByteSlice) // $ CryptographicOperation="SHA3224. init from 0 lines above." - sha3.New256().Sum(secretByteSlice) // $ CryptographicOperation="SHA3256. init from line 60." - sha3.Sum256(secretByteSlice) // $ CryptographicOperation="SHA3256. init from line 61." + sha3.New256().Sum(secretByteSlice) // $ CryptographicOperation="SHA3256. init from 0 lines above." + sha3.Sum256(secretByteSlice) // $ CryptographicOperation="SHA3256. init from 0 lines above." - sha3.New384().Sum(secretByteSlice) // $ CryptographicOperation="SHA3384. init from line 63." - sha3.Sum384(secretByteSlice) // $ CryptographicOperation="SHA3384. init from line 64." + sha3.New384().Sum(secretByteSlice) // $ CryptographicOperation="SHA3384. init from 0 lines above." + sha3.Sum384(secretByteSlice) // $ CryptographicOperation="SHA3384. init from 0 lines above." - sha3.New512().Sum(secretByteSlice) // $ CryptographicOperation="SHA3512. init from line 66." - sha3.Sum512(secretByteSlice) // $ CryptographicOperation="SHA3512. init from line 67." + sha3.New512().Sum(secretByteSlice) // $ CryptographicOperation="SHA3512. init from 0 lines above." + sha3.Sum512(secretByteSlice) // $ CryptographicOperation="SHA3512. init from 0 lines above." - sha3.NewSHAKE128().Write(secretByteSlice) // $ CryptographicOperation="SHAKE128. init from line 69." - sha3.NewCSHAKE128(nil, nil).Write(secretByteSlice) // $ CryptographicOperation="SHAKE128. init from line 70." - sha3.SumSHAKE128(secretByteSlice, 100) // $ CryptographicOperation="SHAKE128. init from line 71." + sha3.NewSHAKE128().Write(secretByteSlice) // $ CryptographicOperation="SHAKE128. init from 0 lines above." + sha3.NewCSHAKE128(nil, nil).Write(secretByteSlice) // $ CryptographicOperation="SHAKE128. init from 0 lines above." + sha3.SumSHAKE128(secretByteSlice, 100) // $ CryptographicOperation="SHAKE128. init from 0 lines above." - sha3.NewSHAKE256().Write(secretByteSlice) // $ CryptographicOperation="SHAKE256. init from line 73." - sha3.NewCSHAKE256(nil, nil).Write(secretByteSlice) // $ CryptographicOperation="SHAKE256. init from line 74." - sha3.SumSHAKE256(secretByteSlice, 100) // $ CryptographicOperation="SHAKE256. init from line 75." + sha3.NewSHAKE256().Write(secretByteSlice) // $ CryptographicOperation="SHAKE256. init from 0 lines above." + sha3.NewCSHAKE256(nil, nil).Write(secretByteSlice) // $ CryptographicOperation="SHAKE256. init from 0 lines above." + sha3.SumSHAKE256(secretByteSlice, 100) // $ CryptographicOperation="SHAKE256. init from 0 lines above." } func PasswordHashing() { password := []byte("") - sha256.Sum256(password) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="SHA256. init from line 80." + sha256.Sum256(password) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="SHA256. init from 0 lines above." } From a70d74220f5a3d77adb7394d25ec832ef16f0d9f Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 18 Nov 2025 22:56:49 +0000 Subject: [PATCH 123/127] Add test for good password hashing --- .../CWE-327/WeakSensitiveDataHashing.expected | 34 ++++++++++--------- .../query-tests/Security/CWE-327/hashing.go | 16 +++++++-- 2 files changed, 31 insertions(+), 19 deletions(-) diff --git a/go/ql/test/query-tests/Security/CWE-327/WeakSensitiveDataHashing.expected b/go/ql/test/query-tests/Security/CWE-327/WeakSensitiveDataHashing.expected index 301658e22cb..e2ee4bdd7a7 100644 --- a/go/ql/test/query-tests/Security/CWE-327/WeakSensitiveDataHashing.expected +++ b/go/ql/test/query-tests/Security/CWE-327/WeakSensitiveDataHashing.expected @@ -1,22 +1,24 @@ #select -| hashing.go:20:8:20:22 | secretByteSlice | hashing.go:20:8:20:22 | secretByteSlice | hashing.go:20:8:20:22 | secretByteSlice | $@ is used in a hashing algorithm (MD5) that is insecure. | hashing.go:20:8:20:22 | secretByteSlice | Sensitive data (secret) | -| hashing.go:21:10:21:24 | secretByteSlice | hashing.go:21:10:21:24 | secretByteSlice | hashing.go:21:10:21:24 | secretByteSlice | $@ is used in a hashing algorithm (MD5) that is insecure. | hashing.go:21:10:21:24 | secretByteSlice | Sensitive data (secret) | -| hashing.go:22:20:22:31 | secretString | hashing.go:22:20:22:31 | secretString | hashing.go:22:20:22:31 | secretString | $@ is used in a hashing algorithm (MD5) that is insecure. | hashing.go:22:20:22:31 | secretString | Sensitive data (secret) | +| hashing.go:22:8:22:22 | secretByteSlice | hashing.go:22:8:22:22 | secretByteSlice | hashing.go:22:8:22:22 | secretByteSlice | $@ is used in a hashing algorithm (MD5) that is insecure. | hashing.go:22:8:22:22 | secretByteSlice | Sensitive data (secret) | | hashing.go:23:10:23:24 | secretByteSlice | hashing.go:23:10:23:24 | secretByteSlice | hashing.go:23:10:23:24 | secretByteSlice | $@ is used in a hashing algorithm (MD5) that is insecure. | hashing.go:23:10:23:24 | secretByteSlice | Sensitive data (secret) | -| hashing.go:25:17:25:31 | secretByteSlice | hashing.go:25:17:25:31 | secretByteSlice | hashing.go:25:17:25:31 | secretByteSlice | $@ is used in a hashing algorithm (SHA1) that is insecure. | hashing.go:25:17:25:31 | secretByteSlice | Sensitive data (secret) | -| hashing.go:26:11:26:25 | secretByteSlice | hashing.go:26:11:26:25 | secretByteSlice | hashing.go:26:11:26:25 | secretByteSlice | $@ is used in a hashing algorithm (SHA1) that is insecure. | hashing.go:26:11:26:25 | secretByteSlice | Sensitive data (secret) | -| hashing.go:28:16:28:30 | secretByteSlice | hashing.go:28:16:28:30 | secretByteSlice | hashing.go:28:16:28:30 | secretByteSlice | $@ is used in a hashing algorithm (MD4) that is insecure. | hashing.go:28:16:28:30 | secretByteSlice | Sensitive data (secret) | -| hashing.go:29:22:29:36 | secretByteSlice | hashing.go:29:22:29:36 | secretByteSlice | hashing.go:29:22:29:36 | secretByteSlice | $@ is used in a hashing algorithm (RIPEMD160) that is insecure. | hashing.go:29:22:29:36 | secretByteSlice | Sensitive data (secret) | -| hashing.go:80:16:80:23 | password | hashing.go:80:16:80:23 | password | hashing.go:80:16:80:23 | password | $@ is used in a hashing algorithm (SHA256) that is insecure for password hashing, since it is not a computationally expensive hash function. | hashing.go:80:16:80:23 | password | Sensitive data (password) | +| hashing.go:24:20:24:31 | secretString | hashing.go:24:20:24:31 | secretString | hashing.go:24:20:24:31 | secretString | $@ is used in a hashing algorithm (MD5) that is insecure. | hashing.go:24:20:24:31 | secretString | Sensitive data (secret) | +| hashing.go:25:10:25:24 | secretByteSlice | hashing.go:25:10:25:24 | secretByteSlice | hashing.go:25:10:25:24 | secretByteSlice | $@ is used in a hashing algorithm (MD5) that is insecure. | hashing.go:25:10:25:24 | secretByteSlice | Sensitive data (secret) | +| hashing.go:27:17:27:31 | secretByteSlice | hashing.go:27:17:27:31 | secretByteSlice | hashing.go:27:17:27:31 | secretByteSlice | $@ is used in a hashing algorithm (SHA1) that is insecure. | hashing.go:27:17:27:31 | secretByteSlice | Sensitive data (secret) | +| hashing.go:28:11:28:25 | secretByteSlice | hashing.go:28:11:28:25 | secretByteSlice | hashing.go:28:11:28:25 | secretByteSlice | $@ is used in a hashing algorithm (SHA1) that is insecure. | hashing.go:28:11:28:25 | secretByteSlice | Sensitive data (secret) | +| hashing.go:30:16:30:30 | secretByteSlice | hashing.go:30:16:30:30 | secretByteSlice | hashing.go:30:16:30:30 | secretByteSlice | $@ is used in a hashing algorithm (MD4) that is insecure. | hashing.go:30:16:30:30 | secretByteSlice | Sensitive data (secret) | +| hashing.go:31:22:31:36 | secretByteSlice | hashing.go:31:22:31:36 | secretByteSlice | hashing.go:31:22:31:36 | secretByteSlice | $@ is used in a hashing algorithm (RIPEMD160) that is insecure. | hashing.go:31:22:31:36 | secretByteSlice | Sensitive data (secret) | +| hashing.go:82:23:82:38 | type conversion | hashing.go:82:30:82:37 | password | hashing.go:82:23:82:38 | type conversion | $@ is used in a hashing algorithm (SHA256) that is insecure for password hashing, since it is not a computationally expensive hash function. | hashing.go:82:30:82:37 | password | Sensitive data (password) | edges +| hashing.go:82:30:82:37 | password | hashing.go:82:23:82:38 | type conversion | provenance | | nodes -| hashing.go:20:8:20:22 | secretByteSlice | semmle.label | secretByteSlice | -| hashing.go:21:10:21:24 | secretByteSlice | semmle.label | secretByteSlice | -| hashing.go:22:20:22:31 | secretString | semmle.label | secretString | +| hashing.go:22:8:22:22 | secretByteSlice | semmle.label | secretByteSlice | | hashing.go:23:10:23:24 | secretByteSlice | semmle.label | secretByteSlice | -| hashing.go:25:17:25:31 | secretByteSlice | semmle.label | secretByteSlice | -| hashing.go:26:11:26:25 | secretByteSlice | semmle.label | secretByteSlice | -| hashing.go:28:16:28:30 | secretByteSlice | semmle.label | secretByteSlice | -| hashing.go:29:22:29:36 | secretByteSlice | semmle.label | secretByteSlice | -| hashing.go:80:16:80:23 | password | semmle.label | password | +| hashing.go:24:20:24:31 | secretString | semmle.label | secretString | +| hashing.go:25:10:25:24 | secretByteSlice | semmle.label | secretByteSlice | +| hashing.go:27:17:27:31 | secretByteSlice | semmle.label | secretByteSlice | +| hashing.go:28:11:28:25 | secretByteSlice | semmle.label | secretByteSlice | +| hashing.go:30:16:30:30 | secretByteSlice | semmle.label | secretByteSlice | +| hashing.go:31:22:31:36 | secretByteSlice | semmle.label | secretByteSlice | +| hashing.go:82:23:82:38 | type conversion | semmle.label | type conversion | +| hashing.go:82:30:82:37 | password | semmle.label | password | subpaths diff --git a/go/ql/test/query-tests/Security/CWE-327/hashing.go b/go/ql/test/query-tests/Security/CWE-327/hashing.go index 0b0cbb56e74..002e94568a2 100644 --- a/go/ql/test/query-tests/Security/CWE-327/hashing.go +++ b/go/ql/test/query-tests/Security/CWE-327/hashing.go @@ -5,6 +5,8 @@ package main import ( "crypto/md5" + "crypto/pbkdf2" + "crypto/rand" "crypto/sha1" "crypto/sha256" "crypto/sha3" @@ -75,7 +77,15 @@ func StrongHashes() { sha3.SumSHAKE256(secretByteSlice, 100) // $ CryptographicOperation="SHAKE256. init from 0 lines above." } -func PasswordHashing() { - password := []byte("") - sha256.Sum256(password) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="SHA256. init from 0 lines above." +func GetPasswordHashBad(password string) [32]byte { + // BAD, SHA256 is a strong hashing algorithm but it is not computationally expensive + return sha256.Sum256([]byte(password)) // $ Alert[go/weak-sensitive-data-hashing] CryptographicOperation="SHA256. init from 0 lines above." +} + +func GetPasswordHashGood(password string) []byte { + // GOOD, PBKDF2 is a strong hashing algorithm and it is computationally expensive + salt := make([]byte, 16) + rand.Read(salt) + key, _ := pbkdf2.Key(sha512.New, password, salt, 4096, 32) + return key } From 489fff9572f480fc43ab5cbbf2130a301e4e62fd Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 19 Nov 2025 11:55:22 +0100 Subject: [PATCH 124/127] Rust: Base `DataFlow::Node` on AST instead of CFG --- .../snippets/simple_constant_password.ql | 4 +- .../examples/snippets/simple_sql_injection.ql | 2 +- rust/ql/lib/codeql/rust/Concepts.qll | 13 +- rust/ql/lib/codeql/rust/dataflow/DataFlow.qll | 4 +- rust/ql/lib/codeql/rust/dataflow/Ssa.qll | 35 ++- .../codeql/rust/dataflow/internal/Content.qll | 9 +- .../dataflow/internal/DataFlowConsistency.qll | 11 - .../rust/dataflow/internal/DataFlowImpl.qll | 241 +++++++++--------- .../dataflow/internal/FlowSummaryImpl.qll | 18 +- .../codeql/rust/dataflow/internal/Node.qll | 154 +++++------ .../codeql/rust/dataflow/internal/SsaImpl.qll | 43 ++-- .../dataflow/internal/TaintTrackingImpl.qll | 23 +- .../rust/elements/AssignmentOperation.qll | 5 + .../rust/elements/internal/AstNodeImpl.qll | 3 + .../rust/elements/internal/BlockExprImpl.qll | 8 +- .../rust/elements/internal/ParenExprImpl.qll | 7 +- rust/ql/lib/codeql/rust/frameworks/Poem.qll | 2 +- .../rust/frameworks/rustcrypto/RustCrypto.qll | 2 +- .../codeql/rust/frameworks/stdlib/Stdlib.qll | 10 +- .../AccessAfterLifetimeExtensions.qll | 16 +- .../AccessInvalidPointerExtensions.qll | 2 +- rust/ql/lib/codeql/rust/security/Barriers.qll | 4 +- .../HardcodedCryptographicValueExtensions.qll | 8 +- .../security/InsecureCookieExtensions.qll | 6 +- .../codeql/rust/security/SensitiveData.qll | 5 +- .../rust/security/TaintedPathExtensions.qll | 20 +- .../UncontrolledAllocationSizeExtensions.qll | 37 ++- .../rust/security/UseOfHttpExtensions.qll | 2 +- .../WeakSensitiveDataHashingExtensions.qll | 2 +- .../regex/RegexInjectionExtensions.qll | 6 +- rust/ql/lib/utils/test/InlineFlowTest.qll | 8 +- .../security/CWE-312/CleartextLogging.ql | 2 +- .../CWE-312/CleartextStorageDatabase.ql | 2 +- .../security/CWE-825/AccessAfterLifetime.ql | 14 +- .../src/queries/unusedentities/UnusedValue.ql | 2 +- .../modelgenerator/internal/CaptureModels.qll | 2 +- .../dataflow/barrier/inline-flow.expected | 4 +- .../dataflow/local/DataFlowStep.expected | 5 + .../dataflow/local/inline-flow.expected | 16 +- .../dataflow/sources/env/InlineFlow.ql | 2 +- .../sensitivedata/SensitiveData.ql | 2 +- rust/ql/test/library-tests/variables/Ssa.ql | 8 +- 42 files changed, 403 insertions(+), 366 deletions(-) diff --git a/rust/ql/examples/snippets/simple_constant_password.ql b/rust/ql/examples/snippets/simple_constant_password.ql index 1f0e0a8e101..b0902235a96 100644 --- a/rust/ql/examples/snippets/simple_constant_password.ql +++ b/rust/ql/examples/snippets/simple_constant_password.ql @@ -25,7 +25,7 @@ import codeql.rust.dataflow.TaintTracking module ConstantPasswordConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node node) { // `node` is a string literal - node.asExpr().getExpr() instanceof StringLiteralExpr + node.asExpr() instanceof StringLiteralExpr } predicate isSink(DataFlow::Node node) { @@ -34,7 +34,7 @@ module ConstantPasswordConfig implements DataFlow::ConfigSig { call.getStaticTarget() = target and v.getParameter() = target.getParam(argIndex) and v.getText().matches("pass%") and - call.getArg(argIndex) = node.asExpr().getExpr() + call.getArg(argIndex) = node.asExpr() ) } } diff --git a/rust/ql/examples/snippets/simple_sql_injection.ql b/rust/ql/examples/snippets/simple_sql_injection.ql index 0a991118a50..653c761d7eb 100644 --- a/rust/ql/examples/snippets/simple_sql_injection.ql +++ b/rust/ql/examples/snippets/simple_sql_injection.ql @@ -25,7 +25,7 @@ module SqlInjectionConfig implements DataFlow::ConfigSig { // `node` is the first argument of a call to `sqlx_core::query::query` exists(CallExpr call | call.getStaticTarget().getCanonicalPath() = "sqlx_core::query::query" and - call.getArg(0) = node.asExpr().getExpr() + call.getArg(0) = node.asExpr() ) } } diff --git a/rust/ql/lib/codeql/rust/Concepts.qll b/rust/ql/lib/codeql/rust/Concepts.qll index 20247e08875..2e2220430e1 100644 --- a/rust/ql/lib/codeql/rust/Concepts.qll +++ b/rust/ql/lib/codeql/rust/Concepts.qll @@ -4,14 +4,13 @@ * provide concrete subclasses. */ +private import rust private import codeql.rust.dataflow.DataFlow private import codeql.rust.dataflow.internal.DataFlowImpl private import codeql.Locations private import codeql.threatmodels.ThreatModels private import codeql.rust.Frameworks private import codeql.rust.dataflow.FlowSource -private import codeql.rust.controlflow.ControlFlowGraph as Cfg -private import codeql.rust.controlflow.CfgNodes as CfgNodes private import codeql.concepts.ConceptsShared private module ConceptsShared = ConceptsMake; @@ -345,16 +344,16 @@ module Path { SafeAccessCheck() { this = DataFlow::BarrierGuard::getABarrierNode() } } - private predicate safeAccessCheck(CfgNodes::AstCfgNode g, Cfg::CfgNode node, boolean branch) { - g.(SafeAccessCheck::Range).checks(node, branch) + private predicate safeAccessCheck(AstNode g, Expr e, boolean branch) { + g.(SafeAccessCheck::Range).checks(e, branch) } /** Provides a class for modeling new path safety checks. */ module SafeAccessCheck { /** A data-flow node that checks that a path is safe to access in some way, for example by having a controlled prefix. */ - abstract class Range extends CfgNodes::AstCfgNode { - /** Holds if this guard validates `node` upon evaluating to `branch`. */ - abstract predicate checks(Cfg::CfgNode node, boolean branch); + abstract class Range extends AstNode { + /** Holds if this guard validates `e` upon evaluating to `branch`. */ + abstract predicate checks(Expr e, boolean branch); } } } diff --git a/rust/ql/lib/codeql/rust/dataflow/DataFlow.qll b/rust/ql/lib/codeql/rust/dataflow/DataFlow.qll index cfcea9eaa2d..c299671ec6d 100644 --- a/rust/ql/lib/codeql/rust/dataflow/DataFlow.qll +++ b/rust/ql/lib/codeql/rust/dataflow/DataFlow.qll @@ -8,8 +8,6 @@ private import codeql.dataflow.DataFlow private import internal.DataFlowImpl as DataFlowImpl private import internal.Node as Node private import internal.Content as Content -private import codeql.rust.controlflow.ControlFlowGraph as Cfg -private import codeql.rust.controlflow.CfgNodes as CfgNodes /** * Provides classes for performing local (intra-procedural) and global @@ -68,7 +66,7 @@ module DataFlow { * For example, the guard `g` might be a call `isSafe(x)` and the expression `e` * the argument `x`. */ - signature predicate guardChecksSig(CfgNodes::AstCfgNode g, Cfg::CfgNode e, boolean branch); + signature predicate guardChecksSig(AstNode g, Expr e, boolean branch); /** * Provides a set of barrier nodes for a guard that validates an expression. diff --git a/rust/ql/lib/codeql/rust/dataflow/Ssa.qll b/rust/ql/lib/codeql/rust/dataflow/Ssa.qll index badbef9e420..52e7d35e3b4 100644 --- a/rust/ql/lib/codeql/rust/dataflow/Ssa.qll +++ b/rust/ql/lib/codeql/rust/dataflow/Ssa.qll @@ -9,7 +9,6 @@ module Ssa { private import rust private import codeql.rust.controlflow.BasicBlocks private import codeql.rust.controlflow.ControlFlowGraph - private import codeql.rust.controlflow.CfgNodes private import codeql.rust.controlflow.internal.ControlFlowGraphImpl as CfgImpl private import internal.SsaImpl as SsaImpl @@ -51,7 +50,7 @@ module Ssa { * } * ``` */ - final CfgNode getARead() { result = SsaImpl::getARead(this) } + final Expr getARead() { result = SsaImpl::getARead(this) } /** * Gets a first control flow node that reads the value of this SSA definition. @@ -80,7 +79,7 @@ module Ssa { * } * ``` */ - final CfgNode getAFirstRead() { SsaImpl::firstRead(this, result) } + final Expr getAFirstRead() { SsaImpl::firstRead(this, result) } /** * Holds if `read1` and `read2` are adjacent reads of this SSA definition. @@ -108,7 +107,7 @@ module Ssa { * } * ``` */ - final predicate hasAdjacentReads(CfgNode read1, CfgNode read2) { + final predicate hasAdjacentReads(Expr read1, Expr read2) { SsaImpl::adjacentReadPair(this, read1, read2) } @@ -168,28 +167,28 @@ module Ssa { * ``` */ class WriteDefinition extends Definition, SsaImpl::WriteDefinition { - private CfgNode write; + private AstNode write; WriteDefinition() { - exists(BasicBlock bb, int i, Variable v, CfgNode n | + exists(BasicBlock bb, int i, Variable v, AstNode n | this.definesAt(v, bb, i) and - SsaImpl::variableWriteActual(bb, i, v, n) + SsaImpl::variableWriteActual(bb, i, v, n.getACfgNode()) | - write.(VariableAccessCfgNode).getAccess().getVariable() = v and + write.(VariableAccess).getVariable() = v and ( - write = n.(AssignmentExprCfgNode).getAWriteAccess() + write = n.(AssignmentExpr).getAWriteAccess() or - write = n.(CompoundAssignmentExprCfgNode).getLhs() + write = n.(CompoundAssignmentExpr).getLhs() ) or - not n instanceof AssignmentExprCfgNode and - not n instanceof CompoundAssignmentExprCfgNode and + not n instanceof AssignmentExpr and + not n instanceof CompoundAssignmentExpr and write = n ) } /** Gets the underlying write access. */ - final CfgNode getWriteAccess() { result = write } + final AstNode getWriteAccess() { result = write } /** * Holds if this SSA definition assigns `value` to the underlying @@ -199,19 +198,19 @@ module Ssa { * `let` statement, `let x = value`. Note that patterns on the lhs. are * currently not supported. */ - predicate assigns(ExprCfgNode value) { - exists(AssignmentExprCfgNode ae | + predicate assigns(Expr value) { + exists(AssignmentExpr ae | ae.getLhs() = write and ae.getRhs() = value ) or - exists(IdentPatCfgNode pat | pat.getName() = write | - exists(LetStmtCfgNode ls | + exists(IdentPat pat | pat.getName() = write | + exists(LetStmt ls | pat = ls.getPat() and ls.getInitializer() = value ) or - exists(LetExprCfgNode le | + exists(LetExpr le | pat = le.getPat() and le.getScrutinee() = value ) diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/Content.qll b/rust/ql/lib/codeql/rust/dataflow/internal/Content.qll index 67fed2d2def..12e4b682091 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/Content.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/Content.qll @@ -3,7 +3,6 @@ */ private import rust -private import codeql.rust.controlflow.CfgNodes private import codeql.rust.frameworks.stdlib.Builtins private import DataFlowImpl @@ -22,7 +21,7 @@ abstract class Content extends TContent { abstract class FieldContent extends Content { /** Gets an access to this field. */ pragma[nomagic] - abstract FieldExprCfgNode getAnAccess(); + abstract FieldExpr getAnAccess(); } /** A tuple field belonging to either a variant or a struct. */ @@ -41,7 +40,7 @@ class TupleFieldContent extends FieldContent, TTupleFieldContent { /** Holds if this field belongs to a struct. */ predicate isStructField(Struct s, int pos) { field.isStructField(s, pos) } - override FieldExprCfgNode getAnAccess() { field = result.getFieldExpr().getTupleField() } + override FieldExpr getAnAccess() { field = result.getTupleField() } final override string toString() { exists(Variant v, int pos, string vname | @@ -74,7 +73,7 @@ class StructFieldContent extends FieldContent, TStructFieldContent { /** Holds if this field belongs to a struct. */ predicate isStructField(Struct s, string name) { field.isStructField(s, name) } - override FieldExprCfgNode getAnAccess() { field = result.getFieldExpr().getStructField() } + override FieldExpr getAnAccess() { field = result.getStructField() } final override string toString() { exists(Variant v, string name, string vname | @@ -153,7 +152,7 @@ final class TuplePositionContent extends FieldContent, TTuplePositionContent { /** Gets the index of this tuple position. */ int getPosition() { result = pos } - override FieldExprCfgNode getAnAccess() { + override FieldExpr getAnAccess() { // TODO: limit to tuple types result.getIdentifier().getText().toInt() = pos } diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowConsistency.qll b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowConsistency.qll index d544ff888d5..731996661cb 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowConsistency.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowConsistency.qll @@ -29,17 +29,6 @@ private module Input implements InputSig { } predicate missingLocationExclude(RustDataFlow::Node n) { not exists(n.asExpr().getLocation()) } - - predicate multipleArgumentCallExclude(Node::ArgumentNode arg, DataFlowCall call) { - // An argument such as `x` in `if !x { ... }` has two successors (and hence - // two calls); one for each Boolean outcome of `x`. - exists(CfgNodes::ExprCfgNode n | - arg.isArgumentOf(call, _) and - n = call.asCallCfgNode() and - arg.asExpr().getASuccessor(any(ConditionalSuccessor c)).getASuccessor*() = n and - n.getASplit() instanceof ConditionalCompletionSplitting::ConditionalCompletionSplit - ) - } } import MakeConsistency diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll index 9fa0f0a5a83..fd6bab4d23e 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll @@ -14,7 +14,6 @@ private import codeql.rust.controlflow.internal.Scope as Scope private import codeql.rust.internal.PathResolution private import codeql.rust.internal.TypeInference as TypeInference private import codeql.rust.controlflow.ControlFlowGraph -private import codeql.rust.controlflow.CfgNodes private import codeql.rust.dataflow.Ssa private import codeql.rust.dataflow.FlowSummary private import Node @@ -60,7 +59,7 @@ final class DataFlowCallable extends TDataFlowCallable { final class DataFlowCall extends TDataFlowCall { /** Gets the underlying call in the CFG, if any. */ - CallCfgNode asCallCfgNode() { this = TCall(result) } + Call asCall() { this = TCall(result) } predicate isSummaryCall( FlowSummaryImpl::Public::SummarizedCallable c, FlowSummaryImpl::Private::SummaryNode receiver @@ -69,13 +68,13 @@ final class DataFlowCall extends TDataFlowCall { } DataFlowCallable getEnclosingCallable() { - result.asCfgScope() = this.asCallCfgNode().getExpr().getEnclosingCfgScope() + result.asCfgScope() = this.asCall().getEnclosingCfgScope() or this.isSummaryCall(result.asSummarizedCallable(), _) } string toString() { - result = this.asCallCfgNode().toString() + result = this.asCall().toString() or exists( FlowSummaryImpl::Public::SummarizedCallable c, FlowSummaryImpl::Private::SummaryNode receiver @@ -85,7 +84,7 @@ final class DataFlowCall extends TDataFlowCall { ) } - Location getLocation() { result = this.asCallCfgNode().getLocation() } + Location getLocation() { result = this.asCall().getLocation() } } /** @@ -146,13 +145,13 @@ final class ArgumentPosition extends ParameterPosition { * Note that this does not hold for the receiever expression of a method call * as the synthetic `ReceiverNode` is the argument for the `self` parameter. */ -predicate isArgumentForCall(ExprCfgNode arg, CallCfgNode call, ParameterPosition pos) { +predicate isArgumentForCall(Expr arg, Call call, ParameterPosition pos) { // TODO: Handle index expressions as calls in data flow. - not call.getCall() instanceof IndexExpr and + not call instanceof IndexExpr and ( call.getPositionalArgument(pos.getPosition()) = arg or - call.getReceiver() = arg and pos.isSelf() and not call.getCall().receiverImplicitlyBorrowed() + call.getReceiver() = arg and pos.isSelf() and not call.receiverImplicitlyBorrowed() ) } @@ -181,19 +180,24 @@ module SsaFlow { } /** - * Gets a node that may execute last in `n`, and which, when it executes last, - * will be the value of `n`. + * Gets a node that may execute last in `e`, and which, when it executes last, + * will be the value of `e`. */ -private ExprCfgNode getALastEvalNode(ExprCfgNode e) { - e = any(IfExprCfgNode n | result = [n.getThen(), n.getElse()]) or - result = e.(LoopExprCfgNode).getLoopBody() or - result = e.(ReturnExprCfgNode).getExpr() or - result = e.(BreakExprCfgNode).getExpr() or - result = e.(BlockExprCfgNode).getTailExpr() or - result = e.(MacroBlockExprCfgNode).getTailExpr() or - result = e.(MatchExprCfgNode).getArmExpr(_) or - result = e.(MacroExprCfgNode).getMacroCall().(MacroCallCfgNode).getExpandedNode() or - result.(BreakExprCfgNode).getTarget() = e +private Expr getALastEvalNode(Expr e) { + e = any(IfExpr n | result = [n.getThen(), n.getElse()]) or + result = e.(LoopExpr).getLoopBody() or + result = e.(ReturnExpr).getExpr() or + result = e.(BreakExpr).getExpr() or + e = + any(BlockExpr be | + not be.isAsync() and + result = be.getTailExpr() + ) or + result = e.(MacroBlockExpr).getTailExpr() or + result = e.(MatchExpr).getAnArm().getExpr() or + result = e.(MacroExpr).getMacroCall().getMacroCallExpansion() or + result.(BreakExpr).getTarget() = e or + result = e.(ParenExpr).getExpr() } /** @@ -211,11 +215,11 @@ private ExprCfgNode getALastEvalNode(ExprCfgNode e) { * we add a reverse flow step from `[post] { foo(); &mut a}` to `[post] &mut a`, * in order for the side-effect of `set_data` to reach `&mut a`. */ -ExprCfgNode getPostUpdateReverseStep(ExprCfgNode e, boolean preservesValue) { +Expr getPostUpdateReverseStep(Expr e, boolean preservesValue) { result = getALastEvalNode(e) and preservesValue = true or - result = e.(CastExprCfgNode).getExpr() and + result = e.(CastExpr).getExpr() and preservesValue = false } @@ -236,48 +240,48 @@ module LocalFlow { pragma[nomagic] predicate localFlowStepCommon(Node nodeFrom, Node nodeTo) { - nodeFrom.getCfgNode() = getALastEvalNode(nodeTo.getCfgNode()) + nodeFrom.asExpr() = getALastEvalNode(nodeTo.asExpr()) or // An edge from the right-hand side of a let statement to the left-hand side. - exists(LetStmtCfgNode s | - nodeFrom.getCfgNode() = s.getInitializer() and - nodeTo.getCfgNode() = s.getPat() + exists(LetStmt s | + nodeFrom.asExpr() = s.getInitializer() and + nodeTo.asPat() = s.getPat() ) or // An edge from the right-hand side of a let expression to the left-hand side. - exists(LetExprCfgNode e | - nodeFrom.getCfgNode() = e.getScrutinee() and - nodeTo.getCfgNode() = e.getPat() + exists(LetExpr e | + nodeFrom.asExpr() = e.getScrutinee() and + nodeTo.asPat() = e.getPat() ) or - exists(IdentPatCfgNode p | + exists(IdentPat p | not p.isRef() and - nodeFrom.getCfgNode() = p and - nodeTo.getCfgNode() = p.getName() + nodeFrom.asPat() = p and + nodeTo.(NameNode).getName() = p.getName() ) or - exists(SelfParamCfgNode self | - nodeFrom.getCfgNode() = self and - nodeTo.getCfgNode() = self.getName() + exists(SelfParam self | + nodeFrom.asParameter() = self and + nodeTo.(NameNode).getName() = self.getName() ) or // An edge from a pattern/expression to its corresponding SSA definition. - nodeFrom.(AstCfgFlowNode).getCfgNode() = + nodeFrom.(AstNodeNode).getAstNode() = nodeTo.(SsaNode).asDefinition().(Ssa::WriteDefinition).getWriteAccess() or - nodeFrom.(SourceParameterNode).getParameter().(ParamCfgNode).getPat() = nodeTo.asPat() + nodeFrom.(SourceParameterNode).getParameter().(Param).getPat() = nodeTo.asPat() or - exists(AssignmentExprCfgNode a | - a.getRhs() = nodeFrom.getCfgNode() and - a.getLhs() = nodeTo.getCfgNode() + exists(AssignmentExpr a | + a.getRhs() = nodeFrom.asExpr() and + a.getLhs() = nodeTo.asExpr() ) or - exists(MatchExprCfgNode match | + exists(MatchExpr match | nodeFrom.asExpr() = match.getScrutinee() and - nodeTo.asPat() = match.getArmPat(_) + nodeTo.asPat() = match.getAnArm().getPat() ) or - nodeFrom.asPat().(OrPatCfgNode).getAPat() = nodeTo.asPat() + nodeFrom.asPat().(OrPat).getAPat() = nodeTo.asPat() or // Simple value step from receiver expression to receiver node, in case // there is no implicit deref or borrow operation. @@ -305,12 +309,10 @@ predicate lambdaCreationExpr(Expr creation) { * Holds if `call` is a lambda call of kind `kind` where `receiver` is the * invoked expression. */ -predicate lambdaCallExpr(CallExprCfgNode call, LambdaCallKind kind, ExprCfgNode receiver) { +predicate lambdaCallExpr(CallExpr call, LambdaCallKind kind, Expr receiver) { receiver = call.getFunction() and // All calls to complex expressions and local variable accesses are lambda call. - exists(Expr f | f = receiver.getExpr() | - f instanceof PathExpr implies f = any(Variable v).getAnAccess() - ) and + (receiver instanceof PathExpr implies receiver = any(Variable v).getAnAccess()) and exists(kind) } @@ -379,19 +381,27 @@ module RustDataFlow implements InputSig { node instanceof CaptureNode or node instanceof ClosureParameterNode or node instanceof ReceiverNode or - node instanceof ReceiverPostUpdateNode + node.asExpr() instanceof ParenExpr or + nodeIsHidden(node.(PostUpdateNode).getPreUpdateNode()) + } + + private Expr stripParens(Expr e) { + not e instanceof ParenExpr and + result = e + or + result = stripParens(e.(ParenExpr).getExpr()) } predicate neverSkipInPathGraph(Node node) { - node.(Node::Node).getCfgNode() = any(LetStmtCfgNode s).getPat() + node.(Node::Node).asPat() = any(LetStmt s).getPat() or - node.(Node::Node).getCfgNode() = any(LetExprCfgNode e).getPat() + node.(Node::Node).asPat() = any(LetExpr e).getPat() or - node.(Node::Node).getCfgNode() = any(AssignmentExprCfgNode a).getLhs() + node.(Node::Node).asExpr() = stripParens(any(AssignmentExpr a).getLhs()) or - exists(MatchExprCfgNode match | - node.asExpr() = match.getScrutinee() or - node.asExpr() = match.getArmPat(_) + exists(MatchExpr match | + node.asExpr() = stripParens(match.getScrutinee()) or + node.asPat() = match.getAnArm().getPat() ) or FlowSummaryImpl::Private::Steps::sourceLocalStep(_, node, _) @@ -399,7 +409,7 @@ module RustDataFlow implements InputSig { FlowSummaryImpl::Private::Steps::sinkLocalStep(node, _, _) } - class DataFlowExpr = ExprCfgNode; + class DataFlowExpr = Expr; /** Gets the node corresponding to `e`. */ Node exprNode(DataFlowExpr e) { result.asExpr() = e } @@ -412,7 +422,7 @@ module RustDataFlow implements InputSig { /** Gets a viable implementation of the target of the given `Call`. */ DataFlowCallable viableCallable(DataFlowCall call) { - exists(Call c | c = call.asCallCfgNode().getCall() | + exists(Call c | c = call.asCall() | result.asCfgScope() = c.getARuntimeTarget() or exists(SummarizedCallable sc, Function staticTarget | @@ -511,79 +521,79 @@ module RustDataFlow implements InputSig { pragma[nomagic] private predicate implicitDerefToReceiver(Node node1, ReceiverNode node2, ReferenceContent c) { - TypeInference::receiverHasImplicitDeref(node1.asExpr().getExpr()) and + TypeInference::receiverHasImplicitDeref(node1.asExpr()) and node1.asExpr() = node2.getReceiver() and exists(c) } pragma[nomagic] private predicate implicitBorrowToReceiver(Node node1, ReceiverNode node2, ReferenceContent c) { - TypeInference::receiverHasImplicitBorrow(node1.asExpr().getExpr()) and + TypeInference::receiverHasImplicitBorrow(node1.asExpr()) and node1.asExpr() = node2.getReceiver() and exists(c) } pragma[nomagic] private predicate referenceExprToExpr(Node node1, Node node2, ReferenceContent c) { - node1.asExpr() = node2.asExpr().(RefExprCfgNode).getExpr() and + node1.asExpr() = node2.asExpr().(RefExpr).getExpr() and exists(c) } pragma[nomagic] additional predicate readContentStep(Node node1, Content c, Node node2) { - exists(TupleStructPatCfgNode pat, int pos | + exists(TupleStructPat pat, int pos | pat = node1.asPat() and node2.asPat() = pat.getField(pos) and - c = TTupleFieldContent(pat.getTupleStructPat().getTupleField(pos)) + c = TTupleFieldContent(pat.getTupleField(pos)) ) or - exists(TuplePatCfgNode pat, int pos | + exists(TuplePat pat, int pos | pos = c.(TuplePositionContent).getPosition() and node1.asPat() = pat and node2.asPat() = pat.getField(pos) ) or - exists(StructPatCfgNode pat, string field | + exists(StructPat pat, string field | pat = node1.asPat() and - c = TStructFieldContent(pat.getStructPat().getStructField(field)) and - node2.asPat() = pat.getFieldPat(field) + c = TStructFieldContent(pat.getStructField(field)) and + node2.asPat() = pat.getPatField(field).getPat() ) or c instanceof ReferenceContent and - node1.asPat().(RefPatCfgNode).getPat() = node2.asPat() + node1.asPat().(RefPat).getPat() = node2.asPat() or - exists(FieldExprCfgNode access | + exists(FieldExpr access | node1.asExpr() = access.getContainer() and node2.asExpr() = access and access = c.(FieldContent).getAnAccess() ) or - exists(IndexExprCfgNode arr | + exists(IndexExpr arr | c instanceof ElementContent and node1.asExpr() = arr.getBase() and node2.asExpr() = arr ) or - exists(ForExprCfgNode for | + exists(ForExpr for | c instanceof ElementContent and node1.asExpr() = for.getIterable() and node2.asPat() = for.getPat() ) or - exists(SlicePatCfgNode pat | + exists(SlicePat pat | c instanceof ElementContent and node1.asPat() = pat and node2.asPat() = pat.getAPat() ) or - exists(TryExprCfgNode try | + exists(TryExpr try | node1.asExpr() = try.getExpr() and node2.asExpr() = try and c.(TupleFieldContent) .isVariantField([any(OptionEnum o).getSome(), any(ResultEnum r).getOk()], 0) ) or - exists(PrefixExprCfgNode deref | + exists(PrefixExpr deref | c instanceof ReferenceContent and deref.getOperatorName() = "*" and node1.asExpr() = deref.getExpr() and @@ -597,7 +607,7 @@ module RustDataFlow implements InputSig { c instanceof FunctionCallReturnContent ) or - exists(AwaitExprCfgNode await | + exists(AwaitExpr await | c instanceof FutureContent and node1.asExpr() = await.getExpr() and node2.asExpr() = await @@ -644,7 +654,7 @@ module RustDataFlow implements InputSig { pragma[nomagic] private predicate fieldAssignment(Node node1, Node node2, FieldContent c) { - exists(AssignmentExprCfgNode assignment, FieldExprCfgNode access | + exists(AssignmentExpr assignment, FieldExpr access | assignment.getLhs() = access and node1.asExpr() = assignment.getRhs() and node2.asExpr() = access.getContainer() and @@ -654,7 +664,7 @@ module RustDataFlow implements InputSig { pragma[nomagic] private predicate referenceAssignment(Node node1, Node node2, ReferenceContent c) { - exists(AssignmentExprCfgNode assignment, PrefixExprCfgNode deref | + exists(AssignmentExpr assignment, PrefixExpr deref | assignment.getLhs() = deref and deref.getOperatorName() = "*" and node1.asExpr() = assignment.getRhs() and @@ -665,19 +675,19 @@ module RustDataFlow implements InputSig { pragma[nomagic] additional predicate storeContentStep(Node node1, Content c, Node node2) { - exists(CallExprCfgNode call, int pos | - node1.asExpr() = call.getArgument(pragma[only_bind_into](pos)) and + exists(CallExpr call, int pos | + node1.asExpr() = call.getArg(pragma[only_bind_into](pos)) and node2.asExpr() = call and - c = TTupleFieldContent(call.getCallExpr().getTupleField(pragma[only_bind_into](pos))) + c = TTupleFieldContent(call.getTupleField(pragma[only_bind_into](pos))) ) or - exists(StructExprCfgNode re, string field | - c = TStructFieldContent(re.getStructExpr().getStructField(field)) and - node1.asExpr() = re.getFieldExpr(field) and + exists(StructExpr re, string field | + c = TStructFieldContent(re.getStructField(field)) and + node1.asExpr() = re.getFieldExpr(field).getExpr() and node2.asExpr() = re ) or - exists(TupleExprCfgNode tuple | + exists(TupleExpr tuple | node1.asExpr() = tuple.getField(c.(TuplePositionContent).getPosition()) and node2.asExpr() = tuple ) @@ -685,23 +695,23 @@ module RustDataFlow implements InputSig { c instanceof ElementContent and node1.asExpr() = [ - node2.asExpr().(ArrayRepeatExprCfgNode).getRepeatOperand(), - node2.asExpr().(ArrayListExprCfgNode).getAnExpr() + node2.asExpr().(ArrayRepeatExpr).getRepeatOperand(), + node2.asExpr().(ArrayListExpr).getAnExpr() ] or // Store from a `ref` identifier pattern into the contained name. - exists(IdentPatCfgNode p | + exists(IdentPat p | c instanceof ReferenceContent and p.isRef() and node1.asPat() = p and - node2.(NameNode).asName() = p.getName() + node2.(NameNode).getName() = p.getName() ) or fieldAssignment(node1, node2.(PostUpdateNode).getPreUpdateNode(), c) or referenceAssignment(node1, node2.(PostUpdateNode).getPreUpdateNode(), c) or - exists(AssignmentExprCfgNode assignment, IndexExprCfgNode index | + exists(AssignmentExpr assignment, IndexExpr index | c instanceof ElementContent and assignment.getLhs() = index and node1.asExpr() = assignment.getRhs() and @@ -808,7 +818,7 @@ module RustDataFlow implements InputSig { /** Holds if `creation` is an expression that creates a lambda of kind `kind` for `c`. */ predicate lambdaCreation(Node creation, LambdaCallKind kind, DataFlowCallable c) { exists(kind) and - exists(Expr e | e = creation.asExpr().getExpr() | + exists(Expr e | e = creation.asExpr() | lambdaCreationExpr(e) and e = c.asCfgScope() or // A path expression, that resolves to a function, evaluates to a function @@ -825,9 +835,9 @@ module RustDataFlow implements InputSig { */ predicate lambdaCall(DataFlowCall call, LambdaCallKind kind, Node receiver) { ( - receiver.asExpr() = call.asCallCfgNode().(CallExprCfgNode).getFunction() and + receiver.asExpr() = call.asCall().(CallExpr).getFunction() and // All calls to complex expressions and local variable accesses are lambda call. - exists(Expr f | f = receiver.asExpr().getExpr() | + exists(Expr f | f = receiver.asExpr() | f instanceof PathExpr implies f = any(Variable v).getAnAccess() ) or @@ -854,7 +864,7 @@ module VariableCapture { private import codeql.dataflow.VariableCapture as SharedVariableCapture private import codeql.rust.controlflow.BasicBlocks as BasicBlocks - private predicate closureFlowStep(ExprCfgNode e1, ExprCfgNode e2) { + private predicate closureFlowStep(Expr e1, Expr e2) { Stages::DataFlowStage::ref() and e1 = getALastEvalNode(e2) or @@ -883,48 +893,48 @@ module VariableCapture { CapturedParameter() { p = this.getParameter() } - SourceParameterNode getParameterNode() { result.getParameter().getParamBase() = p } + SourceParameterNode getParameterNode() { result.getParameter() = p } } - class Expr extends CfgNode { - predicate hasCfgNode(BasicBlocks::BasicBlock bb, int i) { this = bb.getNode(i) } + class Expr extends AstNode { + predicate hasCfgNode(BasicBlocks::BasicBlock bb, int i) { this = bb.getNode(i).getAstNode() } } class VariableWrite extends Expr { - ExprCfgNode source; + Expr source; CapturedVariable v; VariableWrite() { - exists(AssignmentExprCfgNode assign, Variable::VariableWriteAccess write | + exists(AssignmentExpr assign, Variable::VariableWriteAccess write | this = assign and v = write.getVariable() and - assign.getLhs().getExpr() = write and + assign.getLhs() = write and assign.getRhs() = source ) or - exists(LetStmtCfgNode ls | - this = ls and - v.getPat() = ls.getPat().getPat() and - ls.getInitializer() = source - ) + this = + any(LetStmt ls | + v.getPat() = ls.getPat() and + ls.getInitializer() = source + ) or - exists(LetExprCfgNode le | - this = le and - v.getPat() = le.getPat().getPat() and - le.getScrutinee() = source - ) + this = + any(LetExpr le | + v.getPat() = le.getPat() and + le.getScrutinee() = source + ) } CapturedVariable getVariable() { result = v } - ExprCfgNode getSource() { result = source } + Expr getSource() { result = source } } - class VariableRead extends Expr instanceof ExprCfgNode { + class VariableRead extends Expr { CapturedVariable v; VariableRead() { - exists(VariableAccess read | this.getExpr() = read and v = read.getVariable() | + exists(VariableAccess read | this = read and v = read.getVariable() | read instanceof VariableReadAccess or read = any(RefExpr re).getExpr() @@ -934,10 +944,10 @@ module VariableCapture { CapturedVariable getVariable() { result = v } } - class ClosureExpr extends Expr instanceof ExprCfgNode { - ClosureExpr() { lambdaCreationExpr(super.getExpr()) } + class ClosureExpr extends Expr { + ClosureExpr() { lambdaCreationExpr(this) } - predicate hasBody(Callable body) { body = super.getExpr() } + predicate hasBody(Callable body) { body = this } predicate hasAliasedAccess(Expr f) { closureFlowStep+(this, f) and not closureFlowStep(f, _) } } @@ -991,10 +1001,11 @@ private module Cached { cached newtype TDataFlowCall = - TCall(CallCfgNode c) { + TCall(Call call) { Stages::DataFlowStage::ref() and + call.hasEnclosingCfgScope() and // TODO: Handle index expressions as calls in data flow. - not c.getCall() instanceof IndexExpr + not call instanceof IndexExpr } or TSummaryCall( FlowSummaryImpl::Public::SummarizedCallable c, FlowSummaryImpl::Private::SummaryNode receiver diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll index 2763908ae02..d9457d79510 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll @@ -9,7 +9,6 @@ private import codeql.rust.dataflow.internal.DataFlowImpl private import codeql.rust.internal.PathResolution private import codeql.rust.dataflow.FlowSummary private import codeql.rust.dataflow.Ssa -private import codeql.rust.controlflow.CfgNodes private import Content module Input implements InputSig { @@ -132,9 +131,7 @@ module Input implements InputSig { private import Make as Impl private module StepsInput implements Impl::Private::StepsInputSig { - DataFlowCall getACall(Public::SummarizedCallable sc) { - result.asCallCfgNode().getCall().getStaticTarget() = sc - } + DataFlowCall getACall(Public::SummarizedCallable sc) { result.asCall().getStaticTarget() = sc } /** Gets the argument of `source` described by `sc`, if any. */ private Expr getSourceNodeArgument(Input::SourceBase source, Impl::Private::SummaryComponent sc) { @@ -151,10 +148,9 @@ private module StepsInput implements Impl::Private::StepsInputSig { result = expr.(ClosureExpr) or // The expression is an SSA read of an assignment of a closure - exists(Ssa::Definition def, ExprCfgNode value | - def.getARead().getAstNode() = expr and - def.getAnUltimateDefinition().(Ssa::WriteDefinition).assigns(value) and - result = value.getExpr().(ClosureExpr) + exists(Ssa::Definition def | + def.getARead() = expr and + def.getAnUltimateDefinition().(Ssa::WriteDefinition).assigns(result.(ClosureExpr)) ) } @@ -164,7 +160,7 @@ private module StepsInput implements Impl::Private::StepsInputSig { RustDataFlow::Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { s.head() = Impl::Private::SummaryComponent::return(_) and - result.asExpr().getExpr() = source.getCall() + result.asExpr() = source.getCall() or exists(ArgumentPosition pos, Expr arg | s.head() = Impl::Private::SummaryComponent::parameter(pos) and @@ -172,13 +168,13 @@ private module StepsInput implements Impl::Private::StepsInputSig { result.asParameter() = getCallable(arg).getParam(pos.getPosition()) ) or - result.(RustDataFlow::PostUpdateNode).getPreUpdateNode().asExpr().getExpr() = + result.(RustDataFlow::PostUpdateNode).getPreUpdateNode().asExpr() = getSourceNodeArgument(source, s.headOfSingleton()) } RustDataFlow::Node getSinkNode(Input::SinkBase sink, Impl::Private::SummaryComponent sc) { exists(CallExprBase call, Expr arg, ArgumentPosition pos | - result.asExpr().getExpr() = arg and + result.asExpr() = arg and sc = Impl::Private::SummaryComponent::argument(pos) and call = sink.getCall() and arg = pos.getArgument(call) diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll b/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll index e46b4375c04..421f613b5c4 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll @@ -35,17 +35,17 @@ class NodePublic extends TNode { /** * Gets the expression that corresponds to this node, if any. */ - final ExprCfgNode asExpr() { this = TExprNode(result) } + final Expr asExpr() { this = TExprNode(result) } /** * Gets the parameter that corresponds to this node, if any. */ - ParamBase asParameter() { result = this.(SourceParameterNode).getParameter().getParamBase() } + ParamBase asParameter() { result = this.(SourceParameterNode).getParameter() } /** * Gets the pattern that corresponds to this node, if any. */ - final PatCfgNode asPat() { this = TPatNode(result) } + final Pat asPat() { this = TPatNode(result) } } abstract class Node extends NodePublic { @@ -56,9 +56,9 @@ abstract class Node extends NodePublic { abstract CfgScope getCfgScope(); /** - * Gets the control flow node that corresponds to this data flow node. + * Gets the AST node that corresponds to this data flow node, if any. */ - CfgNode getCfgNode() { none() } + AstNode getAstNode() { none() } } /** A data flow node used to model flow summaries. */ @@ -119,16 +119,16 @@ class FlowSummaryNode extends Node, TFlowSummaryNode { } /** A data flow node that corresponds directly to a CFG node for an AST node. */ -abstract class AstCfgFlowNode extends Node { - AstCfgNode n; +abstract class AstNodeNode extends Node { + AstNode n; - final override CfgNode getCfgNode() { result = n } + final override AstNode getAstNode() { result = n } - final override CfgScope getCfgScope() { result = n.getAstNode().getEnclosingCfgScope() } + final override CfgScope getCfgScope() { result = n.getEnclosingCfgScope() } - final override Location getLocation() { result = n.getAstNode().getLocation() } + final override Location getLocation() { result = n.getLocation() } - final override string toString() { result = n.getAstNode().toString() } + final override string toString() { result = n.toString() } } /** @@ -139,25 +139,25 @@ abstract class AstCfgFlowNode extends Node { * to multiple `ExprNode`s, just like it may correspond to multiple * `ControlFlow::Node`s. */ -class ExprNode extends AstCfgFlowNode, TExprNode { - override ExprCfgNode n; +class ExprNode extends AstNodeNode, TExprNode { + override Expr n; ExprNode() { this = TExprNode(n) } } -final class PatNode extends AstCfgFlowNode, TPatNode { - override PatCfgNode n; +final class PatNode extends AstNodeNode, TPatNode { + override Pat n; PatNode() { this = TPatNode(n) } } /** A data flow node that corresponds to a name node in the CFG. */ -final class NameNode extends AstCfgFlowNode, TNameNode { - override NameCfgNode n; +final class NameNode extends AstNodeNode, TNameNode { + override Name n; NameNode() { this = TNameNode(n) } - NameCfgNode asName() { result = n } + Name getName() { result = n } } /** @@ -169,20 +169,20 @@ abstract class ParameterNode extends Node { abstract predicate isParameterOf(DataFlowCallable c, ParameterPosition pos); } -final class SourceParameterNode extends AstCfgFlowNode, ParameterNode, TSourceParameterNode { - override ParamBaseCfgNode n; +final class SourceParameterNode extends AstNodeNode, ParameterNode, TSourceParameterNode { + override ParamBase n; SourceParameterNode() { this = TSourceParameterNode(n) } override predicate isParameterOf(DataFlowCallable c, ParameterPosition pos) { - n.getAstNode() = pos.getParameterIn(c.asCfgScope().(Callable).getParamList()) + n = pos.getParameterIn(c.asCfgScope().(Callable).getParamList()) } /** Get the parameter position of this parameter. */ ParameterPosition getPosition() { this.isParameterOf(_, result) } /** Gets the parameter in the CFG that this node corresponds to. */ - ParamBaseCfgNode getParameter() { result = n } + ParamBase getParameter() { result = n } } /** A parameter for a library callable with a flow summary. */ @@ -223,13 +223,13 @@ abstract class ArgumentNode extends Node { } final class ExprArgumentNode extends ArgumentNode, ExprNode { - private CallCfgNode call_; + private Call call_; private RustDataFlow::ArgumentPosition pos_; ExprArgumentNode() { isArgumentForCall(n, call_, pos_) } override predicate isArgumentOf(DataFlowCall call, RustDataFlow::ArgumentPosition pos) { - call.asCallCfgNode() = call_ and pos = pos_ + call.asCall() = call_ and pos = pos_ } } @@ -238,19 +238,19 @@ final class ExprArgumentNode extends ArgumentNode, ExprNode { * has taken place. */ final class ReceiverNode extends ArgumentNode, TReceiverNode { - private CallCfgNode n; + private Call n; ReceiverNode() { this = TReceiverNode(n, false) } - ExprCfgNode getReceiver() { result = n.getReceiver() } + Expr getReceiver() { result = n.getReceiver() } - MethodCallExprCfgNode getMethodCall() { result = n } + MethodCallExpr getMethodCall() { result = n } override predicate isArgumentOf(DataFlowCall call, RustDataFlow::ArgumentPosition pos) { - call.asCallCfgNode() = n and pos = TSelfParameterPosition() + call.asCall() = n and pos = TSelfParameterPosition() } - override CfgScope getCfgScope() { result = n.getAstNode().getEnclosingCfgScope() } + override CfgScope getCfgScope() { result = n.getEnclosingCfgScope() } override Location getLocation() { result = this.getReceiver().getLocation() } @@ -275,12 +275,12 @@ final class SummaryArgumentNode extends FlowSummaryNode, ArgumentNode { * passed into the closure body at an invocation. */ final class ClosureArgumentNode extends ArgumentNode, ExprNode { - private CallExprCfgNode call_; + private CallExpr call_; ClosureArgumentNode() { lambdaCallExpr(call_, _, this.asExpr()) } override predicate isArgumentOf(DataFlowCall call, RustDataFlow::ArgumentPosition pos) { - call.asCallCfgNode() = call_ and + call.asCall() = call_ and pos.isClosureSelf() } } @@ -309,7 +309,7 @@ abstract class ReturnNode extends Node { } final class ExprReturnNode extends ExprNode, ReturnNode { - ExprReturnNode() { this.getCfgNode().getASuccessor() instanceof AnnotatedExitCfgNode } + ExprReturnNode() { n.getACfgNode().getASuccessor() instanceof AnnotatedExitCfgNode } override ReturnKind getKind() { result = TNormalReturnKind() } } @@ -329,11 +329,11 @@ abstract class OutNode extends Node { } final private class ExprOutNode extends ExprNode, OutNode { - ExprOutNode() { this.asExpr() instanceof CallCfgNode } + ExprOutNode() { this.asExpr() instanceof Call } /** Gets the underlying call CFG node that includes this out node. */ override DataFlowCall getCall(ReturnKind kind) { - result.asCallCfgNode() = this.getCfgNode() and + result.asCall() = n and kind = TNormalReturnKind() } } @@ -391,27 +391,27 @@ abstract class PostUpdateNode extends PostUpdateNodePublic, Node { } final class ExprPostUpdateNode extends PostUpdateNode, TExprPostUpdateNode { - private ExprCfgNode n; + private Expr e; - ExprPostUpdateNode() { this = TExprPostUpdateNode(n) } + ExprPostUpdateNode() { this = TExprPostUpdateNode(e) } - override Node getPreUpdateNode() { result = TExprNode(n) } + override Node getPreUpdateNode() { result = TExprNode(e) } - override CfgScope getCfgScope() { result = n.getScope() } + override CfgScope getCfgScope() { result = e.getEnclosingCfgScope() } - override Location getLocation() { result = n.getLocation() } + override Location getLocation() { result = e.getLocation() } } final class ReceiverPostUpdateNode extends PostUpdateNode, TReceiverNode { - private CallCfgNode n; + private Call call; - ReceiverPostUpdateNode() { this = TReceiverNode(n, true) } + ReceiverPostUpdateNode() { this = TReceiverNode(call, true) } - override Node getPreUpdateNode() { result = TReceiverNode(n, false) } + override Node getPreUpdateNode() { result = TReceiverNode(call, false) } - override CfgScope getCfgScope() { result = n.getAstNode().getEnclosingCfgScope() } + override CfgScope getCfgScope() { result = call.getEnclosingCfgScope() } - override Location getLocation() { result = n.getReceiver().getLocation() } + override Location getLocation() { result = call.getReceiver().getLocation() } } final class SummaryPostUpdateNode extends FlowSummaryNode, PostUpdateNode { @@ -445,38 +445,46 @@ final class CastNode extends ExprNode { cached newtype TNode = - TExprNode(ExprCfgNode n) { Stages::DataFlowStage::ref() } or - TSourceParameterNode(ParamBaseCfgNode p) or - TPatNode(PatCfgNode p) or - TNameNode(NameCfgNode n) { n.getName() = any(Variable v).getName() } or - TExprPostUpdateNode(ExprCfgNode e) { - isArgumentForCall(e, _, _) - or - lambdaCallExpr(_, _, e) - or - lambdaCreationExpr(e.getExpr()) - or - // Whenever `&mut e` has a post-update node we also create one for `e`. - // E.g., for `e` in `f(..., &mut e, ...)` or `*(&mut e) = ...`. - e = any(RefExprCfgNode ref | ref.isMut() and exists(TExprPostUpdateNode(ref))).getExpr() - or - e = - [ - any(IndexExprCfgNode i).getBase(), // - any(FieldExprCfgNode access).getContainer(), // - any(TryExprCfgNode try).getExpr(), // - any(PrefixExprCfgNode pe | pe.getOperatorName() = "*").getExpr(), // - any(AwaitExprCfgNode a).getExpr(), // - any(MethodCallExprCfgNode mc).getReceiver(), // - getPostUpdateReverseStep(any(PostUpdateNode n).getPreUpdateNode().asExpr(), _) - ] + TExprNode(Expr e) { e.hasEnclosingCfgScope() and Stages::DataFlowStage::ref() } or + TSourceParameterNode(ParamBase p) { p.hasEnclosingCfgScope() } or + TPatNode(Pat p) { p.hasEnclosingCfgScope() } or + TNameNode(Name n) { n = any(Variable v).getName() and n.hasEnclosingCfgScope() } or + TExprPostUpdateNode(Expr e) { + e.hasEnclosingCfgScope() and + ( + isArgumentForCall(e, _, _) + or + lambdaCallExpr(_, _, e) + or + lambdaCreationExpr(e) + or + // Whenever `&mut e` has a post-update node we also create one for `e`. + // E.g., for `e` in `f(..., &mut e, ...)` or `*(&mut e) = ...`. + e = any(RefExpr ref | ref.isMut() and exists(TExprPostUpdateNode(ref))).getExpr() + or + e = + [ + any(IndexExpr i).getBase(), // + any(FieldExpr access).getContainer(), // + any(TryExpr try).getExpr(), // + any(PrefixExpr pe | pe.getOperatorName() = "*").getExpr(), // + any(AwaitExpr a).getExpr(), // + any(MethodCallExpr mc).getReceiver(), // + getPostUpdateReverseStep(any(PostUpdateNode n).getPreUpdateNode().asExpr(), _) + ] + ) } or - TReceiverNode(CallCfgNode mc, Boolean isPost) { - mc.getCall().receiverImplicitlyBorrowed() and + TReceiverNode(Call call, Boolean isPost) { + call.hasEnclosingCfgScope() and + call.receiverImplicitlyBorrowed() and // TODO: Handle index expressions as calls in data flow. - not mc.getCall() instanceof IndexExpr + not call instanceof IndexExpr } or TSsaNode(SsaImpl::DataFlowIntegration::SsaNode node) or - TFlowSummaryNode(FlowSummaryImpl::Private::SummaryNode sn) or + TFlowSummaryNode(FlowSummaryImpl::Private::SummaryNode sn) { + forall(AstNode n | n = sn.getSinkElement() or n = sn.getSourceElement() | + n.hasEnclosingCfgScope() + ) + } or TClosureSelfReferenceNode(CfgScope c) { lambdaCreationExpr(c) } or TCaptureNode(VariableCapture::Flow::SynthesizedCaptureNode cn) diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll index 49b40474c98..29674cbd1df 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll @@ -2,7 +2,6 @@ private import rust private import codeql.rust.controlflow.BasicBlocks as BasicBlocks private import BasicBlocks private import codeql.rust.controlflow.ControlFlowGraph as Cfg -private import codeql.rust.controlflow.CfgNodes as CfgNodes private import Cfg private import codeql.rust.controlflow.internal.ControlFlowGraphImpl as ControlFlowGraphImpl private import codeql.ssa.Ssa as SsaImplCommon @@ -229,11 +228,11 @@ private module Cached { } cached - CfgNode getARead(Definition def) { + Expr getARead(Definition def) { exists(Variable v, BasicBlock bb, int i | Impl::ssaDefReachesRead(v, def, bb, i) and variableReadCertain(bb, i, v.getAnAccess(), v) and - result = bb.getNode(i) + result = bb.getNode(i).getAstNode() ) } @@ -247,8 +246,10 @@ private module Cached { * without passing through any other non-pseudo read. */ cached - predicate firstRead(Definition def, CfgNode read) { - exists(BasicBlock bb, int i | Impl::firstUse(def, bb, i, true) and read = bb.getNode(i)) + predicate firstRead(Definition def, Expr read) { + exists(BasicBlock bb, int i | + Impl::firstUse(def, bb, i, true) and read = bb.getNode(i).getAstNode() + ) } /** @@ -257,12 +258,12 @@ private module Cached { * passing through another non-pseudo read. */ cached - predicate adjacentReadPair(Definition def, CfgNode read1, CfgNode read2) { + predicate adjacentReadPair(Definition def, Expr read1, Expr read2) { exists(BasicBlock bb1, int i1, BasicBlock bb2, int i2, Variable v | Impl::ssaDefReachesRead(v, def, bb1, i1) and Impl::adjacentUseUse(bb1, i1, bb2, i2, v, true) and - read1 = bb1.getNode(i1) and - read2 = bb2.getNode(i2) + read1 = bb1.getNode(i1).getAstNode() and + read2 = bb2.getNode(i2).getAstNode() ) } @@ -287,7 +288,7 @@ private module Cached { DataFlowIntegrationImpl::localMustFlowStep(v, nodeFrom, nodeTo) } - signature predicate guardChecksSig(CfgNodes::AstCfgNode g, Cfg::CfgNode e, boolean branch); + signature predicate guardChecksSig(AstNode g, Expr e, boolean branch); cached // nothing is actually cached module BarrierGuard { @@ -310,47 +311,49 @@ private module Cached { import Cached private import codeql.rust.dataflow.Ssa +private class ExprAlias = Expr; + private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInputSig { private import codeql.rust.dataflow.internal.DataFlowImpl as DataFlowImpl private import codeql.util.Boolean - class Expr extends CfgNodes::AstCfgNode { - predicate hasCfgNode(BasicBlock bb, int i) { this = bb.getNode(i) } + class Expr extends ExprAlias { + predicate hasCfgNode(BasicBlock bb, int i) { this.getACfgNode() = bb.getNode(i) } } Expr getARead(Definition def) { result = Cached::getARead(def) } predicate ssaDefHasSource(WriteDefinition def) { none() } // handled in `DataFlowImpl.qll` instead - private predicate isArg(CfgNodes::CallExprBaseCfgNode call, CfgNodes::ExprCfgNode e) { - call.getArgument(_) = e + private predicate isArg(CallExprBase call, Expr e) { + call.getAnArg() = e or - call.(CfgNodes::MethodCallExprCfgNode).getReceiver() = e + call.(MethodCallExpr).getReceiver() = e or - exists(CfgNodes::ExprCfgNode mid | + exists(Expr mid | isArg(call, mid) and e = DataFlowImpl::getPostUpdateReverseStep(mid, _) ) } predicate allowFlowIntoUncertainDef(UncertainWriteDefinition def) { - exists(CfgNodes::CallExprBaseCfgNode call, Variable v, BasicBlock bb, int i | + exists(Variable v, BasicBlock bb, int i | def.definesAt(v, bb, i) and mutablyBorrows(bb.getNode(i).getAstNode(), v) and - isArg(call, bb.getNode(i)) + isArg(_, bb.getNode(i).getAstNode()) ) } class GuardValue = Boolean; - class Guard extends CfgNodes::AstCfgNode { + class Guard extends AstNode { /** * Holds if the evaluation of this guard to `branch` corresponds to the edge * from `bb1` to `bb2`. */ predicate hasValueBranchEdge(BasicBlock bb1, BasicBlock bb2, GuardValue branch) { exists(Cfg::ConditionalSuccessor s | - this = bb1.getANode() and + this = bb1.getANode().getAstNode() and bb2 = bb1.getASuccessor(s) and s.getValue() = branch ) @@ -369,7 +372,7 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu /** Holds if the guard `guard` controls block `bb` upon evaluating to `branch`. */ predicate guardDirectlyControlsBlock(Guard guard, BasicBlock bb, GuardValue branch) { exists(ConditionBasicBlock conditionBlock, ConditionalSuccessor s | - guard = conditionBlock.getLastNode() and + guard = conditionBlock.getLastNode().getAstNode() and s.getValue() = branch and conditionBlock.edgeDominates(bb, s) ) diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/TaintTrackingImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/TaintTrackingImpl.qll index b702c514c1a..544bed64730 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/TaintTrackingImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/TaintTrackingImpl.qll @@ -1,6 +1,5 @@ private import rust private import codeql.dataflow.TaintTracking -private import codeql.rust.controlflow.CfgNodes private import codeql.rust.dataflow.DataFlow private import codeql.rust.dataflow.FlowSummary private import DataFlowImpl @@ -21,22 +20,22 @@ module RustTaintTracking implements InputSig { Stages::DataFlowStage::ref() and model = "" and ( - exists(BinaryExprCfgNode binary | + exists(BinaryExpr binary | binary.getOperatorName() = ["+", "-", "*", "/", "%", "&", "|", "^", "<<", ">>"] and pred.asExpr() = [binary.getLhs(), binary.getRhs()] and succ.asExpr() = binary ) or - exists(PrefixExprCfgNode prefix | + exists(PrefixExpr prefix | prefix.getOperatorName() = ["-", "!"] and pred.asExpr() = prefix.getExpr() and succ.asExpr() = prefix ) or - pred.asExpr() = succ.asExpr().(CastExprCfgNode).getExpr() + pred.asExpr() = succ.asExpr().(CastExpr).getExpr() or - exists(IndexExprCfgNode index | - index.getIndex() instanceof RangeExprCfgNode and + exists(IndexExpr index | + index.getIndex() instanceof RangeExpr and pred.asExpr() = index.getBase() and succ.asExpr() = index ) @@ -52,8 +51,16 @@ module RustTaintTracking implements InputSig { cs.getContent() instanceof ReferenceContent ) or - exists(FormatArgsExprCfgNode format | succ.asExpr() = format | - pred.asExpr() = [format.getArgumentExpr(_), format.getFormatTemplateVariableAccess(_)] + exists(FormatArgsExpr format | succ.asExpr() = format | + pred.asExpr() = format.getAnArg().getExpr() + or + pred.asExpr() = + any(FormatTemplateVariableAccess v | + exists(Format f | + f = format.getAFormat() and + v.getArgument() = [f.getArgumentRef(), f.getWidthArgument(), f.getPrecisionArgument()] + ) + ) ) or succ.(Node::PostUpdateNode).getPreUpdateNode().asExpr() = diff --git a/rust/ql/lib/codeql/rust/elements/AssignmentOperation.qll b/rust/ql/lib/codeql/rust/elements/AssignmentOperation.qll index a3ca1722b57..6fbbdf7cd81 100644 --- a/rust/ql/lib/codeql/rust/elements/AssignmentOperation.qll +++ b/rust/ql/lib/codeql/rust/elements/AssignmentOperation.qll @@ -25,6 +25,11 @@ final class AssignmentOperation = AssignmentOperationImpl; final class AssignmentExpr extends AssignmentOperationImpl { AssignmentExpr() { this.getOperatorName() = "=" } + /** + * Gets a write access that occurs in the left-hand side of this assignment expression. + */ + VariableWriteAccess getAWriteAccess() { this = result.getAssignmentExpr() } + override string getAPrimaryQlClass() { result = "AssignmentExpr" } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/AstNodeImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AstNodeImpl.qll index 69138190dba..554942f0fdd 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AstNodeImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AstNodeImpl.qll @@ -59,6 +59,9 @@ module Impl { ) } + /** Holds if this node is inside a CFG scope. */ + predicate hasEnclosingCfgScope() { exists(this.getEnclosingCfgScope()) } + /** Gets the block that encloses this node, if any. */ cached BlockExpr getEnclosingBlock() { diff --git a/rust/ql/lib/codeql/rust/elements/internal/BlockExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/BlockExprImpl.qll index 9011109b194..6fcba9900be 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/BlockExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/BlockExprImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `BlockExpr`. * @@ -26,5 +25,10 @@ module Impl { * } * ``` */ - class BlockExpr extends Generated::BlockExpr { } + class BlockExpr extends Generated::BlockExpr { + /** + * Gets the tail expression of this block, if it exists. + */ + Expr getTailExpr() { result = this.getStmtList().getTailExpr() } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ParenExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ParenExprImpl.qll index e8c800bc9b8..158d20e0703 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ParenExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ParenExprImpl.qll @@ -21,6 +21,11 @@ module Impl { * ``` */ class ParenExpr extends Generated::ParenExpr { - override string toStringImpl() { result = "(" + this.getExpr().toAbbreviatedString() + ")" } + override string toStringImpl() { + result = "(" + this.getExpr().toAbbreviatedString() + ")" + or + not exists(this.getExpr().toAbbreviatedString()) and + result = "(...)" + } } } diff --git a/rust/ql/lib/codeql/rust/frameworks/Poem.qll b/rust/ql/lib/codeql/rust/frameworks/Poem.qll index 2554d845293..ad57ba1dc94 100644 --- a/rust/ql/lib/codeql/rust/frameworks/Poem.qll +++ b/rust/ql/lib/codeql/rust/frameworks/Poem.qll @@ -11,7 +11,7 @@ private import codeql.rust.Concepts private class PoemHandlerParam extends RemoteSource::Range { PoemHandlerParam() { exists(TupleStructPat param | - this.asPat().getPat() = param.getAField() and + this.asPat() = param.getAField() and param.getStruct().getCanonicalPath() = ["poem::web::query::Query", "poem::web::path::Path"] ) } diff --git a/rust/ql/lib/codeql/rust/frameworks/rustcrypto/RustCrypto.qll b/rust/ql/lib/codeql/rust/frameworks/rustcrypto/RustCrypto.qll index b34b3abf7cb..b6accba0734 100644 --- a/rust/ql/lib/codeql/rust/frameworks/rustcrypto/RustCrypto.qll +++ b/rust/ql/lib/codeql/rust/frameworks/rustcrypto/RustCrypto.qll @@ -25,7 +25,7 @@ class StreamCipherInit extends Cryptography::CryptographicOperation::Range { // a call to `cipher::KeyInit::new`, `cipher::KeyInit::new_from_slice`, // `cipher::KeyIvInit::new`, `cipher::KeyIvInit::new_from_slices`, `rc2::Rc2::new_with_eff_key_len` or similar. exists(CallExprBase ce, string rawAlgorithmName | - ce = this.asExpr().getExpr() and + ce = this.asExpr() and ce.getStaticTarget().(Function).getName().getText() = ["new", "new_from_slice", "new_with_eff_key_len", "new_from_slices"] and // extract the algorithm name from the type of `ce` or its receiver. diff --git a/rust/ql/lib/codeql/rust/frameworks/stdlib/Stdlib.qll b/rust/ql/lib/codeql/rust/frameworks/stdlib/Stdlib.qll index 773aa77f80f..d078f08c168 100644 --- a/rust/ql/lib/codeql/rust/frameworks/stdlib/Stdlib.qll +++ b/rust/ql/lib/codeql/rust/frameworks/stdlib/Stdlib.qll @@ -4,20 +4,16 @@ private import rust private import codeql.rust.Concepts -private import codeql.rust.controlflow.ControlFlowGraph as Cfg -private import codeql.rust.controlflow.CfgNodes as CfgNodes private import codeql.rust.dataflow.DataFlow private import codeql.rust.internal.PathResolution /** * A call to the `starts_with` method on a `Path`. */ -private class StartswithCall extends Path::SafeAccessCheck::Range, CfgNodes::MethodCallExprCfgNode { - StartswithCall() { - this.getMethodCallExpr().getStaticTarget().getCanonicalPath() = "::starts_with" - } +private class StartswithCall extends Path::SafeAccessCheck::Range, MethodCallExpr { + StartswithCall() { this.getStaticTarget().getCanonicalPath() = "::starts_with" } - override predicate checks(Cfg::CfgNode e, boolean branch) { + override predicate checks(Expr e, boolean branch) { e = this.getReceiver() and branch = true } diff --git a/rust/ql/lib/codeql/rust/security/AccessAfterLifetimeExtensions.qll b/rust/ql/lib/codeql/rust/security/AccessAfterLifetimeExtensions.qll index 4b3177c9df9..6e8077ebae0 100644 --- a/rust/ql/lib/codeql/rust/security/AccessAfterLifetimeExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/AccessAfterLifetimeExtensions.qll @@ -39,6 +39,14 @@ module AccessAfterLifetime { */ abstract class Barrier extends DataFlow::Node { } + /** + * Holds if the value `source` points to accesses a variable `target` with scope `scope`. + */ + pragma[nomagic] + predicate sourceValueScope(Source source, Variable target, BlockExpr scope) { + valueScope(source.getTarget(), target, scope) + } + /** * Holds if the pair `(source, sink)`, that represents a flow from a * pointer or reference to a dereference, has its dereference outside the @@ -47,8 +55,8 @@ module AccessAfterLifetime { bindingset[source, sink] predicate dereferenceAfterLifetime(Source source, Sink sink, Variable target) { exists(BlockExpr valueScope, BlockExpr accessScope | - valueScope(source.getTarget(), target, valueScope) and - accessScope = sink.asExpr().getExpr().getEnclosingBlock() and + sourceValueScope(source, target, valueScope) and + accessScope = sink.asExpr().getEnclosingBlock() and not mayEncloseOnStack(valueScope, accessScope) ) } @@ -104,7 +112,7 @@ module AccessAfterLifetime { private class RefExprSource extends Source { Expr targetValue; - RefExprSource() { this.asExpr().getExpr().(RefExpr).getExpr() = targetValue } + RefExprSource() { this.asExpr().(RefExpr).getExpr() = targetValue } override Expr getTarget() { result = targetValue } } @@ -114,6 +122,6 @@ module AccessAfterLifetime { * variables through closures properly. */ private class ClosureBarrier extends Barrier { - ClosureBarrier() { this.asExpr().getExpr().getEnclosingCallable() instanceof ClosureExpr } + ClosureBarrier() { this.asExpr().getEnclosingCallable() instanceof ClosureExpr } } } diff --git a/rust/ql/lib/codeql/rust/security/AccessInvalidPointerExtensions.qll b/rust/ql/lib/codeql/rust/security/AccessInvalidPointerExtensions.qll index 444db014209..bddc2d8ee5a 100644 --- a/rust/ql/lib/codeql/rust/security/AccessInvalidPointerExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/AccessInvalidPointerExtensions.qll @@ -50,7 +50,7 @@ module AccessInvalidPointer { * A pointer access using the unary `*` operator. */ private class DereferenceSink extends Sink { - DereferenceSink() { any(DerefExpr p).getExpr() = this.asExpr().getExpr() } + DereferenceSink() { any(DerefExpr p).getExpr() = this.asExpr() } } /** diff --git a/rust/ql/lib/codeql/rust/security/Barriers.qll b/rust/ql/lib/codeql/rust/security/Barriers.qll index cc5ac55fd1b..a55e30aa13e 100644 --- a/rust/ql/lib/codeql/rust/security/Barriers.qll +++ b/rust/ql/lib/codeql/rust/security/Barriers.qll @@ -16,7 +16,7 @@ private import codeql.rust.frameworks.stdlib.Builtins as Builtins class NumericTypeBarrier extends DataFlow::Node { NumericTypeBarrier() { exists(StructType t, Struct s | - t = TypeInference::inferType(this.asExpr().getExpr()) and + t = TypeInference::inferType(this.asExpr()) and s = t.getStruct() | s instanceof Builtins::NumericType or @@ -32,7 +32,7 @@ class NumericTypeBarrier extends DataFlow::Node { class IntegralOrBooleanTypeBarrier extends DataFlow::Node { IntegralOrBooleanTypeBarrier() { exists(StructType t, Struct s | - t = TypeInference::inferType(this.asExpr().getExpr()) and + t = TypeInference::inferType(this.asExpr()) and s = t.getStruct() | s instanceof Builtins::IntegralType or diff --git a/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll b/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll index bc487e42ef0..a7fb35d138b 100644 --- a/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll @@ -63,7 +63,7 @@ module HardcodedCryptographicValue { * A literal, considered as a flow source. */ private class LiteralSource extends Source { - LiteralSource() { this.asExpr().getExpr() instanceof LiteralExpr } + LiteralSource() { this.asExpr() instanceof LiteralExpr } } /** @@ -75,8 +75,8 @@ module HardcodedCryptographicValue { */ private class ArrayListSource extends Source { ArrayListSource() { - this.asExpr().getExpr().(ArrayListExpr).getExpr(_) instanceof LiteralExpr or - this.asExpr().getExpr().(ArrayRepeatExpr).getRepeatOperand() instanceof LiteralExpr + this.asExpr().(ArrayListExpr).getExpr(_) instanceof LiteralExpr or + this.asExpr().(ArrayRepeatExpr).getRepeatOperand() instanceof LiteralExpr } } @@ -106,7 +106,7 @@ module HardcodedCryptographicValue { exists(CallExprBase ce | ce.getStaticTarget().(Addressable).getCanonicalPath() = ["getrandom::fill", "getrandom::getrandom"] and - this.asExpr().getExpr().getParentNode*() = ce.getArgList().getArg(0) + this.asExpr().getParentNode*() = ce.getArgList().getArg(0) ) } } diff --git a/rust/ql/lib/codeql/rust/security/InsecureCookieExtensions.qll b/rust/ql/lib/codeql/rust/security/InsecureCookieExtensions.qll index d5d15c821d8..8e9f855209e 100644 --- a/rust/ql/lib/codeql/rust/security/InsecureCookieExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/InsecureCookieExtensions.qll @@ -85,13 +85,13 @@ module InsecureCookie { cookieOptionalBarrier(summaryNode, attrib, arg) and // find a call and arg referenced by this optional barrier ce.getStaticTarget() = summaryNode.getSummarizedCallable() and - ce.getArg(arg) = argNode.asExpr().getExpr() and + ce.getArg(arg) = argNode.asExpr() and // check if the argument is always `true` ( if forex(DataFlow::Node argSourceNode, BooleanLiteralExpr argSourceValue | DataFlow::localFlow(argSourceNode, argNode) and - argSourceValue = argSourceNode.asExpr().getExpr() + argSourceValue = argSourceNode.asExpr() | argSourceValue.getTextValue() = "true" ) @@ -101,7 +101,7 @@ module InsecureCookie { // and find the node where this happens (we can't just use the flow summary node, since its // shared across all calls to the modeled function, we need a node specific to this call) ( - node.asExpr().getExpr() = ce.(MethodCallExpr).getReceiver() // e.g. `a` in `a.set_secure(true)` + node.asExpr() = ce.(MethodCallExpr).getReceiver() // e.g. `a` in `a.set_secure(true)` or exists(BasicBlock bb, int i | // associated SSA node diff --git a/rust/ql/lib/codeql/rust/security/SensitiveData.qll b/rust/ql/lib/codeql/rust/security/SensitiveData.qll index 4e6ba21a2d2..1b6abdd52fb 100644 --- a/rust/ql/lib/codeql/rust/security/SensitiveData.qll +++ b/rust/ql/lib/codeql/rust/security/SensitiveData.qll @@ -29,7 +29,7 @@ private class SensitiveDataCall extends SensitiveData { SensitiveDataCall() { exists(CallExprBase call, string name | - call = this.asExpr().getExpr() and + call = this.asExpr() and name = [ call.getStaticTarget().(Function).getName().getText(), @@ -50,7 +50,6 @@ private class SensitiveVariableAccess extends SensitiveData { SensitiveVariableAccess() { HeuristicNames::nameIndicatesSensitiveData(this.asExpr() - .getExpr() .(VariableAccess) .getVariable() .(Variable) @@ -69,7 +68,7 @@ private class SensitiveFieldAccess extends SensitiveData { SensitiveDataClassification classification; SensitiveFieldAccess() { - exists(FieldExpr fe | fieldExprParentField*(fe) = this.asExpr().getExpr() | + exists(FieldExpr fe | fieldExprParentField*(fe) = this.asExpr() | HeuristicNames::nameIndicatesSensitiveData(fe.getIdentifier().getText(), classification) ) } diff --git a/rust/ql/lib/codeql/rust/security/TaintedPathExtensions.qll b/rust/ql/lib/codeql/rust/security/TaintedPathExtensions.qll index 9310999bd3d..2d097c0aa4c 100644 --- a/rust/ql/lib/codeql/rust/security/TaintedPathExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/TaintedPathExtensions.qll @@ -8,7 +8,6 @@ private import codeql.rust.dataflow.TaintTracking private import codeql.rust.Concepts private import codeql.rust.dataflow.internal.DataFlowImpl private import codeql.rust.controlflow.ControlFlowGraph as Cfg -private import codeql.rust.controlflow.CfgNodes as CfgNodes /** * Provides default sources, sinks and barriers for detecting path injection @@ -50,16 +49,16 @@ module TaintedPath { } } -private predicate sanitizerGuard(CfgNodes::AstCfgNode g, Cfg::CfgNode node, boolean branch) { - g.(SanitizerGuard::Range).checks(node, branch) +private predicate sanitizerGuard(AstNode g, Expr e, boolean branch) { + g.(SanitizerGuard::Range).checks(e, branch) } /** Provides a class for modeling new path safety checks. */ module SanitizerGuard { /** A data-flow node that checks that a path is safe to access. */ - abstract class Range extends CfgNodes::AstCfgNode { - /** Holds if this guard validates `node` upon evaluating to `branch`. */ - abstract predicate checks(Cfg::CfgNode node, boolean branch); + abstract class Range extends AstNode { + /** Holds if this guard validates `e` upon evaluating to `branch`. */ + abstract predicate checks(Expr e, boolean branch); } } @@ -67,15 +66,14 @@ module SanitizerGuard { * A check of the form `!strings.Contains(nd, "..")`, considered as a sanitizer guard for * path traversal. */ -private class DotDotCheck extends SanitizerGuard::Range, CfgNodes::MethodCallExprCfgNode { +private class DotDotCheck extends SanitizerGuard::Range, MethodCallExpr { DotDotCheck() { - this.getAstNode().(CallExprBase).getStaticTarget().(Addressable).getCanonicalPath() = + this.getStaticTarget().(Addressable).getCanonicalPath() = ["::contains", "::contains"] and - this.getArgument(0).getAstNode().(LiteralExpr).getTextValue() = - ["\"..\"", "\"../\"", "\"..\\\""] + this.getArg(0).(LiteralExpr).getTextValue() = ["\"..\"", "\"../\"", "\"..\\\""] } - override predicate checks(Cfg::CfgNode e, boolean branch) { + override predicate checks(Expr e, boolean branch) { e = this.getReceiver() and branch = false } diff --git a/rust/ql/lib/codeql/rust/security/UncontrolledAllocationSizeExtensions.qll b/rust/ql/lib/codeql/rust/security/UncontrolledAllocationSizeExtensions.qll index 2f4898f6e9d..c6251563ea6 100644 --- a/rust/ql/lib/codeql/rust/security/UncontrolledAllocationSizeExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/UncontrolledAllocationSizeExtensions.qll @@ -7,8 +7,6 @@ import rust private import codeql.rust.Concepts private import codeql.rust.dataflow.DataFlow private import codeql.rust.dataflow.FlowSink -private import codeql.rust.controlflow.ControlFlowGraph as Cfg -private import codeql.rust.controlflow.CfgNodes as CfgNodes /** * Provides default sources, sinks and barriers for detecting uncontrolled @@ -45,23 +43,24 @@ module UncontrolledAllocationSize { /** * Holds if comparison `g` having result `branch` indicates an upper bound for the sub-expression - * `node`. For example when the comparison `x < 10` is true, we have an upper bound for `x`. + * `e`. For example when the comparison `x < 10` is true, we have an upper bound for `x`. */ - private predicate isUpperBoundCheck(CfgNodes::AstCfgNode g, Cfg::CfgNode node, boolean branch) { - exists(BinaryExpr cmp | g = cmp.getACfgNode() | - node = cmp.(RelationalOperation).getLesserOperand().getACfgNode() and - branch = true - or - node = cmp.(RelationalOperation).getGreaterOperand().getACfgNode() and - branch = false - or - cmp instanceof EqualsOperation and - [cmp.getLhs(), cmp.getRhs()].getACfgNode() = node and - branch = true - or - cmp instanceof NotEqualsOperation and - [cmp.getLhs(), cmp.getRhs()].getACfgNode() = node and - branch = false - ) + private predicate isUpperBoundCheck(AstNode g, Expr e, boolean branch) { + g = + any(BinaryExpr cmp | + e = cmp.(RelationalOperation).getLesserOperand() and + branch = true + or + e = cmp.(RelationalOperation).getGreaterOperand() and + branch = false + or + cmp instanceof EqualsOperation and + [cmp.getLhs(), cmp.getRhs()] = e and + branch = true + or + cmp instanceof NotEqualsOperation and + [cmp.getLhs(), cmp.getRhs()] = e and + branch = false + ) } } diff --git a/rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll b/rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll index bd91cde238f..076ed42edfb 100644 --- a/rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll @@ -50,7 +50,7 @@ module UseOfHttp { * An HTTP string literal as a source. */ private class HttpStringLiteralAsSource extends Source { - HttpStringLiteralAsSource() { this.asExpr().getExpr() instanceof HttpStringLiteral } + HttpStringLiteralAsSource() { this.asExpr() instanceof HttpStringLiteral } } /** diff --git a/rust/ql/lib/codeql/rust/security/WeakSensitiveDataHashingExtensions.qll b/rust/ql/lib/codeql/rust/security/WeakSensitiveDataHashingExtensions.qll index 7b6b6c801d7..bd29f0498b3 100644 --- a/rust/ql/lib/codeql/rust/security/WeakSensitiveDataHashingExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/WeakSensitiveDataHashingExtensions.qll @@ -189,7 +189,7 @@ class ModeledHashOperation extends Cryptography::CryptographicOperation::Range { exists(CallExpr call | sinkNode(input, "hasher-input") and call = input.(Node::FlowSummaryNode).getSinkElement().getCall() and - call = this.asExpr().getExpr() and + call = this.asExpr() and algorithmName = call.getFunction().(PathExpr).getPath().getQualifier().getText() ) } diff --git a/rust/ql/lib/codeql/rust/security/regex/RegexInjectionExtensions.qll b/rust/ql/lib/codeql/rust/security/regex/RegexInjectionExtensions.qll index 750517708af..7c445bcbfd8 100644 --- a/rust/ql/lib/codeql/rust/security/regex/RegexInjectionExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/regex/RegexInjectionExtensions.qll @@ -6,7 +6,6 @@ private import codeql.util.Unit private import rust private import codeql.rust.dataflow.DataFlow -private import codeql.rust.controlflow.CfgNodes private import codeql.rust.dataflow.FlowSink private import codeql.rust.Concepts private import codeql.rust.security.Barriers as Barriers @@ -57,8 +56,8 @@ module RegexInjection { exists(CallExprBase call, Addressable a | call.getStaticTarget() = a and a.getCanonicalPath() = "::new" and - this.asExpr().getExpr() = call.getArg(0) and - not this.asExpr() instanceof LiteralExprCfgNode + this.asExpr() = call.getArg(0) and + not this.asExpr() instanceof LiteralExpr ) } } @@ -78,7 +77,6 @@ module RegexInjection { // A barrier is any call to a function named `escape`, in particular this // makes calls to `regex::escape` a barrier. this.asExpr() - .getExpr() .(CallExpr) .getFunction() .(PathExpr) diff --git a/rust/ql/lib/utils/test/InlineFlowTest.qll b/rust/ql/lib/utils/test/InlineFlowTest.qll index 9ba92f7757b..938559620fc 100644 --- a/rust/ql/lib/utils/test/InlineFlowTest.qll +++ b/rust/ql/lib/utils/test/InlineFlowTest.qll @@ -18,20 +18,20 @@ private import internal.InlineExpectationsTestImpl as InlineExpectationsTestImpl * representation of the path has `name` as a prefix. */ bindingset[name] -private predicate callTargetName(CallExprCfgNode call, string name) { - call.getFunction().(PathExprCfgNode).toString().matches(name + "%") +private predicate callTargetName(CallExpr call, string name) { + call.getFunction().(PathExpr).toString().matches(name + "%") } private module FlowTestImpl implements InputSig { predicate defaultSource(DataFlow::Node source) { callTargetName(source.asExpr(), "source") } predicate defaultSink(DataFlow::Node sink) { - any(CallExprCfgNode call | callTargetName(call, "sink")).getArgument(_) = sink.asExpr() + any(CallExpr call | callTargetName(call, "sink")).getAnArg() = sink.asExpr() } private string getSourceArgString(DataFlow::Node src) { defaultSource(src) and - result = src.asExpr().(CallExprCfgNode).getArgument(0).toString() + result = src.asExpr().(CallExpr).getArg(0).toString() or sourceNode(src, _) and result = src.(Node::FlowSummaryNode).getSourceElement().getCall().getArg(0).toString() and diff --git a/rust/ql/src/queries/security/CWE-312/CleartextLogging.ql b/rust/ql/src/queries/security/CWE-312/CleartextLogging.ql index b1c56114c7b..1e3ae49f56f 100644 --- a/rust/ql/src/queries/security/CWE-312/CleartextLogging.ql +++ b/rust/ql/src/queries/security/CWE-312/CleartextLogging.ql @@ -37,7 +37,7 @@ module CleartextLoggingConfig implements DataFlow::ConfigSig { predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { // flow from `a` to `&a` - node2.asExpr().getExpr().(RefExpr).getExpr() = node1.asExpr().getExpr() + node2.asExpr().(RefExpr).getExpr() = node1.asExpr() } predicate allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c) { diff --git a/rust/ql/src/queries/security/CWE-312/CleartextStorageDatabase.ql b/rust/ql/src/queries/security/CWE-312/CleartextStorageDatabase.ql index dd09f2f8f20..d5aa87ad709 100644 --- a/rust/ql/src/queries/security/CWE-312/CleartextStorageDatabase.ql +++ b/rust/ql/src/queries/security/CWE-312/CleartextStorageDatabase.ql @@ -36,7 +36,7 @@ module CleartextStorageDatabaseConfig implements DataFlow::ConfigSig { predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { // flow from `a` to `&a` - node2.asExpr().getExpr().(RefExpr).getExpr() = node1.asExpr().getExpr() + node2.asExpr().(RefExpr).getExpr() = node1.asExpr() } predicate observeDiffInformedIncrementalMode() { any() } diff --git a/rust/ql/src/queries/security/CWE-825/AccessAfterLifetime.ql b/rust/ql/src/queries/security/CWE-825/AccessAfterLifetime.ql index fa8d9765d7c..b9bf80c9474 100644 --- a/rust/ql/src/queries/security/CWE-825/AccessAfterLifetime.ql +++ b/rust/ql/src/queries/security/CWE-825/AccessAfterLifetime.ql @@ -26,17 +26,17 @@ module AccessAfterLifetimeConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node node) { node instanceof AccessAfterLifetime::Source and // exclude cases with sources in macros, since these results are difficult to interpret - not node.asExpr().getExpr().isFromMacroExpansion() + not node.asExpr().isFromMacroExpansion() } predicate isSink(DataFlow::Node node) { node instanceof AccessAfterLifetime::Sink and // exclude cases with sinks in macros, since these results are difficult to interpret - not node.asExpr().getExpr().isFromMacroExpansion() and + not node.asExpr().isFromMacroExpansion() and // include only results inside `unsafe` blocks, as other results tend to be false positives ( - node.asExpr().getExpr().getEnclosingBlock*().isUnsafe() or - node.asExpr().getExpr().getEnclosingCallable().(Function).isUnsafe() + node.asExpr().getEnclosingBlock*().isUnsafe() or + node.asExpr().getEnclosingCallable().(Function).isUnsafe() ) } @@ -45,11 +45,9 @@ module AccessAfterLifetimeConfig implements DataFlow::ConfigSig { predicate observeDiffInformedIncrementalMode() { any() } Location getASelectedSourceLocation(DataFlow::Node source) { - exists(Variable target, DataFlow::Node sink | + exists(Variable target | + AccessAfterLifetime::sourceValueScope(source, target, _) and result = [target.getLocation(), source.getLocation()] - | - isSink(sink) and - AccessAfterLifetime::dereferenceAfterLifetime(source, sink, target) ) } } diff --git a/rust/ql/src/queries/unusedentities/UnusedValue.ql b/rust/ql/src/queries/unusedentities/UnusedValue.ql index 07e80b00b45..8ef6b85ebe7 100644 --- a/rust/ql/src/queries/unusedentities/UnusedValue.ql +++ b/rust/ql/src/queries/unusedentities/UnusedValue.ql @@ -21,7 +21,7 @@ where not write.isFromMacroExpansion() and not isAllowableUnused(v) and // SSA definitions are only created for live writes - not write = any(Ssa::WriteDefinition def).getWriteAccess().getAstNode() and + not write = any(Ssa::WriteDefinition def).getWriteAccess() and // avoid overlap with the unused variable query not isUnused(v) select write, "Variable $@ is assigned a value that is never used.", v, v.getText() diff --git a/rust/ql/src/utils/modelgenerator/internal/CaptureModels.qll b/rust/ql/src/utils/modelgenerator/internal/CaptureModels.qll index 754bb53357a..420051f4ee1 100644 --- a/rust/ql/src/utils/modelgenerator/internal/CaptureModels.qll +++ b/rust/ql/src/utils/modelgenerator/internal/CaptureModels.qll @@ -120,7 +120,7 @@ private module SummaryModelGeneratorInput implements SummaryModelGeneratorInputS } QualifiedCallable getAsExprEnclosingCallable(NodeExtended node) { - result.getFunction() = node.asExpr().getScope() + result.getFunction() = node.asExpr().getEnclosingCfgScope() } Parameter asParameter(NodeExtended node) { result = node.asParameter() } diff --git a/rust/ql/test/library-tests/dataflow/barrier/inline-flow.expected b/rust/ql/test/library-tests/dataflow/barrier/inline-flow.expected index 266b4c4be8c..68da00c4312 100644 --- a/rust/ql/test/library-tests/dataflow/barrier/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/barrier/inline-flow.expected @@ -1,7 +1,8 @@ models edges | main.rs:9:13:9:19 | ...: ... | main.rs:10:11:10:11 | s | provenance | | -| main.rs:10:11:10:11 | s | main.rs:9:30:14:1 | { ... } | provenance | | +| main.rs:10:11:10:11 | s | main.rs:12:9:12:9 | s | provenance | | +| main.rs:12:9:12:9 | s | main.rs:9:30:14:1 | { ... } | provenance | | | main.rs:21:9:21:9 | s | main.rs:22:10:22:10 | s | provenance | | | main.rs:21:13:21:21 | source(...) | main.rs:21:9:21:9 | s | provenance | | | main.rs:26:9:26:9 | s | main.rs:27:22:27:22 | s | provenance | | @@ -16,6 +17,7 @@ nodes | main.rs:9:13:9:19 | ...: ... | semmle.label | ...: ... | | main.rs:9:30:14:1 | { ... } | semmle.label | { ... } | | main.rs:10:11:10:11 | s | semmle.label | s | +| main.rs:12:9:12:9 | s | semmle.label | s | | main.rs:17:10:17:18 | source(...) | semmle.label | source(...) | | main.rs:21:9:21:9 | s | semmle.label | s | | main.rs:21:13:21:21 | source(...) | semmle.label | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected index a7df3fdf7b3..36a1c74018e 100644 --- a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected @@ -82,12 +82,14 @@ localStep | main.rs:57:9:57:9 | a | main.rs:57:9:57:9 | [SSA] a | | main.rs:57:9:57:9 | a | main.rs:57:9:57:9 | a | | main.rs:57:13:59:5 | loop { ... } | main.rs:57:9:57:9 | a | +| main.rs:57:18:59:5 | { ... } | main.rs:57:13:59:5 | loop { ... } | | main.rs:58:9:58:15 | break 1 | main.rs:57:13:59:5 | loop { ... } | | main.rs:58:15:58:15 | 1 | main.rs:58:9:58:15 | break 1 | | main.rs:61:9:61:9 | [SSA] b | main.rs:64:10:64:10 | b | | main.rs:61:9:61:9 | b | main.rs:61:9:61:9 | [SSA] b | | main.rs:61:9:61:9 | b | main.rs:61:9:61:9 | b | | main.rs:61:13:63:5 | loop { ... } | main.rs:61:9:61:9 | b | +| main.rs:61:18:63:5 | { ... } | main.rs:61:13:63:5 | loop { ... } | | main.rs:62:9:62:23 | break ... | main.rs:61:13:63:5 | loop { ... } | | main.rs:62:15:62:23 | source(...) | main.rs:62:9:62:23 | break ... | | main.rs:68:9:68:13 | mut i | main.rs:68:13:68:13 | i | @@ -131,6 +133,7 @@ localStep | main.rs:92:9:92:9 | a | main.rs:92:9:92:9 | [SSA] a | | main.rs:92:9:92:9 | a | main.rs:92:9:92:9 | a | | main.rs:92:13:97:5 | 'block: { ... } | main.rs:92:9:92:9 | a | +| main.rs:93:14:95:9 | { ... } | main.rs:93:9:95:9 | if b {...} | | main.rs:94:13:94:26 | break 'block 1 | main.rs:92:13:97:5 | 'block: { ... } | | main.rs:94:26:94:26 | 1 | main.rs:94:13:94:26 | break 'block 1 | | main.rs:96:9:96:9 | 2 | main.rs:92:13:97:5 | 'block: { ... } | @@ -143,6 +146,7 @@ localStep | main.rs:102:9:102:9 | a | main.rs:102:9:102:9 | [SSA] a | | main.rs:102:9:102:9 | a | main.rs:102:9:102:9 | a | | main.rs:102:13:107:5 | 'block: { ... } | main.rs:102:9:102:9 | a | +| main.rs:103:14:105:9 | { ... } | main.rs:103:9:105:9 | if b {...} | | main.rs:104:13:104:26 | break 'block 1 | main.rs:102:13:107:5 | 'block: { ... } | | main.rs:104:26:104:26 | 1 | main.rs:104:13:104:26 | break 'block 1 | | main.rs:106:9:106:22 | break 'block 2 | main.rs:102:13:107:5 | 'block: { ... } | @@ -713,6 +717,7 @@ localStep | main.rs:480:16:480:19 | name | main.rs:480:16:480:19 | [SSA] name | | main.rs:480:16:480:19 | name | main.rs:480:16:480:19 | name | | main.rs:481:9:485:9 | if cond {...} | main.rs:480:31:486:5 | { ... } | +| main.rs:481:17:485:9 | { ... } | main.rs:481:9:485:9 | if cond {...} | | main.rs:482:17:482:17 | [SSA] n | main.rs:483:18:483:18 | n | | main.rs:482:17:482:17 | n | main.rs:482:17:482:17 | [SSA] n | | main.rs:482:17:482:17 | n | main.rs:482:17:482:17 | n | diff --git a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected index 00640ed9aa4..7b6fd011d03 100644 --- a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected @@ -163,8 +163,9 @@ edges | main.rs:352:11:352:12 | s1 [A] | main.rs:356:11:356:12 | s1 [A] | provenance | | | main.rs:353:9:353:25 | ...::A(...) [A] | main.rs:353:24:353:24 | n | provenance | | | main.rs:353:24:353:24 | n | main.rs:353:35:353:35 | n | provenance | | -| main.rs:356:11:356:12 | s1 [A] | main.rs:357:9:357:25 | ...::A(...) [A] | provenance | | +| main.rs:356:11:356:12 | s1 [A] | main.rs:357:9:357:45 | ... \| ... [A] | provenance | | | main.rs:357:9:357:25 | ...::A(...) [A] | main.rs:357:24:357:24 | n | provenance | | +| main.rs:357:9:357:45 | ... \| ... [A] | main.rs:357:9:357:25 | ...::A(...) [A] | provenance | | | main.rs:357:24:357:24 | n | main.rs:357:55:357:55 | n | provenance | | | main.rs:368:9:368:10 | s1 [A] | main.rs:370:11:370:12 | s1 [A] | provenance | | | main.rs:368:14:368:26 | A(...) [A] | main.rs:368:9:368:10 | s1 [A] | provenance | | @@ -173,8 +174,9 @@ edges | main.rs:370:11:370:12 | s1 [A] | main.rs:374:11:374:12 | s1 [A] | provenance | | | main.rs:371:9:371:12 | A(...) [A] | main.rs:371:11:371:11 | n | provenance | | | main.rs:371:11:371:11 | n | main.rs:371:22:371:22 | n | provenance | | -| main.rs:374:11:374:12 | s1 [A] | main.rs:375:9:375:12 | A(...) [A] | provenance | | +| main.rs:374:11:374:12 | s1 [A] | main.rs:375:9:375:19 | ... \| ... [A] | provenance | | | main.rs:375:9:375:12 | A(...) [A] | main.rs:375:11:375:11 | n | provenance | | +| main.rs:375:9:375:19 | ... \| ... [A] | main.rs:375:9:375:12 | A(...) [A] | provenance | | | main.rs:375:11:375:11 | n | main.rs:375:29:375:29 | n | provenance | | | main.rs:389:9:389:10 | s1 [C] | main.rs:393:11:393:12 | s1 [C] | provenance | | | main.rs:389:14:391:5 | ...::C {...} [C] | main.rs:389:9:389:10 | s1 [C] | provenance | | @@ -183,8 +185,9 @@ edges | main.rs:393:11:393:12 | s1 [C] | main.rs:397:11:397:12 | s1 [C] | provenance | | | main.rs:394:9:394:38 | ...::C {...} [C] | main.rs:394:36:394:36 | n | provenance | | | main.rs:394:36:394:36 | n | main.rs:394:48:394:48 | n | provenance | | -| main.rs:397:11:397:12 | s1 [C] | main.rs:398:9:398:38 | ...::C {...} [C] | provenance | | +| main.rs:397:11:397:12 | s1 [C] | main.rs:398:9:398:71 | ... \| ... [C] | provenance | | | main.rs:398:9:398:38 | ...::C {...} [C] | main.rs:398:36:398:36 | n | provenance | | +| main.rs:398:9:398:71 | ... \| ... [C] | main.rs:398:9:398:38 | ...::C {...} [C] | provenance | | | main.rs:398:36:398:36 | n | main.rs:398:81:398:81 | n | provenance | | | main.rs:409:9:409:10 | s1 [C] | main.rs:413:11:413:12 | s1 [C] | provenance | | | main.rs:409:14:411:5 | C {...} [C] | main.rs:409:9:409:10 | s1 [C] | provenance | | @@ -193,8 +196,9 @@ edges | main.rs:413:11:413:12 | s1 [C] | main.rs:417:11:417:12 | s1 [C] | provenance | | | main.rs:414:9:414:24 | C {...} [C] | main.rs:414:22:414:22 | n | provenance | | | main.rs:414:22:414:22 | n | main.rs:414:34:414:34 | n | provenance | | -| main.rs:417:11:417:12 | s1 [C] | main.rs:418:9:418:24 | C {...} [C] | provenance | | +| main.rs:417:11:417:12 | s1 [C] | main.rs:418:9:418:43 | ... \| ... [C] | provenance | | | main.rs:418:9:418:24 | C {...} [C] | main.rs:418:22:418:22 | n | provenance | | +| main.rs:418:9:418:43 | ... \| ... [C] | main.rs:418:9:418:24 | C {...} [C] | provenance | | | main.rs:418:22:418:22 | n | main.rs:418:53:418:53 | n | provenance | | | main.rs:430:9:430:12 | arr1 [element] | main.rs:431:14:431:17 | arr1 [element] | provenance | | | main.rs:430:16:430:33 | [...] [element] | main.rs:430:9:430:12 | arr1 [element] | provenance | | @@ -443,6 +447,7 @@ nodes | main.rs:353:35:353:35 | n | semmle.label | n | | main.rs:356:11:356:12 | s1 [A] | semmle.label | s1 [A] | | main.rs:357:9:357:25 | ...::A(...) [A] | semmle.label | ...::A(...) [A] | +| main.rs:357:9:357:45 | ... \| ... [A] | semmle.label | ... \| ... [A] | | main.rs:357:24:357:24 | n | semmle.label | n | | main.rs:357:55:357:55 | n | semmle.label | n | | main.rs:368:9:368:10 | s1 [A] | semmle.label | s1 [A] | @@ -454,6 +459,7 @@ nodes | main.rs:371:22:371:22 | n | semmle.label | n | | main.rs:374:11:374:12 | s1 [A] | semmle.label | s1 [A] | | main.rs:375:9:375:12 | A(...) [A] | semmle.label | A(...) [A] | +| main.rs:375:9:375:19 | ... \| ... [A] | semmle.label | ... \| ... [A] | | main.rs:375:11:375:11 | n | semmle.label | n | | main.rs:375:29:375:29 | n | semmle.label | n | | main.rs:389:9:389:10 | s1 [C] | semmle.label | s1 [C] | @@ -465,6 +471,7 @@ nodes | main.rs:394:48:394:48 | n | semmle.label | n | | main.rs:397:11:397:12 | s1 [C] | semmle.label | s1 [C] | | main.rs:398:9:398:38 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | +| main.rs:398:9:398:71 | ... \| ... [C] | semmle.label | ... \| ... [C] | | main.rs:398:36:398:36 | n | semmle.label | n | | main.rs:398:81:398:81 | n | semmle.label | n | | main.rs:409:9:409:10 | s1 [C] | semmle.label | s1 [C] | @@ -476,6 +483,7 @@ nodes | main.rs:414:34:414:34 | n | semmle.label | n | | main.rs:417:11:417:12 | s1 [C] | semmle.label | s1 [C] | | main.rs:418:9:418:24 | C {...} [C] | semmle.label | C {...} [C] | +| main.rs:418:9:418:43 | ... \| ... [C] | semmle.label | ... \| ... [C] | | main.rs:418:22:418:22 | n | semmle.label | n | | main.rs:418:53:418:53 | n | semmle.label | n | | main.rs:430:9:430:12 | arr1 [element] | semmle.label | arr1 [element] | diff --git a/rust/ql/test/library-tests/dataflow/sources/env/InlineFlow.ql b/rust/ql/test/library-tests/dataflow/sources/env/InlineFlow.ql index 09b4ab5bf90..9e46b7c3ad2 100644 --- a/rust/ql/test/library-tests/dataflow/sources/env/InlineFlow.ql +++ b/rust/ql/test/library-tests/dataflow/sources/env/InlineFlow.ql @@ -16,7 +16,7 @@ module MyFlowConfig implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node sink) { any(CallExpr call | call.getFunction().(PathExpr).getPath().getSegment().getIdentifier().getText() = "sink" - ).getArgList().getAnArg() = sink.asExpr().getExpr() + ).getArgList().getAnArg() = sink.asExpr() } predicate allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c) { diff --git a/rust/ql/test/library-tests/sensitivedata/SensitiveData.ql b/rust/ql/test/library-tests/sensitivedata/SensitiveData.ql index 0d5e748f80e..6372e81555d 100644 --- a/rust/ql/test/library-tests/sensitivedata/SensitiveData.ql +++ b/rust/ql/test/library-tests/sensitivedata/SensitiveData.ql @@ -13,7 +13,7 @@ module SensitiveDataConfig implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node sink) { any(CallExpr call | call.getFunction().(PathExpr).getPath().getSegment().getIdentifier().getText() = "sink" - ).getArgList().getAnArg() = sink.asExpr().getExpr() + ).getArgList().getAnArg() = sink.asExpr() } } diff --git a/rust/ql/test/library-tests/variables/Ssa.ql b/rust/ql/test/library-tests/variables/Ssa.ql index d93a1f13b64..8ca9bd15e66 100644 --- a/rust/ql/test/library-tests/variables/Ssa.ql +++ b/rust/ql/test/library-tests/variables/Ssa.ql @@ -10,17 +10,17 @@ query predicate definition(Ssa::Definition def, Variable v) { toBeTested(v.getEnclosingCfgScope()) and def.getSourceVariable() = v } -query predicate read(Ssa::Definition def, Variable v, CfgNode read) { +query predicate read(Ssa::Definition def, Variable v, Expr read) { toBeTested(v.getEnclosingCfgScope()) and def.getSourceVariable() = v and read = def.getARead() } -query predicate firstRead(Ssa::Definition def, Variable v, CfgNode read) { +query predicate firstRead(Ssa::Definition def, Variable v, Expr read) { toBeTested(v.getEnclosingCfgScope()) and def.getSourceVariable() = v and read = def.getAFirstRead() } -query predicate adjacentReads(Ssa::Definition def, Variable v, CfgNode read1, CfgNode read2) { +query predicate adjacentReads(Ssa::Definition def, Variable v, Expr read1, Expr read2) { toBeTested(v.getEnclosingCfgScope()) and def.getSourceVariable() = v and def.hasAdjacentReads(read1, read2) @@ -54,4 +54,4 @@ query predicate ultimateDef(Ssa::Definition def, Definition ult) { ult != def } -query predicate assigns(Ssa::WriteDefinition def, CfgNode value) { def.assigns(value) } +query predicate assigns(Ssa::WriteDefinition def, Expr value) { def.assigns(value) } From d2bb53a81ee004e4830712253a9ea0daae882a15 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 19 Nov 2025 13:31:24 +0100 Subject: [PATCH 125/127] Rust: Run codegen --- rust/ql/.generated.list | 1 - rust/ql/.gitattributes | 1 - rust/ql/lib/codeql/rust/elements/internal/BlockExprImpl.qll | 1 + 3 files changed, 1 insertion(+), 2 deletions(-) diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index 5ed2894e273..fc9e0d0f30c 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -235,7 +235,6 @@ lib/codeql/rust/elements/internal/AwaitExprConstructor.qll 44ff1653e73d5b9f6885c lib/codeql/rust/elements/internal/BecomeExprConstructor.qll ba073aaa256cb8827a0307c3128d50f62b11aac0b1f324e48c95f30351a9b942 3a787ded505c3158fa4f4923f66e8ecdcb7b5f86f27f64c5412dc32dca031f18 lib/codeql/rust/elements/internal/BinaryExprConstructor.qll 7f9b17757f78b9fb7c46e21d2040a77fa50083bef4911c8464991c3d1ad91d87 a59390cd8e896c0bfbdc9ba0674e06d980ffcefa710fbc9886be52ed427e9717 lib/codeql/rust/elements/internal/BlockExprConstructor.qll 438337c807645e98a01440f3f4610d68b0567ba15c8f51dc43bf5a30c9af3696 48ce7a546910c884619762349b8ada9836284f8008298fdb0070a38f7ddf25a0 -lib/codeql/rust/elements/internal/BlockExprImpl.qll 36ac09e4a6eeeec22919b62b1d004bdb5bb2527e67932c308aec383a770768d6 3b4b2a2014f6fe075c63a2d633b297566b548ef2e4343cadf067a9edbcadc876 lib/codeql/rust/elements/internal/BoxPatConstructor.qll 153f110ba25fd6c889092bfd16f73bb610fa60d6e0c8965d5f44d2446fcd48a2 9324cf0d8aa29945551bf8ab64801d598f57aab8cd4e19bcd4e9ef8a4a4e06eb lib/codeql/rust/elements/internal/BreakExprConstructor.qll 356be043c28e0b34fdf925a119c945632ee883c6f5ebb9a27003c6a8d250afd9 bb77e66b04bb9489340e7506931559b94285c6904b6f9d2f83b214cba4f3cfd5 lib/codeql/rust/elements/internal/CallExprConstructor.qll 742b38e862e2cf82fd1ecc4d4fc5b4782a9c7c07f031452b2bae7aa59d5aa13a cad6e0a8be21d91b20ac2ec16cab9c30eae810b452c0f1992ed87d5c7f4144dc diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index bde61270e6a..99728972ec7 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -237,7 +237,6 @@ /lib/codeql/rust/elements/internal/BecomeExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/BinaryExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/BlockExprConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/BlockExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/BoxPatConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/BreakExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/CallExprConstructor.qll linguist-generated diff --git a/rust/ql/lib/codeql/rust/elements/internal/BlockExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/BlockExprImpl.qll index 6fcba9900be..9e8576dc440 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/BlockExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/BlockExprImpl.qll @@ -11,6 +11,7 @@ private import codeql.rust.elements.internal.generated.BlockExpr * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A block expression. For example: * ```rust From e4853ab0600795f1983fadff531cab7b717fb623 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 19 Nov 2025 13:18:13 +0100 Subject: [PATCH 126/127] Add change note --- rust/ql/lib/change-notes/2025-11-19-dataflow-ast.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 rust/ql/lib/change-notes/2025-11-19-dataflow-ast.md diff --git a/rust/ql/lib/change-notes/2025-11-19-dataflow-ast.md b/rust/ql/lib/change-notes/2025-11-19-dataflow-ast.md new file mode 100644 index 00000000000..04883ef37d5 --- /dev/null +++ b/rust/ql/lib/change-notes/2025-11-19-dataflow-ast.md @@ -0,0 +1,4 @@ +--- +category: breaking +--- +* The type `DataFlow::Node` is now based directly on the AST instead of the CFG, which means that predicates like `asExpr()` return AST nodes instead of CFG nodes. \ No newline at end of file From d4fdf956a02f0e2549baa50d6de41e851db75589 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 20 Nov 2025 11:03:53 +0100 Subject: [PATCH 127/127] Address review comments --- rust/ql/lib/codeql/rust/dataflow/internal/Node.qll | 2 +- .../codeql/rust/elements/internal/ParenExprImpl.qll | 13 +++++++++++++ .../rust/security/AccessAfterLifetimeExtensions.qll | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll b/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll index 421f613b5c4..2191714d6a1 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll @@ -118,7 +118,7 @@ class FlowSummaryNode extends Node, TFlowSummaryNode { } } -/** A data flow node that corresponds directly to a CFG node for an AST node. */ +/** A data flow node that corresponds directly to an AST node. */ abstract class AstNodeNode extends Node { AstNode n; diff --git a/rust/ql/lib/codeql/rust/elements/internal/ParenExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ParenExprImpl.qll index 158d20e0703..f52fd3aa067 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ParenExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ParenExprImpl.qll @@ -24,6 +24,19 @@ module Impl { override string toStringImpl() { result = "(" + this.getExpr().toAbbreviatedString() + ")" or + // In macro expansions such as + // + // ```rust + // [ + // "a", + // "b", + // #[cfg(target_os = "macos")] + // "c", + // ] + // ``` + // + // the last array element will give rise to an empty `ParenExpr` when not + // compiling for macos. not exists(this.getExpr().toAbbreviatedString()) and result = "(...)" } diff --git a/rust/ql/lib/codeql/rust/security/AccessAfterLifetimeExtensions.qll b/rust/ql/lib/codeql/rust/security/AccessAfterLifetimeExtensions.qll index 6e8077ebae0..06438fef0c8 100644 --- a/rust/ql/lib/codeql/rust/security/AccessAfterLifetimeExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/AccessAfterLifetimeExtensions.qll @@ -40,7 +40,7 @@ module AccessAfterLifetime { abstract class Barrier extends DataFlow::Node { } /** - * Holds if the value `source` points to accesses a variable `target` with scope `scope`. + * Holds if the value pointed to by `source` accesses a variable `target` with scope `scope`. */ pragma[nomagic] predicate sourceValueScope(Source source, Variable target, BlockExpr scope) {