diff --git a/.bazelrc b/.bazelrc index 449345bfb62..54a510f05dc 100644 --- a/.bazelrc +++ b/.bazelrc @@ -30,6 +30,13 @@ common --registry=https://bcr.bazel.build common --@rules_dotnet//dotnet/settings:strict_deps=false +# we only configure a nightly toolchain +common --@rules_rust//rust/toolchain/channel=nightly + +# rust does not like the gold linker, while bazel does by default, so let's avoid using it +common:linux --linkopt=-fuse-ld=lld +common:macos --linkopt=-fuse-ld=lld + # Reduce this eventually to empty, once we've fixed all our usages of java, and https://github.com/bazel-contrib/rules_go/issues/4193 is fixed common --incompatible_autoload_externally="+@rules_java,+@rules_shell" diff --git a/MODULE.bazel b/MODULE.bazel index 08eb6e886e9..65dc8d494be 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -28,7 +28,7 @@ bazel_dep(name = "rules_kotlin", version = "2.1.3-codeql.1") bazel_dep(name = "gazelle", version = "0.40.0") bazel_dep(name = "rules_dotnet", version = "0.17.4") bazel_dep(name = "googletest", version = "1.14.0.bcr.1") -bazel_dep(name = "rules_rust", version = "0.58.0") +bazel_dep(name = "rules_rust", version = "0.63.0") bazel_dep(name = "zstd", version = "1.5.5.bcr.1") bazel_dep(name = "buildifier_prebuilt", version = "6.4.0", dev_dependency = True) @@ -38,7 +38,10 @@ bazel_dep(name = "buildifier_prebuilt", version = "6.4.0", dev_dependency = True RUST_EDITION = "2024" # run buildutils-internal/scripts/fill-rust-sha256s.py when updating (internal repo) -RUST_VERSION = "1.88.0" +# a nightly toolchain is required to enable experimental_use_cc_common_link, which we require internally +# we prefer to run the same version as internally, even if experimental_use_cc_common_link is not really +# required in this repo +RUST_VERSION = "nightly/2025-08-01" rust = use_extension("@rules_rust//rust:extensions.bzl", "rust") rust.toolchain( @@ -50,26 +53,26 @@ rust.toolchain( ], # generated by buildutils-internal/scripts/fill-rust-sha256s.py (internal repo) sha256s = { - "rustc-1.88.0-x86_64-unknown-linux-gnu.tar.xz": "b049fd57fce274d10013e2cf0e05f215f68f6580865abc52178f66ae9bf43fd8", - "rustc-1.88.0-x86_64-apple-darwin.tar.xz": "c8f1ea4fc3e507c8e733809bd3ad91a00f5b209d85620be9013bea5f97f31f24", - "rustc-1.88.0-aarch64-apple-darwin.tar.xz": "249f4cacd3fac1f718af19373c73e9d3b9a595965972d8b1f3947c578110f520", - "rustc-1.88.0-x86_64-pc-windows-msvc.tar.xz": "238616f0a578d6d4c034ffb8897064fa8df68a3823df201df48ab2baf68a639f", - "clippy-1.88.0-x86_64-unknown-linux-gnu.tar.xz": "db09c9e4a8a0b486781d87403f74a203a58d9ef0a58ba10c39264916d93ac603", - "clippy-1.88.0-x86_64-apple-darwin.tar.xz": "d25711565eccaf1ead038a626f14eddb8e7db114fb73c24e93264dae4d4298d3", - "clippy-1.88.0-aarch64-apple-darwin.tar.xz": "9ad90cddc3ebd892c9d69c9ecd45c30d236e1e4af5993312c6f4538af9dcf3e7", - "clippy-1.88.0-x86_64-pc-windows-msvc.tar.xz": "0d02a7b3a8eb407c6a62c75a56f365b312f8ec2732cac5ecfc7a062526fddbe3", - "cargo-1.88.0-x86_64-unknown-linux-gnu.tar.xz": "856962610ee821648cee32e3d6abac667af7bb7ea6ec6f3d184cc31e66044f6b", - "cargo-1.88.0-x86_64-apple-darwin.tar.xz": "e7f672132591df180b58f8e7af875e1971a10fe71243f7d84f9b3f6742f998bc", - "cargo-1.88.0-aarch64-apple-darwin.tar.xz": "71c08c8fab9b7a9cd13b6119886d50ce48efa8261d08e1fd328ed3ee1c84e2e0", - "cargo-1.88.0-x86_64-pc-windows-msvc.tar.xz": "5e3b21d77733e0dbb5542015f89b15de1844bd6e3270fdc90bb821b2a04b1cda", - "llvm-tools-1.88.0-x86_64-unknown-linux-gnu.tar.xz": "16e8d9b4187cc3936feddd9ceccde0157a4a1b2be98ca9c202cda304e0e81853", - "llvm-tools-1.88.0-x86_64-apple-darwin.tar.xz": "92780b5be0950c206d998a6f7094d4ee29b992d1d2f46371465e8bdaa4e619a4", - "llvm-tools-1.88.0-aarch64-apple-darwin.tar.xz": "c9bf981651b573d2abb619a5b3ae038686772e51e7ec53a8b5e585c51c1431e5", - "llvm-tools-1.88.0-x86_64-pc-windows-msvc.tar.xz": "6522371a06d183effaf080c59d2a8c0720088157ae693123386bc7070ba62a73", - "rust-std-1.88.0-x86_64-unknown-linux-gnu.tar.xz": "36d7eacf46bd5199cb433e49a9ed9c9b380d82f8a0ebc05e89b43b51c070c955", - "rust-std-1.88.0-x86_64-apple-darwin.tar.xz": "2570350a6651e60a2fe0aa438be5cd123ed3543b4b44c916284ff7e7e331d16a", - "rust-std-1.88.0-aarch64-apple-darwin.tar.xz": "532be07511af557cb67f33bfc77044a787363ab281b963752542bc837ce90e96", - "rust-std-1.88.0-x86_64-pc-windows-msvc.tar.xz": "6b65df769259ad18428271aea110ec1a5027e922f3e36d77923dc69a38ff6318", + "2025-08-01/rustc-nightly-x86_64-unknown-linux-gnu.tar.xz": "9bbeaf5d3fc7247d31463a9083aa251c995cc50662c8219e7a2254d76a72a9a4", + "2025-08-01/rustc-nightly-x86_64-apple-darwin.tar.xz": "c9ea539a8eff0d5d162701f99f9e1aabe14dd0dfb420d62362817a5d09219de7", + "2025-08-01/rustc-nightly-aarch64-apple-darwin.tar.xz": "ae83feebbc39cfd982e4ecc8297731fe79c185173aee138467b334c5404b3773", + "2025-08-01/rustc-nightly-x86_64-pc-windows-msvc.tar.xz": "9f170c30d802a349be60cf52ec46260802093cb1013ad667fc0d528b7b10152f", + "2025-08-01/clippy-nightly-x86_64-unknown-linux-gnu.tar.xz": "9ae5f3cd8f557c4f6df522597c69d14398cf604cfaed2b83e767c4b77a7eaaf6", + "2025-08-01/clippy-nightly-x86_64-apple-darwin.tar.xz": "983cb9ee0b6b968188e04ab2d33743d54764b2681ce565e1b3f2b9135c696a3e", + "2025-08-01/clippy-nightly-aarch64-apple-darwin.tar.xz": "ed2219dbc49d088225e1b7c5c4390fa295066e071fddaa2714018f6bb39ddbf0", + "2025-08-01/clippy-nightly-x86_64-pc-windows-msvc.tar.xz": "911f40ab5cbdd686f40e00965271fe47c4805513a308ed01f30eafb25b448a50", + "2025-08-01/cargo-nightly-x86_64-unknown-linux-gnu.tar.xz": "106463c284e48e4904c717471eeec2be5cc83a9d2cae8d6e948b52438cad2e69", + "2025-08-01/cargo-nightly-x86_64-apple-darwin.tar.xz": "6ad35c40efc41a8c531ea43235058347b6902d98a9693bf0aed7fc16d5590cef", + "2025-08-01/cargo-nightly-aarch64-apple-darwin.tar.xz": "dd28c365e9d298abc3154c797720ad36a0058f131265c9978b4c8e4e37012c8a", + "2025-08-01/cargo-nightly-x86_64-pc-windows-msvc.tar.xz": "7b431286e12d6b3834b038f078389a00cac73f351e8c3152b2504a3c06420b3b", + "2025-08-01/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.xz": "e342e305d7927cc288d386983b2bc253cfad3776b113386e903d0b302648ef47", + "2025-08-01/llvm-tools-nightly-x86_64-apple-darwin.tar.xz": "e44dd3506524d85c37b3a54bcc91d01378fd2c590b2db5c5974d12f05c1b84d1", + "2025-08-01/llvm-tools-nightly-aarch64-apple-darwin.tar.xz": "0c1b5f46dd81be4a9227b10283a0fcaa39c14fea7e81aea6fd6d9887ff6cdc41", + "2025-08-01/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.xz": "423e5fd11406adccbc31b8456ceb7375ce055cdf45e90d2c3babeb2d7f58383f", + "2025-08-01/rust-std-nightly-x86_64-unknown-linux-gnu.tar.xz": "3c0ceb46a252647a1d4c7116d9ccae684fa5e42aaf3296419febd2c962c3b41d", + "2025-08-01/rust-std-nightly-x86_64-apple-darwin.tar.xz": "3be416003cab10f767390a753d1d16ae4d26c7421c03c98992cf1943e5b0efe8", + "2025-08-01/rust-std-nightly-aarch64-apple-darwin.tar.xz": "4046ac0ef951cb056b5028a399124f60999fa37792eab69d008d8d7965f389b4", + "2025-08-01/rust-std-nightly-x86_64-pc-windows-msvc.tar.xz": "191ed9d8603c3a4fe5a7bbbc2feb72049078dae2df3d3b7d5dedf3abbf823e6e", }, versions = [RUST_VERSION], ) diff --git a/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.md b/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.md index 50e81cc240c..de3307550ad 100644 --- a/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.md +++ b/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.md @@ -1,6 +1,6 @@ ## Overview -GitHub workflows can be triggered through various repository events, including incoming pull requests (PRs) or comments on Issues/PRs. A potentially dangerous misuse of the triggers such as `pull_request_target` or `issue_comment` followed by an explicit checkout of untrusted code (Pull Request HEAD) may lead to repository compromise if untrusted code gets executed in a privileged job. +GitHub workflows can be triggered through various repository events, including incoming pull requests (PRs) or comments on Issues/PRs. A potentially dangerous misuse of the triggers such as `pull_request_target` or `issue_comment` followed by an explicit checkout of untrusted code (Pull Request HEAD) may lead to repository compromise if untrusted code gets executed (e.g., due to a modified build script) in a privileged job. ## Recommendation @@ -32,7 +32,7 @@ jobs: - uses: actions/setup-node@v1 - run: | - npm install + npm install # scripts in package.json from PR would be executed here npm build - uses: completely/fakeaction@v2 diff --git a/actions/ql/src/Security/CWE-829/UntrustedCheckoutHigh.md b/actions/ql/src/Security/CWE-829/UntrustedCheckoutHigh.md index 50e81cc240c..de3307550ad 100644 --- a/actions/ql/src/Security/CWE-829/UntrustedCheckoutHigh.md +++ b/actions/ql/src/Security/CWE-829/UntrustedCheckoutHigh.md @@ -1,6 +1,6 @@ ## Overview -GitHub workflows can be triggered through various repository events, including incoming pull requests (PRs) or comments on Issues/PRs. A potentially dangerous misuse of the triggers such as `pull_request_target` or `issue_comment` followed by an explicit checkout of untrusted code (Pull Request HEAD) may lead to repository compromise if untrusted code gets executed in a privileged job. +GitHub workflows can be triggered through various repository events, including incoming pull requests (PRs) or comments on Issues/PRs. A potentially dangerous misuse of the triggers such as `pull_request_target` or `issue_comment` followed by an explicit checkout of untrusted code (Pull Request HEAD) may lead to repository compromise if untrusted code gets executed (e.g., due to a modified build script) in a privileged job. ## Recommendation @@ -32,7 +32,7 @@ jobs: - uses: actions/setup-node@v1 - run: | - npm install + npm install # scripts in package.json from PR would be executed here npm build - uses: completely/fakeaction@v2 diff --git a/actions/ql/src/Security/CWE-829/UntrustedCheckoutMedium.md b/actions/ql/src/Security/CWE-829/UntrustedCheckoutMedium.md index 50e81cc240c..de3307550ad 100644 --- a/actions/ql/src/Security/CWE-829/UntrustedCheckoutMedium.md +++ b/actions/ql/src/Security/CWE-829/UntrustedCheckoutMedium.md @@ -1,6 +1,6 @@ ## Overview -GitHub workflows can be triggered through various repository events, including incoming pull requests (PRs) or comments on Issues/PRs. A potentially dangerous misuse of the triggers such as `pull_request_target` or `issue_comment` followed by an explicit checkout of untrusted code (Pull Request HEAD) may lead to repository compromise if untrusted code gets executed in a privileged job. +GitHub workflows can be triggered through various repository events, including incoming pull requests (PRs) or comments on Issues/PRs. A potentially dangerous misuse of the triggers such as `pull_request_target` or `issue_comment` followed by an explicit checkout of untrusted code (Pull Request HEAD) may lead to repository compromise if untrusted code gets executed (e.g., due to a modified build script) in a privileged job. ## Recommendation @@ -32,7 +32,7 @@ jobs: - uses: actions/setup-node@v1 - run: | - npm install + npm install # scripts in package.json from PR would be executed here npm build - uses: completely/fakeaction@v2 diff --git a/cpp/ql/lib/change-notes/2025-08-02-gvn.md b/cpp/ql/lib/change-notes/2025-08-02-gvn.md new file mode 100644 index 00000000000..70c9f7dbb15 --- /dev/null +++ b/cpp/ql/lib/change-notes/2025-08-02-gvn.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The global value numbering library (`semmle.code.cpp.valuenumbering.GlobalValueNumbering` and `semmle.code.cpp.ir.ValueNumbering`) has been improved so more expressions are assigned the same value number. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2025-08-11-global-variable-flow.md b/cpp/ql/lib/change-notes/2025-08-11-global-variable-flow.md new file mode 100644 index 00000000000..c140570df31 --- /dev/null +++ b/cpp/ql/lib/change-notes/2025-08-11-global-variable-flow.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Improved dataflow through global variables in the new dataflow library (`semmle.code.cpp.dataflow.new.DataFlow` and `semmle.code.cpp.dataflow.new.TaintTracking`). Queries based on these libraries will produce more results on codebases with many global variables. \ No newline at end of file diff --git a/cpp/ql/lib/semmle/code/cpp/commons/Buffer.qll b/cpp/ql/lib/semmle/code/cpp/commons/Buffer.qll index 565c15d0d5c..675090ad958 100644 --- a/cpp/ql/lib/semmle/code/cpp/commons/Buffer.qll +++ b/cpp/ql/lib/semmle/code/cpp/commons/Buffer.qll @@ -57,6 +57,18 @@ private Class getRootType(FieldAccess fa) { ) } +/** + * Gets the size of `v`. This predicate does not have a result when the + * unspecified type of `v` is a `ReferenceType`. + */ +private int getVariableSize(Variable v) { + exists(Type t | + t = v.getUnspecifiedType() and + not t instanceof ReferenceType and + result = t.getSize() + ) +} + /** * Gets the size of the buffer access at `va`. */ @@ -64,12 +76,8 @@ private int getSize(VariableAccess va) { exists(Variable v | va.getTarget() = v | // If `v` is not a field then the size of the buffer is just // the size of the type of `v`. - exists(Type t | - t = v.getUnspecifiedType() and - not v instanceof Field and - not t instanceof ReferenceType and - result = t.getSize() - ) + not v instanceof Field and + result = getVariableSize(v) or exists(Class c, int trueSize | // Otherwise, we find the "outermost" object and compute the size @@ -92,7 +100,7 @@ private int getSize(VariableAccess va) { // buffer is `12 - 4 = 8`. c = getRootType(va) and // we calculate the size based on the last field, to avoid including any padding after it - trueSize = max(Field f | | f.getOffsetInClass(c) + f.getUnspecifiedType().getSize()) and + trueSize = max(Field f | | f.getOffsetInClass(c) + getVariableSize(f)) and result = trueSize - v.(Field).getOffsetInClass(c) ) ) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll index f308ee190e7..a03042a77ff 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll @@ -332,6 +332,13 @@ private module IndirectInstructions { import IndirectInstructions +predicate isPostUpdateNodeImpl(Operand operand, int indirectionIndex) { + operand = any(FieldAddress fa).getObjectAddressOperand() and + indirectionIndex = [0 .. Ssa::countIndirectionsForCppType(Ssa::getLanguageType(operand))] + or + Ssa::isModifiableByCall(operand, indirectionIndex) +} + /** Gets the callable in which this node occurs. */ DataFlowCallable nodeGetEnclosingCallable(Node n) { result = n.getEnclosingCallable() } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll index bc3dda5fd34..a0a99711552 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll @@ -42,11 +42,7 @@ private newtype TIRDataFlowNode = [getMinIndirectionsForType(var.getUnspecifiedType()) .. SsaImpl::getMaxIndirectionsForType(var.getUnspecifiedType())] } or TPostUpdateNodeImpl(Operand operand, int indirectionIndex) { - operand = any(FieldAddress fa).getObjectAddressOperand() and - indirectionIndex = - [0 .. SsaImpl::countIndirectionsForCppType(SsaImpl::getLanguageType(operand))] - or - SsaImpl::isModifiableByCall(operand, indirectionIndex) + isPostUpdateNodeImpl(operand, indirectionIndex) } or TSsaSynthNode(SsaImpl::SynthNode n) or TSsaIteratorNode(IteratorFlow::IteratorFlowNode n) or diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImpl.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImpl.qll index 3af2ea38a64..b9f320e57b2 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImpl.qll @@ -143,7 +143,14 @@ private predicate isGlobalUse( min(int cand, VariableAddressInstruction vai | vai.getEnclosingIRFunction() = f and vai.getAstVariable() = v and - isDef(_, _, _, vai, cand, indirectionIndex) + ( + isDef(_, _, _, vai, cand, indirectionIndex) + or + exists(Operand operand | + isUse(_, operand, vai, cand, indirectionIndex) and + isPostUpdateNodeImpl(operand, indirectionIndex) + ) + ) | cand ) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/internal/ValueNumberingInternal.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/internal/ValueNumberingInternal.qll index ec003891774..66d499112b8 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/internal/ValueNumberingInternal.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/internal/ValueNumberingInternal.qll @@ -43,6 +43,23 @@ newtype TValueNumber = } or TUniqueValueNumber(IRFunction irFunc, Instruction instr) { uniqueValueNumber(instr, irFunc) } +/** + * A `ConvertInstruction` which converts data of type `T` to data of type `U` + * where `T` and `U` only differ in specifiers. For example, if `T` is `int` + * and `U` is `const T` this is a conversion from a non-const integer to a + * const integer. + * + * Generally, the value number of a converted value is different from the value + * number of an unconverted value, but conversions which only modify specifiers + * leave the resulting value bitwise identical to the old value. + */ +class TypePreservingConvertInstruction extends ConvertInstruction { + TypePreservingConvertInstruction() { + pragma[only_bind_out](this.getResultType().getUnspecifiedType()) = + pragma[only_bind_out](this.getUnary().getResultType().getUnspecifiedType()) + } +} + /** * A `CopyInstruction` whose source operand's value is congruent to the definition of that source * operand. @@ -216,6 +233,7 @@ private predicate unaryValueNumber( not instr instanceof InheritanceConversionInstruction and not instr instanceof CopyInstruction and not instr instanceof FieldAddressInstruction and + not instr instanceof TypePreservingConvertInstruction and instr.getOpcode() = opcode and tvalueNumber(instr.getUnary()) = operand } @@ -351,6 +369,10 @@ private TValueNumber nonUniqueValueNumber(Instruction instr) { or // The value number of a copy is just the value number of its source value. result = tvalueNumber(instr.(CongruentCopyInstruction).getSourceValue()) + or + // The value number of a type-preserving conversion is just the value + // number of the unconverted value. + result = tvalueNumber(instr.(TypePreservingConvertInstruction).getUnary()) ) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/gvn/internal/ValueNumberingInternal.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/gvn/internal/ValueNumberingInternal.qll index ec003891774..66d499112b8 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/gvn/internal/ValueNumberingInternal.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/gvn/internal/ValueNumberingInternal.qll @@ -43,6 +43,23 @@ newtype TValueNumber = } or TUniqueValueNumber(IRFunction irFunc, Instruction instr) { uniqueValueNumber(instr, irFunc) } +/** + * A `ConvertInstruction` which converts data of type `T` to data of type `U` + * where `T` and `U` only differ in specifiers. For example, if `T` is `int` + * and `U` is `const T` this is a conversion from a non-const integer to a + * const integer. + * + * Generally, the value number of a converted value is different from the value + * number of an unconverted value, but conversions which only modify specifiers + * leave the resulting value bitwise identical to the old value. + */ +class TypePreservingConvertInstruction extends ConvertInstruction { + TypePreservingConvertInstruction() { + pragma[only_bind_out](this.getResultType().getUnspecifiedType()) = + pragma[only_bind_out](this.getUnary().getResultType().getUnspecifiedType()) + } +} + /** * A `CopyInstruction` whose source operand's value is congruent to the definition of that source * operand. @@ -216,6 +233,7 @@ private predicate unaryValueNumber( not instr instanceof InheritanceConversionInstruction and not instr instanceof CopyInstruction and not instr instanceof FieldAddressInstruction and + not instr instanceof TypePreservingConvertInstruction and instr.getOpcode() = opcode and tvalueNumber(instr.getUnary()) = operand } @@ -351,6 +369,10 @@ private TValueNumber nonUniqueValueNumber(Instruction instr) { or // The value number of a copy is just the value number of its source value. result = tvalueNumber(instr.(CongruentCopyInstruction).getSourceValue()) + or + // The value number of a type-preserving conversion is just the value + // number of the unconverted value. + result = tvalueNumber(instr.(TypePreservingConvertInstruction).getUnary()) ) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/InstructionTag.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/InstructionTag.qll index 35e08e5920c..d864e86aa04 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/InstructionTag.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/InstructionTag.qll @@ -96,7 +96,8 @@ newtype TInstructionTag = exists(Expr e | exists(e.getImplicitDestructorCall(index))) or exists(Stmt s | exists(s.getImplicitDestructorCall(index))) } or - CoAwaitBranchTag() + CoAwaitBranchTag() or + BoolToIntConversionTag() class InstructionTag extends TInstructionTag { final string toString() { result = getInstructionTagId(this) } @@ -286,4 +287,6 @@ string getInstructionTagId(TInstructionTag tag) { ) or tag = CoAwaitBranchTag() and result = "CoAwaitBranch" + or + tag = BoolToIntConversionTag() and result = "BoolToIntConversion" } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll index e22aa33f360..e1314035437 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll @@ -509,6 +509,41 @@ predicate hasTranslatedSyntheticTemporaryObject(Expr expr) { not expr.hasLValueToRValueConversion() } +Opcode comparisonOpcode(ComparisonOperation expr) { + expr instanceof EQExpr and result instanceof Opcode::CompareEQ + or + expr instanceof NEExpr and result instanceof Opcode::CompareNE + or + expr instanceof LTExpr and result instanceof Opcode::CompareLT + or + expr instanceof GTExpr and result instanceof Opcode::CompareGT + or + expr instanceof LEExpr and result instanceof Opcode::CompareLE + or + expr instanceof GEExpr and result instanceof Opcode::CompareGE +} + +private predicate parentExpectsBool(Expr child) { + any(NotExpr notExpr).getOperand() = child + or + usedAsCondition(child) +} + +/** + * Holds if `expr` should have a `TranslatedSyntheticBoolToIntConversion` on it. + */ +predicate hasTranslatedSyntheticBoolToIntConversion(Expr expr) { + not ignoreExpr(expr) and + not isIRConstant(expr) and + not parentExpectsBool(expr) and + expr.getUnspecifiedType() instanceof IntType and + ( + expr instanceof NotExpr + or + exists(comparisonOpcode(expr)) + ) +} + class StaticInitializedStaticLocalVariable extends StaticLocalVariable { StaticInitializedStaticLocalVariable() { this.hasInitializer() and @@ -647,6 +682,9 @@ newtype TTranslatedElement = // A temporary object that we had to synthesize ourselves, so that we could do a field access or // method call on a prvalue. TTranslatedSyntheticTemporaryObject(Expr expr) { hasTranslatedSyntheticTemporaryObject(expr) } or + TTranslatedSyntheticBoolToIntConversion(Expr expr) { + hasTranslatedSyntheticBoolToIntConversion(expr) + } or // For expressions that would not otherwise generate an instruction. TTranslatedResultCopy(Expr expr) { not ignoreExpr(expr) and diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll index a7e85fe9b1a..f7786fcf290 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll @@ -216,7 +216,8 @@ abstract class TranslatedCoreExpr extends TranslatedExpr { not hasTranslatedLoad(expr) and not hasTranslatedSyntheticTemporaryObject(expr) and // If there's a result copy, then this expression's result is the copy. - not exprNeedsCopyIfNotLoaded(expr) + not exprNeedsCopyIfNotLoaded(expr) and + not hasTranslatedSyntheticBoolToIntConversion(expr) } } @@ -358,11 +359,12 @@ class TranslatedConditionValue extends TranslatedCoreExpr, ConditionContext, } /** - * The IR translation of a node synthesized to adjust the value category of its operand. + * The IR translation of a node synthesized to adjust the value category or type of its operand. * One of: * - `TranslatedLoad` - Convert from glvalue to prvalue by loading from the location. * - `TranslatedSyntheticTemporaryObject` - Convert from prvalue to glvalue by storing to a * temporary variable. + * - `TranslatedSyntheticBoolToIntConversion` - Convert a prvalue Boolean to a prvalue integer. */ abstract class TranslatedValueCategoryAdjustment extends TranslatedExpr { final override Instruction getFirstInstruction(EdgeKind kind) { @@ -513,6 +515,45 @@ class TranslatedSyntheticTemporaryObject extends TranslatedValueCategoryAdjustme } } +class TranslatedSyntheticBoolToIntConversion extends TranslatedValueCategoryAdjustment, + TTranslatedSyntheticBoolToIntConversion +{ + TranslatedSyntheticBoolToIntConversion() { this = TTranslatedSyntheticBoolToIntConversion(expr) } + + override string toString() { result = "Bool-to-int conversion of " + expr.toString() } + + override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) { + opcode instanceof Opcode::Convert and + tag = BoolToIntConversionTag() and + resultType = getIntType() + } + + override predicate isResultGLValue() { none() } + + override Instruction getInstructionSuccessorInternal(InstructionTag tag, EdgeKind kind) { + tag = BoolToIntConversionTag() and + result = this.getParent().getChildSuccessor(this, kind) + } + + override Instruction getALastInstructionInternal() { + result = this.getInstruction(BoolToIntConversionTag()) + } + + override Instruction getChildSuccessorInternal(TranslatedElement child, EdgeKind kind) { + child = this.getOperand() and + result = this.getInstruction(BoolToIntConversionTag()) and + kind instanceof GotoEdge + } + + override Instruction getResult() { result = this.getInstruction(BoolToIntConversionTag()) } + + override Instruction getInstructionRegisterOperand(InstructionTag tag, OperandTag operandTag) { + tag = BoolToIntConversionTag() and + operandTag instanceof UnaryOperandTag and + result = this.getOperand().getResult() + } +} + /** * IR translation of an expression that simply returns its result. We generate an otherwise useless * `CopyValue` instruction for these expressions so that there is at least one instruction @@ -1794,20 +1835,6 @@ private Opcode binaryArithmeticOpcode(BinaryArithmeticOperation expr) { expr instanceof PointerDiffExpr and result instanceof Opcode::PointerDiff } -private Opcode comparisonOpcode(ComparisonOperation expr) { - expr instanceof EQExpr and result instanceof Opcode::CompareEQ - or - expr instanceof NEExpr and result instanceof Opcode::CompareNE - or - expr instanceof LTExpr and result instanceof Opcode::CompareLT - or - expr instanceof GTExpr and result instanceof Opcode::CompareGT - or - expr instanceof LEExpr and result instanceof Opcode::CompareLE - or - expr instanceof GEExpr and result instanceof Opcode::CompareGE -} - private Opcode spaceShipOpcode(SpaceshipExpr expr) { exists(expr) and result instanceof Opcode::Spaceship diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingInternal.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingInternal.qll index ec003891774..66d499112b8 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingInternal.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingInternal.qll @@ -43,6 +43,23 @@ newtype TValueNumber = } or TUniqueValueNumber(IRFunction irFunc, Instruction instr) { uniqueValueNumber(instr, irFunc) } +/** + * A `ConvertInstruction` which converts data of type `T` to data of type `U` + * where `T` and `U` only differ in specifiers. For example, if `T` is `int` + * and `U` is `const T` this is a conversion from a non-const integer to a + * const integer. + * + * Generally, the value number of a converted value is different from the value + * number of an unconverted value, but conversions which only modify specifiers + * leave the resulting value bitwise identical to the old value. + */ +class TypePreservingConvertInstruction extends ConvertInstruction { + TypePreservingConvertInstruction() { + pragma[only_bind_out](this.getResultType().getUnspecifiedType()) = + pragma[only_bind_out](this.getUnary().getResultType().getUnspecifiedType()) + } +} + /** * A `CopyInstruction` whose source operand's value is congruent to the definition of that source * operand. @@ -216,6 +233,7 @@ private predicate unaryValueNumber( not instr instanceof InheritanceConversionInstruction and not instr instanceof CopyInstruction and not instr instanceof FieldAddressInstruction and + not instr instanceof TypePreservingConvertInstruction and instr.getOpcode() = opcode and tvalueNumber(instr.getUnary()) = operand } @@ -351,6 +369,10 @@ private TValueNumber nonUniqueValueNumber(Instruction instr) { or // The value number of a copy is just the value number of its source value. result = tvalueNumber(instr.(CongruentCopyInstruction).getSourceValue()) + or + // The value number of a type-preserving conversion is just the value + // number of the unconverted value. + result = tvalueNumber(instr.(TypePreservingConvertInstruction).getUnary()) ) ) } diff --git a/cpp/ql/src/change-notes/2025-08-08-overflow-buffer.md b/cpp/ql/src/change-notes/2025-08-08-overflow-buffer.md new file mode 100644 index 00000000000..02c73804c9f --- /dev/null +++ b/cpp/ql/src/change-notes/2025-08-08-overflow-buffer.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Fixed a false positive in `cpp/overflow-buffer` when the type of the destination buffer is a reference to a class/struct type. \ No newline at end of file diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected index 9abcd6eeee7..cb25f1a21e3 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected @@ -43,6 +43,10 @@ argHasPostUpdate | test.cpp:813:19:813:35 | * ... | ArgumentNode is missing PostUpdateNode. | | test.cpp:848:23:848:25 | rpx | ArgumentNode is missing PostUpdateNode. | | test.cpp:1093:19:1093:21 | * ... | ArgumentNode is missing PostUpdateNode. | +| test.cpp:1206:19:1206:37 | * ... | ArgumentNode is missing PostUpdateNode. | +| test.cpp:1207:10:1207:28 | * ... | ArgumentNode is missing PostUpdateNode. | +| test.cpp:1224:19:1224:37 | * ... | ArgumentNode is missing PostUpdateNode. | +| test.cpp:1225:10:1225:28 | * ... | ArgumentNode is missing PostUpdateNode. | postWithInFlow | BarrierGuard.cpp:49:6:49:6 | x [post update] | PostUpdateNode should not be the target of local flow. | | BarrierGuard.cpp:60:7:60:7 | x [post update] | PostUpdateNode should not be the target of local flow. | @@ -193,6 +197,10 @@ postWithInFlow | test.cpp:1139:4:1139:7 | data [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:1153:5:1153:6 | * ... [post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:1153:6:1153:6 | p [inner post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:1165:5:1165:6 | * ... [post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:1165:6:1165:6 | p [inner post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:1195:5:1195:6 | * ... [post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:1195:6:1195:6 | p [inner post update] | PostUpdateNode should not be the target of local flow. | viableImplInCallContextTooLarge uniqueParameterNodeAtPosition uniqueParameterNodePosition diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected index 323ce2a4312..6e0b03be9c6 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected @@ -134,6 +134,11 @@ astFlow | test.cpp:1086:12:1086:12 | a | test.cpp:1088:8:1088:9 | & ... | | test.cpp:1137:7:1137:10 | data | test.cpp:1140:8:1140:18 | * ... | | test.cpp:1138:17:1138:22 | call to source | test.cpp:1140:8:1140:18 | * ... | +| test.cpp:1165:10:1165:15 | call to source | test.cpp:1170:19:1170:32 | global_int_ptr | +| test.cpp:1165:10:1165:15 | call to source | test.cpp:1234:19:1234:34 | global_int_array | +| test.cpp:1165:10:1165:15 | call to source | test.cpp:1239:10:1239:26 | * ... | +| test.cpp:1195:10:1195:24 | call to indirect_source | test.cpp:1200:19:1200:36 | global_int_ptr_ptr | +| test.cpp:1195:10:1195:24 | call to indirect_source | test.cpp:1201:10:1201:27 | global_int_ptr_ptr | | true_upon_entry.cpp:17:11:17:16 | call to source | true_upon_entry.cpp:21:8:21:8 | x | | true_upon_entry.cpp:27:9:27:14 | call to source | true_upon_entry.cpp:29:8:29:8 | x | | true_upon_entry.cpp:33:11:33:16 | call to source | true_upon_entry.cpp:39:8:39:8 | x | @@ -327,6 +332,20 @@ irFlow | test.cpp:1117:27:1117:34 | call to source | test.cpp:1117:27:1117:34 | call to source | | test.cpp:1132:11:1132:16 | call to source | test.cpp:1121:8:1121:8 | x | | test.cpp:1138:17:1138:22 | call to source | test.cpp:1140:8:1140:18 | * ... | +| test.cpp:1165:10:1165:15 | call to source | test.cpp:1170:19:1170:32 | *global_int_ptr | +| test.cpp:1165:10:1165:15 | call to source | test.cpp:1175:10:1175:24 | * ... | +| test.cpp:1165:10:1165:15 | call to source | test.cpp:1184:19:1184:32 | *global_int_ptr | +| test.cpp:1165:10:1165:15 | call to source | test.cpp:1189:10:1189:24 | * ... | +| test.cpp:1165:10:1165:15 | call to source | test.cpp:1234:19:1234:34 | *global_int_array | +| test.cpp:1165:10:1165:15 | call to source | test.cpp:1239:10:1239:26 | * ... | +| test.cpp:1165:10:1165:15 | call to source | test.cpp:1248:19:1248:34 | *global_int_array | +| test.cpp:1165:10:1165:15 | call to source | test.cpp:1253:10:1253:26 | * ... | +| test.cpp:1195:10:1195:24 | *call to indirect_source | test.cpp:1200:19:1200:36 | **global_int_ptr_ptr | +| test.cpp:1195:10:1195:24 | *call to indirect_source | test.cpp:1206:19:1206:37 | ** ... | +| test.cpp:1195:10:1195:24 | *call to indirect_source | test.cpp:1209:10:1209:29 | * ... | +| test.cpp:1195:10:1195:24 | *call to indirect_source | test.cpp:1218:19:1218:36 | **global_int_ptr_ptr | +| test.cpp:1195:10:1195:24 | *call to indirect_source | test.cpp:1224:19:1224:37 | ** ... | +| test.cpp:1195:10:1195:24 | *call to indirect_source | test.cpp:1227:10:1227:29 | * ... | | true_upon_entry.cpp:9:11:9:16 | call to source | true_upon_entry.cpp:13:8:13:8 | x | | true_upon_entry.cpp:17:11:17:16 | call to source | true_upon_entry.cpp:21:8:21:8 | x | | true_upon_entry.cpp:27:9:27:14 | call to source | true_upon_entry.cpp:29:8:29:8 | x | diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp index b804159d858..35e6a074cfd 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp @@ -1155,4 +1155,101 @@ namespace conflation_regression { } } -int recursion = (sink(recursion), source()); // clean \ No newline at end of file +int recursion = (sink(recursion), source()); // clean + + +namespace globals_without_explicit_def { + int* global_int_ptr; + + void set(int* p) { // $ ast-def=p ir-def=*p + *p = source(); + } + + void test1() { + set(global_int_ptr); + indirect_sink(global_int_ptr); // $ ir,ast + } + + void test2() { + set(global_int_ptr); + sink(*global_int_ptr); // $ ir MISSING: ast + } + + void calls_set() { + set(global_int_ptr); + } + + void test3() { + calls_set(); + indirect_sink(global_int_ptr); // $ ir MISSING: ast + } + + void test4() { + calls_set(); + sink(*global_int_ptr); // $ ir MISSING: ast + } + + int** global_int_ptr_ptr; + + void set_indirect(int** p) { // $ ast-def=p ir-def=*p ir-def=**p + *p = indirect_source(); + } + + void test5() { + set_indirect(global_int_ptr_ptr); + indirect_sink(global_int_ptr_ptr); // $ ir,ast + sink(global_int_ptr_ptr); // $ SPURIOUS: ast + } + + void test6() { + set_indirect(global_int_ptr_ptr); + indirect_sink(*global_int_ptr_ptr); // $ ir MISSING: ast + sink(*global_int_ptr_ptr); + indirect_sink(**global_int_ptr_ptr); + sink(**global_int_ptr_ptr); // $ ir + } + + void calls_set_indirect() { + set_indirect(global_int_ptr_ptr); + } + + void test7() { + calls_set_indirect(); + indirect_sink(global_int_ptr_ptr); // $ ir MISSING: ast + sink(global_int_ptr_ptr); // $ MISSING: ast + } + + void test8() { + calls_set_indirect(); + indirect_sink(*global_int_ptr_ptr); // $ ir MISSING: ast + sink(*global_int_ptr_ptr); + indirect_sink(**global_int_ptr_ptr); + sink(**global_int_ptr_ptr); // $ ir MISSING: ast + } + + int global_int_array[10]; + + void test9() { + set(global_int_array); + indirect_sink(global_int_array); // $ ir,ast + } + + void test10() { + set(global_int_array); + sink(*global_int_array); // $ ir,ast + } + + void calls_set_array() { + set(global_int_array); + } + + void test11() { + calls_set_array(); + indirect_sink(global_int_array); // $ ir MISSING: ast + } + + void test12() { + calls_set_array(); + sink(*global_int_array); // $ ir MISSING: ast + } +} \ No newline at end of file diff --git a/cpp/ql/test/library-tests/dataflow/fields/aliasing.cpp b/cpp/ql/test/library-tests/dataflow/fields/aliasing.cpp index 71bfc62b3ba..bf5e941cc3b 100644 --- a/cpp/ql/test/library-tests/dataflow/fields/aliasing.cpp +++ b/cpp/ql/test/library-tests/dataflow/fields/aliasing.cpp @@ -204,4 +204,65 @@ void deep_member_field_arrow(S2 *ps2) { void deep_member_field_arrow_different_fields(S2 *ps2) { taint_a_ptr(&ps2->s.m1); sink(ps2->s.m2); +} + + +namespace GlobalFieldFlow { + S global_s; + S2 global_s2; + + void set_field() { + global_s.m1 = user_input(); + } + + void read_field() { + sink(global_s.m1); // $ ir MISSING: ast + } + + void set_nested_field() { + global_s2.s.m1 = user_input(); + } + + void read_nested_field() { + sink(global_s2.s.m1); // $ ir MISSING: ast + } + + S* global_s_ptr; + S2* global_s2_ptr; + + void set_field_ptr() { + global_s_ptr->m1 = user_input(); + } + + void read_field_ptr() { + sink(global_s_ptr->m1); // $ ir MISSING: ast + } + + void set_nested_field_ptr() { + global_s2_ptr->s.m1 = user_input(); + } + + void read_nested_field_ptr() { + sink(global_s2_ptr->s.m1); // $ ir MISSING: ast + } + + S_with_pointer global_s_with_pointer; + + void set_field_indirect() { + *global_s_with_pointer.data = user_input(); + } + + void read_field_indirect() { + sink(*global_s_with_pointer.data); // $ ir MISSING: ast + } + + S_with_array global_s_with_array; + + void set_field_array() { + *global_s_with_array.data = user_input(); + } + + void read_field_array() { + sink(*global_s_with_array.data); // $ ir MISSING: ast + } } \ No newline at end of file diff --git a/cpp/ql/test/library-tests/dataflow/fields/dataflow-consistency.expected b/cpp/ql/test/library-tests/dataflow/fields/dataflow-consistency.expected index 29daff36303..88dd9751f27 100644 --- a/cpp/ql/test/library-tests/dataflow/fields/dataflow-consistency.expected +++ b/cpp/ql/test/library-tests/dataflow/fields/dataflow-consistency.expected @@ -95,6 +95,14 @@ postWithInFlow | aliasing.cpp:194:21:194:22 | m1 [inner post update] | PostUpdateNode should not be the target of local flow. | | aliasing.cpp:200:23:200:24 | m1 [inner post update] | PostUpdateNode should not be the target of local flow. | | aliasing.cpp:205:23:205:24 | m1 [inner post update] | PostUpdateNode should not be the target of local flow. | +| aliasing.cpp:215:14:215:15 | m1 [post update] | PostUpdateNode should not be the target of local flow. | +| aliasing.cpp:223:17:223:18 | m1 [post update] | PostUpdateNode should not be the target of local flow. | +| aliasing.cpp:234:19:234:20 | m1 [post update] | PostUpdateNode should not be the target of local flow. | +| aliasing.cpp:242:22:242:23 | m1 [post update] | PostUpdateNode should not be the target of local flow. | +| aliasing.cpp:252:5:252:31 | * ... [post update] | PostUpdateNode should not be the target of local flow. | +| aliasing.cpp:252:28:252:31 | data [inner post update] | PostUpdateNode should not be the target of local flow. | +| aliasing.cpp:262:5:262:29 | * ... [post update] | PostUpdateNode should not be the target of local flow. | +| aliasing.cpp:262:26:262:29 | data [inner post update] | PostUpdateNode should not be the target of local flow. | | arrays.cpp:6:3:6:5 | arr [inner post update] | PostUpdateNode should not be the target of local flow. | | arrays.cpp:6:3:6:8 | access to array [post update] | PostUpdateNode should not be the target of local flow. | | arrays.cpp:15:3:15:10 | * ... [post update] | PostUpdateNode should not be the target of local flow. | diff --git a/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.expected b/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.expected index 6852a5dd3cd..bf725830b32 100644 --- a/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.expected +++ b/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.expected @@ -346,6 +346,46 @@ edges | aliasing.cpp:200:21:200:21 | *s [post update] [m1] | aliasing.cpp:200:16:200:18 | *ps2 [post update] [s, m1] | provenance | | | aliasing.cpp:201:8:201:10 | *ps2 [s, m1] | aliasing.cpp:201:13:201:13 | *s [m1] | provenance | | | aliasing.cpp:201:13:201:13 | *s [m1] | aliasing.cpp:201:15:201:16 | m1 | provenance | | +| aliasing.cpp:211:5:211:12 | *global_s [m1] | aliasing.cpp:211:5:211:12 | *global_s [m1] | provenance | | +| aliasing.cpp:211:5:211:12 | *global_s [m1] | aliasing.cpp:219:10:219:17 | *global_s [m1] | provenance | | +| aliasing.cpp:212:6:212:14 | *global_s2 [s, m1] | aliasing.cpp:212:6:212:14 | *global_s2 [s, m1] | provenance | | +| aliasing.cpp:212:6:212:14 | *global_s2 [s, m1] | aliasing.cpp:227:10:227:18 | *global_s2 [s, m1] | provenance | | +| aliasing.cpp:215:5:215:12 | *global_s [post update] [m1] | aliasing.cpp:211:5:211:12 | *global_s [m1] | provenance | | +| aliasing.cpp:215:5:215:30 | ... = ... | aliasing.cpp:215:5:215:12 | *global_s [post update] [m1] | provenance | | +| aliasing.cpp:215:19:215:28 | call to user_input | aliasing.cpp:215:5:215:30 | ... = ... | provenance | | +| aliasing.cpp:219:10:219:17 | *global_s [m1] | aliasing.cpp:219:19:219:20 | m1 | provenance | | +| aliasing.cpp:223:5:223:13 | *global_s2 [post update] [s, m1] | aliasing.cpp:212:6:212:14 | *global_s2 [s, m1] | provenance | | +| aliasing.cpp:223:5:223:33 | ... = ... | aliasing.cpp:223:15:223:15 | *s [post update] [m1] | provenance | | +| aliasing.cpp:223:15:223:15 | *s [post update] [m1] | aliasing.cpp:223:5:223:13 | *global_s2 [post update] [s, m1] | provenance | | +| aliasing.cpp:223:22:223:31 | call to user_input | aliasing.cpp:223:5:223:33 | ... = ... | provenance | | +| aliasing.cpp:227:10:227:18 | *global_s2 [s, m1] | aliasing.cpp:227:20:227:20 | *s [m1] | provenance | | +| aliasing.cpp:227:20:227:20 | *s [m1] | aliasing.cpp:227:22:227:23 | m1 | provenance | | +| aliasing.cpp:230:6:230:17 | **global_s_ptr [m1] | aliasing.cpp:230:6:230:17 | **global_s_ptr [m1] | provenance | | +| aliasing.cpp:230:6:230:17 | **global_s_ptr [m1] | aliasing.cpp:238:10:238:21 | *global_s_ptr [m1] | provenance | | +| aliasing.cpp:231:7:231:19 | **global_s2_ptr [s, m1] | aliasing.cpp:231:7:231:19 | **global_s2_ptr [s, m1] | provenance | | +| aliasing.cpp:231:7:231:19 | **global_s2_ptr [s, m1] | aliasing.cpp:246:10:246:22 | *global_s2_ptr [s, m1] | provenance | | +| aliasing.cpp:234:5:234:16 | *global_s_ptr [post update] [m1] | aliasing.cpp:230:6:230:17 | **global_s_ptr [m1] | provenance | | +| aliasing.cpp:234:5:234:35 | ... = ... | aliasing.cpp:234:5:234:16 | *global_s_ptr [post update] [m1] | provenance | | +| aliasing.cpp:234:24:234:33 | call to user_input | aliasing.cpp:234:5:234:35 | ... = ... | provenance | | +| aliasing.cpp:238:10:238:21 | *global_s_ptr [m1] | aliasing.cpp:238:24:238:25 | m1 | provenance | | +| aliasing.cpp:242:5:242:17 | *global_s2_ptr [post update] [s, m1] | aliasing.cpp:231:7:231:19 | **global_s2_ptr [s, m1] | provenance | | +| aliasing.cpp:242:5:242:38 | ... = ... | aliasing.cpp:242:20:242:20 | *s [post update] [m1] | provenance | | +| aliasing.cpp:242:20:242:20 | *s [post update] [m1] | aliasing.cpp:242:5:242:17 | *global_s2_ptr [post update] [s, m1] | provenance | | +| aliasing.cpp:242:27:242:36 | call to user_input | aliasing.cpp:242:5:242:38 | ... = ... | provenance | | +| aliasing.cpp:246:10:246:22 | *global_s2_ptr [s, m1] | aliasing.cpp:246:25:246:25 | *s [m1] | provenance | | +| aliasing.cpp:246:25:246:25 | *s [m1] | aliasing.cpp:246:27:246:28 | m1 | provenance | | +| aliasing.cpp:249:18:249:38 | *global_s_with_pointer [*data] | aliasing.cpp:249:18:249:38 | *global_s_with_pointer [*data] | provenance | | +| aliasing.cpp:249:18:249:38 | *global_s_with_pointer [*data] | aliasing.cpp:256:11:256:31 | *global_s_with_pointer [*data] | provenance | | +| aliasing.cpp:252:5:252:46 | ... = ... | aliasing.cpp:252:6:252:26 | *global_s_with_pointer [post update] [*data] | provenance | | +| aliasing.cpp:252:6:252:26 | *global_s_with_pointer [post update] [*data] | aliasing.cpp:249:18:249:38 | *global_s_with_pointer [*data] | provenance | | +| aliasing.cpp:252:35:252:44 | call to user_input | aliasing.cpp:252:5:252:46 | ... = ... | provenance | | +| aliasing.cpp:256:11:256:31 | *global_s_with_pointer [*data] | aliasing.cpp:256:10:256:36 | * ... | provenance | | +| aliasing.cpp:259:16:259:34 | *global_s_with_array [data] | aliasing.cpp:259:16:259:34 | *global_s_with_array [data] | provenance | | +| aliasing.cpp:259:16:259:34 | *global_s_with_array [data] | aliasing.cpp:266:11:266:29 | *global_s_with_array [data] | provenance | | +| aliasing.cpp:262:5:262:44 | ... = ... | aliasing.cpp:262:6:262:24 | *global_s_with_array [post update] [data] | provenance | | +| aliasing.cpp:262:6:262:24 | *global_s_with_array [post update] [data] | aliasing.cpp:259:16:259:34 | *global_s_with_array [data] | provenance | | +| aliasing.cpp:262:33:262:42 | call to user_input | aliasing.cpp:262:5:262:44 | ... = ... | provenance | | +| aliasing.cpp:266:11:266:29 | *global_s_with_array [data] | aliasing.cpp:266:10:266:34 | * ... | provenance | | | arrays.cpp:6:3:6:23 | ... = ... | arrays.cpp:7:8:7:13 | access to array | provenance | | | arrays.cpp:6:3:6:23 | ... = ... | arrays.cpp:8:8:8:13 | access to array | provenance | | | arrays.cpp:6:3:6:23 | ... = ... | arrays.cpp:9:8:9:11 | * ... | provenance | | @@ -1244,6 +1284,46 @@ nodes | aliasing.cpp:201:8:201:10 | *ps2 [s, m1] | semmle.label | *ps2 [s, m1] | | aliasing.cpp:201:13:201:13 | *s [m1] | semmle.label | *s [m1] | | aliasing.cpp:201:15:201:16 | m1 | semmle.label | m1 | +| aliasing.cpp:211:5:211:12 | *global_s [m1] | semmle.label | *global_s [m1] | +| aliasing.cpp:212:6:212:14 | *global_s2 [s, m1] | semmle.label | *global_s2 [s, m1] | +| aliasing.cpp:215:5:215:12 | *global_s [post update] [m1] | semmle.label | *global_s [post update] [m1] | +| aliasing.cpp:215:5:215:30 | ... = ... | semmle.label | ... = ... | +| aliasing.cpp:215:19:215:28 | call to user_input | semmle.label | call to user_input | +| aliasing.cpp:219:10:219:17 | *global_s [m1] | semmle.label | *global_s [m1] | +| aliasing.cpp:219:19:219:20 | m1 | semmle.label | m1 | +| aliasing.cpp:223:5:223:13 | *global_s2 [post update] [s, m1] | semmle.label | *global_s2 [post update] [s, m1] | +| aliasing.cpp:223:5:223:33 | ... = ... | semmle.label | ... = ... | +| aliasing.cpp:223:15:223:15 | *s [post update] [m1] | semmle.label | *s [post update] [m1] | +| aliasing.cpp:223:22:223:31 | call to user_input | semmle.label | call to user_input | +| aliasing.cpp:227:10:227:18 | *global_s2 [s, m1] | semmle.label | *global_s2 [s, m1] | +| aliasing.cpp:227:20:227:20 | *s [m1] | semmle.label | *s [m1] | +| aliasing.cpp:227:22:227:23 | m1 | semmle.label | m1 | +| aliasing.cpp:230:6:230:17 | **global_s_ptr [m1] | semmle.label | **global_s_ptr [m1] | +| aliasing.cpp:231:7:231:19 | **global_s2_ptr [s, m1] | semmle.label | **global_s2_ptr [s, m1] | +| aliasing.cpp:234:5:234:16 | *global_s_ptr [post update] [m1] | semmle.label | *global_s_ptr [post update] [m1] | +| aliasing.cpp:234:5:234:35 | ... = ... | semmle.label | ... = ... | +| aliasing.cpp:234:24:234:33 | call to user_input | semmle.label | call to user_input | +| aliasing.cpp:238:10:238:21 | *global_s_ptr [m1] | semmle.label | *global_s_ptr [m1] | +| aliasing.cpp:238:24:238:25 | m1 | semmle.label | m1 | +| aliasing.cpp:242:5:242:17 | *global_s2_ptr [post update] [s, m1] | semmle.label | *global_s2_ptr [post update] [s, m1] | +| aliasing.cpp:242:5:242:38 | ... = ... | semmle.label | ... = ... | +| aliasing.cpp:242:20:242:20 | *s [post update] [m1] | semmle.label | *s [post update] [m1] | +| aliasing.cpp:242:27:242:36 | call to user_input | semmle.label | call to user_input | +| aliasing.cpp:246:10:246:22 | *global_s2_ptr [s, m1] | semmle.label | *global_s2_ptr [s, m1] | +| aliasing.cpp:246:25:246:25 | *s [m1] | semmle.label | *s [m1] | +| aliasing.cpp:246:27:246:28 | m1 | semmle.label | m1 | +| aliasing.cpp:249:18:249:38 | *global_s_with_pointer [*data] | semmle.label | *global_s_with_pointer [*data] | +| aliasing.cpp:252:5:252:46 | ... = ... | semmle.label | ... = ... | +| aliasing.cpp:252:6:252:26 | *global_s_with_pointer [post update] [*data] | semmle.label | *global_s_with_pointer [post update] [*data] | +| aliasing.cpp:252:35:252:44 | call to user_input | semmle.label | call to user_input | +| aliasing.cpp:256:10:256:36 | * ... | semmle.label | * ... | +| aliasing.cpp:256:11:256:31 | *global_s_with_pointer [*data] | semmle.label | *global_s_with_pointer [*data] | +| aliasing.cpp:259:16:259:34 | *global_s_with_array [data] | semmle.label | *global_s_with_array [data] | +| aliasing.cpp:262:5:262:44 | ... = ... | semmle.label | ... = ... | +| aliasing.cpp:262:6:262:24 | *global_s_with_array [post update] [data] | semmle.label | *global_s_with_array [post update] [data] | +| aliasing.cpp:262:33:262:42 | call to user_input | semmle.label | call to user_input | +| aliasing.cpp:266:10:266:34 | * ... | semmle.label | * ... | +| aliasing.cpp:266:11:266:29 | *global_s_with_array [data] | semmle.label | *global_s_with_array [data] | | arrays.cpp:6:3:6:23 | ... = ... | semmle.label | ... = ... | | arrays.cpp:6:12:6:21 | call to user_input | semmle.label | call to user_input | | arrays.cpp:7:8:7:13 | access to array | semmle.label | access to array | @@ -1902,6 +1982,12 @@ subpaths | aliasing.cpp:176:13:176:14 | m1 | aliasing.cpp:106:9:106:18 | call to user_input | aliasing.cpp:176:13:176:14 | m1 | m1 flows from $@ | aliasing.cpp:106:9:106:18 | call to user_input | call to user_input | | aliasing.cpp:189:15:189:16 | m1 | aliasing.cpp:106:9:106:18 | call to user_input | aliasing.cpp:189:15:189:16 | m1 | m1 flows from $@ | aliasing.cpp:106:9:106:18 | call to user_input | call to user_input | | aliasing.cpp:201:15:201:16 | m1 | aliasing.cpp:106:9:106:18 | call to user_input | aliasing.cpp:201:15:201:16 | m1 | m1 flows from $@ | aliasing.cpp:106:9:106:18 | call to user_input | call to user_input | +| aliasing.cpp:219:19:219:20 | m1 | aliasing.cpp:215:19:215:28 | call to user_input | aliasing.cpp:219:19:219:20 | m1 | m1 flows from $@ | aliasing.cpp:215:19:215:28 | call to user_input | call to user_input | +| aliasing.cpp:227:22:227:23 | m1 | aliasing.cpp:223:22:223:31 | call to user_input | aliasing.cpp:227:22:227:23 | m1 | m1 flows from $@ | aliasing.cpp:223:22:223:31 | call to user_input | call to user_input | +| aliasing.cpp:238:24:238:25 | m1 | aliasing.cpp:234:24:234:33 | call to user_input | aliasing.cpp:238:24:238:25 | m1 | m1 flows from $@ | aliasing.cpp:234:24:234:33 | call to user_input | call to user_input | +| aliasing.cpp:246:27:246:28 | m1 | aliasing.cpp:242:27:242:36 | call to user_input | aliasing.cpp:246:27:246:28 | m1 | m1 flows from $@ | aliasing.cpp:242:27:242:36 | call to user_input | call to user_input | +| aliasing.cpp:256:10:256:36 | * ... | aliasing.cpp:252:35:252:44 | call to user_input | aliasing.cpp:256:10:256:36 | * ... | * ... flows from $@ | aliasing.cpp:252:35:252:44 | call to user_input | call to user_input | +| aliasing.cpp:266:10:266:34 | * ... | aliasing.cpp:262:33:262:42 | call to user_input | aliasing.cpp:266:10:266:34 | * ... | * ... flows from $@ | aliasing.cpp:262:33:262:42 | call to user_input | call to user_input | | arrays.cpp:7:8:7:13 | access to array | arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:7:8:7:13 | access to array | access to array flows from $@ | arrays.cpp:6:12:6:21 | call to user_input | call to user_input | | arrays.cpp:8:8:8:13 | access to array | arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:8:8:8:13 | access to array | access to array flows from $@ | arrays.cpp:6:12:6:21 | call to user_input | call to user_input | | arrays.cpp:9:8:9:11 | * ... | arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:9:8:9:11 | * ... | * ... flows from $@ | arrays.cpp:6:12:6:21 | call to user_input | call to user_input | diff --git a/cpp/ql/test/library-tests/dataflow/fields/partial-definition-diff.expected b/cpp/ql/test/library-tests/dataflow/fields/partial-definition-diff.expected index 91b22f8d13a..8137e350d85 100644 --- a/cpp/ql/test/library-tests/dataflow/fields/partial-definition-diff.expected +++ b/cpp/ql/test/library-tests/dataflow/fields/partial-definition-diff.expected @@ -141,6 +141,20 @@ WARNING: module 'DataFlow' has been deprecated and may be removed in future (par | aliasing.cpp:201:13:201:13 | s | IR only | | aliasing.cpp:206:8:206:10 | ps2 | IR only | | aliasing.cpp:206:13:206:13 | s | IR only | +| aliasing.cpp:215:14:215:15 | m1 | AST only | +| aliasing.cpp:219:10:219:17 | global_s | IR only | +| aliasing.cpp:223:17:223:18 | m1 | AST only | +| aliasing.cpp:227:10:227:18 | global_s2 | IR only | +| aliasing.cpp:227:20:227:20 | s | IR only | +| aliasing.cpp:234:19:234:20 | m1 | AST only | +| aliasing.cpp:238:10:238:21 | global_s_ptr | IR only | +| aliasing.cpp:242:22:242:23 | m1 | AST only | +| aliasing.cpp:246:10:246:22 | global_s2_ptr | IR only | +| aliasing.cpp:246:25:246:25 | s | IR only | +| aliasing.cpp:252:5:252:31 | * ... | AST only | +| aliasing.cpp:256:11:256:31 | global_s_with_pointer | IR only | +| aliasing.cpp:262:5:262:29 | * ... | AST only | +| aliasing.cpp:266:11:266:29 | global_s_with_array | IR only | | arrays.cpp:6:3:6:8 | access to array | AST only | | arrays.cpp:7:8:7:13 | access to array | IR only | | arrays.cpp:7:8:7:13 | access to array | IR only | diff --git a/cpp/ql/test/library-tests/dataflow/fields/partial-definition-ir.expected b/cpp/ql/test/library-tests/dataflow/fields/partial-definition-ir.expected index c12cc3c3c0f..8df575d8e16 100644 --- a/cpp/ql/test/library-tests/dataflow/fields/partial-definition-ir.expected +++ b/cpp/ql/test/library-tests/dataflow/fields/partial-definition-ir.expected @@ -285,6 +285,22 @@ | aliasing.cpp:205:21:205:21 | s | | aliasing.cpp:206:8:206:10 | ps2 | | aliasing.cpp:206:13:206:13 | s | +| aliasing.cpp:215:5:215:12 | global_s | +| aliasing.cpp:219:10:219:17 | global_s | +| aliasing.cpp:223:5:223:13 | global_s2 | +| aliasing.cpp:223:15:223:15 | s | +| aliasing.cpp:227:10:227:18 | global_s2 | +| aliasing.cpp:227:20:227:20 | s | +| aliasing.cpp:234:5:234:16 | global_s_ptr | +| aliasing.cpp:238:10:238:21 | global_s_ptr | +| aliasing.cpp:242:5:242:17 | global_s2_ptr | +| aliasing.cpp:242:20:242:20 | s | +| aliasing.cpp:246:10:246:22 | global_s2_ptr | +| aliasing.cpp:246:25:246:25 | s | +| aliasing.cpp:252:6:252:26 | global_s_with_pointer | +| aliasing.cpp:256:11:256:31 | global_s_with_pointer | +| aliasing.cpp:262:6:262:24 | global_s_with_array | +| aliasing.cpp:266:11:266:29 | global_s_with_array | | arrays.cpp:7:8:7:13 | access to array | | arrays.cpp:8:8:8:13 | access to array | | arrays.cpp:9:8:9:11 | * ... | diff --git a/cpp/ql/test/library-tests/dataflow/fields/partial-definition.expected b/cpp/ql/test/library-tests/dataflow/fields/partial-definition.expected index 00e84906b6c..397e069c166 100644 --- a/cpp/ql/test/library-tests/dataflow/fields/partial-definition.expected +++ b/cpp/ql/test/library-tests/dataflow/fields/partial-definition.expected @@ -225,6 +225,20 @@ WARNING: module 'DataFlow' has been deprecated and may be removed in future (par | aliasing.cpp:205:15:205:24 | & ... | | aliasing.cpp:205:16:205:18 | ps2 | | aliasing.cpp:205:21:205:21 | s | +| aliasing.cpp:215:5:215:12 | global_s | +| aliasing.cpp:215:14:215:15 | m1 | +| aliasing.cpp:223:5:223:13 | global_s2 | +| aliasing.cpp:223:15:223:15 | s | +| aliasing.cpp:223:17:223:18 | m1 | +| aliasing.cpp:234:5:234:16 | global_s_ptr | +| aliasing.cpp:234:19:234:20 | m1 | +| aliasing.cpp:242:5:242:17 | global_s2_ptr | +| aliasing.cpp:242:20:242:20 | s | +| aliasing.cpp:242:22:242:23 | m1 | +| aliasing.cpp:252:5:252:31 | * ... | +| aliasing.cpp:252:6:252:26 | global_s_with_pointer | +| aliasing.cpp:262:5:262:29 | * ... | +| aliasing.cpp:262:6:262:24 | global_s_with_array | | arrays.cpp:6:3:6:8 | access to array | | arrays.cpp:15:3:15:10 | * ... | | arrays.cpp:36:3:36:3 | o | diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index a3ee6b46bd5..6e62071e7d9 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -4932,7 +4932,20 @@ ir.c: # 103| Type = [IntType] int # 103| ValueCategory = prvalue(load) # 103| getThen(): [BlockStmt] { ... } -# 104| getStmt(16): [ReturnStmt] return ... +# 105| getStmt(16): [DeclStmt] declaration +# 105| getDeclarationEntry(0): [VariableDeclarationEntry] definition of double_negation +# 105| Type = [IntType] int +# 105| getVariable().getInitializer(): [Initializer] initializer for double_negation +# 105| getExpr(): [NotExpr] ! ... +# 105| Type = [IntType] int +# 105| ValueCategory = prvalue +# 105| getOperand(): [NotExpr] ! ... +# 105| Type = [IntType] int +# 105| ValueCategory = prvalue +# 105| getOperand(): [VariableAccess] x1 +# 105| Type = [IntType] int +# 105| ValueCategory = prvalue(load) +# 106| getStmt(17): [ReturnStmt] return ... ir.cpp: # 1| [TopLevelFunction] void Constants() # 1| : diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected index 6d58656b55f..6bf6801a48b 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -3706,9 +3706,10 @@ ir.c: # 88| r88_3(int) = Load[x1] : &:r88_2, m84_6 # 88| r88_4(int) = Constant[0] : # 88| r88_5(bool) = CompareEQ : r88_3, r88_4 -# 88| m88_6(int) = Store[y] : &:r88_1, r88_5 +# 88| r88_6(int) = Convert : r88_5 +# 88| m88_7(int) = Store[y] : &:r88_1, r88_6 # 89| r89_1(glval) = VariableAddress[y] : -# 89| r89_2(int) = Load[y] : &:r89_1, m88_6 +# 89| r89_2(int) = Load[y] : &:r89_1, m88_7 # 89| r89_3(int) = Constant[0] : # 89| r89_4(bool) = CompareNE : r89_2, r89_3 # 89| v89_5(void) = ConditionalBranch : r89_4 @@ -3721,7 +3722,7 @@ ir.c: # 90| Block 6 # 90| r90_1(glval) = VariableAddress[y] : -# 90| r90_2(int) = Load[y] : &:r90_1, m88_6 +# 90| r90_2(int) = Load[y] : &:r90_1, m88_7 # 90| r90_3(int) = Constant[0] : # 90| r90_4(bool) = CompareEQ : r90_2, r90_3 # 90| v90_5(void) = ConditionalBranch : r90_4 @@ -3969,11 +3970,19 @@ ir.c: # 103| v103_6(void) = NoOp : #-----| Goto -> Block 40 -# 104| Block 40 -# 104| v104_1(void) = NoOp : -# 84| v84_9(void) = ReturnVoid : -# 84| v84_10(void) = AliasedUse : m84_3 -# 84| v84_11(void) = ExitFunction : +# 105| Block 40 +# 105| r105_1(glval) = VariableAddress[double_negation] : +# 105| r105_2(glval) = VariableAddress[x1] : +# 105| r105_3(int) = Load[x1] : &:r105_2, m84_6 +# 105| r105_4(int) = Constant[0] : +# 105| r105_5(bool) = CompareEQ : r105_3, r105_4 +# 105| r105_6(bool) = LogicalNot : r105_5 +# 105| r105_7(int) = Convert : r105_6 +# 105| m105_8(int) = Store[double_negation] : &:r105_1, r105_7 +# 106| v106_1(void) = NoOp : +# 84| v84_9(void) = ReturnVoid : +# 84| v84_10(void) = AliasedUse : m84_3 +# 84| v84_11(void) = ExitFunction : ir.cpp: # 1| void Constants() diff --git a/cpp/ql/test/library-tests/ir/ir/ir.c b/cpp/ql/test/library-tests/ir/ir/ir.c index 6e5b3774304..1d11ec6b596 100644 --- a/cpp/ql/test/library-tests/ir/ir/ir.c +++ b/cpp/ql/test/library-tests/ir/ir/ir.c @@ -101,6 +101,8 @@ void branch_on_integral_in_c(int x1, int x2) { int x_1_and_2 = x1 && x2; if(x_1_and_2) {} if(!x_1_and_2) {} + + int double_negation = !!x1; } // semmle-extractor-options: --microsoft diff --git a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected index 8cdb5e8c351..bf4cef8c3f4 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -3343,7 +3343,8 @@ ir.c: # 88| r88_3(int) = Load[x1] : &:r88_2, ~m? # 88| r88_4(int) = Constant[0] : # 88| r88_5(bool) = CompareEQ : r88_3, r88_4 -# 88| mu88_6(int) = Store[y] : &:r88_1, r88_5 +# 88| r88_6(int) = Convert : r88_5 +# 88| mu88_7(int) = Store[y] : &:r88_1, r88_6 # 89| r89_1(glval) = VariableAddress[y] : # 89| r89_2(int) = Load[y] : &:r89_1, ~m? # 89| r89_3(int) = Constant[0] : @@ -3605,11 +3606,19 @@ ir.c: # 103| v103_6(void) = NoOp : #-----| Goto -> Block 40 -# 104| Block 40 -# 104| v104_1(void) = NoOp : -# 84| v84_8(void) = ReturnVoid : -# 84| v84_9(void) = AliasedUse : ~m? -# 84| v84_10(void) = ExitFunction : +# 105| Block 40 +# 105| r105_1(glval) = VariableAddress[double_negation] : +# 105| r105_2(glval) = VariableAddress[x1] : +# 105| r105_3(int) = Load[x1] : &:r105_2, ~m? +# 105| r105_4(int) = Constant[0] : +# 105| r105_5(bool) = CompareEQ : r105_3, r105_4 +# 105| r105_6(bool) = LogicalNot : r105_5 +# 105| r105_7(int) = Convert : r105_6 +# 105| mu105_8(int) = Store[double_negation] : &:r105_1, r105_7 +# 106| v106_1(void) = NoOp : +# 84| v84_8(void) = ReturnVoid : +# 84| v84_9(void) = AliasedUse : ~m? +# 84| v84_10(void) = ExitFunction : ir.cpp: # 1| void Constants() diff --git a/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/ir_gvn.expected b/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/ir_gvn.expected index ecf31ac8701..4688c5b7528 100644 --- a/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/ir_gvn.expected +++ b/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/ir_gvn.expected @@ -1145,3 +1145,43 @@ test.cpp: # 152| v152_7(void) = ReturnVoid : # 152| v152_8(void) = AliasedUse : ~m156_7 # 152| v152_9(void) = ExitFunction : + +# 166| void test_constMemberFunction() +# 166| Block 0 +# 166| v166_1(void) = EnterFunction : +# 166| m166_2(unknown) = AliasedDefinition : +# 166| valnum = unique +# 166| m166_3(unknown) = InitializeNonLocal : +# 166| valnum = unique +# 166| m166_4(unknown) = Chi : total:m166_2, partial:m166_3 +# 166| valnum = unique +# 167| r167_1(glval) = VariableAddress[s] : +# 167| valnum = r167_1, r168_2, r169_1, r169_2 +# 167| m167_2(StructWithConstMemberFunction) = Uninitialized[s] : &:r167_1 +# 167| valnum = m167_2, m168_4, r168_3 +# 167| m167_3(unknown) = Chi : total:m166_4, partial:m167_2 +# 167| valnum = unique +# 168| r168_1(glval) = VariableAddress[s2] : +# 168| valnum = unique +# 168| r168_2(glval) = VariableAddress[s] : +# 168| valnum = r167_1, r168_2, r169_1, r169_2 +# 168| r168_3(StructWithConstMemberFunction) = Load[s] : &:r168_2, m167_2 +# 168| valnum = m167_2, m168_4, r168_3 +# 168| m168_4(StructWithConstMemberFunction) = Store[s2] : &:r168_1, r168_3 +# 168| valnum = m167_2, m168_4, r168_3 +# 169| r169_1(glval) = VariableAddress[s] : +# 169| valnum = r167_1, r168_2, r169_1, r169_2 +# 169| r169_2(glval) = Convert : r169_1 +# 169| valnum = r167_1, r168_2, r169_1, r169_2 +# 169| r169_3(glval) = FunctionAddress[constMemberFunction] : +# 169| valnum = unique +# 169| v169_4(void) = Call[constMemberFunction] : func:r169_3, this:r169_2 +# 169| m169_5(unknown) = ^CallSideEffect : ~m167_3 +# 169| valnum = unique +# 169| m169_6(unknown) = Chi : total:m167_3, partial:m169_5 +# 169| valnum = unique +# 169| v169_7(void) = ^IndirectReadSideEffect[-1] : &:r169_2, ~m169_6 +# 170| v170_1(void) = NoOp : +# 166| v166_5(void) = ReturnVoid : +# 166| v166_6(void) = AliasedUse : ~m169_6 +# 166| v166_7(void) = ExitFunction : diff --git a/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/test.cpp b/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/test.cpp index dfef91006e3..ed98bad3057 100644 --- a/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/test.cpp +++ b/cpp/ql/test/library-tests/valuenumbering/GlobalValueNumbering/test.cpp @@ -156,4 +156,15 @@ void test_read_global_different(int n) { global_a->y = n; int d = global_a->x; +} + +struct StructWithConstMemberFunction { + int x; + void constMemberFunction() const; +}; + +void test_constMemberFunction() { + StructWithConstMemberFunction s; + StructWithConstMemberFunction s2 = s; + s.constMemberFunction(); } \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/StrncpyFlippedArgs/StrncpyFlippedArgs.expected b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/StrncpyFlippedArgs/StrncpyFlippedArgs.expected index 1fe46acbdde..19fe89a78c1 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/StrncpyFlippedArgs/StrncpyFlippedArgs.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/StrncpyFlippedArgs/StrncpyFlippedArgs.expected @@ -13,7 +13,6 @@ | test.cpp:49:2:49:9 | call to strcpy_s | Potentially unsafe call to strcpy_s; second argument should be size of destination. | | test.cpp:62:3:62:9 | call to strncpy | Potentially unsafe call to strncpy; third argument should be size of destination. | | test.cpp:65:3:65:9 | call to strncpy | Potentially unsafe call to strncpy; third argument should be size of destination. | -| test.cpp:70:2:70:8 | call to strncpy | Potentially unsafe call to strncpy; third argument should be size of destination. | | test.cpp:81:3:81:9 | call to strncpy | Potentially unsafe call to strncpy; third argument should be size of destination. | | test.cpp:84:3:84:9 | call to strncpy | Potentially unsafe call to strncpy; third argument should be size of destination. | | test.cpp:105:2:105:10 | call to wcsxfrm_l | Potentially unsafe call to wcsxfrm_l; third argument should be size of destination. | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/UnboundedWrite.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/UnboundedWrite.expected index 30b78aa875c..5c10f6e059d 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/UnboundedWrite.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/UnboundedWrite.expected @@ -27,8 +27,8 @@ edges | main.cpp:9:29:9:32 | *argv | tests_restrict.c:15:41:15:44 | *argv | provenance | | | main.cpp:9:29:9:32 | tests_restrict_main output argument | main.cpp:10:20:10:23 | **argv | provenance | | | main.cpp:9:29:9:32 | tests_restrict_main output argument | main.cpp:10:20:10:23 | *argv | provenance | | -| main.cpp:10:20:10:23 | **argv | tests.cpp:1060:32:1060:35 | **argv | provenance | | -| main.cpp:10:20:10:23 | *argv | tests.cpp:1060:32:1060:35 | *argv | provenance | | +| main.cpp:10:20:10:23 | **argv | tests.cpp:1074:32:1074:35 | **argv | provenance | | +| main.cpp:10:20:10:23 | *argv | tests.cpp:1074:32:1074:35 | *argv | provenance | | | overflowdestination.cpp:23:45:23:48 | **argv | overflowdestination.cpp:23:45:23:48 | **argv | provenance | | | overflowdestination.cpp:23:45:23:48 | **argv | overflowdestination.cpp:23:45:23:48 | *argv | provenance | | | test_buffer_overrun.cpp:32:46:32:49 | **argv | test_buffer_overrun.cpp:32:46:32:49 | **argv | provenance | | @@ -41,12 +41,12 @@ edges | tests.cpp:649:14:649:14 | *s [*home] | tests.cpp:649:14:649:19 | *home | provenance | | | tests.cpp:649:14:649:14 | *s [*home] | tests.cpp:649:16:649:19 | *home | provenance | | | tests.cpp:649:16:649:19 | *home | tests.cpp:649:14:649:19 | *home | provenance | | -| tests.cpp:1060:32:1060:35 | **argv | tests.cpp:1085:9:1085:15 | *access to array | provenance | | -| tests.cpp:1060:32:1060:35 | **argv | tests.cpp:1086:9:1086:15 | *access to array | provenance | | -| tests.cpp:1060:32:1060:35 | *argv | tests.cpp:1085:9:1085:15 | *access to array | provenance | | -| tests.cpp:1060:32:1060:35 | *argv | tests.cpp:1086:9:1086:15 | *access to array | provenance | | -| tests.cpp:1085:9:1085:15 | *access to array | tests.cpp:634:19:634:24 | *source | provenance | | -| tests.cpp:1086:9:1086:15 | *access to array | tests.cpp:643:19:643:24 | *source | provenance | | +| tests.cpp:1074:32:1074:35 | **argv | tests.cpp:1099:9:1099:15 | *access to array | provenance | | +| tests.cpp:1074:32:1074:35 | **argv | tests.cpp:1100:9:1100:15 | *access to array | provenance | | +| tests.cpp:1074:32:1074:35 | *argv | tests.cpp:1099:9:1099:15 | *access to array | provenance | | +| tests.cpp:1074:32:1074:35 | *argv | tests.cpp:1100:9:1100:15 | *access to array | provenance | | +| tests.cpp:1099:9:1099:15 | *access to array | tests.cpp:634:19:634:24 | *source | provenance | | +| tests.cpp:1100:9:1100:15 | *access to array | tests.cpp:643:19:643:24 | *source | provenance | | | tests_restrict.c:15:41:15:44 | **argv | tests_restrict.c:15:41:15:44 | **argv | provenance | | | tests_restrict.c:15:41:15:44 | *argv | tests_restrict.c:15:41:15:44 | *argv | provenance | | nodes @@ -80,10 +80,10 @@ nodes | tests.cpp:649:14:649:14 | *s [*home] | semmle.label | *s [*home] | | tests.cpp:649:14:649:19 | *home | semmle.label | *home | | tests.cpp:649:16:649:19 | *home | semmle.label | *home | -| tests.cpp:1060:32:1060:35 | **argv | semmle.label | **argv | -| tests.cpp:1060:32:1060:35 | *argv | semmle.label | *argv | -| tests.cpp:1085:9:1085:15 | *access to array | semmle.label | *access to array | -| tests.cpp:1086:9:1086:15 | *access to array | semmle.label | *access to array | +| tests.cpp:1074:32:1074:35 | **argv | semmle.label | **argv | +| tests.cpp:1074:32:1074:35 | *argv | semmle.label | *argv | +| tests.cpp:1099:9:1099:15 | *access to array | semmle.label | *access to array | +| tests.cpp:1100:9:1100:15 | *access to array | semmle.label | *access to array | | tests_restrict.c:15:41:15:44 | **argv | semmle.label | **argv | | tests_restrict.c:15:41:15:44 | **argv | semmle.label | **argv | | tests_restrict.c:15:41:15:44 | *argv | semmle.label | *argv | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/tests.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/tests.cpp index cdef965314b..555c8e25fb5 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/tests.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/tests.cpp @@ -1057,6 +1057,20 @@ void test30() { strncpy(us.buffer2, "", sizeof(us) - 1); // BAD } +struct S_Size16 { + unsigned short uint16; + unsigned char uint8; + unsigned char raw[13]; +}; + +void test31() { + S_Size16 e; + + [&e](void* data){ + memcpy(&e, data, sizeof(e)); // GOOD + }; +} + int tests_main(int argc, char *argv[]) { long long arr17[19]; diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/globalVars/UncontrolledFormatString.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/globalVars/UncontrolledFormatString.expected index 40ffd8d4bdd..7408d8360ef 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/globalVars/UncontrolledFormatString.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/globalVars/UncontrolledFormatString.expected @@ -1,14 +1,17 @@ edges +| globalVars.c:8:7:8:10 | **copy | globalVars.c:8:7:8:10 | **copy | provenance | | | globalVars.c:8:7:8:10 | **copy | globalVars.c:27:9:27:12 | *copy | provenance | | | globalVars.c:8:7:8:10 | **copy | globalVars.c:30:15:30:18 | *copy | provenance | | | globalVars.c:8:7:8:10 | **copy | globalVars.c:30:15:30:18 | *copy | provenance | | | globalVars.c:8:7:8:10 | **copy | globalVars.c:35:11:35:14 | *copy | provenance | | +| globalVars.c:9:7:9:11 | **copy2 | globalVars.c:9:7:9:11 | **copy2 | provenance | | | globalVars.c:9:7:9:11 | **copy2 | globalVars.c:38:9:38:13 | *copy2 | provenance | | | globalVars.c:9:7:9:11 | **copy2 | globalVars.c:41:15:41:19 | *copy2 | provenance | | | globalVars.c:9:7:9:11 | **copy2 | globalVars.c:41:15:41:19 | *copy2 | provenance | | | globalVars.c:9:7:9:11 | **copy2 | globalVars.c:50:9:50:13 | *copy2 | provenance | | | globalVars.c:11:22:11:25 | **argv | globalVars.c:12:2:12:15 | *... = ... | provenance | | | globalVars.c:12:2:12:15 | *... = ... | globalVars.c:8:7:8:10 | **copy | provenance | | +| globalVars.c:15:21:15:23 | *val | globalVars.c:15:21:15:23 | *val | provenance | | | globalVars.c:15:21:15:23 | *val | globalVars.c:16:2:16:12 | *... = ... | provenance | | | globalVars.c:16:2:16:12 | *... = ... | globalVars.c:9:7:9:11 | **copy2 | provenance | | | globalVars.c:19:25:19:27 | *str | globalVars.c:19:25:19:27 | *str | provenance | | @@ -16,10 +19,14 @@ edges | globalVars.c:24:11:24:14 | **argv | globalVars.c:11:22:11:25 | **argv | provenance | | | globalVars.c:30:15:30:18 | *copy | globalVars.c:19:25:19:27 | *str | provenance | | | globalVars.c:30:15:30:18 | *copy | globalVars.c:30:15:30:18 | printWrapper output argument | provenance | | +| globalVars.c:30:15:30:18 | printWrapper output argument | globalVars.c:8:7:8:10 | **copy | provenance | | | globalVars.c:30:15:30:18 | printWrapper output argument | globalVars.c:35:11:35:14 | *copy | provenance | | | globalVars.c:35:11:35:14 | *copy | globalVars.c:15:21:15:23 | *val | provenance | | +| globalVars.c:35:11:35:14 | *copy | globalVars.c:35:11:35:14 | setCopy2 output argument | provenance | | +| globalVars.c:35:11:35:14 | setCopy2 output argument | globalVars.c:8:7:8:10 | **copy | provenance | | | globalVars.c:41:15:41:19 | *copy2 | globalVars.c:19:25:19:27 | *str | provenance | | | globalVars.c:41:15:41:19 | *copy2 | globalVars.c:41:15:41:19 | printWrapper output argument | provenance | | +| globalVars.c:41:15:41:19 | printWrapper output argument | globalVars.c:9:7:9:11 | **copy2 | provenance | | | globalVars.c:41:15:41:19 | printWrapper output argument | globalVars.c:50:9:50:13 | *copy2 | provenance | | nodes | globalVars.c:8:7:8:10 | **copy | semmle.label | **copy | @@ -27,6 +34,7 @@ nodes | globalVars.c:11:22:11:25 | **argv | semmle.label | **argv | | globalVars.c:12:2:12:15 | *... = ... | semmle.label | *... = ... | | globalVars.c:15:21:15:23 | *val | semmle.label | *val | +| globalVars.c:15:21:15:23 | *val | semmle.label | *val | | globalVars.c:16:2:16:12 | *... = ... | semmle.label | *... = ... | | globalVars.c:19:25:19:27 | *str | semmle.label | *str | | globalVars.c:19:25:19:27 | *str | semmle.label | *str | @@ -37,6 +45,7 @@ nodes | globalVars.c:30:15:30:18 | *copy | semmle.label | *copy | | globalVars.c:30:15:30:18 | printWrapper output argument | semmle.label | printWrapper output argument | | globalVars.c:35:11:35:14 | *copy | semmle.label | *copy | +| globalVars.c:35:11:35:14 | setCopy2 output argument | semmle.label | setCopy2 output argument | | globalVars.c:38:9:38:13 | *copy2 | semmle.label | *copy2 | | globalVars.c:41:15:41:19 | *copy2 | semmle.label | *copy2 | | globalVars.c:41:15:41:19 | *copy2 | semmle.label | *copy2 | @@ -44,6 +53,7 @@ nodes | globalVars.c:50:9:50:13 | *copy2 | semmle.label | *copy2 | subpaths | globalVars.c:30:15:30:18 | *copy | globalVars.c:19:25:19:27 | *str | globalVars.c:19:25:19:27 | *str | globalVars.c:30:15:30:18 | printWrapper output argument | +| globalVars.c:35:11:35:14 | *copy | globalVars.c:15:21:15:23 | *val | globalVars.c:15:21:15:23 | *val | globalVars.c:35:11:35:14 | setCopy2 output argument | | globalVars.c:41:15:41:19 | *copy2 | globalVars.c:19:25:19:27 | *str | globalVars.c:19:25:19:27 | *str | globalVars.c:41:15:41:19 | printWrapper output argument | #select | globalVars.c:27:9:27:12 | *copy | globalVars.c:23:27:23:30 | **argv | globalVars.c:27:9:27:12 | *copy | The value of this argument may come from $@ and is being used as a formatting argument to printf(format). | globalVars.c:23:27:23:30 | **argv | a command-line argument | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/PotentiallyExposedSystemData.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/PotentiallyExposedSystemData.expected index 53be20ab7ac..9756dde70dd 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/PotentiallyExposedSystemData.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/PotentiallyExposedSystemData.expected @@ -1,4 +1,5 @@ edges +| tests.cpp:62:7:62:18 | **global_token | tests.cpp:62:7:62:18 | **global_token | provenance | | | tests.cpp:62:7:62:18 | **global_token | tests.cpp:69:2:69:43 | *... = ... | provenance | | | tests.cpp:62:7:62:18 | **global_token | tests.cpp:71:27:71:38 | *global_token | provenance | | | tests.cpp:62:22:62:27 | *call to getenv | tests.cpp:62:7:62:18 | **global_token | provenance | | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected index 28f2b833532..1376a03ce88 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected @@ -7,9 +7,11 @@ edges | tests2.cpp:49:12:49:12 | call to SAXParser | tests2.cpp:51:2:51:2 | *p | provenance | | | tests3.cpp:23:21:23:53 | *call to createXMLReader | tests3.cpp:23:21:23:53 | *call to createXMLReader | provenance | | | tests3.cpp:23:21:23:53 | *call to createXMLReader | tests3.cpp:25:2:25:2 | *p | provenance | | +| tests3.cpp:35:16:35:20 | **p_3_3 | tests3.cpp:35:16:35:20 | **p_3_3 | provenance | | | tests3.cpp:35:16:35:20 | **p_3_3 | tests3.cpp:38:2:38:6 | *p_3_3 | provenance | | | tests3.cpp:35:24:35:56 | *call to createXMLReader | tests3.cpp:35:16:35:20 | **p_3_3 | provenance | | | tests3.cpp:35:24:35:56 | *call to createXMLReader | tests3.cpp:35:24:35:56 | *call to createXMLReader | provenance | | +| tests3.cpp:48:16:48:20 | **p_3_5 | tests3.cpp:48:16:48:20 | **p_3_5 | provenance | | | tests3.cpp:48:16:48:20 | **p_3_5 | tests3.cpp:56:2:56:6 | *p_3_5 | provenance | | | tests3.cpp:48:24:48:56 | *call to createXMLReader | tests3.cpp:48:16:48:20 | **p_3_5 | provenance | | | tests3.cpp:48:24:48:56 | *call to createXMLReader | tests3.cpp:48:24:48:56 | *call to createXMLReader | provenance | | @@ -26,6 +28,7 @@ edges | tests5.cpp:55:25:55:38 | *call to createLSParser | tests5.cpp:55:25:55:38 | *call to createLSParser | provenance | | | tests5.cpp:55:25:55:38 | *call to createLSParser | tests5.cpp:59:2:59:2 | *p | provenance | | | tests5.cpp:55:25:55:38 | *call to createLSParser | tests5.cpp:59:2:59:2 | *p | provenance | Config | +| tests5.cpp:63:21:63:24 | **g_p2 | tests5.cpp:63:21:63:24 | **g_p2 | provenance | | | tests5.cpp:63:21:63:24 | **g_p2 | tests5.cpp:77:2:77:5 | *g_p2 | provenance | | | tests5.cpp:70:2:70:32 | *... = ... | tests5.cpp:63:21:63:24 | **g_p2 | provenance | | | tests5.cpp:70:17:70:30 | *call to createLSParser | tests5.cpp:70:2:70:32 | *... = ... | provenance | | diff --git a/csharp/ql/lib/semmle/code/csharp/Type.qll b/csharp/ql/lib/semmle/code/csharp/Type.qll index d11b5618e80..e417f393b94 100644 --- a/csharp/ql/lib/semmle/code/csharp/Type.qll +++ b/csharp/ql/lib/semmle/code/csharp/Type.qll @@ -201,7 +201,7 @@ class ValueOrRefType extends Type, Attributable, @value_or_ref_type { */ pragma[inline] predicate hasCallable(Callable c) { - this.hasMethod(c) + this.hasMember(c) or this.hasMember(c.(Accessor).getDeclaration()) } diff --git a/docs/codeql/_static/custom.css_t b/docs/codeql/_static/custom.css_t index e8667ede93a..b05c5120398 100644 --- a/docs/codeql/_static/custom.css_t +++ b/docs/codeql/_static/custom.css_t @@ -1,7 +1,7 @@ /* * This Sphinx stylesheet adds some customizations to the default Alabaster theme. - * - * The source for the default stylesheet can be found at + * + * The source for the default stylesheet can be found at * https://github.com/bitprophet/alabaster/blob/master/alabaster/static/alabaster.css_t * * For the classes provided by the primer, see https://unpkg.com/@primer/css/dist/primer.css @@ -45,7 +45,7 @@ article ul, article ol { } .SideNav li { - margin: 10px 0 10px 0px; + margin: 10px 0 10px 0px; } .SideNav ul, .SideNav ol, .SideNav li { @@ -80,20 +80,20 @@ a.reference { } a.reference:hover { - text-decoration: none; + text-decoration: none; } /* -- ADMONITIONS ---------------------------------------------------------------------------- */ -/* - * Override default styling for "admonitions". +/* + * Override default styling for "admonitions". * This includes: note, tip, important, and caution. * */ - -div.admonition p.admonition-title { + +div.admonition p.admonition-title { /* Make title same size and font as body, but bold. */ - font-family: Lato, sans-serif; + font-family: Lato, sans-serif; font-size: 14px; font-weight: bold; } @@ -102,7 +102,7 @@ p.admonition-title:after { content: ""; /* Don't insert a colon after the title */ } -/* +/* * Don't use yellow for footnote background. * */ @@ -111,7 +111,7 @@ p.admonition-title:after { background-color: unset; } -/* +/* * Add a border with rounded corners around code blocks * (as in the QL language spec). * @@ -198,7 +198,7 @@ blockquote.pull-quote { background-color: #EEE; border: #CCC; border-radius: 5px; -} +} blockquote.pull-quote:first-line { font-weight: bold; @@ -230,6 +230,11 @@ blockquote.pull-quote > :last-child { font-family: "monospace"; } +/* Fixes a bug in "Supported languages and frameworks" where footnotes were incorrectly indented */ +aside .label { + border: 0; +} + /* -- PRINT VIEW ----------------------------------------------------------------------------*/ @media print { @@ -252,14 +257,14 @@ blockquote.pull-quote > :last-child { /* -- SMALL SCREEN ------------------------------------------------------------------------------- */ -@media screen and (max-width: 875px) { +@media screen and (max-width: 875px) { /* Overrides strange behaviour caused by default styles */ body { padding: 0; - } - + } + div.footer { display: block; } diff --git a/java/ql/integration-tests/java/android-sample-kotlin-build-script-no-wrapper/test.py b/java/ql/integration-tests/java/android-sample-kotlin-build-script-no-wrapper/test.py index e3a791a59f3..67b5dde772e 100644 --- a/java/ql/integration-tests/java/android-sample-kotlin-build-script-no-wrapper/test.py +++ b/java/ql/integration-tests/java/android-sample-kotlin-build-script-no-wrapper/test.py @@ -1,2 +1,2 @@ -def test(codeql, use_java_11, java, android_sdk): +def test(codeql, use_java_17, java, android_sdk): codeql.database.create() diff --git a/java/ql/integration-tests/java/android-sample-no-wrapper/test.py b/java/ql/integration-tests/java/android-sample-no-wrapper/test.py index e3a791a59f3..67b5dde772e 100644 --- a/java/ql/integration-tests/java/android-sample-no-wrapper/test.py +++ b/java/ql/integration-tests/java/android-sample-no-wrapper/test.py @@ -1,2 +1,2 @@ -def test(codeql, use_java_11, java, android_sdk): +def test(codeql, use_java_17, java, android_sdk): codeql.database.create() diff --git a/java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script-no-wrapper/test.py b/java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script-no-wrapper/test.py index ca4ae04350f..5730f55d981 100644 --- a/java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script-no-wrapper/test.py +++ b/java/ql/integration-tests/java/android-sample-old-style-kotlin-build-script-no-wrapper/test.py @@ -1,2 +1,2 @@ -def test(codeql, use_java_11, java, android_sdk, actions_toolchains_file): +def test(codeql, use_java_17, java, android_sdk, actions_toolchains_file): codeql.database.create(_env={"LGTM_INDEX_MAVEN_TOOLCHAINS_FILE": str(actions_toolchains_file)}) diff --git a/java/ql/integration-tests/java/android-sample-old-style-no-wrapper/test.py b/java/ql/integration-tests/java/android-sample-old-style-no-wrapper/test.py index ca4ae04350f..5730f55d981 100644 --- a/java/ql/integration-tests/java/android-sample-old-style-no-wrapper/test.py +++ b/java/ql/integration-tests/java/android-sample-old-style-no-wrapper/test.py @@ -1,2 +1,2 @@ -def test(codeql, use_java_11, java, android_sdk, actions_toolchains_file): +def test(codeql, use_java_17, java, android_sdk, actions_toolchains_file): codeql.database.create(_env={"LGTM_INDEX_MAVEN_TOOLCHAINS_FILE": str(actions_toolchains_file)}) diff --git a/java/ql/lib/change-notes/2025-07-28-guardwrappers.md b/java/ql/lib/change-notes/2025-07-28-guardwrappers.md new file mode 100644 index 00000000000..cf976fe7789 --- /dev/null +++ b/java/ql/lib/change-notes/2025-07-28-guardwrappers.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Guard implication logic involving wrapper methods has been improved. In particular, this means fewer false positives for `java/dereferenced-value-may-be-null`. diff --git a/java/ql/lib/semmle/code/java/controlflow/BasicBlocks.qll b/java/ql/lib/semmle/code/java/controlflow/BasicBlocks.qll index 844371da36b..e974f711ec4 100644 --- a/java/ql/lib/semmle/code/java/controlflow/BasicBlocks.qll +++ b/java/ql/lib/semmle/code/java/controlflow/BasicBlocks.qll @@ -57,7 +57,7 @@ private module Input implements BB::InputSig { * Holds if `node` represents an exit node to be used when calculating * post dominance. */ - predicate nodeIsPostDominanceExit(Node node) { node instanceof ControlFlow::ExitNode } + predicate nodeIsPostDominanceExit(Node node) { node instanceof ControlFlow::NormalExitNode } } private module BbImpl = BB::Make; diff --git a/java/ql/lib/semmle/code/java/controlflow/Guards.qll b/java/ql/lib/semmle/code/java/controlflow/Guards.qll index 8cead5b666b..c33658cb67b 100644 --- a/java/ql/lib/semmle/code/java/controlflow/Guards.qll +++ b/java/ql/lib/semmle/code/java/controlflow/Guards.qll @@ -146,6 +146,8 @@ private module GuardsInput implements SharedGuards::InputSig { class ControlFlowNode = J::ControlFlowNode; + class NormalExitNode = ControlFlow::NormalExitNode; + class BasicBlock = J::BasicBlock; predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) { J::dominatingEdge(bb1, bb2) } @@ -322,6 +324,55 @@ private module GuardsInput implements SharedGuards::InputSig { Expr getElse() { result = super.getFalseExpr() } } + + class Parameter = J::Parameter; + + private int parameterPosition() { result in [-1, any(Parameter p).getPosition()] } + + /** A parameter position represented by an integer. */ + class ParameterPosition extends int { + ParameterPosition() { this = parameterPosition() } + } + + /** An argument position represented by an integer. */ + class ArgumentPosition extends int { + ArgumentPosition() { this = parameterPosition() } + } + + /** Holds if arguments at position `apos` match parameters at position `ppos`. */ + overlay[caller?] + pragma[inline] + predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos) { ppos = apos } + + final private class FinalMethod = Method; + + class NonOverridableMethod extends FinalMethod { + NonOverridableMethod() { not super.isOverridable() } + + Parameter getParameter(ParameterPosition ppos) { + super.getParameter(ppos) = result and + not result.isVarargs() + } + + GuardsInput::Expr getAReturnExpr() { + exists(ReturnStmt ret | + this = ret.getEnclosingCallable() and + ret.getResult() = result + ) + } + } + + private predicate nonOverridableMethodCall(MethodCall call, NonOverridableMethod m) { + call.getMethod().getSourceDeclaration() = m + } + + class NonOverridableMethodCall extends GuardsInput::Expr instanceof MethodCall { + NonOverridableMethodCall() { nonOverridableMethodCall(this, _) } + + NonOverridableMethod getMethod() { nonOverridableMethodCall(this, result) } + + GuardsInput::Expr getArgument(ArgumentPosition apos) { result = super.getArgument(apos) } + } } private module GuardsImpl = SharedGuards::Make; @@ -340,6 +391,17 @@ private module LogicInputCommon { NullGuards::nullCheckMethod(call.getMethod(), val.asBooleanValue(), isNull) ) } + + predicate additionalImpliesStep( + GuardsImpl::PreGuard g1, GuardValue v1, GuardsImpl::PreGuard g2, GuardValue v2 + ) { + exists(MethodCall check, int argIndex | + g1 = check and + v1.getDualValue().isThrowsException() and + conditionCheckArgument(check, argIndex, v2.asBooleanValue()) and + g2 = check.getArgument(argIndex) + ) + } } private module LogicInput_v1 implements GuardsImpl::LogicInputSig { @@ -364,18 +426,13 @@ private module LogicInput_v1 implements GuardsImpl::LogicInputSig { } } + predicate parameterDefinition(Parameter p, SsaDefinition def) { + def.(BaseSsaImplicitInit).isParameterDefinition(p) + } + predicate additionalNullCheck = LogicInputCommon::additionalNullCheck/4; - predicate additionalImpliesStep( - GuardsImpl::PreGuard g1, GuardValue v1, GuardsImpl::PreGuard g2, GuardValue v2 - ) { - exists(MethodCall check, int argIndex | - g1 = check and - v1.getDualValue().isThrowsException() and - conditionCheckArgument(check, argIndex, v2.asBooleanValue()) and - g2 = check.getArgument(argIndex) - ) - } + predicate additionalImpliesStep = LogicInputCommon::additionalImpliesStep/4; } private module LogicInput_v2 implements GuardsImpl::LogicInputSig { @@ -400,15 +457,13 @@ private module LogicInput_v2 implements GuardsImpl::LogicInputSig { } } + predicate parameterDefinition(Parameter p, SsaDefinition def) { + def.(SSA::SsaImplicitInit).isParameterDefinition(p) + } + predicate additionalNullCheck = LogicInputCommon::additionalNullCheck/4; - predicate additionalImpliesStep( - GuardsImpl::PreGuard g1, GuardValue v1, GuardsImpl::PreGuard g2, GuardValue v2 - ) { - LogicInput_v1::additionalImpliesStep(g1, v1, g2, v2) - or - CustomGuard::additionalImpliesStep(g1, v1, g2, v2) - } + predicate additionalImpliesStep = LogicInputCommon::additionalImpliesStep/4; } private module LogicInput_v3 implements GuardsImpl::LogicInputSig { @@ -421,70 +476,11 @@ private module LogicInput_v3 implements GuardsImpl::LogicInputSig { predicate additionalNullCheck = LogicInputCommon::additionalNullCheck/4; - predicate additionalImpliesStep = LogicInput_v2::additionalImpliesStep/4; -} - -private module CustomGuardInput implements Guards_v2::CustomGuardInputSig { - private import semmle.code.java.dataflow.SSA - - private int parameterPosition() { result in [-1, any(Parameter p).getPosition()] } - - /** A parameter position represented by an integer. */ - class ParameterPosition extends int { - ParameterPosition() { this = parameterPosition() } - } - - /** An argument position represented by an integer. */ - class ArgumentPosition extends int { - ArgumentPosition() { this = parameterPosition() } - } - - /** Holds if arguments at position `apos` match parameters at position `ppos`. */ - overlay[caller?] - pragma[inline] - predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos) { ppos = apos } - - final private class FinalMethod = Method; - - class BooleanMethod extends FinalMethod { - BooleanMethod() { - super.getReturnType().(PrimitiveType).hasName("boolean") and - not super.isOverridable() - } - - LogicInput_v2::SsaDefinition getParameter(ParameterPosition ppos) { - exists(Parameter p | - super.getParameter(ppos) = p and - not p.isVarargs() and - result.(SsaImplicitInit).isParameterDefinition(p) - ) - } - - GuardsInput::Expr getAReturnExpr() { - exists(ReturnStmt ret | - this = ret.getEnclosingCallable() and - ret.getResult() = result - ) - } - } - - private predicate booleanMethodCall(MethodCall call, BooleanMethod m) { - call.getMethod().getSourceDeclaration() = m - } - - class BooleanMethodCall extends GuardsInput::Expr instanceof MethodCall { - BooleanMethodCall() { booleanMethodCall(this, _) } - - BooleanMethod getMethod() { booleanMethodCall(this, result) } - - GuardsInput::Expr getArgument(ArgumentPosition apos) { result = super.getArgument(apos) } - } + predicate additionalImpliesStep = LogicInputCommon::additionalImpliesStep/4; } class GuardValue = GuardsImpl::GuardValue; -private module CustomGuard = Guards_v2::CustomGuard; - /** INTERNAL: Don't use. */ module Guards_v1 = GuardsImpl::Logic; 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 164e2d8aa26..8b9087ecbdc 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll @@ -348,6 +348,16 @@ predicate expectsContent(Node n, ContentSet c) { FlowSummaryImpl::Private::Steps::summaryExpectsContent(n.(FlowSummaryNode).getSummaryNode(), c) } +pragma[nomagic] +private predicate numericRepresentative(RefType t) { + t.(BoxedType).getPrimitiveType().getName() = "double" +} + +pragma[nomagic] +private predicate booleanRepresentative(RefType t) { + t.(BoxedType).getPrimitiveType().getName() = "boolean" +} + /** * Gets a representative (boxed) type for `t` for the purpose of pruning * possible flow. A single type is used for all numeric types to account for @@ -356,10 +366,10 @@ predicate expectsContent(Node n, ContentSet c) { RefType getErasedRepr(Type t) { exists(Type e | e = t.getErasure() | if e instanceof NumericOrCharType - then result.(BoxedType).getPrimitiveType().getName() = "double" + then numericRepresentative(result) else if e instanceof BooleanType - then result.(BoxedType).getPrimitiveType().getName() = "boolean" + then booleanRepresentative(result) else result = e ) or diff --git a/java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll b/java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll index 12fe1cba5e9..86915f80274 100644 --- a/java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll +++ b/java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll @@ -214,24 +214,35 @@ private predicate relevantNode(ObjNode n) { exists(ObjNode mid | relevantNode(mid) and objStep(mid, n) and relevantNodeBack(n)) } -pragma[noinline] -private predicate objStepPruned(ObjNode n1, ObjNode n2) { - objStep(n1, n2) and relevantNode(n1) and relevantNode(n2) +private newtype TObjFlowNode = + TObjNode(ObjNode n) { relevantNode(n) } or + TObjType(RefType t) { source(t, _) } + +private predicate objStepPruned(TObjFlowNode node1, TObjFlowNode node2) { + exists(ObjNode n1, ObjNode n2 | + node1 = TObjNode(n1) and + node2 = TObjNode(n2) and + objStep(n1, n2) + ) + or + exists(RefType t, ObjNode n | + node1 = TObjType(t) and + node2 = TObjNode(n) and + source(t, n) + ) } -private predicate stepPlus(Node n1, Node n2) = fastTC(objStepPruned/2)(n1, n2) +private predicate flowSrc(TObjFlowNode src) { src instanceof TObjType } + +private predicate flowSink(TObjFlowNode sink) { exists(ObjNode n | sink = TObjNode(n) and sink(n)) } + +private predicate stepPlus(TObjFlowNode n1, TObjFlowNode n2) = + doublyBoundedFastTC(objStepPruned/2, flowSrc/1, flowSink/1)(n1, n2) /** * Holds if the qualifier `n` of an `Object.toString()` call might have type `t`. */ -pragma[noopt] -private predicate objType(ObjNode n, RefType t) { - exists(ObjNode n2 | - sink(n) and - (stepPlus(n2, n) or n2 = n) and - source(t, n2) - ) -} +private predicate objType(ObjNode n, RefType t) { stepPlus(TObjType(t), TObjNode(n)) } private VirtualMethodCall objectToString(ObjNode n) { result.getQualifier() = n.asExpr() and sink(n) diff --git a/java/ql/src/Likely Bugs/Resource Leaks/CloseType.qll b/java/ql/src/Likely Bugs/Resource Leaks/CloseType.qll index 41239f249a2..aca95c9bc1f 100644 --- a/java/ql/src/Likely Bugs/Resource Leaks/CloseType.qll +++ b/java/ql/src/Likely Bugs/Resource Leaks/CloseType.qll @@ -212,33 +212,35 @@ private LocalVariableDecl getCloseableVariable(CloseableInitExpr cie) { /** * A variable on which a "close" method is called, implicitly or explicitly, directly or indirectly. */ -private predicate closeCalled(Variable v) { +private predicate closeCalled(LocalScopeVariable v) { // `close()` is implicitly called on variables declared or referenced // in the resources clause of try-with-resource statements. exists(TryStmt try | try.getAResourceVariable() = v) or // Otherwise, there should be an explicit call to a method whose name contains "close". exists(MethodCall e | - v = getCloseableVariable(_) or v instanceof Parameter or v instanceof LocalVariableDecl - | e.getMethod().getName().toLowerCase().matches("%close%") and exists(VarAccess va | va = v.getAnAccess() | e.getQualifier() = va or e.getAnArgument() = va ) - or - // The "close" call could happen indirectly inside a helper method of unknown name. - exists(int i | e.getArgument(i) = v.getAnAccess() | - exists(Parameter p, int j | p.getPosition() = j and p.getCallable() = e.getMethod() | - closeCalled(p) and i = j - or - // The helper method could be iterating over a varargs parameter. - exists(EnhancedForStmt for | for.getExpr() = p.getAnAccess() | - closeCalled(for.getVariable().getVariable()) - ) and - p.isVarargs() and - j <= i - ) + ) + or + // The "close" call could happen indirectly inside a helper method of unknown name. + exists(Parameter p | + closeCalled(p) and p.getAnArgument() = v.getAnAccess() and p.getCallable() instanceof Method + ) + or + exists(MethodCall e, int i | e.getArgument(i) = v.getAnAccess() | + exists(Parameter p, int j | + p.getPosition() = j and p.getCallable() = e.getMethod().getSourceDeclaration() + | + // The helper method could be iterating over a varargs parameter. + exists(EnhancedForStmt for | for.getExpr() = p.getAnAccess() | + closeCalled(for.getVariable().getVariable()) + ) and + p.isVarargs() and + j <= i ) ) } diff --git a/java/ql/test-kotlin1/library-tests/controlflow/basic/strictPostDominance.expected b/java/ql/test-kotlin1/library-tests/controlflow/basic/strictPostDominance.expected index 9971f41a3be..625fde1c41e 100644 --- a/java/ql/test-kotlin1/library-tests/controlflow/basic/strictPostDominance.expected +++ b/java/ql/test-kotlin1/library-tests/controlflow/basic/strictPostDominance.expected @@ -208,6 +208,12 @@ | Test.kt:101:5:103:5 | ... -> ... | Test.kt:101:5:103:5 | ; | | Test.kt:101:5:103:5 | ; | Test.kt:100:25:110:1 | { ... } | | Test.kt:102:9:102:25 | throw ... | Test.kt:101:33:103:5 | { ... } | +| Test.kt:105:5:109:5 | ; | Test.kt:100:25:110:1 | { ... } | +| Test.kt:105:5:109:5 | ; | Test.kt:101:5:103:5 | ... -> ... | +| Test.kt:105:5:109:5 | ; | Test.kt:101:5:103:5 | ; | +| Test.kt:105:9:107:5 | ... -> ... | Test.kt:100:25:110:1 | { ... } | +| Test.kt:105:9:107:5 | ... -> ... | Test.kt:101:5:103:5 | ... -> ... | +| Test.kt:105:9:107:5 | ... -> ... | Test.kt:101:5:103:5 | ; | | Test.kt:105:9:107:5 | ... -> ... | Test.kt:105:5:109:5 | ; | | Test.kt:106:9:106:29 | ; | Test.kt:105:20:107:5 | { ... } | | Test.kt:108:9:108:29 | ; | Test.kt:107:27:109:5 | { ... } | diff --git a/java/ql/test-kotlin2/library-tests/controlflow/basic/strictPostDominance.expected b/java/ql/test-kotlin2/library-tests/controlflow/basic/strictPostDominance.expected index 257d82fc1a7..df70e61a978 100644 --- a/java/ql/test-kotlin2/library-tests/controlflow/basic/strictPostDominance.expected +++ b/java/ql/test-kotlin2/library-tests/controlflow/basic/strictPostDominance.expected @@ -208,6 +208,12 @@ | Test.kt:101:9:103:5 | ... -> ... | Test.kt:100:25:110:1 | { ... } | | Test.kt:101:9:103:5 | ... -> ... | Test.kt:101:5:103:5 | ; | | Test.kt:102:9:102:25 | throw ... | Test.kt:101:33:103:5 | { ... } | +| Test.kt:105:5:109:5 | ; | Test.kt:100:25:110:1 | { ... } | +| Test.kt:105:5:109:5 | ; | Test.kt:101:5:103:5 | ; | +| Test.kt:105:5:109:5 | ; | Test.kt:101:9:103:5 | ... -> ... | +| Test.kt:105:9:107:5 | ... -> ... | Test.kt:100:25:110:1 | { ... } | +| Test.kt:105:9:107:5 | ... -> ... | Test.kt:101:5:103:5 | ; | +| Test.kt:105:9:107:5 | ... -> ... | Test.kt:101:9:103:5 | ... -> ... | | Test.kt:105:9:107:5 | ... -> ... | Test.kt:105:5:109:5 | ; | | Test.kt:106:9:106:29 | ; | Test.kt:105:20:107:5 | { ... } | | Test.kt:108:9:108:29 | ; | Test.kt:107:27:109:5 | { ... } | diff --git a/java/ql/test/library-tests/guards/Guards.java b/java/ql/test/library-tests/guards/Guards.java index b75e549d166..aca64d6f64d 100644 --- a/java/ql/test/library-tests/guards/Guards.java +++ b/java/ql/test/library-tests/guards/Guards.java @@ -143,4 +143,73 @@ public class Guards { chk(); // $ guarded=found:true guarded='i < a.length:false' } } + + public static boolean testNotNull1(String input) { + return input != null && input.length() > 0; + } + + public static boolean testNotNull2(String input) { + if (input == null) return false; + return input.length() > 0; + } + + public static int getNumOrDefault(Integer number) { + return number == null ? 0 : number; + } + + public static String concatNonNull(String s1, String s2) { + if (s1 == null || s2 == null) return null; + return s1 + s2; + } + + public static Status testEnumWrapper(boolean flag) { + return flag ? Status.SUCCESS : Status.FAILURE; + } + + enum Status { SUCCESS, FAILURE } + + void testWrappers(String s, Integer i) { + if (testNotNull1(s)) { + chk(); // $ guarded='s:not null' guarded=testNotNull1(...):true + } else { + chk(); // $ guarded=testNotNull1(...):false + } + + if (testNotNull2(s)) { + chk(); // $ guarded='s:not null' guarded=testNotNull2(...):true + } else { + chk(); // $ guarded=testNotNull2(...):false + } + + if (0 == getNumOrDefault(i)) { + chk(); // $ guarded='0 == getNumOrDefault(...):true' guarded='getNumOrDefault(...):0' + } else { + chk(); // $ guarded='0 == getNumOrDefault(...):false' guarded='getNumOrDefault(...):not 0' guarded='i:not 0' guarded='i:not null' + } + + if (null == concatNonNull(s, "suffix")) { + chk(); // $ guarded='concatNonNull(...):null' guarded='null == concatNonNull(...):true' + } else { + chk(); // $ guarded='concatNonNull(...):not null' guarded='null == concatNonNull(...):false' guarded='s:not null' + } + + switch (testEnumWrapper(g(1))) { + case SUCCESS: + chk(); // $ guarded='testEnumWrapper(...):SUCCESS' guarded='testEnumWrapper(...):match SUCCESS' guarded=g(1):true + break; + case FAILURE: + chk(); // $ guarded='testEnumWrapper(...):FAILURE' guarded='testEnumWrapper(...):match FAILURE' guarded=g(1):false + break; + } + } + + static void ensureNotNull(Object o) throws Exception { + if (o == null) throw new Exception(); + } + + void testExceptionWrapper(String s) throws Exception { + chk(); // nothing guards here + ensureNotNull(s); + chk(); // $ guarded='ensureNotNull(...):no exception' guarded='s:not null' + } } diff --git a/java/ql/test/library-tests/guards/GuardsInline.expected b/java/ql/test/library-tests/guards/GuardsInline.expected index c45d536b7e9..a76e2629cde 100644 --- a/java/ql/test/library-tests/guards/GuardsInline.expected +++ b/java/ql/test/library-tests/guards/GuardsInline.expected @@ -89,3 +89,28 @@ | Guards.java:139:9:139:13 | chk(...) | found:true | | Guards.java:143:7:143:11 | chk(...) | 'i < a.length:false' | | Guards.java:143:7:143:11 | chk(...) | found:true | +| Guards.java:173:7:173:11 | chk(...) | 's:not null' | +| Guards.java:173:7:173:11 | chk(...) | testNotNull1(...):true | +| Guards.java:175:7:175:11 | chk(...) | testNotNull1(...):false | +| Guards.java:179:7:179:11 | chk(...) | 's:not null' | +| Guards.java:179:7:179:11 | chk(...) | testNotNull2(...):true | +| Guards.java:181:7:181:11 | chk(...) | testNotNull2(...):false | +| Guards.java:185:7:185:11 | chk(...) | '0 == getNumOrDefault(...):true' | +| Guards.java:185:7:185:11 | chk(...) | 'getNumOrDefault(...):0' | +| Guards.java:187:7:187:11 | chk(...) | '0 == getNumOrDefault(...):false' | +| Guards.java:187:7:187:11 | chk(...) | 'getNumOrDefault(...):not 0' | +| Guards.java:187:7:187:11 | chk(...) | 'i:not 0' | +| Guards.java:187:7:187:11 | chk(...) | 'i:not null' | +| Guards.java:191:7:191:11 | chk(...) | 'concatNonNull(...):null' | +| Guards.java:191:7:191:11 | chk(...) | 'null == concatNonNull(...):true' | +| Guards.java:193:7:193:11 | chk(...) | 'concatNonNull(...):not null' | +| Guards.java:193:7:193:11 | chk(...) | 'null == concatNonNull(...):false' | +| Guards.java:193:7:193:11 | chk(...) | 's:not null' | +| Guards.java:198:9:198:13 | chk(...) | 'testEnumWrapper(...):SUCCESS' | +| Guards.java:198:9:198:13 | chk(...) | 'testEnumWrapper(...):match SUCCESS' | +| Guards.java:198:9:198:13 | chk(...) | g(1):true | +| Guards.java:201:9:201:13 | chk(...) | 'testEnumWrapper(...):FAILURE' | +| Guards.java:201:9:201:13 | chk(...) | 'testEnumWrapper(...):match FAILURE' | +| Guards.java:201:9:201:13 | chk(...) | g(1):false | +| Guards.java:213:5:213:9 | chk(...) | 'ensureNotNull(...):no exception' | +| Guards.java:213:5:213:9 | chk(...) | 's:not null' | diff --git a/java/ql/test/query-tests/Nullness/B.java b/java/ql/test/query-tests/Nullness/B.java index 0ab6d58dbae..99bd6f4a1ba 100644 --- a/java/ql/test/query-tests/Nullness/B.java +++ b/java/ql/test/query-tests/Nullness/B.java @@ -408,4 +408,32 @@ public class B { x.hashCode(); // NPE } } + + public void corrCondLoop1(boolean a[]) { + Object x = new Object(); + for (int i = 0; i < a.length; i++) { + boolean b = a[i]; + if (b) { + x = null; + } + if (!b) { + x.hashCode(); // NPE - false negative + } + // flow can loop around from one iteration to the next + } + } + + public void corrCondLoop2(boolean a[]) { + for (int i = 0; i < a.length; i++) { + // x is local to the loop iteration and thus cannot loop around and reach the sink + Object x = new Object(); + boolean b = a[i]; + if (b) { + x = null; + } + if (!b) { + x.hashCode(); // OK + } + } + } } diff --git a/java/ql/test/query-tests/Nullness/C.java b/java/ql/test/query-tests/Nullness/C.java index d195eea6acb..9424cbe71f2 100644 --- a/java/ql/test/query-tests/Nullness/C.java +++ b/java/ql/test/query-tests/Nullness/C.java @@ -204,7 +204,7 @@ public class C { obj = new Object(); } else if (a[i] == 2) { verifyNotNull(obj); - obj.hashCode(); // NPE - false positive + obj.hashCode(); // OK } } } diff --git a/java/ql/test/query-tests/Nullness/NullMaybe.expected b/java/ql/test/query-tests/Nullness/NullMaybe.expected index a19fae57e74..9f2920293b0 100644 --- a/java/ql/test/query-tests/Nullness/NullMaybe.expected +++ b/java/ql/test/query-tests/Nullness/NullMaybe.expected @@ -29,7 +29,6 @@ | C.java:137:7:137:10 | obj2 | Variable $@ may be null at this access as suggested by $@ null guard. | C.java:131:5:131:23 | Object obj2 | obj2 | C.java:132:9:132:20 | ... != ... | this | | C.java:144:15:144:15 | a | Variable $@ may be null at this access as suggested by $@ null guard. | C.java:141:20:141:26 | a | a | C.java:142:13:142:21 | ... == ... | this | | C.java:188:9:188:11 | obj | Variable $@ may be null at this access because of $@ assignment. | C.java:181:5:181:22 | Object obj | obj | C.java:181:12:181:21 | obj | this | -| C.java:207:9:207:11 | obj | Variable $@ may be null at this access because of $@ assignment. | C.java:201:5:201:22 | Object obj | obj | C.java:201:12:201:21 | obj | this | | C.java:219:9:219:10 | o1 | Variable $@ may be null at this access as suggested by $@ null guard. | C.java:212:20:212:28 | o1 | o1 | C.java:213:9:213:18 | ... == ... | this | | C.java:233:7:233:8 | xs | Variable $@ may be null at this access because of $@ assignment. | C.java:231:5:231:56 | int[] xs | xs | C.java:231:11:231:55 | xs | this | | F.java:11:5:11:7 | obj | Variable $@ may be null at this access as suggested by $@ null guard. | F.java:8:18:8:27 | obj | obj | F.java:9:9:9:19 | ... == ... | this | diff --git a/javascript/ql/lib/semmle/javascript/Concepts.qll b/javascript/ql/lib/semmle/javascript/Concepts.qll index 76c67156d1c..70fe76ae5f1 100644 --- a/javascript/ql/lib/semmle/javascript/Concepts.qll +++ b/javascript/ql/lib/semmle/javascript/Concepts.qll @@ -212,15 +212,7 @@ abstract class PersistentWriteAccess extends DataFlow::Node { 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 instanceof CryptographicOperation::Range - { } + class CryptographicOperation = SC::CryptographicOperation; class EncryptionAlgorithm = SC::EncryptionAlgorithm; diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll index 0e19e84b666..82deb735c62 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll @@ -21,6 +21,8 @@ private import internal.ApiGraphModels as Shared private import internal.ApiGraphModelsSpecific as Specific private import semmle.javascript.dataflow.internal.FlowSummaryPrivate private import semmle.javascript.endpoints.EndpointNaming as EndpointNaming +private import semmle.javascript.dataflow.AdditionalFlowSteps +private import semmle.javascript.dataflow.AdditionalTaintSteps import Shared::ModelInput as ModelInput import Shared::ModelOutput as ModelOutput @@ -87,9 +89,6 @@ private predicate shouldInduceStepsFromSummary(string type, string path) { pragma[nomagic] private predicate relevantInputOutputPath(API::InvokeNode base, AccessPath inputOrOutput) { exists(string type, string input, string output, string path | - // If the summary for 'callable' could not be handled as a flow summary, we need to evaluate - // its inputs and outputs to a set of nodes, so we can generate steps instead. - shouldInduceStepsFromSummary(type, path) and ModelOutput::resolvedSummaryBase(type, path, base) and ModelOutput::relevantSummaryModel(type, path, input, output, _, _) and inputOrOutput = [input, output] @@ -118,22 +117,26 @@ private API::Node getNodeFromInputOutputPath(API::InvokeNode baseNode, AccessPat result = getNodeFromInputOutputPath(baseNode, path, path.getNumToken()) } -private predicate summaryStep(API::Node pred, API::Node succ, string kind) { +private predicate summaryStep(API::Node pred, API::Node succ, string kind, boolean shouldInduceSteps) { exists(string type, string path, API::InvokeNode base, AccessPath input, AccessPath output | - shouldInduceStepsFromSummary(type, path) and ModelOutput::relevantSummaryModel(type, path, input, output, kind, _) and ModelOutput::resolvedSummaryBase(type, path, base) and pred = getNodeFromInputOutputPath(base, input) and - succ = getNodeFromInputOutputPath(base, output) + succ = getNodeFromInputOutputPath(base, output) and + if shouldInduceStepsFromSummary(type, path) + then shouldInduceSteps = true + else shouldInduceSteps = false ) } /** * Like `ModelOutput::summaryStep` but with API nodes mapped to data-flow nodes. */ -private predicate summaryStepNodes(DataFlow::Node pred, DataFlow::Node succ, string kind) { +private predicate summaryStepNodes( + DataFlow::Node pred, DataFlow::Node succ, string kind, boolean shouldInduceSteps +) { exists(API::Node predNode, API::Node succNode | - summaryStep(predNode, succNode, kind) and + summaryStep(predNode, succNode, kind, shouldInduceSteps) and pred = predNode.asSink() and succ = succNode.asSource() ) @@ -142,14 +145,26 @@ private predicate summaryStepNodes(DataFlow::Node pred, DataFlow::Node succ, str /** Data flow steps induced by summary models of kind `value`. */ private class DataFlowStepFromSummary extends DataFlow::SharedFlowStep { override predicate step(DataFlow::Node pred, DataFlow::Node succ) { - summaryStepNodes(pred, succ, "value") + summaryStepNodes(pred, succ, "value", true) + } +} + +private class LegacyDataFlowStepFromSummary extends LegacyFlowStep { + override predicate step(DataFlow::Node pred, DataFlow::Node succ) { + summaryStepNodes(pred, succ, "value", false) } } /** Taint steps induced by summary models of kind `taint`. */ private class TaintStepFromSummary extends TaintTracking::SharedTaintStep { override predicate step(DataFlow::Node pred, DataFlow::Node succ) { - summaryStepNodes(pred, succ, "taint") + summaryStepNodes(pred, succ, "taint", true) + } +} + +private class LegacyTaintStepFromSummary extends LegacyTaintStep { + override predicate step(DataFlow::Node pred, DataFlow::Node succ) { + summaryStepNodes(pred, succ, "taint", false) } } diff --git a/javascript/ql/test/library-tests/frameworks/data/test.expected b/javascript/ql/test/library-tests/frameworks/data/test.expected index 875b0189d61..0bc1b6b6ee0 100644 --- a/javascript/ql/test/library-tests/frameworks/data/test.expected +++ b/javascript/ql/test/library-tests/frameworks/data/test.expected @@ -1,21 +1,4 @@ legacyDataFlowDifference -| test.js:5:30:5:37 | source() | test.js:5:8:5:38 | testlib ... urce()) | only flow with NEW data flow library | -| test.js:6:22:6:29 | source() | test.js:6:8:6:30 | preserv ... urce()) | only flow with NEW data flow library | -| test.js:7:41:7:48 | source() | test.js:7:8:7:49 | require ... urce()) | only flow with NEW data flow library | -| test.js:11:38:11:45 | source() | test.js:11:8:11:55 | testlib ... , 1, 1) | only flow with NEW data flow library | -| test.js:13:44:13:51 | source() | test.js:13:8:13:55 | testlib ... e(), 1) | only flow with NEW data flow library | -| test.js:17:47:17:54 | source() | test.js:17:8:17:61 | testlib ... , 1, 1) | only flow with NEW data flow library | -| test.js:18:50:18:57 | source() | test.js:18:8:18:61 | testlib ... e(), 1) | only flow with NEW data flow library | -| test.js:19:53:19:60 | source() | test.js:19:8:19:61 | testlib ... urce()) | only flow with NEW data flow library | -| test.js:21:34:21:41 | source() | test.js:21:8:21:51 | testlib ... , 1, 1) | only flow with NEW data flow library | -| test.js:22:37:22:44 | source() | test.js:22:8:22:51 | testlib ... , 1, 1) | only flow with NEW data flow library | -| test.js:23:40:23:47 | source() | test.js:23:8:23:51 | testlib ... e(), 1) | only flow with NEW data flow library | -| test.js:24:43:24:50 | source() | test.js:24:8:24:51 | testlib ... urce()) | only flow with NEW data flow library | -| test.js:31:29:31:36 | source() | test.js:32:10:32:10 | y | only flow with NEW data flow library | -| test.js:37:29:37:36 | source() | test.js:38:10:38:10 | y | only flow with NEW data flow library | -| test.js:43:29:43:36 | source() | test.js:44:10:44:10 | y | only flow with NEW data flow library | -| test.js:47:33:47:40 | source() | test.js:49:10:49:13 | this | only flow with NEW data flow library | -| test.js:102:16:102:34 | testlib.getSource() | test.js:104:8:104:24 | source.continue() | only flow with NEW data flow library | consistencyIssue taintFlow | guardedRouteHandler.js:6:10:6:28 | req.injectedReqData | guardedRouteHandler.js:6:10:6:28 | req.injectedReqData | diff --git a/ruby/ql/lib/change-notes/2025-07-21-nethttprequest-improvements.md b/ruby/ql/lib/change-notes/2025-07-21-nethttprequest-improvements.md new file mode 100644 index 00000000000..7de3ed050e2 --- /dev/null +++ b/ruby/ql/lib/change-notes/2025-07-21-nethttprequest-improvements.md @@ -0,0 +1,7 @@ +--- +category: fix +--- +* Made the following changes to `NetHttpRequest` + * Adds `connectionNode`, like other Ruby HTTP clients + * Makes `requestNode` and `connectionNode` public so subclasses can use them + * Adds detection of `Net::HTTP.start`, a common way to make HTTP requests in Ruby diff --git a/ruby/ql/lib/codeql/ruby/frameworks/http_clients/NetHttp.qll b/ruby/ql/lib/codeql/ruby/frameworks/http_clients/NetHttp.qll index 3a0b484e546..bcb86e2b63d 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/http_clients/NetHttp.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/http_clients/NetHttp.qll @@ -12,38 +12,55 @@ private import codeql.ruby.DataFlow /** * A `Net::HTTP` call which initiates an HTTP request. * ```ruby + * # one-off request * Net::HTTP.get("http://example.com/") * Net::HTTP.post("http://example.com/", "some_data") * req = Net::HTTP.new("example.com") * response = req.get("/") + * + * # connection re-use + * Net::HTTP.start("http://example.com") do |http| + * http.get("/") + * end * ``` */ class NetHttpRequest extends Http::Client::Request::Range instanceof DataFlow::CallNode { private DataFlow::CallNode request; - private API::Node requestNode; + API::Node requestNode; + API::Node connectionNode; private boolean returnsResponseBody; NetHttpRequest() { exists(string method | request = requestNode.asSource() and - this = request + this = request and + requestNode = connectionNode.getReturn(method) | // Net::HTTP.get(...) method in ["get", "get_response"] and - requestNode = API::getTopLevelMember("Net").getMember("HTTP").getReturn(method) and + connectionNode = API::getTopLevelMember("Net").getMember("HTTP") and returnsResponseBody = true or // Net::HTTP.post(...).body method in ["post", "post_form"] and - requestNode = API::getTopLevelMember("Net").getMember("HTTP").getReturn(method) and + connectionNode = API::getTopLevelMember("Net").getMember("HTTP") and returnsResponseBody = false or // Net::HTTP.new(..).get(..).body + // Net::HTTP.start(..) do |http| http.get(..) end method in [ "get", "get2", "request_get", "head", "head2", "request_head", "delete", "put", "patch", "post", "post2", "request_post", "request" ] and - requestNode = API::getTopLevelMember("Net").getMember("HTTP").getInstance().getReturn(method) and + connectionNode = + [ + API::getTopLevelMember("Net").getMember("HTTP").getInstance(), + API::getTopLevelMember("Net") + .getMember("HTTP") + .getMethod("start") + .getBlock() + .getParameter(0) + ] and returnsResponseBody = false ) } diff --git a/ruby/ql/lib/codeql/ruby/security/regexp/MissingFullAnchorQuery.qll b/ruby/ql/lib/codeql/ruby/security/regexp/MissingFullAnchorQuery.qll index febfa0712d9..3516e8319bc 100644 --- a/ruby/ql/lib/codeql/ruby/security/regexp/MissingFullAnchorQuery.qll +++ b/ruby/ql/lib/codeql/ruby/security/regexp/MissingFullAnchorQuery.qll @@ -17,6 +17,10 @@ private module MissingFullAnchorConfig implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node sink) { sink instanceof Sink } predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer } + + predicate observeDiffInformedIncrementalMode() { + none() // can't be made diff-informed because the locations of Ruby RegExpTerms aren't correct when the regexp is parsed from a string arising from constant folding + } } /** diff --git a/ruby/ql/test/library-tests/frameworks/http_clients/HttpClients.expected b/ruby/ql/test/library-tests/frameworks/http_clients/HttpClients.expected index f6275da34ac..e3a36c04819 100644 --- a/ruby/ql/test/library-tests/frameworks/http_clients/HttpClients.expected +++ b/ruby/ql/test/library-tests/frameworks/http_clients/HttpClients.expected @@ -46,6 +46,8 @@ httpRequests | NetHttp.rb:16:6:16:19 | call to patch | | NetHttp.rb:24:3:24:33 | call to get | | NetHttp.rb:29:1:29:32 | call to post | +| NetHttp.rb:33:1:33:22 | call to request | +| NetHttp.rb:36:3:36:15 | call to get | | OpenURI.rb:3:9:3:41 | call to open | | OpenURI.rb:6:9:6:34 | call to open | | OpenURI.rb:9:9:9:38 | call to open | @@ -123,6 +125,8 @@ getFramework | NetHttp.rb:16:6:16:19 | call to patch | Net::HTTP | | NetHttp.rb:24:3:24:33 | call to get | Net::HTTP | | NetHttp.rb:29:1:29:32 | call to post | Net::HTTP | +| NetHttp.rb:33:1:33:22 | call to request | Net::HTTP | +| NetHttp.rb:36:3:36:15 | call to get | Net::HTTP | | OpenURI.rb:3:9:3:41 | call to open | OpenURI | | OpenURI.rb:6:9:6:34 | call to open | OpenURI | | OpenURI.rb:9:9:9:38 | call to open | OpenURI | @@ -292,6 +296,9 @@ getAUrlPart | NetHttp.rb:24:3:24:33 | call to get | NetHttp.rb:24:17:24:22 | domain | | NetHttp.rb:24:3:24:33 | call to get | NetHttp.rb:24:29:24:32 | path | | NetHttp.rb:29:1:29:32 | call to post | NetHttp.rb:29:16:29:18 | uri | +| NetHttp.rb:33:1:33:22 | call to request | NetHttp.rb:31:22:31:42 | "https://example.com" | +| NetHttp.rb:33:1:33:22 | call to request | NetHttp.rb:33:14:33:21 | root_get | +| NetHttp.rb:36:3:36:15 | call to get | NetHttp.rb:36:12:36:14 | "/" | | OpenURI.rb:3:9:3:41 | call to open | OpenURI.rb:3:21:3:40 | "http://example.com" | | OpenURI.rb:6:9:6:34 | call to open | OpenURI.rb:6:14:6:33 | "http://example.com" | | OpenURI.rb:9:9:9:38 | call to open | OpenURI.rb:9:18:9:37 | "http://example.com" | diff --git a/ruby/ql/test/library-tests/frameworks/http_clients/NetHttp.rb b/ruby/ql/test/library-tests/frameworks/http_clients/NetHttp.rb index 608b46ece9a..63f1522dfad 100644 --- a/ruby/ql/test/library-tests/frameworks/http_clients/NetHttp.rb +++ b/ruby/ql/test/library-tests/frameworks/http_clients/NetHttp.rb @@ -27,3 +27,11 @@ end get("example.com", "/").body Net::HTTP.post(uri, "some_body") # note: response body not accessed + +http = Net::HTTP.new("https://example.com") +root_get = Net::HTTP::Get.new("/") +http.request(root_get) + +Net::HTTP.start("https://example.com") do |http| + http.get("/") +end diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 84b71da2ec9..242a1af3ed5 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,8 +1,10 @@ -# This file specifies the Rust version used to develop and test the -# extractors written in rust. It is set to the lowest version of Rust -# we want to support. +# This file specifies the Rust version used to develop the extractors written +# in rust. Notice that this is just used by using `cargo`-related tools in a +# local dev environment. The actual version used to build the released packs +# is specified in `MODULE.bazel` in the internal repository (typically +# reflected by `MODULE.bazel` in this repository). [toolchain] -channel = "1.86" +channel = "1.88" profile = "minimal" components = [ "clippy", "rustfmt" ] diff --git a/rust/ast-generator/src/main.rs b/rust/ast-generator/src/main.rs index 1bcf7f52dc3..d612985ff9f 100644 --- a/rust/ast-generator/src/main.rs +++ b/rust/ast-generator/src/main.rs @@ -23,7 +23,7 @@ fn class_name(type_name: &str) -> String { "AsmOptions" => "AsmOptionsList".to_owned(), "MacroStmts" => "MacroBlockExpr".to_owned(), _ if type_name.starts_with("Record") => type_name.replacen("Record", "Struct", 1), - _ if type_name.ends_with("Type") => format!("{}Repr", type_name), + _ if type_name.ends_with("Type") => format!("{type_name}Repr"), _ => type_name.to_owned(), } } @@ -171,7 +171,7 @@ fn get_trait_fields(trait_name: &str) -> Vec { ], "HasArgList" => vec![FieldInfo::optional("arg_list", "ArgList")], "HasDocComments" => vec![], - _ => panic!("Unknown trait {}", trait_name), + _ => panic!("Unknown trait {trait_name}"), } } diff --git a/rust/extractor/src/rust_analyzer.rs b/rust/extractor/src/rust_analyzer.rs index bed6e66c9b7..d477b13b5d0 100644 --- a/rust/extractor/src/rust_analyzer.rs +++ b/rust/extractor/src/rust_analyzer.rs @@ -51,7 +51,7 @@ impl<'a> RustAnalyzer<'a> { config: &CargoConfig, load_config: &LoadCargoConfig, ) -> Option<(RootDatabase, Vfs)> { - let progress = |t| (trace!("progress: {}", t)); + let progress = |t| trace!("progress: {t}"); let manifest = project.manifest_path(); match load_workspace_at(manifest.as_ref(), config, load_config, &progress) { Ok((db, vfs, _macro_server)) => Some((db, vfs)), @@ -67,7 +67,7 @@ impl<'a> RustAnalyzer<'a> { fn get_file_data( &self, path: &Path, - ) -> Result<(&Semantics, EditionedFileId, FileText), &str> { + ) -> Result<(&Semantics<'_, RootDatabase>, EditionedFileId, FileText), &str> { match self { RustAnalyzer::WithoutSemantics { reason } => Err(reason), RustAnalyzer::WithSemantics { vfs, semantics } => { @@ -82,7 +82,7 @@ impl<'a> RustAnalyzer<'a> { } } - pub fn parse(&self, path: &Path) -> ParseResult { + pub fn parse(&self, path: &Path) -> ParseResult<'_> { match self.get_file_data(path) { Ok((semantics, file_id, input)) => { let source_file = semantics.parse(file_id); diff --git a/rust/extractor/src/translate/base.rs b/rust/extractor/src/translate/base.rs index b5150029134..ccd6143fb84 100644 --- a/rust/extractor/src/translate/base.rs +++ b/rust/extractor/src/translate/base.rs @@ -549,9 +549,7 @@ impl<'a> Translator<'a> { .map(|p| format!("[{p}; {size}]")); } if let Some(it) = ty.as_slice() { - return self - .canonical_path_from_type(it) - .map(|p| format!("[{}]", p)); + return self.canonical_path_from_type(it).map(|p| format!("[{p}]")); } if let Some(it) = ty.as_builtin() { return Some(it.name().as_str().to_owned()); @@ -651,7 +649,7 @@ impl<'a> Translator<'a> { // if we have a Hir entity, it means we have semantics let sema = self.semantics.as_ref().unwrap(); match item.origin(sema.db) { - CrateOrigin::Rustc { name } => format!("rustc:{}", name), + CrateOrigin::Rustc { name } => format!("rustc:{name}"), CrateOrigin::Local { repo, name } => format!( "repo:{}:{}", repo.unwrap_or_default(), @@ -660,7 +658,7 @@ impl<'a> Translator<'a> { CrateOrigin::Library { repo, name } => { format!("repo:{}:{}", repo.unwrap_or_default(), name) } - CrateOrigin::Lang(it) => format!("lang:{}", it), + CrateOrigin::Lang(it) => format!("lang:{it}"), } } diff --git a/rust/extractor/src/trap.rs b/rust/extractor/src/trap.rs index a7cb43a6432..3a6dbeb24e1 100644 --- a/rust/extractor/src/trap.rs +++ b/rust/extractor/src/trap.rs @@ -16,7 +16,7 @@ pub trait AsTrapKeyPart { impl AsTrapKeyPart for UntypedLabel { fn as_key_part(&self) -> String { - format!("{{{}}}", self) + format!("{{{self}}}") } } diff --git a/rust/ql/integration-tests/query-suite/rust-code-scanning.qls.expected b/rust/ql/integration-tests/query-suite/rust-code-scanning.qls.expected index 97e1cbe67ca..b89c6ba94af 100644 --- a/rust/ql/integration-tests/query-suite/rust-code-scanning.qls.expected +++ b/rust/ql/integration-tests/query-suite/rust-code-scanning.qls.expected @@ -5,6 +5,7 @@ ql/rust/ql/src/queries/diagnostics/ExtractedFiles.ql ql/rust/ql/src/queries/diagnostics/ExtractionErrors.ql ql/rust/ql/src/queries/diagnostics/ExtractionWarnings.ql ql/rust/ql/src/queries/diagnostics/SsaConsistencyCounts.ql +ql/rust/ql/src/queries/diagnostics/TypeInferenceConsistencyCounts.ql ql/rust/ql/src/queries/diagnostics/UnextractedElements.ql ql/rust/ql/src/queries/diagnostics/UnresolvedMacroCalls.ql ql/rust/ql/src/queries/security/CWE-020/RegexInjection.ql @@ -12,6 +13,7 @@ ql/rust/ql/src/queries/security/CWE-022/TaintedPath.ql ql/rust/ql/src/queries/security/CWE-089/SqlInjection.ql ql/rust/ql/src/queries/security/CWE-311/CleartextTransmission.ql ql/rust/ql/src/queries/security/CWE-312/CleartextLogging.ql +ql/rust/ql/src/queries/security/CWE-312/CleartextStorageDatabase.ql ql/rust/ql/src/queries/security/CWE-327/BrokenCryptoAlgorithm.ql ql/rust/ql/src/queries/security/CWE-328/WeakSensitiveDataHashing.ql ql/rust/ql/src/queries/security/CWE-770/UncontrolledAllocationSize.ql diff --git a/rust/ql/integration-tests/query-suite/rust-security-and-quality.qls.expected b/rust/ql/integration-tests/query-suite/rust-security-and-quality.qls.expected index ae90e05411f..a0ea519f7a1 100644 --- a/rust/ql/integration-tests/query-suite/rust-security-and-quality.qls.expected +++ b/rust/ql/integration-tests/query-suite/rust-security-and-quality.qls.expected @@ -5,6 +5,7 @@ ql/rust/ql/src/queries/diagnostics/ExtractedFiles.ql ql/rust/ql/src/queries/diagnostics/ExtractionErrors.ql ql/rust/ql/src/queries/diagnostics/ExtractionWarnings.ql ql/rust/ql/src/queries/diagnostics/SsaConsistencyCounts.ql +ql/rust/ql/src/queries/diagnostics/TypeInferenceConsistencyCounts.ql ql/rust/ql/src/queries/diagnostics/UnextractedElements.ql ql/rust/ql/src/queries/diagnostics/UnresolvedMacroCalls.ql ql/rust/ql/src/queries/security/CWE-020/RegexInjection.ql @@ -12,6 +13,7 @@ ql/rust/ql/src/queries/security/CWE-022/TaintedPath.ql ql/rust/ql/src/queries/security/CWE-089/SqlInjection.ql ql/rust/ql/src/queries/security/CWE-311/CleartextTransmission.ql ql/rust/ql/src/queries/security/CWE-312/CleartextLogging.ql +ql/rust/ql/src/queries/security/CWE-312/CleartextStorageDatabase.ql ql/rust/ql/src/queries/security/CWE-327/BrokenCryptoAlgorithm.ql ql/rust/ql/src/queries/security/CWE-328/WeakSensitiveDataHashing.ql ql/rust/ql/src/queries/security/CWE-696/BadCtorInitialization.ql diff --git a/rust/ql/integration-tests/query-suite/rust-security-extended.qls.expected b/rust/ql/integration-tests/query-suite/rust-security-extended.qls.expected index 1e5167f84fb..5e2fb17298a 100644 --- a/rust/ql/integration-tests/query-suite/rust-security-extended.qls.expected +++ b/rust/ql/integration-tests/query-suite/rust-security-extended.qls.expected @@ -5,6 +5,7 @@ ql/rust/ql/src/queries/diagnostics/ExtractedFiles.ql ql/rust/ql/src/queries/diagnostics/ExtractionErrors.ql ql/rust/ql/src/queries/diagnostics/ExtractionWarnings.ql ql/rust/ql/src/queries/diagnostics/SsaConsistencyCounts.ql +ql/rust/ql/src/queries/diagnostics/TypeInferenceConsistencyCounts.ql ql/rust/ql/src/queries/diagnostics/UnextractedElements.ql ql/rust/ql/src/queries/diagnostics/UnresolvedMacroCalls.ql ql/rust/ql/src/queries/security/CWE-020/RegexInjection.ql @@ -12,6 +13,7 @@ ql/rust/ql/src/queries/security/CWE-022/TaintedPath.ql ql/rust/ql/src/queries/security/CWE-089/SqlInjection.ql ql/rust/ql/src/queries/security/CWE-311/CleartextTransmission.ql ql/rust/ql/src/queries/security/CWE-312/CleartextLogging.ql +ql/rust/ql/src/queries/security/CWE-312/CleartextStorageDatabase.ql ql/rust/ql/src/queries/security/CWE-327/BrokenCryptoAlgorithm.ql ql/rust/ql/src/queries/security/CWE-328/WeakSensitiveDataHashing.ql ql/rust/ql/src/queries/security/CWE-770/UncontrolledAllocationSize.ql diff --git a/rust/ql/lib/codeql/rust/Frameworks.qll b/rust/ql/lib/codeql/rust/Frameworks.qll index 26e52ce82ae..0c711096b20 100644 --- a/rust/ql/lib/codeql/rust/Frameworks.qll +++ b/rust/ql/lib/codeql/rust/Frameworks.qll @@ -4,5 +4,4 @@ private import codeql.rust.frameworks.rustcrypto.RustCrypto private import codeql.rust.frameworks.Poem -private import codeql.rust.frameworks.Sqlx private import codeql.rust.frameworks.stdlib.Stdlib diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll index be72255f793..7f8df8d144b 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll @@ -68,9 +68,8 @@ extensible predicate sourceModel( * * For example, `input = Argument[0]` means the first argument of the call. * - * The following kinds are supported: - * - * - `sql-injection`: a flow sink for SQL injection. + * The sink kinds supported by queries can be found by searching for uses of + * the `sinkNode` predicate. */ extensible predicate sinkModel( string path, string input, string kind, string provenance, QlBuiltins::ExtensionId madId diff --git a/rust/ql/lib/codeql/rust/elements/internal/TraitImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/TraitImpl.qll index 0926db57c97..83ba43020d7 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/TraitImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/TraitImpl.qll @@ -36,5 +36,36 @@ module Impl { not this.hasGenericParamList() and result = 0 } + + private int nrOfDirectTypeBounds() { + result = this.getTypeBoundList().getNumberOfBounds() + or + not this.hasTypeBoundList() and + result = 0 + } + + /** + * Gets the `index`th type bound of this trait, if any. + * + * This includes type bounds directly on the trait and bounds from any + * `where` clauses for `Self`. + */ + TypeBound getTypeBound(int index) { + result = this.getTypeBoundList().getBound(index) + or + exists(WherePred wp | + wp = this.getWhereClause().getAPredicate() and + wp.getTypeRepr().(PathTypeRepr).getPath().getText() = "Self" and + result = wp.getTypeBoundList().getBound(index - this.nrOfDirectTypeBounds()) + ) + } + + /** + * Gets a type bound of this trait. + * + * This includes type bounds directly on the trait and bounds from any + * `where` clauses for `Self`. + */ + TypeBound getATypeBound() { result = this.getTypeBound(_) } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/TypeParamImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/TypeParamImpl.qll index 34af89b587b..753f511dedb 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/TypeParamImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/TypeParamImpl.qll @@ -12,6 +12,7 @@ private import codeql.rust.elements.internal.generated.TypeParam */ module Impl { private import rust + private import codeql.rust.internal.PathResolution // the following QLdoc is generated: if you need to edit it, do it in the schema file /** @@ -27,6 +28,41 @@ module Impl { /** Gets the position of this type parameter. */ int getPosition() { this = any(GenericParamList l).getTypeParam(result) } + private TypeBound getTypeBoundAt(int i, int j) { + exists(TypeBoundList tbl | result = tbl.getBound(j) | + tbl = this.getTypeBoundList() and i = 0 + or + exists(WherePred wp | + wp = this.(TypeParamItemNode).getAWherePred() and + tbl = wp.getTypeBoundList() and + wp = any(WhereClause wc).getPredicate(i) + ) + ) + } + + /** + * Gets the `index`th type bound of this type parameter, if any. + * + * This includes type bounds directly on this type parameter and bounds from + * any `where` clauses for this type parameter. + */ + TypeBound getTypeBound(int index) { + result = rank[index + 1](int i, int j | | this.getTypeBoundAt(i, j) order by i, j) + } + + /** + * Gets a type bound of this type parameter. + * + * This includes type bounds directly on this type parameter and bounds from + * any `where` clauses for this type parameter. + */ + TypeBound getATypeBound() { + // NOTE: This predicate is used in path resolution, so it can not be + // defined using `getTypeBound` as that would cause non-monotonic + // recursion due to the `rank`. + result = this.getTypeBoundAt(_, _) + } + override string toAbbreviatedString() { result = this.getName().getText() } override string toStringImpl() { result = this.getName().getText() } diff --git a/rust/ql/lib/codeql/rust/frameworks/Sqlx.qll b/rust/ql/lib/codeql/rust/frameworks/Sqlx.qll deleted file mode 100644 index 5504993ab74..00000000000 --- a/rust/ql/lib/codeql/rust/frameworks/Sqlx.qll +++ /dev/null @@ -1,40 +0,0 @@ -/** - * Provides modeling for the `SQLx` library. - */ - -private import rust -private import codeql.rust.Concepts -private import codeql.rust.dataflow.DataFlow - -/** - * A call to `sqlx::query` and variations. - */ -private class SqlxQuery extends SqlConstruction::Range { - CallExpr call; - - SqlxQuery() { - this.asExpr().getExpr() = call and - call.getFunction().(PathExpr).getResolvedPath() = - [ - "crate::query::query", "crate::query_as::query_as", "crate::query_with::query_with", - "crate::query_as_with::query_as_with", "crate::query_scalar::query_scalar", - "crate::query_scalar_with::query_scalar_with", "crate::raw_sql::raw_sql" - ] - } - - override DataFlow::Node getSql() { result.asExpr().getExpr() = call.getArgList().getArg(0) } -} - -/** - * A call to `sqlx::Executor::execute`. - */ -private class SqlxExecute extends SqlExecution::Range { - MethodCallExpr call; - - SqlxExecute() { - this.asExpr().getExpr() = call and - call.(Resolvable).getResolvedPath() = "crate::executor::Executor::execute" - } - - override DataFlow::Node getSql() { result.asExpr().getExpr() = call.getArgList().getArg(0) } -} diff --git a/rust/ql/lib/codeql/rust/frameworks/sqlx.model.yml b/rust/ql/lib/codeql/rust/frameworks/sqlx.model.yml new file mode 100644 index 00000000000..efc6022b0c5 --- /dev/null +++ b/rust/ql/lib/codeql/rust/frameworks/sqlx.model.yml @@ -0,0 +1,13 @@ +extensions: + - addsTo: + pack: codeql/rust-all + extensible: sinkModel + data: + - ["sqlx_core::query::query", "Argument[0]", "sql-injection", "manual"] + - ["sqlx_core::query_as::query_as", "Argument[0]", "sql-injection", "manual"] + - ["sqlx_core::query_with::query_with", "Argument[0]", "sql-injection", "manual"] + - ["sqlx_core::query_as_with::query_as_with", "Argument[0]", "sql-injection", "manual"] + - ["sqlx_core::query_scalar::query_scalar", "Argument[0]", "sql-injection", "manual"] + - ["sqlx_core::query_scalar_with::query_scalar_with", "Argument[0]", "sql-injection", "manual"] + - ["sqlx_core::raw_sql::raw_sql", "Argument[0]", "sql-injection", "manual"] + - ["<_ as sqlx_core::executor::Executor>::execute", "Argument[0]", "sql-injection", "manual"] diff --git a/rust/ql/lib/codeql/rust/internal/CachedStages.qll b/rust/ql/lib/codeql/rust/internal/CachedStages.qll index 0c2099d4dcd..ad011a753c8 100644 --- a/rust/ql/lib/codeql/rust/internal/CachedStages.qll +++ b/rust/ql/lib/codeql/rust/internal/CachedStages.qll @@ -120,7 +120,7 @@ module Stages { or exists(resolvePath(_)) or - exists(any(ItemNode i).getASuccessorFull(_)) + exists(any(ItemNode i).getASuccessor(_)) or exists(any(ItemNode i).getASuccessorRec(_)) or diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index c430a10bee9..354cab5a6de 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -194,7 +194,7 @@ abstract class ItemNode extends Locatable { * both are included */ cached - ItemNode getASuccessorFull(string name) { + ItemNode getASuccessor(string name) { Stages::PathResolutionStage::ref() and result = this.getASuccessorRec(name) or @@ -261,27 +261,6 @@ abstract class ItemNode extends Locatable { item instanceof TypeParamItemNode } - pragma[nomagic] - private predicate hasSourceFunction(string name) { - this.getASuccessorFull(name).(Function).fromSource() - } - - /** Gets a successor named `name` of this item, if any. */ - pragma[nomagic] - ItemNode getASuccessor(string name) { - result = this.getASuccessorFull(name) and - ( - // when a function exists in both source code and in library code, it is because - // we also extracted the source code as library code, and hence we only want - // the function from source code - result.fromSource() - or - not result instanceof Function - or - not this.hasSourceFunction(name) - ) - } - /** Holds if this item has a canonical path belonging to the crate `c`. */ abstract predicate hasCanonicalPath(Crate c); @@ -345,7 +324,7 @@ abstract private class ModuleLikeNode extends ItemNode { private class SourceFileItemNode extends ModuleLikeNode, SourceFile { pragma[nomagic] ModuleLikeNode getSuper() { - result = any(ModuleItemNode mod | fileImport(mod, this)).getASuccessorFull("super") + result = any(ModuleItemNode mod | fileImport(mod, this)).getASuccessor("super") } override string getName() { result = "(source file)" } @@ -393,7 +372,7 @@ class CrateItemNode extends ItemNode instanceof Crate { predicate isPotentialDollarCrateTarget() { exists(string name, RelevantPath p | p.isDollarCrateQualifiedPath(name) and - exists(this.getASuccessorFull(name)) + exists(this.getASuccessor(name)) ) } @@ -791,9 +770,7 @@ private class StructItemNode extends TypeItemNode instanceof Struct { class TraitItemNode extends ImplOrTraitItemNode, TypeItemNode instanceof Trait { pragma[nomagic] - Path getABoundPath() { - result = super.getTypeBoundList().getABound().getTypeRepr().(PathTypeRepr).getPath() - } + Path getABoundPath() { result = super.getATypeBound().getTypeRepr().(PathTypeRepr).getPath() } pragma[nomagic] ItemNode resolveABound() { result = resolvePath(this.getABoundPath()) } @@ -924,7 +901,8 @@ private class BlockExprItemNode extends ItemNode instanceof BlockExpr { } class TypeParamItemNode extends TypeItemNode instanceof TypeParam { - private WherePred getAWherePred() { + /** Gets a where predicate for this type parameter, if any */ + WherePred getAWherePred() { exists(ItemNode declaringItem | this = resolveTypeParamPathTypeRepr(result.getTypeRepr()) and result = declaringItem.getADescendant() and @@ -933,13 +911,7 @@ class TypeParamItemNode extends TypeItemNode instanceof TypeParam { } pragma[nomagic] - Path getABoundPath() { - exists(TypeBoundList tbl | result = tbl.getABound().getTypeRepr().(PathTypeRepr).getPath() | - tbl = super.getTypeBoundList() - or - tbl = this.getAWherePred().getTypeBoundList() - ) - } + Path getABoundPath() { result = super.getATypeBound().getTypeRepr().(PathTypeRepr).getPath() } pragma[nomagic] ItemNode resolveABound() { result = resolvePath(this.getABoundPath()) } @@ -956,12 +928,7 @@ class TypeParamItemNode extends TypeItemNode instanceof TypeParam { * ``` */ cached - predicate hasTraitBound() { - Stages::PathResolutionStage::ref() and - exists(this.getABoundPath()) - or - exists(this.getAWherePred()) - } + predicate hasTraitBound() { Stages::PathResolutionStage::ref() and exists(this.getABoundPath()) } /** * Holds if this type parameter has no trait bound. Examples: @@ -1257,8 +1224,8 @@ private predicate unqualifiedPathLookup(ItemNode encl, string name, Namespace ns } pragma[nomagic] -private ItemNode getASuccessorFull(ItemNode pred, string name, Namespace ns) { - result = pred.getASuccessorFull(name) and +private ItemNode getASuccessor(ItemNode pred, string name, Namespace ns) { + result = pred.getASuccessor(name) and ns = result.getNamespace() } @@ -1293,7 +1260,7 @@ private predicate keywordLookup(ItemNode encl, string name, RelevantPath p) { pragma[nomagic] private ItemNode unqualifiedPathLookup(RelevantPath p, Namespace ns) { exists(ItemNode encl, string name | - result = getASuccessorFull(encl, name, ns) and not encl.excludedLocally(name, result) + result = getASuccessor(encl, name, ns) and not encl.excludedLocally(name, result) | unqualifiedPathLookup(encl, name, ns, p) or @@ -1318,7 +1285,7 @@ private ItemNode resolvePath0(RelevantPath path, Namespace ns) { or exists(ItemNode q, string name | q = resolvePathQualifier(path, name) and - result = getASuccessorFull(q, name, ns) and + result = getASuccessor(q, name, ns) and not q.excludedExternally(name, result) ) or @@ -1395,12 +1362,12 @@ private ItemNode resolveUseTreeListItem(Use use, UseTree tree, RelevantPath path mid = resolveUseTreeListItem(use, midTree) and tree = midTree.getUseTreeList().getAUseTree() and isUseTreeSubPathUnqualified(tree, path, pragma[only_bind_into](name)) and - result = mid.getASuccessorFull(pragma[only_bind_into](name)) + result = mid.getASuccessor(pragma[only_bind_into](name)) ) or exists(ItemNode q, string name | q = resolveUseTreeListItemQualifier(use, tree, path, name) and - result = q.getASuccessorFull(name) + result = q.getASuccessor(name) ) } @@ -1430,7 +1397,7 @@ private predicate useImportEdge(Use use, string name, ItemNode item) { then exists(ItemNode encl, Namespace ns | encl.getADescendant() = use and - item = getASuccessorFull(used, name, ns) and + item = getASuccessor(used, name, ns) and // glob imports can be shadowed not declares(encl, ns, name) and not name = ["super", "self", "Self", "$crate", "crate"] diff --git a/rust/ql/lib/codeql/rust/internal/Type.qll b/rust/ql/lib/codeql/rust/internal/Type.qll index 1c3262c3e89..275776741a3 100644 --- a/rust/ql/lib/codeql/rust/internal/Type.qll +++ b/rust/ql/lib/codeql/rust/internal/Type.qll @@ -59,7 +59,7 @@ newtype TType = TSelfTypeParameter(Trait t) or TSliceTypeParameter() -predicate implTraitTypeParam(ImplTraitTypeRepr implTrait, int i, TypeParam tp) { +private predicate implTraitTypeParam(ImplTraitTypeRepr implTrait, int i, TypeParam tp) { implTrait.isInReturnPos() and tp = implTrait.getFunction().getGenericParamList().getTypeParam(i) and // Only include type parameters of the function that occur inside the impl diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index 7c355dd1447..1b861b837bc 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -15,6 +15,14 @@ private import codeql.rust.elements.internal.CallExprImpl::Impl as CallExprImpl class Type = T::Type; +private newtype TTypeArgumentPosition = + // method type parameters are matched by position instead of by type + // parameter entity, to avoid extra recursion through method call resolution + TMethodTypeArgumentPosition(int pos) { + exists(any(MethodCallExpr mce).getGenericArgList().getTypeArg(pos)) + } or + TTypeParamTypeArgumentPosition(TypeParam tp) + private module Input1 implements InputSig1 { private import Type as T private import codeql.rust.elements.internal.generated.Raw @@ -26,14 +34,6 @@ private module Input1 implements InputSig1 { class TypeAbstraction = T::TypeAbstraction; - private newtype TTypeArgumentPosition = - // method type parameters are matched by position instead of by type - // parameter entity, to avoid extra recursion through method call resolution - TMethodTypeArgumentPosition(int pos) { - exists(any(MethodCallExpr mce).getGenericArgList().getTypeArg(pos)) - } or - TTypeParamTypeArgumentPosition(TypeParam tp) - class TypeArgumentPosition extends TTypeArgumentPosition { int asMethodTypeArgumentPosition() { this = TMethodTypeArgumentPosition(result) } @@ -151,7 +151,7 @@ private module Input2 implements InputSig2 { TypeMention getABaseTypeMention(Type t) { none() } TypeMention getATypeParameterConstraint(TypeParameter tp) { - result = tp.(TypeParamTypeParameter).getTypeParam().getTypeBoundList().getABound().getTypeRepr() + result = tp.(TypeParamTypeParameter).getTypeParam().getATypeBound().getTypeRepr() or result = tp.(SelfTypeParameter).getTrait() or @@ -184,12 +184,12 @@ private module Input2 implements InputSig2 { exists(Trait trait | abs = trait and condition = trait and - constraint = trait.getTypeBoundList().getABound().getTypeRepr() + constraint = trait.getATypeBound().getTypeRepr() ) or // trait bounds on type parameters exists(TypeParam param | - abs = param.getTypeBoundList().getABound() and + abs = param.getATypeBound() and condition = param and constraint = abs.(TypeBound).getTypeRepr() ) @@ -221,7 +221,13 @@ private module M2 = Make2; private import M2 -module Consistency = M2::Consistency; +module Consistency { + import M2::Consistency + + query predicate nonUniqueCertainType(AstNode n, TypePath path) { + strictcount(CertainTypeInference::inferCertainType(n, path)) > 1 + } +} /** Gets the type annotation that applies to `n`, if any. */ private TypeMention getTypeAnnotation(AstNode n) { @@ -249,6 +255,164 @@ private Type inferAnnotatedType(AstNode n, TypePath path) { result = getTypeAnnotation(n).resolveTypeAt(path) } +/** Module for inferring certain type information. */ +private module CertainTypeInference { + pragma[nomagic] + private predicate callResolvesTo(CallExpr ce, Path p, Function f) { + p = CallExprImpl::getFunctionPath(ce) and + f = resolvePath(p) + } + + pragma[nomagic] + private Type getCallExprType( + CallExpr ce, Path p, CallExprBaseMatchingInput::FunctionDecl f, TypePath tp + ) { + callResolvesTo(ce, p, f) and + result = f.getReturnType(tp) + } + + pragma[nomagic] + private Type getCertainCallExprType(CallExpr ce, Path p, TypePath tp) { + forex(Function f | callResolvesTo(ce, p, f) | result = getCallExprType(ce, p, f, tp)) + } + + pragma[nomagic] + private TypePath getPathToImplSelfTypeParam(TypeParam tp) { + exists(ImplItemNode impl | + tp = impl.getTypeParam(_) and + TTypeParamTypeParameter(tp) = impl.(Impl).getSelfTy().(TypeMention).resolveTypeAt(result) + ) + } + + pragma[nomagic] + Type inferCertainCallExprType(CallExpr ce, TypePath path) { + exists(Type ty, TypePath prefix, Path p | ty = getCertainCallExprType(ce, p, prefix) | + exists(TypePath suffix, TypeParam tp | + tp = ty.(TypeParamTypeParameter).getTypeParam() and + path = prefix.append(suffix) + | + // For type parameters of the `impl` block we must resolve their + // instantiation from the path. For instance, for `impl for Foo` + // and the path `Foo::bar` we must resolve `A` to `i64`. + exists(TypePath pathToTp | + pathToTp = getPathToImplSelfTypeParam(tp) and + result = p.getQualifier().(TypeMention).resolveTypeAt(pathToTp.appendInverse(suffix)) + ) + or + // For type parameters of the function we must resolve their + // instantiation from the path. For instance, for `fn bar(a: A) -> A` + // and the path `bar`, we must resolve `A` to `i64`. + result = + ce.(CallExprBaseMatchingInput::Access) + .getTypeArgument(TTypeParamTypeArgumentPosition(tp), suffix) + ) + or + not ty instanceof TypeParameter and + result = ty and + path = prefix + ) + } + + predicate certainTypeEquality(AstNode n1, TypePath prefix1, AstNode n2, TypePath prefix2) { + prefix1.isEmpty() and + prefix2.isEmpty() and + ( + exists(Variable v | n1 = v.getAnAccess() | + n2 = v.getPat().getName() or n2 = v.getParameter().(SelfParam) + ) + or + // A `let` statement with a type annotation is a coercion site and hence + // is not a certain type equality. + exists(LetStmt let | not let.hasTypeRepr() | + let.getPat() = n1 and + let.getInitializer() = n2 + ) + or + n1 = n2.(ParenExpr).getExpr() + ) + or + n1 = + any(IdentPat ip | + n2 = ip.getName() and + prefix1.isEmpty() and + if ip.isRef() then prefix2 = TypePath::singleton(TRefTypeParameter()) else prefix2.isEmpty() + ) + } + + pragma[nomagic] + private Type inferCertainTypeEquality(AstNode n, TypePath path) { + exists(TypePath prefix1, AstNode n2, TypePath prefix2, TypePath suffix | + result = inferCertainType(n2, prefix2.appendInverse(suffix)) and + path = prefix1.append(suffix) + | + certainTypeEquality(n, prefix1, n2, prefix2) + or + certainTypeEquality(n2, prefix2, n, prefix1) + ) + } + + /** + * Holds if `n` has complete and certain type information and if `n` has the + * resulting type at `path`. + */ + pragma[nomagic] + Type inferCertainType(AstNode n, TypePath path) { + exists(TypeMention tm | + tm = getTypeAnnotation(n) and + result = tm.resolveTypeAt(path) + ) + or + result = inferCertainCallExprType(n, path) + or + result = inferCertainTypeEquality(n, path) + or + result = inferLiteralType(n, path, true) + or + infersCertainTypeAt(n, path, result.getATypeParameter()) + } + + /** + * Holds if `n` has complete and certain type information at the type path + * `prefix.tp`. This entails that the type at `prefix` must be the type + * that declares `tp`. + */ + pragma[nomagic] + private predicate infersCertainTypeAt(AstNode n, TypePath prefix, TypeParameter tp) { + exists(TypePath path | + exists(inferCertainType(n, path)) and + path.isSnoc(prefix, tp) + ) + } + + /** + * Holds if `n` has complete and certain type information at _some_ type path. + */ + pragma[nomagic] + predicate hasInferredCertainType(AstNode n) { exists(inferCertainType(n, _)) } + + /** + * Holds if `n` having type `t` at `path` conflicts with certain type information. + */ + bindingset[n, path, t] + pragma[inline_late] + predicate certainTypeConflict(AstNode n, TypePath path, Type t) { + inferCertainType(n, path) != t + or + // If we infer that `n` has _some_ type at `T1.T2....Tn`, and we also + // know that `n` certainly has type `certainType` at `T1.T2...Ti`, `i <=0 < n`, + // then it must be the case that `T(i+1)` is a type parameter of `certainType`, + // otherwise there is a conflict. + // + // Below, `prefix` is `T1.T2...Ti` and `tp` is `T(i+1)`. + exists(TypePath prefix, TypePath suffix, TypeParameter tp, Type certainType | + path = prefix.appendInverse(suffix) and + tp = suffix.getHead() and + inferCertainType(n, prefix) = certainType and + not certainType.getATypeParameter() = tp + ) + } +} + private Type inferLogicalOperationType(AstNode n, TypePath path) { exists(Builtins::BuiltinType t, BinaryLogicalOperation be | n = [be, be.getLhs(), be.getRhs()] and @@ -288,22 +452,16 @@ private Struct getRangeType(RangeExpr re) { * through the type equality. */ private predicate typeEquality(AstNode n1, TypePath prefix1, AstNode n2, TypePath prefix2) { + CertainTypeInference::certainTypeEquality(n1, prefix1, n2, prefix2) + or prefix1.isEmpty() and prefix2.isEmpty() and ( - exists(Variable v | n1 = v.getAnAccess() | - n2 = v.getPat().getName() - or - n2 = v.getParameter().(SelfParam) - ) - or exists(LetStmt let | let.getPat() = n1 and let.getInitializer() = n2 ) or - n1 = n2.(ParenExpr).getExpr() - or n1 = n2.(IfExpr).getABranch() or n1 = n2.(MatchExpr).getAnArm().getExpr() @@ -339,13 +497,6 @@ private predicate typeEquality(AstNode n1, TypePath prefix1, AstNode n2, TypePat n1 = n2.(MacroPat).getMacroCall().getMacroCallExpansion() ) or - n1 = - any(IdentPat ip | - n2 = ip.getName() and - prefix1.isEmpty() and - if ip.isRef() then prefix2 = TypePath::singleton(TRefTypeParameter()) else prefix2.isEmpty() - ) - or ( n1 = n2.(RefExpr).getExpr() or n1 = n2.(RefPat).getPat() @@ -716,7 +867,7 @@ private module CallExprBaseMatchingInput implements MatchingInputSig { } } - private class FunctionDecl extends Declaration, Function { + additional class FunctionDecl extends Declaration, Function { override TypeParameter getTypeParameter(TypeParameterPosition ppos) { typeParamMatchPosition(this.getGenericParamList().getATypeParam(), result, ppos) or @@ -1180,17 +1331,22 @@ pragma[nomagic] private StructType getStrStruct() { result = TStruct(any(Builtins::Str s)) } pragma[nomagic] -private Type inferLiteralType(LiteralExpr le, TypePath path) { +private Type inferLiteralType(LiteralExpr le, TypePath path, boolean certain) { path.isEmpty() and exists(Builtins::BuiltinType t | result = TStruct(t) | le instanceof CharLiteralExpr and - t instanceof Builtins::Char + t instanceof Builtins::Char and + certain = true or le = any(NumberLiteralExpr ne | - t.getName() = ne.getSuffix() + t.getName() = ne.getSuffix() and + certain = true or + // When a number literal has no suffix, the type may depend on the context. + // For simplicity, we assume either `i32` or `f64`. not exists(ne.getSuffix()) and + certain = false and ( ne instanceof IntegerLiteralExpr and t instanceof Builtins::I32 @@ -1201,7 +1357,8 @@ private Type inferLiteralType(LiteralExpr le, TypePath path) { ) or le instanceof BooleanLiteralExpr and - t instanceof Builtins::Bool + t instanceof Builtins::Bool and + certain = true ) or le instanceof StringLiteralExpr and @@ -1210,7 +1367,8 @@ private Type inferLiteralType(LiteralExpr le, TypePath path) { or path = TypePath::singleton(TRefTypeParameter()) and result = getStrStruct() - ) + ) and + certain = true } pragma[nomagic] @@ -2152,62 +2310,73 @@ private module Cached { cached Type inferType(AstNode n, TypePath path) { Stages::TypeInferenceStage::ref() and - result = inferAnnotatedType(n, path) + result = CertainTypeInference::inferCertainType(n, path) or - result = inferLogicalOperationType(n, path) - or - result = inferAssignmentOperationType(n, path) - or - result = inferTypeEquality(n, path) - or - result = inferImplicitSelfType(n, path) - or - result = inferStructExprType(n, path) - or - result = inferTupleRootType(n) and - path.isEmpty() - or - result = inferPathExprType(n, path) - or - result = inferCallExprBaseType(n, path) - or - result = inferFieldExprType(n, path) - or - result = inferTupleIndexExprType(n, path) - or - result = inferTupleContainerExprType(n, path) - or - result = inferRefNodeType(n) and - path.isEmpty() - or - result = inferTryExprType(n, path) - or - result = inferLiteralType(n, path) - or - result = inferAsyncBlockExprRootType(n) and - path.isEmpty() - or - result = inferAwaitExprType(n, path) - or - result = inferArrayExprType(n) and - path.isEmpty() - or - result = inferRangeExprType(n) and - path.isEmpty() - or - result = inferIndexExprType(n, path) - or - result = inferForLoopExprType(n, path) - or - result = inferDynamicCallExprType(n, path) - or - result = inferClosureExprType(n, path) - or - result = inferCastExprType(n, path) - or - result = inferStructPatType(n, path) - or - result = inferTupleStructPatType(n, path) + // Don't propagate type information into a node which conflicts with certain + // type information. + ( + if CertainTypeInference::hasInferredCertainType(n) + then not CertainTypeInference::certainTypeConflict(n, path, result) + else any() + ) and + ( + result = inferAnnotatedType(n, path) + or + result = inferLogicalOperationType(n, path) + or + result = inferAssignmentOperationType(n, path) + or + result = inferTypeEquality(n, path) + or + result = inferImplicitSelfType(n, path) + or + result = inferStructExprType(n, path) + or + result = inferTupleRootType(n) and + path.isEmpty() + or + result = inferPathExprType(n, path) + or + result = inferCallExprBaseType(n, path) + or + result = inferFieldExprType(n, path) + or + result = inferTupleIndexExprType(n, path) + or + result = inferTupleContainerExprType(n, path) + or + result = inferRefNodeType(n) and + path.isEmpty() + or + result = inferTryExprType(n, path) + or + result = inferLiteralType(n, path, false) + or + result = inferAsyncBlockExprRootType(n) and + path.isEmpty() + or + result = inferAwaitExprType(n, path) + or + result = inferArrayExprType(n) and + path.isEmpty() + or + result = inferRangeExprType(n) and + path.isEmpty() + or + result = inferIndexExprType(n, path) + or + result = inferForLoopExprType(n, path) + or + result = inferDynamicCallExprType(n, path) + or + result = inferClosureExprType(n, path) + or + result = inferCastExprType(n, path) + or + result = inferStructPatType(n, path) + or + result = inferTupleStructPatType(n, path) + ) } } @@ -2307,4 +2476,15 @@ private module Debug { c = countTypePaths(n, path, t) and c = max(countTypePaths(_, _, _)) } + + Type debugInferCertainType(AstNode n, TypePath path) { + n = getRelevantLocatable() and + result = CertainTypeInference::inferCertainType(n, path) + } + + Type debugInferCertainNonUniqueType(AstNode n, TypePath path) { + n = getRelevantLocatable() and + Consistency::nonUniqueCertainType(n, path) and + result = CertainTypeInference::inferCertainType(n, path) + } } diff --git a/rust/ql/lib/codeql/rust/internal/TypeInferenceConsistency.qll b/rust/ql/lib/codeql/rust/internal/TypeInferenceConsistency.qll index 5bcfde94d0b..fd6257fc260 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInferenceConsistency.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInferenceConsistency.qll @@ -2,8 +2,10 @@ * Provides classes for recognizing type inference inconsistencies. */ +private import rust private import Type private import TypeMention +private import TypeInference private import TypeInference::Consistency as Consistency import TypeInference::Consistency @@ -27,4 +29,7 @@ int getTypeInferenceInconsistencyCounts(string type) { or type = "Ill-formed type mention" and result = count(TypeMention tm | illFormedTypeMention(tm) | tm) + or + type = "Non-unique certain type information" and + result = count(AstNode n, TypePath path | nonUniqueCertainType(n, path) | n) } diff --git a/rust/ql/lib/codeql/rust/internal/TypeMention.qll b/rust/ql/lib/codeql/rust/internal/TypeMention.qll index b2d2f584207..f7c5f2f25e0 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeMention.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeMention.qll @@ -75,21 +75,7 @@ class SliceTypeReprMention extends TypeMention instanceof SliceTypeRepr { } } -/** Holds if `path` is used as a type mention during type inference. */ -predicate relevantPathTypeMention(Path path) { - path = - [ - any(PathTypeRepr r).getPath(), - any(StructExpr s).getPath().getQualifier*(), - any(CallExpr ce).getFunction().(PathExpr).getPath().getQualifier*(), - any(StructPat p).getPath(), - any(TupleStructPat p).getPath() - ] -} - -abstract class PathTypeMention extends TypeMention, Path { - PathTypeMention() { relevantPathTypeMention(this) } -} +abstract class PathTypeMention extends TypeMention, Path { } class AliasPathTypeMention extends PathTypeMention { TypeAlias resolved; @@ -241,7 +227,8 @@ class NonAliasPathTypeMention extends PathTypeMention { ) } - Type resolveRootType() { + pragma[nomagic] + private Type resolveRootType() { result = TStruct(resolved) or result = TEnum(resolved) diff --git a/rust/ql/lib/codeql/rust/security/CleartextLoggingExtensions.qll b/rust/ql/lib/codeql/rust/security/CleartextLoggingExtensions.qll index 044236bc03c..0961efd553f 100644 --- a/rust/ql/lib/codeql/rust/security/CleartextLoggingExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/CleartextLoggingExtensions.qll @@ -40,6 +40,6 @@ module CleartextLogging { * A sink for logging from model data. */ private class ModelsAsDataSink extends Sink { - ModelsAsDataSink() { exists(string s | sinkNode(this, s) and s.matches("log-injection%")) } + ModelsAsDataSink() { sinkNode(this, "log-injection") } } } diff --git a/rust/ql/lib/codeql/rust/security/CleartextStorageDatabaseExtensions.qll b/rust/ql/lib/codeql/rust/security/CleartextStorageDatabaseExtensions.qll new file mode 100644 index 00000000000..f92b2df1dc0 --- /dev/null +++ b/rust/ql/lib/codeql/rust/security/CleartextStorageDatabaseExtensions.qll @@ -0,0 +1,48 @@ +/** + * Provides classes and predicates for reasoning about cleartext storage + * of sensitive information in a database. + */ + +import rust +private import codeql.rust.dataflow.DataFlow +private import codeql.rust.dataflow.internal.DataFlowImpl +private import codeql.rust.security.SensitiveData +private import codeql.rust.Concepts + +/** + * Provides default sources, sinks and barriers for detecting cleartext storage + * of sensitive information in a database, as well as extension points for + * adding your own. + */ +module CleartextStorageDatabase { + /** + * A data flow source for cleartext storage vulnerabilities. + */ + abstract class Source extends DataFlow::Node { } + + /** + * A data flow sink for cleartext storage vulnerabilities. + */ + abstract class Sink extends QuerySink::Range { + override string getSinkType() { result = "CleartextStorageDatabase" } + } + + /** + * A barrier for cleartext storage vulnerabilities. + */ + abstract class Barrier extends DataFlow::Node { } + + /** + * Sensitive data, considered as a flow source. + */ + private class SensitiveDataAsSource extends Source instanceof SensitiveData { } + + /** + * A sink for cleartext storage vulnerabilities from model data. + * - SQL commands + * - other database storage operations + */ + private class ModelsAsDataSink extends Sink { + ModelsAsDataSink() { sinkNode(this, ["sql-injection", "database-store"]) } + } +} diff --git a/rust/ql/src/change-notes/2025-08-04-cleartext-storage-database.md b/rust/ql/src/change-notes/2025-08-04-cleartext-storage-database.md new file mode 100644 index 00000000000..9aac1d20f45 --- /dev/null +++ b/rust/ql/src/change-notes/2025-08-04-cleartext-storage-database.md @@ -0,0 +1,4 @@ +--- +category: newQuery +--- +* Added a new query, `rust/cleartext-storage-database`, for detecting cases where sensitive information is stored non-encrypted in a database. diff --git a/rust/ql/src/queries/diagnostics/TypeInferenceConsistencyCounts.ql b/rust/ql/src/queries/diagnostics/TypeInferenceConsistencyCounts.ql new file mode 100644 index 00000000000..3a98cef3b81 --- /dev/null +++ b/rust/ql/src/queries/diagnostics/TypeInferenceConsistencyCounts.ql @@ -0,0 +1,14 @@ +/** + * @name Type inference inconsistency counts + * @description Counts the number of type inference inconsistencies of each type. This query is intended for internal use. + * @kind diagnostic + * @id rust/diagnostics/type-inference-consistency-counts + */ + +private import codeql.rust.internal.TypeInferenceConsistency as Consistency + +// see also `rust/diagnostics/type-inference-consistency`, which lists the +// individual inconsistency results. +from string type, int num +where num = Consistency::getTypeInferenceInconsistencyCounts(type) +select type, num diff --git a/rust/ql/src/queries/security/CWE-311/CleartextTransmission.ql b/rust/ql/src/queries/security/CWE-311/CleartextTransmission.ql index 50893753389..50bf96f0573 100644 --- a/rust/ql/src/queries/security/CWE-311/CleartextTransmission.ql +++ b/rust/ql/src/queries/security/CWE-311/CleartextTransmission.ql @@ -48,6 +48,6 @@ import CleartextTransmissionFlow::PathGraph from CleartextTransmissionFlow::PathNode sourceNode, CleartextTransmissionFlow::PathNode sinkNode where CleartextTransmissionFlow::flowPath(sourceNode, sinkNode) select sinkNode.getNode(), sourceNode, sinkNode, - "The operation '" + sinkNode.getNode().toString() + - "', transmits data which may contain unencrypted sensitive data from $@.", sourceNode, + "This '" + sinkNode.getNode().toString() + + "' operation transmits data which may contain unencrypted sensitive data from $@.", sourceNode, sourceNode.getNode().toString() diff --git a/rust/ql/src/queries/security/CWE-312/CleartextStorageDatabase.qhelp b/rust/ql/src/queries/security/CWE-312/CleartextStorageDatabase.qhelp new file mode 100644 index 00000000000..595de607c3e --- /dev/null +++ b/rust/ql/src/queries/security/CWE-312/CleartextStorageDatabase.qhelp @@ -0,0 +1,53 @@ + + + + +

+Sensitive information that is stored unencrypted in a database is accessible to an attacker +who gains access to that database. For example, the information could be accessed by any +process or user in a rooted device, or exposed through another vulnerability. +

+
+ + +

+Either encrypt the entire database, or ensure that each piece of sensitive information is +encrypted before being stored. In general, decrypt sensitive information only at the point +where it is necessary for it to be used in cleartext. Avoid storing sensitive information +at all if you do not need to keep it. +

+
+ + +

+The following example stores sensitive information into a database without encryption, using the +SQLx library: +

+ +

+This is insecure because the sensitive data is stored in cleartext, making it accessible to anyone +with access to the database. +

+

+To fix this, we can either encrypt the entire database or encrypt just the sensitive data before it +is stored. Take care to select a secure modern encryption algorithm and put suitable key management +practices into place. In the following example, we have encrypted the sensitive data using 256-bit +AES before storing it in the database: +

+ +
+ + +
  • + OWASP Top 10:2021: + A02:2021 - Cryptographic Failures. +
  • +
  • + OWASP: + Key Management Cheat Sheet. +
  • + + + diff --git a/rust/ql/src/queries/security/CWE-312/CleartextStorageDatabase.ql b/rust/ql/src/queries/security/CWE-312/CleartextStorageDatabase.ql new file mode 100644 index 00000000000..dd09f2f8f20 --- /dev/null +++ b/rust/ql/src/queries/security/CWE-312/CleartextStorageDatabase.ql @@ -0,0 +1,54 @@ +/** + * @name Cleartext storage of sensitive information in a database + * @description Storing sensitive information in a non-encrypted + * database can expose it to an attacker. + * @kind path-problem + * @problem.severity warning + * @security-severity 7.5 + * @precision high + * @id rust/cleartext-storage-database + * @tags security + * external/cwe/cwe-312 + */ + +import rust +import codeql.rust.dataflow.DataFlow +import codeql.rust.dataflow.TaintTracking +import codeql.rust.security.CleartextStorageDatabaseExtensions + +/** + * A taint configuration from sensitive information to expressions that are + * stored in a database. + */ +module CleartextStorageDatabaseConfig implements DataFlow::ConfigSig { + import CleartextStorageDatabase + + predicate isSource(DataFlow::Node node) { node instanceof Source } + + predicate isSink(DataFlow::Node node) { node instanceof Sink } + + predicate isBarrier(DataFlow::Node barrier) { barrier instanceof Barrier } + + predicate isBarrierIn(DataFlow::Node node) { + // make sources barriers so that we only report the closest instance + isSource(node) + } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + // flow from `a` to `&a` + node2.asExpr().getExpr().(RefExpr).getExpr() = node1.asExpr().getExpr() + } + + predicate observeDiffInformedIncrementalMode() { any() } +} + +module CleartextStorageDatabaseFlow = TaintTracking::Global; + +import CleartextStorageDatabaseFlow::PathGraph + +from + CleartextStorageDatabaseFlow::PathNode sourceNode, CleartextStorageDatabaseFlow::PathNode sinkNode +where CleartextStorageDatabaseFlow::flowPath(sourceNode, sinkNode) +select sinkNode.getNode(), sourceNode, sinkNode, + "This database operation may read or write unencrypted sensitive data from $@.", sourceNode, + sourceNode.getNode().toString() diff --git a/rust/ql/src/queries/security/CWE-312/CleartextStorageDatabaseBad.rs b/rust/ql/src/queries/security/CWE-312/CleartextStorageDatabaseBad.rs new file mode 100644 index 00000000000..cd97f238683 --- /dev/null +++ b/rust/ql/src/queries/security/CWE-312/CleartextStorageDatabaseBad.rs @@ -0,0 +1,6 @@ +let query = "INSERT INTO PAYMENTDETAILS(ID, CARDNUM) VALUES(?, ?)"; +let result = sqlx::query(query) + .bind(id) + .bind(credit_card_number) // BAD: Cleartext storage of sensitive data in the database + .execute(pool) + .await?; diff --git a/rust/ql/src/queries/security/CWE-312/CleartextStorageDatabaseGood.rs b/rust/ql/src/queries/security/CWE-312/CleartextStorageDatabaseGood.rs new file mode 100644 index 00000000000..9ced08bdeb6 --- /dev/null +++ b/rust/ql/src/queries/security/CWE-312/CleartextStorageDatabaseGood.rs @@ -0,0 +1,41 @@ +fn encrypt(text: String, encryption_key: &aes_gcm::Key) -> String { + // encrypt text -> ciphertext + let cipher = Aes256Gcm::new(&encryption_key); + let nonce = Aes256Gcm::generate_nonce(&mut OsRng); + let ciphertext = cipher.encrypt(&nonce, text.as_ref()).unwrap(); + + // append (nonce, ciphertext) + let mut combined = nonce.to_vec(); + combined.extend(ciphertext); + + // encode to base64 string + BASE64_STANDARD.encode(combined) +} + +fn decrypt(data: String, encryption_key: &aes_gcm::Key) -> String { + let cipher = Aes256Gcm::new(&encryption_key); + + // decode base64 string + let decoded = BASE64_STANDARD.decode(data).unwrap(); + + // split into (nonce, ciphertext) + let nonce_size = ::NonceSize::to_usize(); + let (nonce, ciphertext) = decoded.split_at(nonce_size); + + // decrypt ciphertext -> plaintext + let plaintext = cipher.decrypt(nonce.into(), ciphertext).unwrap(); + String::from_utf8(plaintext).unwrap() +} + +... + +let encryption_key = Aes256Gcm::generate_key(OsRng); + +... + +let query = "INSERT INTO PAYMENTDETAILS(ID, CARDNUM) VALUES(?, ?)"; +let result = sqlx::query(query) + .bind(id) + .bind(encrypt(credit_card_number, &encryption_key)) // GOOD: Encrypted storage of sensitive data in the database + .execute(pool) + .await?; diff --git a/rust/ql/src/queries/security/CWE-696/BadCtorInitialization.ql b/rust/ql/src/queries/security/CWE-696/BadCtorInitialization.ql index 80e1043a979..f0f7cdf0d98 100644 --- a/rust/ql/src/queries/security/CWE-696/BadCtorInitialization.ql +++ b/rust/ql/src/queries/security/CWE-696/BadCtorInitialization.ql @@ -32,8 +32,7 @@ class CtorAttr extends Attr { */ class StdCall extends Expr { StdCall() { - this.(CallExpr).getFunction().(PathExpr).getResolvedCrateOrigin() = "lang:std" or - this.(MethodCallExpr).getResolvedCrateOrigin() = "lang:std" + this.(CallExprBase).getStaticTarget().getCanonicalPath().matches(["std::%", " + where + Self: Trait1, // $ item=ITrait3 item=I79 + TT: Trait1, // $ item=ITT item=I79 + { + fn f(&self, tt: TT) { // $ item=ITT + Self::g(self); // $ item=I80 + TT::g(&tt); // $ item=I80 + self.g(); // $ item=I80 + } + } // ITrait3 + struct S; // I81 #[rustfmt::skip] diff --git a/rust/ql/test/library-tests/path-resolution/path-resolution.expected b/rust/ql/test/library-tests/path-resolution/path-resolution.expected index 99cb6f8168c..0eb100542b5 100644 --- a/rust/ql/test/library-tests/path-resolution/path-resolution.expected +++ b/rust/ql/test/library-tests/path-resolution/path-resolution.expected @@ -17,18 +17,18 @@ mod | main.rs:269:1:281:1 | mod m12 | | main.rs:283:1:296:1 | mod m13 | | main.rs:287:5:295:5 | mod m14 | -| main.rs:298:1:352:1 | mod m15 | -| main.rs:354:1:446:1 | mod m16 | -| main.rs:448:1:478:1 | mod m17 | -| main.rs:480:1:498:1 | mod m18 | -| main.rs:485:5:497:5 | mod m19 | -| main.rs:490:9:496:9 | mod m20 | -| main.rs:500:1:525:1 | mod m21 | -| main.rs:501:5:507:5 | mod m22 | -| main.rs:509:5:524:5 | mod m33 | -| main.rs:527:1:552:1 | mod m23 | -| main.rs:554:1:622:1 | mod m24 | -| main.rs:639:1:691:1 | mod associated_types | +| main.rs:298:1:367:1 | mod m15 | +| main.rs:369:1:461:1 | mod m16 | +| main.rs:463:1:493:1 | mod m17 | +| main.rs:495:1:513:1 | mod m18 | +| main.rs:500:5:512:5 | mod m19 | +| main.rs:505:9:511:9 | mod m20 | +| main.rs:515:1:540:1 | mod m21 | +| main.rs:516:5:522:5 | mod m22 | +| main.rs:524:5:539:5 | mod m33 | +| main.rs:542:1:567:1 | mod m23 | +| main.rs:569:1:637:1 | mod m24 | +| main.rs:654:1:706:1 | mod associated_types | | my2/mod.rs:1:1:1:16 | mod nested2 | | my2/mod.rs:12:1:12:12 | mod my3 | | my2/mod.rs:14:1:15:10 | mod mymod | @@ -62,7 +62,7 @@ resolvePath | main.rs:30:17:30:21 | super | main.rs:18:5:36:5 | mod m2 | | main.rs:30:17:30:24 | ...::f | main.rs:19:9:21:9 | fn f | | main.rs:33:17:33:17 | f | main.rs:19:9:21:9 | fn f | -| main.rs:40:9:40:13 | super | main.rs:1:1:731:2 | SourceFile | +| main.rs:40:9:40:13 | super | main.rs:1:1:746:2 | SourceFile | | main.rs:40:9:40:17 | ...::m1 | main.rs:13:1:37:1 | mod m1 | | main.rs:40:9:40:21 | ...::m2 | main.rs:18:5:36:5 | mod m2 | | main.rs:40:9:40:24 | ...::g | main.rs:23:9:27:9 | fn g | @@ -74,7 +74,7 @@ resolvePath | main.rs:61:17:61:19 | Foo | main.rs:59:9:59:21 | struct Foo | | main.rs:64:13:64:15 | Foo | main.rs:53:5:53:17 | struct Foo | | main.rs:66:5:66:5 | f | main.rs:55:5:62:5 | fn f | -| main.rs:68:5:68:8 | self | main.rs:1:1:731:2 | SourceFile | +| main.rs:68:5:68:8 | self | main.rs:1:1:746:2 | SourceFile | | main.rs:68:5:68:11 | ...::i | main.rs:71:1:83:1 | fn i | | main.rs:74:13:74:15 | Foo | main.rs:48:1:48:13 | struct Foo | | main.rs:78:16:78:18 | i32 | {EXTERNAL LOCATION} | struct i32 | @@ -89,7 +89,7 @@ resolvePath | main.rs:87:57:87:66 | ...::g | my2/nested2.rs:7:9:9:9 | fn g | | main.rs:87:80:87:86 | nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | | main.rs:100:5:100:22 | f_defined_in_macro | main.rs:99:18:99:42 | fn f_defined_in_macro | -| main.rs:117:13:117:17 | super | main.rs:1:1:731:2 | SourceFile | +| main.rs:117:13:117:17 | super | main.rs:1:1:746:2 | SourceFile | | main.rs:117:13:117:21 | ...::m5 | main.rs:103:1:107:1 | mod m5 | | main.rs:118:9:118:9 | f | main.rs:104:5:106:5 | fn f | | main.rs:118:9:118:9 | f | main.rs:110:5:112:5 | fn f | @@ -156,230 +156,239 @@ resolvePath | main.rs:307:9:307:14 | Trait1 | main.rs:299:5:303:5 | trait Trait1 | | main.rs:310:13:310:16 | Self | main.rs:305:5:313:5 | trait Trait2 | | main.rs:310:13:310:19 | ...::g | main.rs:302:9:302:20 | fn g | -| main.rs:318:10:318:15 | Trait1 | main.rs:299:5:303:5 | trait Trait1 | -| main.rs:319:11:319:11 | S | main.rs:315:5:315:13 | struct S | -| main.rs:322:13:322:16 | Self | main.rs:317:5:329:5 | impl Trait1 for S { ... } | -| main.rs:322:13:322:19 | ...::g | main.rs:326:9:328:9 | fn g | -| main.rs:332:10:332:15 | Trait2 | main.rs:305:5:313:5 | trait Trait2 | -| main.rs:333:11:333:11 | S | main.rs:315:5:315:13 | struct S | -| main.rs:342:17:342:17 | S | main.rs:315:5:315:13 | struct S | -| main.rs:343:10:343:10 | S | main.rs:315:5:315:13 | struct S | -| main.rs:344:14:344:19 | Trait1 | main.rs:299:5:303:5 | trait Trait1 | -| main.rs:346:10:346:10 | S | main.rs:315:5:315:13 | struct S | -| main.rs:347:14:347:19 | Trait2 | main.rs:305:5:313:5 | trait Trait2 | -| main.rs:349:9:349:9 | S | main.rs:315:5:315:13 | struct S | -| main.rs:349:9:349:12 | ...::g | main.rs:326:9:328:9 | fn g | -| main.rs:359:24:359:24 | T | main.rs:357:7:357:7 | T | -| main.rs:361:24:361:24 | T | main.rs:357:7:357:7 | T | -| main.rs:364:24:364:24 | T | main.rs:357:7:357:7 | T | -| main.rs:365:13:365:16 | Self | main.rs:355:5:371:5 | trait Trait1 | -| main.rs:365:13:365:19 | ...::g | main.rs:361:9:362:9 | fn g | -| main.rs:369:18:369:18 | T | main.rs:357:7:357:7 | T | -| main.rs:377:9:379:9 | Trait1::<...> | main.rs:355:5:371:5 | trait Trait1 | -| main.rs:378:11:378:11 | T | main.rs:375:7:375:7 | T | -| main.rs:380:24:380:24 | T | main.rs:375:7:375:7 | T | -| main.rs:382:13:382:16 | Self | main.rs:373:5:386:5 | trait Trait2 | -| main.rs:382:13:382:19 | ...::g | main.rs:361:9:362:9 | fn g | -| main.rs:384:13:384:16 | Self | main.rs:373:5:386:5 | trait Trait2 | -| main.rs:384:13:384:19 | ...::c | main.rs:369:9:370:9 | Const | -| main.rs:391:10:393:5 | Trait1::<...> | main.rs:355:5:371:5 | trait Trait1 | -| main.rs:392:7:392:7 | S | main.rs:388:5:388:13 | struct S | -| main.rs:394:11:394:11 | S | main.rs:388:5:388:13 | struct S | -| main.rs:395:24:395:24 | S | main.rs:388:5:388:13 | struct S | -| main.rs:397:13:397:16 | Self | main.rs:390:5:408:5 | impl Trait1::<...> for S { ... } | -| main.rs:397:13:397:19 | ...::g | main.rs:401:9:404:9 | fn g | -| main.rs:401:24:401:24 | S | main.rs:388:5:388:13 | struct S | -| main.rs:403:13:403:16 | Self | main.rs:390:5:408:5 | impl Trait1::<...> for S { ... } | -| main.rs:403:13:403:19 | ...::c | main.rs:406:9:407:9 | Const | -| main.rs:406:18:406:18 | S | main.rs:388:5:388:13 | struct S | -| main.rs:406:22:406:22 | S | main.rs:388:5:388:13 | struct S | -| main.rs:411:10:413:5 | Trait2::<...> | main.rs:373:5:386:5 | trait Trait2 | -| main.rs:412:7:412:7 | S | main.rs:388:5:388:13 | struct S | -| main.rs:414:11:414:11 | S | main.rs:388:5:388:13 | struct S | -| main.rs:415:24:415:24 | S | main.rs:388:5:388:13 | struct S | -| main.rs:417:13:417:16 | Self | main.rs:410:5:419:5 | impl Trait2::<...> for S { ... } | -| main.rs:424:17:424:17 | S | main.rs:388:5:388:13 | struct S | -| main.rs:425:10:425:10 | S | main.rs:388:5:388:13 | struct S | -| main.rs:426:14:428:11 | Trait1::<...> | main.rs:355:5:371:5 | trait Trait1 | -| main.rs:427:13:427:13 | S | main.rs:388:5:388:13 | struct S | -| main.rs:430:10:430:10 | S | main.rs:388:5:388:13 | struct S | -| main.rs:431:14:433:11 | Trait2::<...> | main.rs:373:5:386:5 | trait Trait2 | -| main.rs:432:13:432:13 | S | main.rs:388:5:388:13 | struct S | -| main.rs:435:9:435:9 | S | main.rs:388:5:388:13 | struct S | -| main.rs:435:9:435:12 | ...::g | main.rs:401:9:404:9 | fn g | -| main.rs:437:9:437:9 | S | main.rs:388:5:388:13 | struct S | -| main.rs:437:9:437:12 | ...::h | main.rs:364:9:367:9 | fn h | -| main.rs:439:9:439:9 | S | main.rs:388:5:388:13 | struct S | -| main.rs:439:9:439:12 | ...::c | main.rs:406:9:407:9 | Const | -| main.rs:440:10:440:10 | S | main.rs:388:5:388:13 | struct S | -| main.rs:441:14:443:11 | Trait1::<...> | main.rs:355:5:371:5 | trait Trait1 | -| main.rs:442:13:442:13 | S | main.rs:388:5:388:13 | struct S | -| main.rs:456:10:456:16 | MyTrait | main.rs:449:5:451:5 | trait MyTrait | -| main.rs:457:9:457:9 | S | main.rs:453:5:453:13 | struct S | -| main.rs:465:7:465:13 | MyTrait | main.rs:449:5:451:5 | trait MyTrait | -| main.rs:466:10:466:10 | T | main.rs:464:10:464:10 | T | -| main.rs:468:9:468:9 | T | main.rs:464:10:464:10 | T | -| main.rs:468:9:468:12 | ...::f | main.rs:450:9:450:20 | fn f | -| main.rs:469:9:469:15 | MyTrait | main.rs:449:5:451:5 | trait MyTrait | -| main.rs:469:9:469:18 | ...::f | main.rs:450:9:450:20 | fn f | -| main.rs:474:9:474:9 | g | main.rs:463:5:470:5 | fn g | -| main.rs:475:11:475:11 | S | main.rs:453:5:453:13 | struct S | -| main.rs:493:17:493:21 | super | main.rs:485:5:497:5 | mod m19 | -| main.rs:493:17:493:24 | ...::f | main.rs:486:9:488:9 | fn f | -| main.rs:494:17:494:21 | super | main.rs:485:5:497:5 | mod m19 | -| main.rs:494:17:494:28 | ...::super | main.rs:480:1:498:1 | mod m18 | -| main.rs:494:17:494:31 | ...::f | main.rs:481:5:483:5 | fn f | -| main.rs:511:13:511:17 | super | main.rs:500:1:525:1 | mod m21 | -| main.rs:511:13:511:22 | ...::m22 | main.rs:501:5:507:5 | mod m22 | -| main.rs:511:13:511:30 | ...::MyEnum | main.rs:502:9:504:9 | enum MyEnum | -| main.rs:512:13:512:16 | self | main.rs:502:9:504:9 | enum MyEnum | -| main.rs:516:13:516:17 | super | main.rs:500:1:525:1 | mod m21 | -| main.rs:516:13:516:22 | ...::m22 | main.rs:501:5:507:5 | mod m22 | -| main.rs:516:13:516:32 | ...::MyStruct | main.rs:506:9:506:28 | struct MyStruct | -| main.rs:517:13:517:16 | self | main.rs:506:9:506:28 | struct MyStruct | -| main.rs:521:21:521:26 | MyEnum | main.rs:502:9:504:9 | enum MyEnum | -| main.rs:521:21:521:29 | ...::A | main.rs:503:13:503:13 | A | -| main.rs:522:21:522:28 | MyStruct | main.rs:506:9:506:28 | struct MyStruct | -| main.rs:538:10:540:5 | Trait1::<...> | main.rs:528:5:533:5 | trait Trait1 | -| main.rs:539:7:539:10 | Self | main.rs:535:5:535:13 | struct S | -| main.rs:541:11:541:11 | S | main.rs:535:5:535:13 | struct S | -| main.rs:549:17:549:17 | S | main.rs:535:5:535:13 | struct S | -| main.rs:565:15:565:15 | T | main.rs:564:26:564:26 | T | -| main.rs:570:9:570:24 | GenericStruct::<...> | main.rs:563:5:566:5 | struct GenericStruct | -| main.rs:570:23:570:23 | T | main.rs:569:10:569:10 | T | -| main.rs:572:9:572:9 | T | main.rs:569:10:569:10 | T | -| main.rs:572:12:572:17 | TraitA | main.rs:555:5:557:5 | trait TraitA | -| main.rs:581:9:581:24 | GenericStruct::<...> | main.rs:563:5:566:5 | struct GenericStruct | -| main.rs:581:23:581:23 | T | main.rs:580:10:580:10 | T | -| main.rs:583:9:583:9 | T | main.rs:580:10:580:10 | T | -| main.rs:583:12:583:17 | TraitB | main.rs:559:5:561:5 | trait TraitB | -| main.rs:584:9:584:9 | T | main.rs:580:10:580:10 | T | -| main.rs:584:12:584:17 | TraitA | main.rs:555:5:557:5 | trait TraitA | -| main.rs:595:10:595:15 | TraitA | main.rs:555:5:557:5 | trait TraitA | -| main.rs:595:21:595:31 | Implementor | main.rs:592:5:592:23 | struct Implementor | -| main.rs:602:10:602:15 | TraitB | main.rs:559:5:561:5 | trait TraitB | -| main.rs:602:21:602:31 | Implementor | main.rs:592:5:592:23 | struct Implementor | -| main.rs:610:24:610:34 | Implementor | main.rs:592:5:592:23 | struct Implementor | -| main.rs:611:23:611:35 | GenericStruct | main.rs:563:5:566:5 | struct GenericStruct | -| main.rs:617:9:617:36 | GenericStruct::<...> | main.rs:563:5:566:5 | struct GenericStruct | -| main.rs:617:9:617:50 | ...::call_trait_a | main.rs:574:9:576:9 | fn call_trait_a | -| main.rs:617:25:617:35 | Implementor | main.rs:592:5:592:23 | struct Implementor | -| main.rs:620:9:620:36 | GenericStruct::<...> | main.rs:563:5:566:5 | struct GenericStruct | -| main.rs:620:9:620:47 | ...::call_both | main.rs:586:9:589:9 | fn call_both | -| main.rs:620:25:620:35 | Implementor | main.rs:592:5:592:23 | struct Implementor | -| main.rs:626:3:626:12 | proc_macro | {EXTERNAL LOCATION} | Crate(proc_macro@0.0.0) | -| main.rs:626:3:626:12 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | -| main.rs:626:3:626:24 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix | -| main.rs:630:6:630:12 | AStruct | main.rs:629:1:629:17 | struct AStruct | -| main.rs:632:7:632:16 | proc_macro | {EXTERNAL LOCATION} | Crate(proc_macro@0.0.0) | -| main.rs:632:7:632:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | -| main.rs:632:7:632:28 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix | -| main.rs:635:7:635:16 | proc_macro | {EXTERNAL LOCATION} | Crate(proc_macro@0.0.0) | -| main.rs:635:7:635:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | -| main.rs:635:7:635:28 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix | -| main.rs:640:9:640:11 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | -| main.rs:640:9:640:19 | ...::marker | {EXTERNAL LOCATION} | mod marker | -| main.rs:640:9:640:32 | ...::PhantomData | {EXTERNAL LOCATION} | struct PhantomData | -| main.rs:641:9:641:11 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | -| main.rs:641:9:641:19 | ...::result | {EXTERNAL LOCATION} | mod result | -| main.rs:641:9:641:27 | ...::Result | {EXTERNAL LOCATION} | enum Result | -| main.rs:649:19:649:22 | Self | main.rs:643:5:651:5 | trait Reduce | -| main.rs:649:19:649:29 | ...::Input | main.rs:644:9:644:19 | type Input | -| main.rs:650:14:650:46 | Result::<...> | {EXTERNAL LOCATION} | enum Result | -| main.rs:650:21:650:24 | Self | main.rs:643:5:651:5 | trait Reduce | -| main.rs:650:21:650:32 | ...::Output | main.rs:645:21:646:20 | type Output | -| main.rs:650:35:650:38 | Self | main.rs:643:5:651:5 | trait Reduce | -| main.rs:650:35:650:45 | ...::Error | main.rs:644:21:645:19 | type Error | -| main.rs:654:17:654:34 | PhantomData::<...> | {EXTERNAL LOCATION} | struct PhantomData | -| main.rs:654:29:654:33 | Input | main.rs:653:19:653:23 | Input | -| main.rs:655:17:655:34 | PhantomData::<...> | {EXTERNAL LOCATION} | struct PhantomData | -| main.rs:655:29:655:33 | Error | main.rs:653:26:653:30 | Error | -| main.rs:662:11:662:16 | Reduce | main.rs:643:5:651:5 | trait Reduce | -| main.rs:663:13:666:9 | MyImpl::<...> | main.rs:653:5:656:5 | struct MyImpl | -| main.rs:664:13:664:17 | Input | main.rs:660:13:660:17 | Input | -| main.rs:665:13:665:17 | Error | main.rs:661:13:661:17 | Error | -| main.rs:668:22:671:9 | Result::<...> | {EXTERNAL LOCATION} | enum Result | -| main.rs:669:13:669:17 | Input | main.rs:660:13:660:17 | Input | -| main.rs:670:13:670:16 | Self | main.rs:658:5:690:5 | impl Reduce for MyImpl::<...> { ... } | -| main.rs:670:13:670:23 | ...::Error | main.rs:672:11:676:9 | type Error | -| main.rs:673:22:675:9 | Option::<...> | {EXTERNAL LOCATION} | enum Option | -| main.rs:674:11:674:15 | Error | main.rs:661:13:661:17 | Error | -| main.rs:678:13:678:17 | Input | main.rs:660:13:660:17 | Input | -| main.rs:683:19:683:22 | Self | main.rs:658:5:690:5 | impl Reduce for MyImpl::<...> { ... } | -| main.rs:683:19:683:29 | ...::Input | main.rs:668:9:672:9 | type Input | -| main.rs:684:14:687:9 | Result::<...> | {EXTERNAL LOCATION} | enum Result | -| main.rs:685:13:685:16 | Self | main.rs:658:5:690:5 | impl Reduce for MyImpl::<...> { ... } | -| main.rs:685:13:685:24 | ...::Output | main.rs:676:11:679:9 | type Output | -| main.rs:686:13:686:16 | Self | main.rs:658:5:690:5 | impl Reduce for MyImpl::<...> { ... } | -| main.rs:686:13:686:23 | ...::Error | main.rs:672:11:676:9 | type Error | -| main.rs:693:5:693:7 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | -| main.rs:693:11:693:14 | self | {EXTERNAL LOCATION} | Crate(std@0.0.0) | -| main.rs:695:15:695:17 | ztd | {EXTERNAL LOCATION} | Crate(std@0.0.0) | -| main.rs:695:15:695:25 | ...::string | {EXTERNAL LOCATION} | mod string | -| main.rs:695:15:695:33 | ...::String | {EXTERNAL LOCATION} | struct String | -| main.rs:698:5:698:6 | my | main.rs:1:1:1:7 | mod my | -| main.rs:698:5:698:14 | ...::nested | my.rs:1:1:1:15 | mod nested | -| main.rs:698:5:698:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 | -| main.rs:698:5:698:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 | -| main.rs:698:5:698:35 | ...::f | my/nested.rs:3:9:5:9 | fn f | -| main.rs:699:5:699:6 | my | main.rs:1:1:1:7 | mod my | -| main.rs:699:5:699:9 | ...::f | my.rs:5:1:7:1 | fn f | -| main.rs:700:5:700:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | -| main.rs:700:5:700:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | -| main.rs:700:5:700:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | -| main.rs:700:5:700:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:701:5:701:5 | f | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:702:5:702:5 | g | my2/nested2.rs:7:9:9:9 | fn g | -| main.rs:703:5:703:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) | -| main.rs:703:5:703:12 | ...::h | main.rs:50:1:69:1 | fn h | -| main.rs:704:5:704:6 | m1 | main.rs:13:1:37:1 | mod m1 | -| main.rs:704:5:704:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | -| main.rs:704:5:704:13 | ...::g | main.rs:23:9:27:9 | fn g | -| main.rs:705:5:705:6 | m1 | main.rs:13:1:37:1 | mod m1 | -| main.rs:705:5:705:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | -| main.rs:705:5:705:14 | ...::m3 | main.rs:29:9:35:9 | mod m3 | -| main.rs:705:5:705:17 | ...::h | main.rs:30:27:34:13 | fn h | -| main.rs:706:5:706:6 | m4 | main.rs:39:1:46:1 | mod m4 | -| main.rs:706:5:706:9 | ...::i | main.rs:42:5:45:5 | fn i | -| main.rs:707:5:707:5 | h | main.rs:50:1:69:1 | fn h | -| main.rs:708:5:708:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:709:5:709:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g | -| main.rs:710:5:710:5 | j | main.rs:97:1:101:1 | fn j | -| main.rs:711:5:711:6 | m6 | main.rs:109:1:120:1 | mod m6 | -| main.rs:711:5:711:9 | ...::g | main.rs:114:5:119:5 | fn g | -| main.rs:712:5:712:6 | m7 | main.rs:122:1:141:1 | mod m7 | -| main.rs:712:5:712:9 | ...::f | main.rs:133:5:140:5 | fn f | -| main.rs:713:5:713:6 | m8 | main.rs:143:1:197:1 | mod m8 | -| main.rs:713:5:713:9 | ...::g | main.rs:181:5:196:5 | fn g | -| main.rs:714:5:714:6 | m9 | main.rs:199:1:207:1 | mod m9 | -| main.rs:714:5:714:9 | ...::f | main.rs:202:5:206:5 | fn f | -| main.rs:715:5:715:7 | m11 | main.rs:230:1:267:1 | mod m11 | -| main.rs:715:5:715:10 | ...::f | main.rs:235:5:238:5 | fn f | -| main.rs:716:5:716:7 | m15 | main.rs:298:1:352:1 | mod m15 | -| main.rs:716:5:716:10 | ...::f | main.rs:339:5:351:5 | fn f | -| main.rs:717:5:717:7 | m16 | main.rs:354:1:446:1 | mod m16 | -| main.rs:717:5:717:10 | ...::f | main.rs:421:5:445:5 | fn f | -| main.rs:718:5:718:7 | m17 | main.rs:448:1:478:1 | mod m17 | -| main.rs:718:5:718:10 | ...::f | main.rs:472:5:477:5 | fn f | -| main.rs:719:5:719:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 | -| main.rs:719:5:719:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f | -| main.rs:720:5:720:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 | -| main.rs:720:5:720:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f | -| main.rs:721:5:721:7 | my3 | my2/mod.rs:12:1:12:12 | mod my3 | -| main.rs:721:5:721:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f | -| main.rs:722:5:722:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f | -| main.rs:723:5:723:7 | m18 | main.rs:480:1:498:1 | mod m18 | -| main.rs:723:5:723:12 | ...::m19 | main.rs:485:5:497:5 | mod m19 | -| main.rs:723:5:723:17 | ...::m20 | main.rs:490:9:496:9 | mod m20 | -| main.rs:723:5:723:20 | ...::g | main.rs:491:13:495:13 | fn g | -| main.rs:724:5:724:7 | m23 | main.rs:527:1:552:1 | mod m23 | -| main.rs:724:5:724:10 | ...::f | main.rs:547:5:551:5 | fn f | -| main.rs:725:5:725:7 | m24 | main.rs:554:1:622:1 | mod m24 | -| main.rs:725:5:725:10 | ...::f | main.rs:608:5:621:5 | fn f | -| main.rs:726:5:726:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) | -| main.rs:726:5:726:11 | ...::h | main.rs:50:1:69:1 | fn h | -| main.rs:728:5:728:11 | AStruct | main.rs:629:1:629:17 | struct AStruct | -| main.rs:729:5:729:11 | AStruct | main.rs:629:1:629:17 | struct AStruct | +| main.rs:320:9:320:12 | Self | main.rs:315:5:328:5 | trait Trait3 | +| main.rs:320:15:320:20 | Trait1 | main.rs:299:5:303:5 | trait Trait1 | +| main.rs:321:9:321:10 | TT | main.rs:317:9:317:10 | TT | +| main.rs:321:13:321:18 | Trait1 | main.rs:299:5:303:5 | trait Trait1 | +| main.rs:323:25:323:26 | TT | main.rs:317:9:317:10 | TT | +| main.rs:324:13:324:16 | Self | main.rs:315:5:328:5 | trait Trait3 | +| main.rs:324:13:324:19 | ...::g | main.rs:302:9:302:20 | fn g | +| main.rs:325:13:325:14 | TT | main.rs:317:9:317:10 | TT | +| main.rs:325:13:325:17 | ...::g | main.rs:302:9:302:20 | fn g | +| main.rs:333:10:333:15 | Trait1 | main.rs:299:5:303:5 | trait Trait1 | +| main.rs:334:11:334:11 | S | main.rs:330:5:330:13 | struct S | +| main.rs:337:13:337:16 | Self | main.rs:332:5:344:5 | impl Trait1 for S { ... } | +| main.rs:337:13:337:19 | ...::g | main.rs:341:9:343:9 | fn g | +| main.rs:347:10:347:15 | Trait2 | main.rs:305:5:313:5 | trait Trait2 | +| main.rs:348:11:348:11 | S | main.rs:330:5:330:13 | struct S | +| main.rs:357:17:357:17 | S | main.rs:330:5:330:13 | struct S | +| main.rs:358:10:358:10 | S | main.rs:330:5:330:13 | struct S | +| main.rs:359:14:359:19 | Trait1 | main.rs:299:5:303:5 | trait Trait1 | +| main.rs:361:10:361:10 | S | main.rs:330:5:330:13 | struct S | +| main.rs:362:14:362:19 | Trait2 | main.rs:305:5:313:5 | trait Trait2 | +| main.rs:364:9:364:9 | S | main.rs:330:5:330:13 | struct S | +| main.rs:364:9:364:12 | ...::g | main.rs:341:9:343:9 | fn g | +| main.rs:374:24:374:24 | T | main.rs:372:7:372:7 | T | +| main.rs:376:24:376:24 | T | main.rs:372:7:372:7 | T | +| main.rs:379:24:379:24 | T | main.rs:372:7:372:7 | T | +| main.rs:380:13:380:16 | Self | main.rs:370:5:386:5 | trait Trait1 | +| main.rs:380:13:380:19 | ...::g | main.rs:376:9:377:9 | fn g | +| main.rs:384:18:384:18 | T | main.rs:372:7:372:7 | T | +| main.rs:392:9:394:9 | Trait1::<...> | main.rs:370:5:386:5 | trait Trait1 | +| main.rs:393:11:393:11 | T | main.rs:390:7:390:7 | T | +| main.rs:395:24:395:24 | T | main.rs:390:7:390:7 | T | +| main.rs:397:13:397:16 | Self | main.rs:388:5:401:5 | trait Trait2 | +| main.rs:397:13:397:19 | ...::g | main.rs:376:9:377:9 | fn g | +| main.rs:399:13:399:16 | Self | main.rs:388:5:401:5 | trait Trait2 | +| main.rs:399:13:399:19 | ...::c | main.rs:384:9:385:9 | Const | +| main.rs:406:10:408:5 | Trait1::<...> | main.rs:370:5:386:5 | trait Trait1 | +| main.rs:407:7:407:7 | S | main.rs:403:5:403:13 | struct S | +| main.rs:409:11:409:11 | S | main.rs:403:5:403:13 | struct S | +| main.rs:410:24:410:24 | S | main.rs:403:5:403:13 | struct S | +| main.rs:412:13:412:16 | Self | main.rs:405:5:423:5 | impl Trait1::<...> for S { ... } | +| main.rs:412:13:412:19 | ...::g | main.rs:416:9:419:9 | fn g | +| main.rs:416:24:416:24 | S | main.rs:403:5:403:13 | struct S | +| main.rs:418:13:418:16 | Self | main.rs:405:5:423:5 | impl Trait1::<...> for S { ... } | +| main.rs:418:13:418:19 | ...::c | main.rs:421:9:422:9 | Const | +| main.rs:421:18:421:18 | S | main.rs:403:5:403:13 | struct S | +| main.rs:421:22:421:22 | S | main.rs:403:5:403:13 | struct S | +| main.rs:426:10:428:5 | Trait2::<...> | main.rs:388:5:401:5 | trait Trait2 | +| main.rs:427:7:427:7 | S | main.rs:403:5:403:13 | struct S | +| main.rs:429:11:429:11 | S | main.rs:403:5:403:13 | struct S | +| main.rs:430:24:430:24 | S | main.rs:403:5:403:13 | struct S | +| main.rs:432:13:432:16 | Self | main.rs:425:5:434:5 | impl Trait2::<...> for S { ... } | +| main.rs:439:17:439:17 | S | main.rs:403:5:403:13 | struct S | +| main.rs:440:10:440:10 | S | main.rs:403:5:403:13 | struct S | +| main.rs:441:14:443:11 | Trait1::<...> | main.rs:370:5:386:5 | trait Trait1 | +| main.rs:442:13:442:13 | S | main.rs:403:5:403:13 | struct S | +| main.rs:445:10:445:10 | S | main.rs:403:5:403:13 | struct S | +| main.rs:446:14:448:11 | Trait2::<...> | main.rs:388:5:401:5 | trait Trait2 | +| main.rs:447:13:447:13 | S | main.rs:403:5:403:13 | struct S | +| main.rs:450:9:450:9 | S | main.rs:403:5:403:13 | struct S | +| main.rs:450:9:450:12 | ...::g | main.rs:416:9:419:9 | fn g | +| main.rs:452:9:452:9 | S | main.rs:403:5:403:13 | struct S | +| main.rs:452:9:452:12 | ...::h | main.rs:379:9:382:9 | fn h | +| main.rs:454:9:454:9 | S | main.rs:403:5:403:13 | struct S | +| main.rs:454:9:454:12 | ...::c | main.rs:421:9:422:9 | Const | +| main.rs:455:10:455:10 | S | main.rs:403:5:403:13 | struct S | +| main.rs:456:14:458:11 | Trait1::<...> | main.rs:370:5:386:5 | trait Trait1 | +| main.rs:457:13:457:13 | S | main.rs:403:5:403:13 | struct S | +| main.rs:471:10:471:16 | MyTrait | main.rs:464:5:466:5 | trait MyTrait | +| main.rs:472:9:472:9 | S | main.rs:468:5:468:13 | struct S | +| main.rs:480:7:480:13 | MyTrait | main.rs:464:5:466:5 | trait MyTrait | +| main.rs:481:10:481:10 | T | main.rs:479:10:479:10 | T | +| main.rs:483:9:483:9 | T | main.rs:479:10:479:10 | T | +| main.rs:483:9:483:12 | ...::f | main.rs:465:9:465:20 | fn f | +| main.rs:484:9:484:15 | MyTrait | main.rs:464:5:466:5 | trait MyTrait | +| main.rs:484:9:484:18 | ...::f | main.rs:465:9:465:20 | fn f | +| main.rs:489:9:489:9 | g | main.rs:478:5:485:5 | fn g | +| main.rs:490:11:490:11 | S | main.rs:468:5:468:13 | struct S | +| main.rs:508:17:508:21 | super | main.rs:500:5:512:5 | mod m19 | +| main.rs:508:17:508:24 | ...::f | main.rs:501:9:503:9 | fn f | +| main.rs:509:17:509:21 | super | main.rs:500:5:512:5 | mod m19 | +| main.rs:509:17:509:28 | ...::super | main.rs:495:1:513:1 | mod m18 | +| main.rs:509:17:509:31 | ...::f | main.rs:496:5:498:5 | fn f | +| main.rs:526:13:526:17 | super | main.rs:515:1:540:1 | mod m21 | +| main.rs:526:13:526:22 | ...::m22 | main.rs:516:5:522:5 | mod m22 | +| main.rs:526:13:526:30 | ...::MyEnum | main.rs:517:9:519:9 | enum MyEnum | +| main.rs:527:13:527:16 | self | main.rs:517:9:519:9 | enum MyEnum | +| main.rs:531:13:531:17 | super | main.rs:515:1:540:1 | mod m21 | +| main.rs:531:13:531:22 | ...::m22 | main.rs:516:5:522:5 | mod m22 | +| main.rs:531:13:531:32 | ...::MyStruct | main.rs:521:9:521:28 | struct MyStruct | +| main.rs:532:13:532:16 | self | main.rs:521:9:521:28 | struct MyStruct | +| main.rs:536:21:536:26 | MyEnum | main.rs:517:9:519:9 | enum MyEnum | +| main.rs:536:21:536:29 | ...::A | main.rs:518:13:518:13 | A | +| main.rs:537:21:537:28 | MyStruct | main.rs:521:9:521:28 | struct MyStruct | +| main.rs:553:10:555:5 | Trait1::<...> | main.rs:543:5:548:5 | trait Trait1 | +| main.rs:554:7:554:10 | Self | main.rs:550:5:550:13 | struct S | +| main.rs:556:11:556:11 | S | main.rs:550:5:550:13 | struct S | +| main.rs:564:17:564:17 | S | main.rs:550:5:550:13 | struct S | +| main.rs:580:15:580:15 | T | main.rs:579:26:579:26 | T | +| main.rs:585:9:585:24 | GenericStruct::<...> | main.rs:578:5:581:5 | struct GenericStruct | +| main.rs:585:23:585:23 | T | main.rs:584:10:584:10 | T | +| main.rs:587:9:587:9 | T | main.rs:584:10:584:10 | T | +| main.rs:587:12:587:17 | TraitA | main.rs:570:5:572:5 | trait TraitA | +| main.rs:596:9:596:24 | GenericStruct::<...> | main.rs:578:5:581:5 | struct GenericStruct | +| main.rs:596:23:596:23 | T | main.rs:595:10:595:10 | T | +| main.rs:598:9:598:9 | T | main.rs:595:10:595:10 | T | +| main.rs:598:12:598:17 | TraitB | main.rs:574:5:576:5 | trait TraitB | +| main.rs:599:9:599:9 | T | main.rs:595:10:595:10 | T | +| main.rs:599:12:599:17 | TraitA | main.rs:570:5:572:5 | trait TraitA | +| main.rs:610:10:610:15 | TraitA | main.rs:570:5:572:5 | trait TraitA | +| main.rs:610:21:610:31 | Implementor | main.rs:607:5:607:23 | struct Implementor | +| main.rs:617:10:617:15 | TraitB | main.rs:574:5:576:5 | trait TraitB | +| main.rs:617:21:617:31 | Implementor | main.rs:607:5:607:23 | struct Implementor | +| main.rs:625:24:625:34 | Implementor | main.rs:607:5:607:23 | struct Implementor | +| main.rs:626:23:626:35 | GenericStruct | main.rs:578:5:581:5 | struct GenericStruct | +| main.rs:632:9:632:36 | GenericStruct::<...> | main.rs:578:5:581:5 | struct GenericStruct | +| main.rs:632:9:632:50 | ...::call_trait_a | main.rs:589:9:591:9 | fn call_trait_a | +| main.rs:632:25:632:35 | Implementor | main.rs:607:5:607:23 | struct Implementor | +| main.rs:635:9:635:36 | GenericStruct::<...> | main.rs:578:5:581:5 | struct GenericStruct | +| main.rs:635:9:635:47 | ...::call_both | main.rs:601:9:604:9 | fn call_both | +| main.rs:635:25:635:35 | Implementor | main.rs:607:5:607:23 | struct Implementor | +| main.rs:641:3:641:12 | proc_macro | {EXTERNAL LOCATION} | Crate(proc_macro@0.0.0) | +| main.rs:641:3:641:12 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | +| main.rs:641:3:641:24 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix | +| main.rs:645:6:645:12 | AStruct | main.rs:644:1:644:17 | struct AStruct | +| main.rs:647:7:647:16 | proc_macro | {EXTERNAL LOCATION} | Crate(proc_macro@0.0.0) | +| main.rs:647:7:647:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | +| main.rs:647:7:647:28 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix | +| main.rs:650:7:650:16 | proc_macro | {EXTERNAL LOCATION} | Crate(proc_macro@0.0.0) | +| main.rs:650:7:650:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) | +| main.rs:650:7:650:28 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix | +| main.rs:655:9:655:11 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| main.rs:655:9:655:19 | ...::marker | {EXTERNAL LOCATION} | mod marker | +| main.rs:655:9:655:32 | ...::PhantomData | {EXTERNAL LOCATION} | struct PhantomData | +| main.rs:656:9:656:11 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| main.rs:656:9:656:19 | ...::result | {EXTERNAL LOCATION} | mod result | +| main.rs:656:9:656:27 | ...::Result | {EXTERNAL LOCATION} | enum Result | +| main.rs:664:19:664:22 | Self | main.rs:658:5:666:5 | trait Reduce | +| main.rs:664:19:664:29 | ...::Input | main.rs:659:9:659:19 | type Input | +| main.rs:665:14:665:46 | Result::<...> | {EXTERNAL LOCATION} | enum Result | +| main.rs:665:21:665:24 | Self | main.rs:658:5:666:5 | trait Reduce | +| main.rs:665:21:665:32 | ...::Output | main.rs:660:21:661:20 | type Output | +| main.rs:665:35:665:38 | Self | main.rs:658:5:666:5 | trait Reduce | +| main.rs:665:35:665:45 | ...::Error | main.rs:659:21:660:19 | type Error | +| main.rs:669:17:669:34 | PhantomData::<...> | {EXTERNAL LOCATION} | struct PhantomData | +| main.rs:669:29:669:33 | Input | main.rs:668:19:668:23 | Input | +| main.rs:670:17:670:34 | PhantomData::<...> | {EXTERNAL LOCATION} | struct PhantomData | +| main.rs:670:29:670:33 | Error | main.rs:668:26:668:30 | Error | +| main.rs:677:11:677:16 | Reduce | main.rs:658:5:666:5 | trait Reduce | +| main.rs:678:13:681:9 | MyImpl::<...> | main.rs:668:5:671:5 | struct MyImpl | +| main.rs:679:13:679:17 | Input | main.rs:675:13:675:17 | Input | +| main.rs:680:13:680:17 | Error | main.rs:676:13:676:17 | Error | +| main.rs:683:22:686:9 | Result::<...> | {EXTERNAL LOCATION} | enum Result | +| main.rs:684:13:684:17 | Input | main.rs:675:13:675:17 | Input | +| main.rs:685:13:685:16 | Self | main.rs:673:5:705:5 | impl Reduce for MyImpl::<...> { ... } | +| main.rs:685:13:685:23 | ...::Error | main.rs:687:11:691:9 | type Error | +| main.rs:688:22:690:9 | Option::<...> | {EXTERNAL LOCATION} | enum Option | +| main.rs:689:11:689:15 | Error | main.rs:676:13:676:17 | Error | +| main.rs:693:13:693:17 | Input | main.rs:675:13:675:17 | Input | +| main.rs:698:19:698:22 | Self | main.rs:673:5:705:5 | impl Reduce for MyImpl::<...> { ... } | +| main.rs:698:19:698:29 | ...::Input | main.rs:683:9:687:9 | type Input | +| main.rs:699:14:702:9 | Result::<...> | {EXTERNAL LOCATION} | enum Result | +| main.rs:700:13:700:16 | Self | main.rs:673:5:705:5 | impl Reduce for MyImpl::<...> { ... } | +| main.rs:700:13:700:24 | ...::Output | main.rs:691:11:694:9 | type Output | +| main.rs:701:13:701:16 | Self | main.rs:673:5:705:5 | impl Reduce for MyImpl::<...> { ... } | +| main.rs:701:13:701:23 | ...::Error | main.rs:687:11:691:9 | type Error | +| main.rs:708:5:708:7 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| main.rs:708:11:708:14 | self | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| main.rs:710:15:710:17 | ztd | {EXTERNAL LOCATION} | Crate(std@0.0.0) | +| main.rs:710:15:710:25 | ...::string | {EXTERNAL LOCATION} | mod string | +| main.rs:710:15:710:33 | ...::String | {EXTERNAL LOCATION} | struct String | +| main.rs:713:5:713:6 | my | main.rs:1:1:1:7 | mod my | +| main.rs:713:5:713:14 | ...::nested | my.rs:1:1:1:15 | mod nested | +| main.rs:713:5:713:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 | +| main.rs:713:5:713:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 | +| main.rs:713:5:713:35 | ...::f | my/nested.rs:3:9:5:9 | fn f | +| main.rs:714:5:714:6 | my | main.rs:1:1:1:7 | mod my | +| main.rs:714:5:714:9 | ...::f | my.rs:5:1:7:1 | fn f | +| main.rs:715:5:715:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | +| main.rs:715:5:715:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | +| main.rs:715:5:715:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | +| main.rs:715:5:715:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:716:5:716:5 | f | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:717:5:717:5 | g | my2/nested2.rs:7:9:9:9 | fn g | +| main.rs:718:5:718:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) | +| main.rs:718:5:718:12 | ...::h | main.rs:50:1:69:1 | fn h | +| main.rs:719:5:719:6 | m1 | main.rs:13:1:37:1 | mod m1 | +| main.rs:719:5:719:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | +| main.rs:719:5:719:13 | ...::g | main.rs:23:9:27:9 | fn g | +| main.rs:720:5:720:6 | m1 | main.rs:13:1:37:1 | mod m1 | +| main.rs:720:5:720:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | +| main.rs:720:5:720:14 | ...::m3 | main.rs:29:9:35:9 | mod m3 | +| main.rs:720:5:720:17 | ...::h | main.rs:30:27:34:13 | fn h | +| main.rs:721:5:721:6 | m4 | main.rs:39:1:46:1 | mod m4 | +| main.rs:721:5:721:9 | ...::i | main.rs:42:5:45:5 | fn i | +| main.rs:722:5:722:5 | h | main.rs:50:1:69:1 | fn h | +| main.rs:723:5:723:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:724:5:724:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g | +| main.rs:725:5:725:5 | j | main.rs:97:1:101:1 | fn j | +| main.rs:726:5:726:6 | m6 | main.rs:109:1:120:1 | mod m6 | +| main.rs:726:5:726:9 | ...::g | main.rs:114:5:119:5 | fn g | +| main.rs:727:5:727:6 | m7 | main.rs:122:1:141:1 | mod m7 | +| main.rs:727:5:727:9 | ...::f | main.rs:133:5:140:5 | fn f | +| main.rs:728:5:728:6 | m8 | main.rs:143:1:197:1 | mod m8 | +| main.rs:728:5:728:9 | ...::g | main.rs:181:5:196:5 | fn g | +| main.rs:729:5:729:6 | m9 | main.rs:199:1:207:1 | mod m9 | +| main.rs:729:5:729:9 | ...::f | main.rs:202:5:206:5 | fn f | +| main.rs:730:5:730:7 | m11 | main.rs:230:1:267:1 | mod m11 | +| main.rs:730:5:730:10 | ...::f | main.rs:235:5:238:5 | fn f | +| main.rs:731:5:731:7 | m15 | main.rs:298:1:367:1 | mod m15 | +| main.rs:731:5:731:10 | ...::f | main.rs:354:5:366:5 | fn f | +| main.rs:732:5:732:7 | m16 | main.rs:369:1:461:1 | mod m16 | +| main.rs:732:5:732:10 | ...::f | main.rs:436:5:460:5 | fn f | +| main.rs:733:5:733:7 | m17 | main.rs:463:1:493:1 | mod m17 | +| main.rs:733:5:733:10 | ...::f | main.rs:487:5:492:5 | fn f | +| main.rs:734:5:734:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 | +| main.rs:734:5:734:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f | +| main.rs:735:5:735:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 | +| main.rs:735:5:735:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f | +| main.rs:736:5:736:7 | my3 | my2/mod.rs:12:1:12:12 | mod my3 | +| main.rs:736:5:736:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f | +| main.rs:737:5:737:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f | +| main.rs:738:5:738:7 | m18 | main.rs:495:1:513:1 | mod m18 | +| main.rs:738:5:738:12 | ...::m19 | main.rs:500:5:512:5 | mod m19 | +| main.rs:738:5:738:17 | ...::m20 | main.rs:505:9:511:9 | mod m20 | +| main.rs:738:5:738:20 | ...::g | main.rs:506:13:510:13 | fn g | +| main.rs:739:5:739:7 | m23 | main.rs:542:1:567:1 | mod m23 | +| main.rs:739:5:739:10 | ...::f | main.rs:562:5:566:5 | fn f | +| main.rs:740:5:740:7 | m24 | main.rs:569:1:637:1 | mod m24 | +| main.rs:740:5:740:10 | ...::f | main.rs:623:5:636:5 | fn f | +| main.rs:741:5:741:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) | +| main.rs:741:5:741:11 | ...::h | main.rs:50:1:69:1 | fn h | +| main.rs:743:5:743:11 | AStruct | main.rs:644:1:644:17 | struct AStruct | +| main.rs:744:5:744:11 | AStruct | main.rs:644:1:644:17 | struct AStruct | | my2/mod.rs:5:5:5:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | | my2/mod.rs:5:5:5:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | | my2/mod.rs:5:5:5:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | @@ -395,7 +404,7 @@ resolvePath | my2/my3/mod.rs:3:5:3:5 | g | my2/mod.rs:3:1:6:1 | fn g | | my2/my3/mod.rs:4:5:4:5 | h | main.rs:50:1:69:1 | fn h | | my2/my3/mod.rs:7:5:7:9 | super | my2/mod.rs:1:1:17:30 | SourceFile | -| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:731:2 | SourceFile | +| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:746:2 | SourceFile | | my2/my3/mod.rs:7:5:7:19 | ...::h | main.rs:50:1:69:1 | fn h | | my2/my3/mod.rs:8:5:8:9 | super | my2/mod.rs:1:1:17:30 | SourceFile | | my2/my3/mod.rs:8:5:8:12 | ...::g | my2/mod.rs:3:1:6:1 | fn g | diff --git a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected index bb5654e3035..d2fded7a073 100644 --- a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected @@ -1,8 +1,8 @@ multipleCallTargets | dereference.rs:61:15:61:24 | e1.deref() | -| main.rs:2278:13:2278:31 | ...::from(...) | -| main.rs:2279:13:2279:31 | ...::from(...) | -| main.rs:2280:13:2280:31 | ...::from(...) | -| main.rs:2286:13:2286:31 | ...::from(...) | -| main.rs:2287:13:2287:31 | ...::from(...) | -| main.rs:2288:13:2288:31 | ...::from(...) | +| main.rs:2308:13:2308:31 | ...::from(...) | +| main.rs:2309:13:2309:31 | ...::from(...) | +| main.rs:2310:13:2310:31 | ...::from(...) | +| main.rs:2316:13:2316:31 | ...::from(...) | +| main.rs:2317:13:2317:31 | ...::from(...) | +| main.rs:2318:13:2318:31 | ...::from(...) | diff --git a/rust/ql/test/library-tests/type-inference/dereference.rs b/rust/ql/test/library-tests/type-inference/dereference.rs index ad4ce93abb3..f4d9d68a099 100644 --- a/rust/ql/test/library-tests/type-inference/dereference.rs +++ b/rust/ql/test/library-tests/type-inference/dereference.rs @@ -93,10 +93,46 @@ fn implicit_dereference() { let _y = x.is_positive(); // $ MISSING: target=is_positive type=_y:bool } +mod implicit_deref_coercion_cycle { + use std::collections::HashMap; + + #[derive(Hash, PartialEq, Eq, PartialOrd, Ord, Debug, Clone, Copy)] + pub struct Key {} + + // This example can trigger a cycle in type inference due to an implicit + // dereference if we are not careful and accurate enough. + // + // To explain how a cycle might happen, we let `[V]` denote the type of the + // type parameter `V` of `key_to_key` (i.e., the type of the values in the + // map) and `[key]` denote the type of `key`. + // + // 1. From the first two lines we infer `[V] = &Key` and `[key] = &Key` + // 2. At the 3. line we infer the type of `ref_key` to be `&[V]`. + // 3. At the 4. line we impose the equality `[key] = &[V]`, not accounting + // for the implicit deref caused by a coercion. + // 4. At the last line we infer `[key] = [V]`. + // + // Putting the above together we have `[V] = [key] = &[V]` which is a cycle. + // This means that `[key]` is both `&Key`, `&&Key`, `&&&Key`, and so on ad + // infinitum. + + #[rustfmt::skip] + pub fn test() { + let mut key_to_key = HashMap::<&Key, &Key>::new(); // $ target=new + let mut key = &Key {}; // Initialize key2 to a reference + if let Some(ref_key) = key_to_key.get(key) { // $ target=get + // Below `ref_key` is implicitly dereferenced from `&&Key` to `&Key` + key = ref_key; + } + key_to_key.insert(key, key); // $ target=insert + } +} + pub fn test() { explicit_monomorphic_dereference(); // $ target=explicit_monomorphic_dereference explicit_polymorphic_dereference(); // $ target=explicit_polymorphic_dereference explicit_ref_dereference(); // $ target=explicit_ref_dereference explicit_box_dereference(); // $ target=explicit_box_dereference implicit_dereference(); // $ target=implicit_dereference + implicit_deref_coercion_cycle::test(); // $ target=test } diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index da1a3f5969d..1006fd207c8 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -545,12 +545,29 @@ mod type_parameter_bounds { println!("{:?}", s); // $ type=s:S1 } + fn trait_per_where_bound_with_type(x: T) + where + T: FirstTrait, + { + let s = x.method(); // $ target=FirstTrait::method + println!("{:?}", s); // $ type=s:S1 + } + trait Pair { fn fst(self) -> P1; fn snd(self) -> P2; } + fn trait_per_multiple_where_bounds_with_type(x: T, y: T) + where + T: FirstTrait, + T: Pair, + { + let _ = x.fst(); // $ target=fst type=_:S1 + let _ = y.method(); // $ target=FirstTrait::method _:S1 + } + fn call_trait_per_bound_with_type_1>(x: T, y: T) { // The type in the type parameter bound determines the return type. let s1 = x.fst(); // $ target=fst type=s1:S1 @@ -806,7 +823,8 @@ mod associated_type_in_trait { mod associated_type_in_supertrait { trait Supertrait { type Content; - fn insert(content: Self::Content); + // Supertrait::insert + fn insert(&self, content: Self::Content); } trait Subtrait: Supertrait { @@ -814,11 +832,23 @@ mod associated_type_in_supertrait { fn get_content(&self) -> Self::Content; } + // A subtrait declared using a `where` clause. + trait Subtrait2 + where + Self: Supertrait, + { + // Subtrait2::insert_two + fn insert_two(&self, c1: Self::Content, c2: Self::Content) { + self.insert(c1); // $ target=Supertrait::insert + self.insert(c2); // $ target=Supertrait::insert + } + } + struct MyType(T); impl Supertrait for MyType { type Content = T; - fn insert(_content: Self::Content) { + fn insert(&self, _content: Self::Content) { println!("Inserting content: "); } } @@ -834,6 +864,11 @@ mod associated_type_in_supertrait { item.get_content() // $ target=Subtrait::get_content } + fn insert_three(item: &T, c1: T::Content, c2: T::Content, c3: T::Content) { + item.insert(c1); // $ target=Supertrait::insert + item.insert_two(c2, c3); // $ target=Subtrait2::insert_two + } + fn test() { let item1 = MyType(42i64); let _content1 = item1.get_content(); // $ target=MyType::get_content MISSING: type=_content1:i64 @@ -1989,6 +2024,7 @@ mod impl_trait { let c = uses_my_trait2(a); // $ type=c:S2 target=uses_my_trait2 let d = uses_my_trait2(S1); // $ type=d:S2 target=uses_my_trait2 let e = get_a_my_trait2(S1).get_a(); // $ target=get_a_my_trait2 target=MyTrait::get_a type=e:S1 + // 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 @@ -2032,13 +2068,7 @@ mod indexers { } fn analyze_slice(slice: &[S]) { - // NOTE: `slice` gets the spurious type `[]` because the desugaring of - // the index expression adds an implicit borrow. `&slice` has the type - // `&&[S]`, but the `index` methods takes a `&[S]`, so Rust adds an - // implicit dereference. We cannot currently handle a position that is - // both implicitly dereferenced and implicitly borrowed, so the extra - // type sneaks in. - let x = slice[0].foo(); // $ target=foo type=x:S target=index SPURIOUS: type=slice:[] + let x = slice[0].foo(); // $ target=foo type=x:S target=index } pub fn f() { @@ -2352,7 +2382,7 @@ mod loops { #[rustfmt::skip] let _ = while a < 10 // $ target=lt type=a:i64 { - a += 1; // $ type=a:i64 target=add_assign + a += 1; // $ type=a:i64 MISSING: target=add_assign }; } } @@ -2487,8 +2517,7 @@ pub mod pattern_matching_experimental { pub mod exec { // a *greatly* simplified model of `MySqlConnection.execute` in SQLX - trait Connection { - } + trait Connection {} trait Executor { fn execute1(&self); @@ -2519,7 +2548,6 @@ pub mod exec { c.execute2::<&str>("SELECT * FROM users"); // $ MISSING: target=execute2 MySqlConnection::execute2(&c, "SELECT * FROM users"); // $ MISSING: target=execute2 MySqlConnection::execute2::<&str>(&c, "SELECT * FROM users"); // $ MISSING: target=execute2 - } } 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 e4a7c51fa98..5b8bf2e4f30 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -288,7 +288,6 @@ inferType | dereference.rs:60:14:60:17 | &'a' | &T | {EXTERNAL LOCATION} | char | | dereference.rs:60:14:60:17 | &'a' | &T | file://:0:0:0:0 | & | | dereference.rs:60:15:60:17 | 'a' | | {EXTERNAL LOCATION} | char | -| dereference.rs:60:15:60:17 | 'a' | | file://:0:0:0:0 | & | | dereference.rs:61:9:61:11 | _f1 | | file://:0:0:0:0 | & | | dereference.rs:61:15:61:16 | e1 | | file://:0:0:0:0 | & | | dereference.rs:61:15:61:16 | e1 | &T | {EXTERNAL LOCATION} | char | @@ -365,6 +364,81 @@ inferType | dereference.rs:92:37:92:41 | 34i64 | | {EXTERNAL LOCATION} | i64 | | dereference.rs:93:14:93:14 | x | | dereference.rs:17:1:19:1 | MySmartPointer | | dereference.rs:93:14:93:14 | x | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:121:17:121:26 | key_to_key | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:121:17:121:26 | key_to_key | K | file://:0:0:0:0 | & | +| dereference.rs:121:17:121:26 | key_to_key | K.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:17:121:26 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | +| dereference.rs:121:17:121:26 | key_to_key | V | file://:0:0:0:0 | & | +| dereference.rs:121:17:121:26 | key_to_key | V.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:30:121:57 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:121:30:121:57 | ...::new(...) | K | file://:0:0:0:0 | & | +| dereference.rs:121:30:121:57 | ...::new(...) | K.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:121:30:121:57 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | +| dereference.rs:121:30:121:57 | ...::new(...) | V | file://:0:0:0:0 | & | +| dereference.rs:121:30:121:57 | ...::new(...) | V.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:17:122:19 | key | | file://:0:0:0:0 | & | +| dereference.rs:122:17:122:19 | key | &T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:17:122:19 | key | &T | file://:0:0:0:0 | & | +| dereference.rs:122:17:122:19 | key | &T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:23:122:29 | &... | | file://:0:0:0:0 | & | +| dereference.rs:122:23:122:29 | &... | &T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:23:122:29 | &... | &T | file://:0:0:0:0 | & | +| dereference.rs:122:23:122:29 | &... | &T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:24:122:29 | Key {...} | | dereference.rs:99:5:100:21 | Key | +| dereference.rs:122:24:122:29 | Key {...} | | file://:0:0:0:0 | & | +| dereference.rs:122:24:122:29 | Key {...} | &T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:16:123:28 | Some(...) | | {EXTERNAL LOCATION} | Option | +| dereference.rs:123:16:123:28 | Some(...) | T | file://:0:0:0:0 | & | +| dereference.rs:123:16:123:28 | Some(...) | T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:16:123:28 | Some(...) | T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:21:123:27 | ref_key | | file://:0:0:0:0 | & | +| dereference.rs:123:21:123:27 | ref_key | &T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:21:123:27 | ref_key | &T | file://:0:0:0:0 | & | +| dereference.rs:123:21:123:27 | ref_key | &T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:41 | key_to_key | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:123:32:123:41 | key_to_key | K | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:41 | key_to_key | K.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:41 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | +| dereference.rs:123:32:123:41 | key_to_key | V | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:41 | key_to_key | V.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:50 | key_to_key.get(...) | | {EXTERNAL LOCATION} | Option | +| dereference.rs:123:32:123:50 | key_to_key.get(...) | T | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T | file://:0:0:0:0 | & | +| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:47:123:49 | key | | file://:0:0:0:0 | & | +| dereference.rs:123:47:123:49 | key | &T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:123:47:123:49 | key | &T | file://:0:0:0:0 | & | +| dereference.rs:123:47:123:49 | key | &T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:125:13:125:15 | key | | file://:0:0:0:0 | & | +| dereference.rs:125:13:125:15 | key | &T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:125:13:125:15 | key | &T | file://:0:0:0:0 | & | +| dereference.rs:125:13:125:15 | key | &T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:125:13:125:25 | ... = ... | | file://:0:0:0:0 | () | +| dereference.rs:125:19:125:25 | ref_key | | file://:0:0:0:0 | & | +| dereference.rs:125:19:125:25 | ref_key | &T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:125:19:125:25 | ref_key | &T | file://:0:0:0:0 | & | +| dereference.rs:125:19:125:25 | ref_key | &T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:18 | key_to_key | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:127:9:127:18 | key_to_key | K | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:18 | key_to_key | K.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:18 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | +| dereference.rs:127:9:127:18 | key_to_key | V | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:18 | key_to_key | V.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:35 | key_to_key.insert(...) | | {EXTERNAL LOCATION} | Option | +| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T | file://:0:0:0:0 | & | +| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:27:127:29 | key | | file://:0:0:0:0 | & | +| dereference.rs:127:27:127:29 | key | &T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:27:127:29 | key | &T | file://:0:0:0:0 | & | +| dereference.rs:127:27:127:29 | key | &T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:32:127:34 | key | | file://:0:0:0:0 | & | +| dereference.rs:127:32:127:34 | key | &T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:127:32:127:34 | key | &T | file://:0:0:0:0 | & | +| dereference.rs:127:32:127:34 | key | &T.&T | dereference.rs:99:5:100:21 | Key | | dyn_type.rs:7:10:7:14 | SelfParam | | file://:0:0:0:0 | & | | 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 | & | @@ -420,8 +494,6 @@ inferType | dyn_type.rs:60:78:62:1 | { ... } | | {EXTERNAL LOCATION} | Box | | dyn_type.rs:60:78:62:1 | { ... } | A | {EXTERNAL LOCATION} | Global | | dyn_type.rs:60:78:62:1 | { ... } | T | dyn_type.rs:10:1:13:1 | dyn GenericGet | -| dyn_type.rs:60:78:62:1 | { ... } | T | dyn_type.rs:33:1:36:1 | GenStruct | -| dyn_type.rs:60:78:62:1 | { ... } | T.A | dyn_type.rs:60:18:60:43 | A | | dyn_type.rs:60:78:62:1 | { ... } | T.dyn(A) | dyn_type.rs:60:18:60:43 | A | | dyn_type.rs:61:5:61:36 | ...::new(...) | | {EXTERNAL LOCATION} | Box | | dyn_type.rs:61:5:61:36 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | @@ -1339,3552 +1411,3534 @@ inferType | main.rs:545:18:545:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:545:18:545:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:545:26:545:26 | s | | main.rs:508:5:509:14 | S1 | -| main.rs:549:16:549:19 | SelfParam | | main.rs:548:5:552:5 | Self [trait Pair] | -| main.rs:551:16:551:19 | SelfParam | | main.rs:548:5:552:5 | Self [trait Pair] | -| main.rs:554:58:554:58 | x | | main.rs:554:41:554:55 | T | -| main.rs:554:64:554:64 | y | | main.rs:554:41:554:55 | T | -| main.rs:556:13:556:14 | s1 | | main.rs:508:5:509:14 | S1 | -| main.rs:556:18:556:18 | x | | main.rs:554:41:554:55 | T | -| main.rs:556:18:556:24 | x.fst() | | main.rs:508:5:509:14 | S1 | -| main.rs:557:13:557:14 | s2 | | main.rs:511:5:512:14 | S2 | -| main.rs:557:18:557:18 | y | | main.rs:554:41:554:55 | T | -| main.rs:557:18:557:24 | y.snd() | | main.rs:511:5:512:14 | S2 | -| main.rs:558:18:558:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:558:18:558:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:558:18:558:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:558:18:558:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:558:32:558:33 | s1 | | main.rs:508:5:509:14 | S1 | -| main.rs:558:36:558:37 | s2 | | main.rs:511:5:512:14 | S2 | -| main.rs:561:69:561:69 | x | | main.rs:561:52:561:66 | T | -| main.rs:561:75:561:75 | y | | main.rs:561:52:561:66 | T | -| main.rs:563:13:563:14 | s1 | | main.rs:508:5:509:14 | S1 | -| main.rs:563:18:563:18 | x | | main.rs:561:52:561:66 | T | -| main.rs:563:18:563:24 | x.fst() | | main.rs:508:5:509:14 | S1 | -| main.rs:564:13:564:14 | s2 | | main.rs:561:41:561:49 | T2 | -| main.rs:564:18:564:18 | y | | main.rs:561:52:561:66 | T | -| main.rs:564:18:564:24 | y.snd() | | main.rs:561:41:561:49 | T2 | -| main.rs:565:18:565:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:565:18:565:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:565:18:565:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:565:18:565:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:565:32:565:33 | s1 | | main.rs:508:5:509:14 | S1 | -| main.rs:565:36:565:37 | s2 | | main.rs:561:41:561:49 | T2 | -| main.rs:568:50:568:50 | x | | main.rs:568:41:568:47 | T | -| main.rs:568:56:568:56 | y | | main.rs:568:41:568:47 | T | -| main.rs:570:13:570:14 | s1 | | {EXTERNAL LOCATION} | bool | -| main.rs:570:18:570:18 | x | | main.rs:568:41:568:47 | T | -| main.rs:570:18:570:24 | x.fst() | | {EXTERNAL LOCATION} | bool | -| main.rs:571:13:571:14 | s2 | | {EXTERNAL LOCATION} | i64 | -| main.rs:571:18:571:18 | y | | main.rs:568:41:568:47 | T | -| main.rs:571:18:571:24 | y.snd() | | {EXTERNAL LOCATION} | i64 | -| main.rs:572:18:572:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:572:18:572:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:572:18:572:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:572:18:572:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:572:32:572:33 | s1 | | {EXTERNAL LOCATION} | bool | -| main.rs:572:36:572:37 | s2 | | {EXTERNAL LOCATION} | i64 | -| main.rs:575:54:575:54 | x | | main.rs:575:41:575:51 | T | -| main.rs:575:60:575:60 | y | | main.rs:575:41:575:51 | T | -| main.rs:577:13:577:14 | s1 | | {EXTERNAL LOCATION} | u8 | -| main.rs:577:18:577:18 | x | | main.rs:575:41:575:51 | T | -| main.rs:577:18:577:24 | x.fst() | | {EXTERNAL LOCATION} | u8 | -| main.rs:578:13:578:14 | s2 | | {EXTERNAL LOCATION} | i64 | -| main.rs:578:18:578:18 | y | | main.rs:575:41:575:51 | T | -| main.rs:578:18:578:24 | y.snd() | | {EXTERNAL LOCATION} | i64 | -| main.rs:579:18:579:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:579:18:579:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:579:18:579:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:579:18:579:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:579:32:579:33 | s1 | | {EXTERNAL LOCATION} | u8 | -| main.rs:579:36:579:37 | s2 | | {EXTERNAL LOCATION} | i64 | -| main.rs:595:15:595:18 | SelfParam | | main.rs:594:5:603:5 | Self [trait MyTrait] | -| main.rs:597:15:597:18 | SelfParam | | main.rs:594:5:603:5 | Self [trait MyTrait] | -| main.rs:600:9:602:9 | { ... } | | main.rs:594:19:594:19 | A | -| main.rs:601:13:601:16 | self | | main.rs:594:5:603:5 | Self [trait MyTrait] | -| main.rs:601:13:601:21 | self.m1() | | main.rs:594:19:594:19 | A | -| main.rs:607:43:607:43 | x | | main.rs:607:26:607:40 | T2 | -| main.rs:607:56:609:5 | { ... } | | main.rs:607:22:607:23 | T1 | -| main.rs:608:9:608:9 | x | | main.rs:607:26:607:40 | T2 | -| main.rs:608:9:608:14 | x.m1() | | main.rs:607:22:607:23 | T1 | -| main.rs:613:49:613:49 | x | | main.rs:584:5:587:5 | MyThing | -| main.rs:613:49:613:49 | x | T | main.rs:613:32:613:46 | T2 | -| main.rs:613:71:615:5 | { ... } | | main.rs:613:28:613:29 | T1 | -| main.rs:614:9:614:9 | x | | main.rs:584:5:587:5 | MyThing | -| main.rs:614:9:614:9 | x | T | main.rs:613:32:613:46 | T2 | -| main.rs:614:9:614:11 | x.a | | main.rs:613:32:613:46 | T2 | -| main.rs:614:9:614:16 | ... .m1() | | main.rs:613:28:613:29 | T1 | -| main.rs:618:15:618:18 | SelfParam | | main.rs:584:5:587:5 | MyThing | -| main.rs:618:15:618:18 | SelfParam | T | main.rs:617:10:617:10 | T | -| main.rs:618:26:620:9 | { ... } | | main.rs:617:10:617:10 | T | -| main.rs:619:13:619:16 | self | | main.rs:584:5:587:5 | MyThing | -| main.rs:619:13:619:16 | self | T | main.rs:617:10:617:10 | T | -| main.rs:619:13:619:18 | self.a | | main.rs:617:10:617:10 | T | -| main.rs:624:13:624:13 | x | | main.rs:584:5:587:5 | MyThing | -| main.rs:624:13:624:13 | x | T | main.rs:589:5:590:14 | S1 | -| main.rs:624:17:624:33 | MyThing {...} | | main.rs:584:5:587:5 | MyThing | -| main.rs:624:17:624:33 | MyThing {...} | T | main.rs:589:5:590:14 | S1 | -| main.rs:624:30:624:31 | S1 | | main.rs:589:5:590:14 | S1 | -| main.rs:625:13:625:13 | y | | main.rs:584:5:587:5 | MyThing | -| main.rs:625:13:625:13 | y | T | main.rs:591:5:592:14 | S2 | -| main.rs:625:17:625:33 | MyThing {...} | | main.rs:584:5:587:5 | MyThing | -| main.rs:625:17:625:33 | MyThing {...} | T | main.rs:591:5:592:14 | S2 | -| main.rs:625:30:625:31 | S2 | | main.rs:591:5:592:14 | S2 | -| main.rs:627:18:627:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:627:18:627:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:627:18:627:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:627:18:627:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:627:26:627:26 | x | | main.rs:584:5:587:5 | MyThing | -| main.rs:627:26:627:26 | x | T | main.rs:589:5:590:14 | S1 | -| main.rs:627:26:627:31 | x.m1() | | main.rs:589:5:590:14 | S1 | -| main.rs:628:18:628:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:628:18:628:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:628:18:628:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:628:18:628:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:628:26:628:26 | y | | main.rs:584:5:587:5 | MyThing | -| main.rs:628:26:628:26 | y | T | main.rs:591:5:592:14 | S2 | -| main.rs:628:26:628:31 | y.m1() | | main.rs:591:5:592:14 | S2 | -| main.rs:630:13:630:13 | x | | main.rs:584:5:587:5 | MyThing | -| main.rs:630:13:630:13 | x | T | main.rs:589:5:590:14 | S1 | -| main.rs:630:17:630:33 | MyThing {...} | | main.rs:584:5:587:5 | MyThing | -| main.rs:630:17:630:33 | MyThing {...} | T | main.rs:589:5:590:14 | S1 | -| main.rs:630:30:630:31 | S1 | | main.rs:589:5:590:14 | S1 | -| main.rs:631:13:631:13 | y | | main.rs:584:5:587:5 | MyThing | -| main.rs:631:13:631:13 | y | T | main.rs:591:5:592:14 | S2 | -| main.rs:631:17:631:33 | MyThing {...} | | main.rs:584:5:587:5 | MyThing | -| main.rs:631:17:631:33 | MyThing {...} | T | main.rs:591:5:592:14 | S2 | -| main.rs:631:30:631:31 | S2 | | main.rs:591:5:592:14 | S2 | -| main.rs:633:18:633:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:633:18:633:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:633:18:633:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:633:18:633:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:633:26:633:26 | x | | main.rs:584:5:587:5 | MyThing | -| main.rs:633:26:633:26 | x | T | main.rs:589:5:590:14 | S1 | -| main.rs:633:26:633:31 | x.m2() | | main.rs:589:5:590:14 | S1 | -| main.rs:634:18:634:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:634:18:634:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:634:18:634:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:634:18:634:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:634:26:634:26 | y | | main.rs:584:5:587:5 | MyThing | -| main.rs:634:26:634:26 | y | T | main.rs:591:5:592:14 | S2 | -| main.rs:634:26:634:31 | y.m2() | | main.rs:591:5:592:14 | S2 | -| main.rs:636:13:636:14 | x2 | | main.rs:584:5:587:5 | MyThing | -| main.rs:636:13:636:14 | x2 | T | main.rs:589:5:590:14 | S1 | -| main.rs:636:18:636:34 | MyThing {...} | | main.rs:584:5:587:5 | MyThing | -| main.rs:636:18:636:34 | MyThing {...} | T | main.rs:589:5:590:14 | S1 | -| main.rs:636:31:636:32 | S1 | | main.rs:589:5:590:14 | S1 | -| main.rs:637:13:637:14 | y2 | | main.rs:584:5:587:5 | MyThing | -| main.rs:637:13:637:14 | y2 | T | main.rs:591:5:592:14 | S2 | -| main.rs:637:18:637:34 | MyThing {...} | | main.rs:584:5:587:5 | MyThing | -| main.rs:637:18:637:34 | MyThing {...} | T | main.rs:591:5:592:14 | S2 | -| main.rs:637:31:637:32 | S2 | | main.rs:591:5:592:14 | S2 | -| main.rs:639:18:639:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:639:18:639:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:639:18:639:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:639:18:639:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:639:26:639:42 | call_trait_m1(...) | | main.rs:589:5:590:14 | S1 | -| main.rs:639:40:639:41 | x2 | | main.rs:584:5:587:5 | MyThing | -| main.rs:639:40:639:41 | x2 | T | main.rs:589:5:590:14 | S1 | -| main.rs:640:18:640:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:640:18:640:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:640:18:640:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:640:18:640:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:640:26:640:42 | call_trait_m1(...) | | main.rs:591:5:592:14 | S2 | -| main.rs:640:40:640:41 | y2 | | main.rs:584:5:587:5 | MyThing | -| main.rs:640:40:640:41 | y2 | T | main.rs:591:5:592:14 | S2 | -| main.rs:642:13:642:14 | x3 | | main.rs:584:5:587:5 | MyThing | -| main.rs:642:13:642:14 | x3 | T | main.rs:584:5:587:5 | MyThing | -| main.rs:642:13:642:14 | x3 | T.T | main.rs:589:5:590:14 | S1 | -| main.rs:642:18:644:9 | MyThing {...} | | main.rs:584:5:587:5 | MyThing | -| main.rs:642:18:644:9 | MyThing {...} | T | main.rs:584:5:587:5 | MyThing | -| main.rs:642:18:644:9 | MyThing {...} | T.T | main.rs:589:5:590:14 | S1 | -| main.rs:643:16:643:32 | MyThing {...} | | main.rs:584:5:587:5 | MyThing | -| main.rs:643:16:643:32 | MyThing {...} | T | main.rs:589:5:590:14 | S1 | -| main.rs:643:29:643:30 | S1 | | main.rs:589:5:590:14 | S1 | -| main.rs:645:13:645:14 | y3 | | main.rs:584:5:587:5 | MyThing | -| main.rs:645:13:645:14 | y3 | T | main.rs:584:5:587:5 | MyThing | -| main.rs:645:13:645:14 | y3 | T.T | main.rs:591:5:592:14 | S2 | -| main.rs:645:18:647:9 | MyThing {...} | | main.rs:584:5:587:5 | MyThing | -| main.rs:645:18:647:9 | MyThing {...} | T | main.rs:584:5:587:5 | MyThing | -| main.rs:645:18:647:9 | MyThing {...} | T.T | main.rs:591:5:592:14 | S2 | -| main.rs:646:16:646:32 | MyThing {...} | | main.rs:584:5:587:5 | MyThing | -| main.rs:646:16:646:32 | MyThing {...} | T | main.rs:591:5:592:14 | S2 | -| main.rs:646:29:646:30 | S2 | | main.rs:591:5:592:14 | S2 | -| main.rs:649:13:649:13 | a | | main.rs:589:5:590:14 | S1 | -| main.rs:649:17:649:39 | call_trait_thing_m1(...) | | main.rs:589:5:590:14 | S1 | -| main.rs:649:37:649:38 | x3 | | main.rs:584:5:587:5 | MyThing | -| main.rs:649:37:649:38 | x3 | T | main.rs:584:5:587:5 | MyThing | -| main.rs:649:37:649:38 | x3 | T.T | main.rs:589:5:590:14 | S1 | +| main.rs:548:43:548:43 | x | | main.rs:548:40:548:40 | T | +| main.rs:552:13:552:13 | s | | main.rs:508:5:509:14 | S1 | +| main.rs:552:17:552:17 | x | | main.rs:548:40:548:40 | T | +| main.rs:552:17:552:26 | x.method() | | main.rs:508:5:509:14 | S1 | +| main.rs:553:18:553:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:553:18:553:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:553:18:553:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:553:18:553:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:553:26:553:26 | s | | main.rs:508:5:509:14 | S1 | +| main.rs:557:16:557:19 | SelfParam | | main.rs:556:5:560:5 | Self [trait Pair] | +| main.rs:559:16:559:19 | SelfParam | | main.rs:556:5:560:5 | Self [trait Pair] | +| main.rs:562:53:562:53 | x | | main.rs:562:50:562:50 | T | +| main.rs:562:59:562:59 | y | | main.rs:562:50:562:50 | T | +| main.rs:567:13:567:13 | _ | | main.rs:508:5:509:14 | S1 | +| main.rs:567:17:567:17 | x | | main.rs:562:50:562:50 | T | +| main.rs:567:17:567:23 | x.fst() | | main.rs:508:5:509:14 | S1 | +| main.rs:568:13:568:13 | _ | | main.rs:508:5:509:14 | S1 | +| main.rs:568:17:568:17 | y | | main.rs:562:50:562:50 | T | +| main.rs:568:17:568:26 | y.method() | | main.rs:508:5:509:14 | S1 | +| main.rs:571:58:571:58 | x | | main.rs:571:41:571:55 | T | +| main.rs:571:64:571:64 | y | | main.rs:571:41:571:55 | T | +| main.rs:573:13:573:14 | s1 | | main.rs:508:5:509:14 | S1 | +| main.rs:573:18:573:18 | x | | main.rs:571:41:571:55 | T | +| main.rs:573:18:573:24 | x.fst() | | main.rs:508:5:509:14 | S1 | +| main.rs:574:13:574:14 | s2 | | main.rs:511:5:512:14 | S2 | +| main.rs:574:18:574:18 | y | | main.rs:571:41:571:55 | T | +| main.rs:574:18:574:24 | y.snd() | | main.rs:511:5:512:14 | S2 | +| main.rs:575:18:575:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:575:18:575:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:575:18:575:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:575:18:575:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:575:32:575:33 | s1 | | main.rs:508:5:509:14 | S1 | +| main.rs:575:36:575:37 | s2 | | main.rs:511:5:512:14 | S2 | +| main.rs:578:69:578:69 | x | | main.rs:578:52:578:66 | T | +| main.rs:578:75:578:75 | y | | main.rs:578:52:578:66 | T | +| main.rs:580:13:580:14 | s1 | | main.rs:508:5:509:14 | S1 | +| main.rs:580:18:580:18 | x | | main.rs:578:52:578:66 | T | +| main.rs:580:18:580:24 | x.fst() | | main.rs:508:5:509:14 | S1 | +| main.rs:581:13:581:14 | s2 | | main.rs:578:41:578:49 | T2 | +| main.rs:581:18:581:18 | y | | main.rs:578:52:578:66 | T | +| main.rs:581:18:581:24 | y.snd() | | main.rs:578:41:578:49 | T2 | +| main.rs:582:18:582:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:582:18:582:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:582:18:582:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:582:18:582:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:582:32:582:33 | s1 | | main.rs:508:5:509:14 | S1 | +| main.rs:582:36:582:37 | s2 | | main.rs:578:41:578:49 | T2 | +| main.rs:585:50:585:50 | x | | main.rs:585:41:585:47 | T | +| main.rs:585:56:585:56 | y | | main.rs:585:41:585:47 | T | +| main.rs:587:13:587:14 | s1 | | {EXTERNAL LOCATION} | bool | +| main.rs:587:18:587:18 | x | | main.rs:585:41:585:47 | T | +| main.rs:587:18:587:24 | x.fst() | | {EXTERNAL LOCATION} | bool | +| main.rs:588:13:588:14 | s2 | | {EXTERNAL LOCATION} | i64 | +| main.rs:588:18:588:18 | y | | main.rs:585:41:585:47 | T | +| main.rs:588:18:588:24 | y.snd() | | {EXTERNAL LOCATION} | i64 | +| main.rs:589:18:589:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:589:18:589:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:589:18:589:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:589:18:589:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:589:32:589:33 | s1 | | {EXTERNAL LOCATION} | bool | +| main.rs:589:36:589:37 | s2 | | {EXTERNAL LOCATION} | i64 | +| main.rs:592:54:592:54 | x | | main.rs:592:41:592:51 | T | +| main.rs:592:60:592:60 | y | | main.rs:592:41:592:51 | T | +| main.rs:594:13:594:14 | s1 | | {EXTERNAL LOCATION} | u8 | +| main.rs:594:18:594:18 | x | | main.rs:592:41:592:51 | T | +| main.rs:594:18:594:24 | x.fst() | | {EXTERNAL LOCATION} | u8 | +| main.rs:595:13:595:14 | s2 | | {EXTERNAL LOCATION} | i64 | +| main.rs:595:18:595:18 | y | | main.rs:592:41:592:51 | T | +| main.rs:595:18:595:24 | y.snd() | | {EXTERNAL LOCATION} | i64 | +| main.rs:596:18:596:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:596:18:596:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:596:18:596:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:596:18:596:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:596:32:596:33 | s1 | | {EXTERNAL LOCATION} | u8 | +| main.rs:596:36:596:37 | s2 | | {EXTERNAL LOCATION} | i64 | +| main.rs:612:15:612:18 | SelfParam | | main.rs:611:5:620:5 | Self [trait MyTrait] | +| main.rs:614:15:614:18 | SelfParam | | main.rs:611:5:620:5 | Self [trait MyTrait] | +| main.rs:617:9:619:9 | { ... } | | main.rs:611:19:611:19 | A | +| main.rs:618:13:618:16 | self | | main.rs:611:5:620:5 | Self [trait MyTrait] | +| main.rs:618:13:618:21 | self.m1() | | main.rs:611:19:611:19 | A | +| main.rs:624:43:624:43 | x | | main.rs:624:26:624:40 | T2 | +| main.rs:624:56:626:5 | { ... } | | main.rs:624:22:624:23 | T1 | +| main.rs:625:9:625:9 | x | | main.rs:624:26:624:40 | T2 | +| main.rs:625:9:625:14 | x.m1() | | main.rs:624:22:624:23 | T1 | +| main.rs:630:49:630:49 | x | | main.rs:601:5:604:5 | MyThing | +| main.rs:630:49:630:49 | x | T | main.rs:630:32:630:46 | T2 | +| main.rs:630:71:632:5 | { ... } | | main.rs:630:28:630:29 | T1 | +| main.rs:631:9:631:9 | x | | main.rs:601:5:604:5 | MyThing | +| main.rs:631:9:631:9 | x | T | main.rs:630:32:630:46 | T2 | +| main.rs:631:9:631:11 | x.a | | main.rs:630:32:630:46 | T2 | +| main.rs:631:9:631:16 | ... .m1() | | main.rs:630:28:630:29 | T1 | +| main.rs:635:15:635:18 | SelfParam | | main.rs:601:5:604:5 | MyThing | +| main.rs:635:15:635:18 | SelfParam | T | main.rs:634:10:634:10 | T | +| main.rs:635:26:637:9 | { ... } | | main.rs:634:10:634:10 | T | +| main.rs:636:13:636:16 | self | | main.rs:601:5:604:5 | MyThing | +| main.rs:636:13:636:16 | self | T | main.rs:634:10:634:10 | T | +| main.rs:636:13:636:18 | self.a | | main.rs:634:10:634:10 | T | +| main.rs:641:13:641:13 | x | | main.rs:601:5:604:5 | MyThing | +| main.rs:641:13:641:13 | x | T | main.rs:606:5:607:14 | S1 | +| main.rs:641:17:641:33 | MyThing {...} | | main.rs:601:5:604:5 | MyThing | +| main.rs:641:17:641:33 | MyThing {...} | T | main.rs:606:5:607:14 | S1 | +| main.rs:641:30:641:31 | S1 | | main.rs:606:5:607:14 | S1 | +| main.rs:642:13:642:13 | y | | main.rs:601:5:604:5 | MyThing | +| main.rs:642:13:642:13 | y | T | main.rs:608:5:609:14 | S2 | +| main.rs:642:17:642:33 | MyThing {...} | | main.rs:601:5:604:5 | MyThing | +| main.rs:642:17:642:33 | MyThing {...} | T | main.rs:608:5:609:14 | S2 | +| main.rs:642:30:642:31 | S2 | | main.rs:608:5:609:14 | S2 | +| main.rs:644:18:644:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:644:18:644:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:644:18:644:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:644:18:644:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:644:26:644:26 | x | | main.rs:601:5:604:5 | MyThing | +| main.rs:644:26:644:26 | x | T | main.rs:606:5:607:14 | S1 | +| main.rs:644:26:644:31 | x.m1() | | main.rs:606:5:607:14 | S1 | +| main.rs:645:18:645:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:645:18:645:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:645:18:645:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:645:18:645:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:645:26:645:26 | y | | main.rs:601:5:604:5 | MyThing | +| main.rs:645:26:645:26 | y | T | main.rs:608:5:609:14 | S2 | +| main.rs:645:26:645:31 | y.m1() | | main.rs:608:5:609:14 | S2 | +| main.rs:647:13:647:13 | x | | main.rs:601:5:604:5 | MyThing | +| main.rs:647:13:647:13 | x | T | main.rs:606:5:607:14 | S1 | +| main.rs:647:17:647:33 | MyThing {...} | | main.rs:601:5:604:5 | MyThing | +| main.rs:647:17:647:33 | MyThing {...} | T | main.rs:606:5:607:14 | S1 | +| main.rs:647:30:647:31 | S1 | | main.rs:606:5:607:14 | S1 | +| main.rs:648:13:648:13 | y | | main.rs:601:5:604:5 | MyThing | +| main.rs:648:13:648:13 | y | T | main.rs:608:5:609:14 | S2 | +| main.rs:648:17:648:33 | MyThing {...} | | main.rs:601:5:604:5 | MyThing | +| main.rs:648:17:648:33 | MyThing {...} | T | main.rs:608:5:609:14 | S2 | +| main.rs:648:30:648:31 | S2 | | main.rs:608:5:609:14 | S2 | | main.rs:650:18:650:23 | "{:?}\\n" | | file://:0:0:0:0 | & | | main.rs:650:18:650:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:650:18:650:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:650:18:650:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:650:26:650:26 | a | | main.rs:589:5:590:14 | S1 | -| main.rs:651:13:651:13 | b | | main.rs:591:5:592:14 | S2 | -| main.rs:651:17:651:39 | call_trait_thing_m1(...) | | main.rs:591:5:592:14 | S2 | -| main.rs:651:37:651:38 | y3 | | main.rs:584:5:587:5 | MyThing | -| main.rs:651:37:651:38 | y3 | T | main.rs:584:5:587:5 | MyThing | -| main.rs:651:37:651:38 | y3 | T.T | main.rs:591:5:592:14 | S2 | -| main.rs:652:18:652:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:652:18:652:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:652:18:652:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:652:18:652:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:652:26:652:26 | b | | main.rs:591:5:592:14 | S2 | -| main.rs:663:19:663:22 | SelfParam | | main.rs:657:5:660:5 | Wrapper | -| main.rs:663:19:663:22 | SelfParam | A | main.rs:662:10:662:10 | A | -| main.rs:663:30:665:9 | { ... } | | main.rs:662:10:662:10 | A | -| main.rs:664:13:664:16 | self | | main.rs:657:5:660:5 | Wrapper | -| main.rs:664:13:664:16 | self | A | main.rs:662:10:662:10 | A | -| main.rs:664:13:664:22 | self.field | | main.rs:662:10:662:10 | A | -| main.rs:672:15:672:18 | SelfParam | | main.rs:668:5:682:5 | Self [trait MyTrait] | -| main.rs:674:15:674:18 | SelfParam | | main.rs:668:5:682:5 | Self [trait MyTrait] | -| main.rs:678:9:681:9 | { ... } | | main.rs:669:9:669:28 | AssociatedType | -| main.rs:679:13:679:16 | self | | main.rs:668:5:682:5 | Self [trait MyTrait] | -| main.rs:679:13:679:21 | self.m1() | | main.rs:669:9:669:28 | AssociatedType | -| main.rs:680:13:680:43 | ...::default(...) | | main.rs:669:9:669:28 | AssociatedType | -| main.rs:688:19:688:23 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:688:19:688:23 | SelfParam | &T | main.rs:684:5:694:5 | Self [trait MyTraitAssoc2] | -| main.rs:688:26:688:26 | a | | main.rs:688:16:688:16 | A | -| main.rs:690:22:690:26 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:690:22:690:26 | SelfParam | &T | main.rs:684:5:694:5 | Self [trait MyTraitAssoc2] | -| main.rs:690:29:690:29 | a | | main.rs:690:19:690:19 | A | -| main.rs:690:35:690:35 | b | | main.rs:690:19:690:19 | A | -| main.rs:690:75:693:9 | { ... } | | main.rs:685:9:685:52 | GenericAssociatedType | -| main.rs:691:13:691:16 | self | | file://:0:0:0:0 | & | -| main.rs:691:13:691:16 | self | &T | main.rs:684:5:694:5 | Self [trait MyTraitAssoc2] | -| main.rs:691:13:691:23 | self.put(...) | | main.rs:685:9:685:52 | GenericAssociatedType | -| main.rs:691:22:691:22 | a | | main.rs:690:19:690:19 | A | -| main.rs:692:13:692:16 | self | | file://:0:0:0:0 | & | -| main.rs:692:13:692:16 | self | &T | main.rs:684:5:694:5 | Self [trait MyTraitAssoc2] | -| main.rs:692:13:692:23 | self.put(...) | | main.rs:685:9:685:52 | GenericAssociatedType | -| main.rs:692:22:692:22 | b | | main.rs:690:19:690:19 | A | -| main.rs:701:21:701:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:701:21:701:25 | SelfParam | &T | main.rs:696:5:706:5 | Self [trait TraitMultipleAssoc] | -| main.rs:703:20:703:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:703:20:703:24 | SelfParam | &T | main.rs:696:5:706:5 | Self [trait TraitMultipleAssoc] | -| main.rs:705:20:705:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:705:20:705:24 | SelfParam | &T | main.rs:696:5:706:5 | Self [trait TraitMultipleAssoc] | -| main.rs:721:15:721:18 | SelfParam | | main.rs:708:5:709:13 | S | -| main.rs:721:45:723:9 | { ... } | | main.rs:714:5:715:14 | AT | -| main.rs:722:13:722:14 | AT | | main.rs:714:5:715:14 | AT | -| main.rs:731:19:731:23 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:731:19:731:23 | SelfParam | &T | main.rs:708:5:709:13 | S | -| main.rs:731:26:731:26 | a | | main.rs:731:16:731:16 | A | -| main.rs:731:46:733:9 | { ... } | | main.rs:657:5:660:5 | Wrapper | -| main.rs:731:46:733:9 | { ... } | A | main.rs:731:16:731:16 | A | -| main.rs:732:13:732:32 | Wrapper {...} | | main.rs:657:5:660:5 | Wrapper | -| main.rs:732:13:732:32 | Wrapper {...} | A | main.rs:731:16:731:16 | A | -| main.rs:732:30:732:30 | a | | main.rs:731:16:731:16 | A | -| main.rs:740:15:740:18 | SelfParam | | main.rs:711:5:712:14 | S2 | -| main.rs:740:45:742:9 | { ... } | | main.rs:657:5:660:5 | Wrapper | -| main.rs:740:45:742:9 | { ... } | A | main.rs:711:5:712:14 | S2 | -| main.rs:741:13:741:35 | Wrapper {...} | | main.rs:657:5:660:5 | Wrapper | -| main.rs:741:13:741:35 | Wrapper {...} | A | main.rs:711:5:712:14 | S2 | -| main.rs:741:30:741:33 | self | | main.rs:711:5:712:14 | S2 | -| main.rs:747:30:749:9 | { ... } | | main.rs:657:5:660:5 | Wrapper | -| main.rs:747:30:749:9 | { ... } | A | main.rs:711:5:712:14 | S2 | -| main.rs:748:13:748:33 | Wrapper {...} | | main.rs:657:5:660:5 | Wrapper | -| main.rs:748:13:748:33 | Wrapper {...} | A | main.rs:711:5:712:14 | S2 | -| main.rs:748:30:748:31 | S2 | | main.rs:711:5:712:14 | S2 | -| main.rs:754:22:754:26 | thing | | main.rs:754:10:754:19 | T | -| main.rs:755:9:755:13 | thing | | main.rs:754:10:754:19 | T | -| main.rs:762:21:762:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:762:21:762:25 | SelfParam | &T | main.rs:714:5:715:14 | AT | -| main.rs:762:34:764:9 | { ... } | | main.rs:714:5:715:14 | AT | -| main.rs:763:13:763:14 | AT | | main.rs:714:5:715:14 | AT | -| main.rs:766:20:766:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:766:20:766:24 | SelfParam | &T | main.rs:714:5:715:14 | AT | -| main.rs:766:43:768:9 | { ... } | | main.rs:708:5:709:13 | S | -| main.rs:767:13:767:13 | S | | main.rs:708:5:709:13 | S | -| main.rs:770:20:770:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:770:20:770:24 | SelfParam | &T | main.rs:714:5:715:14 | AT | -| main.rs:770:43:772:9 | { ... } | | main.rs:711:5:712:14 | S2 | -| main.rs:771:13:771:14 | S2 | | main.rs:711:5:712:14 | S2 | -| main.rs:776:13:776:14 | x1 | | main.rs:708:5:709:13 | S | -| main.rs:776:18:776:18 | S | | main.rs:708:5:709:13 | S | -| main.rs:778:18:778:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:778:18:778:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:778:18:778:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:778:18:778:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:778:26:778:27 | x1 | | main.rs:708:5:709:13 | S | -| main.rs:778:26:778:32 | x1.m1() | | main.rs:714:5:715:14 | AT | -| main.rs:780:13:780:14 | x2 | | main.rs:708:5:709:13 | S | -| main.rs:780:18:780:18 | S | | main.rs:708:5:709:13 | S | -| main.rs:782:13:782:13 | y | | main.rs:714:5:715:14 | AT | -| main.rs:782:17:782:18 | x2 | | main.rs:708:5:709:13 | S | -| main.rs:782:17:782:23 | x2.m2() | | main.rs:714:5:715:14 | AT | -| main.rs:783:18:783:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:783:18:783:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:783:18:783:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:783:18:783:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:783:26:783:26 | y | | main.rs:714:5:715:14 | AT | -| main.rs:785:13:785:14 | x3 | | main.rs:708:5:709:13 | S | -| main.rs:785:18:785:18 | S | | main.rs:708:5:709:13 | S | -| main.rs:787:18:787:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:787:18:787:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:787:18:787:43 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:787:18:787:43 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:787:26:787:27 | x3 | | main.rs:708:5:709:13 | S | -| main.rs:787:26:787:34 | x3.put(...) | | main.rs:657:5:660:5 | Wrapper | -| main.rs:787:26:787:34 | x3.put(...) | A | {EXTERNAL LOCATION} | i32 | -| main.rs:787:26:787:43 | ... .unwrap() | | {EXTERNAL LOCATION} | i32 | -| main.rs:787:33:787:33 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:790:18:790:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:790:18:790:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:790:18:790:49 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:790:18:790:49 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:790:26:790:27 | x3 | | main.rs:708:5:709:13 | S | -| main.rs:790:26:790:40 | x3.putTwo(...) | | main.rs:657:5:660:5 | Wrapper | -| main.rs:790:26:790:40 | x3.putTwo(...) | A | main.rs:728:36:728:50 | AssociatedParam | -| main.rs:790:26:790:49 | ... .unwrap() | | main.rs:728:36:728:50 | AssociatedParam | -| main.rs:790:36:790:36 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:790:39:790:39 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:792:20:792:20 | S | | main.rs:708:5:709:13 | S | -| main.rs:793:18:793:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:793:18:793:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:793:18:793:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:793:18:793:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:795:13:795:14 | x5 | | main.rs:711:5:712:14 | S2 | -| main.rs:795:18:795:19 | S2 | | main.rs:711:5:712:14 | S2 | -| main.rs:796:18:796:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:796:18:796:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:796:18:796:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:796:18:796:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:796:26:796:27 | x5 | | main.rs:711:5:712:14 | S2 | -| main.rs:796:26:796:32 | x5.m1() | | main.rs:657:5:660:5 | Wrapper | -| main.rs:796:26:796:32 | x5.m1() | A | main.rs:711:5:712:14 | S2 | -| main.rs:797:13:797:14 | x6 | | main.rs:711:5:712:14 | S2 | -| main.rs:797:18:797:19 | S2 | | main.rs:711:5:712:14 | S2 | -| main.rs:798:18:798:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:798:18:798:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:798:18:798:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:798:18:798:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:798:26:798:27 | x6 | | main.rs:711:5:712:14 | S2 | -| main.rs:798:26:798:32 | x6.m2() | | main.rs:657:5:660:5 | Wrapper | -| main.rs:798:26:798:32 | x6.m2() | A | main.rs:711:5:712:14 | S2 | -| main.rs:800:13:800:22 | assoc_zero | | main.rs:714:5:715:14 | AT | -| main.rs:800:26:800:27 | AT | | main.rs:714:5:715:14 | AT | -| main.rs:800:26:800:38 | AT.get_zero() | | main.rs:714:5:715:14 | AT | -| main.rs:801:13:801:21 | assoc_one | | main.rs:708:5:709:13 | S | -| main.rs:801:25:801:26 | AT | | main.rs:714:5:715:14 | AT | -| main.rs:801:25:801:36 | AT.get_one() | | main.rs:708:5:709:13 | S | -| main.rs:802:13:802:21 | assoc_two | | main.rs:711:5:712:14 | S2 | -| main.rs:802:25:802:26 | AT | | main.rs:714:5:715:14 | AT | -| main.rs:802:25:802:36 | AT.get_two() | | main.rs:711:5:712:14 | S2 | -| main.rs:809:19:809:25 | content | | main.rs:808:9:808:21 | Content | -| main.rs:814:24:814:28 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:814:24:814:28 | SelfParam | &T | main.rs:812:5:815:5 | Self [trait Subtrait] | -| main.rs:821:19:821:26 | _content | | main.rs:819:10:819:10 | T | -| main.rs:822:22:822:42 | "Inserting content: \\n" | | file://:0:0:0:0 | & | -| main.rs:822:22:822:42 | "Inserting content: \\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:822:22:822:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:822:22:822:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:828:24:828:28 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:828:24:828:28 | SelfParam | &T | main.rs:817:5:817:24 | MyType | -| main.rs:828:24:828:28 | SelfParam | &T.T | main.rs:826:10:826:17 | T | -| main.rs:828:48:830:9 | { ... } | | main.rs:826:10:826:17 | T | -| main.rs:829:13:829:19 | (...) | | main.rs:817:5:817:24 | MyType | -| main.rs:829:13:829:19 | (...) | T | main.rs:826:10:826:17 | T | -| main.rs:829:13:829:21 | ... .0 | | main.rs:826:10:826:17 | T | -| main.rs:829:13:829:29 | ... .clone() | | main.rs:826:10:826:17 | T | -| main.rs:829:14:829:18 | * ... | | main.rs:817:5:817:24 | MyType | -| main.rs:829:14:829:18 | * ... | T | main.rs:826:10:826:17 | T | -| main.rs:829:15:829:18 | self | | file://:0:0:0:0 | & | -| main.rs:829:15:829:18 | self | &T | main.rs:817:5:817:24 | MyType | -| main.rs:829:15:829:18 | self | &T.T | main.rs:826:10:826:17 | T | -| main.rs:833:33:833:36 | item | | file://:0:0:0:0 | & | -| main.rs:833:33:833:36 | item | &T | main.rs:833:20:833:30 | T | -| main.rs:833:57:835:5 | { ... } | | main.rs:808:9:808:21 | Content | -| main.rs:834:9:834:12 | item | | file://:0:0:0:0 | & | -| main.rs:834:9:834:12 | item | &T | main.rs:833:20:833:30 | T | -| main.rs:834:9:834:26 | item.get_content() | | main.rs:808:9:808:21 | Content | -| main.rs:838:13:838:17 | item1 | | main.rs:817:5:817:24 | MyType | -| main.rs:838:13:838:17 | item1 | T | {EXTERNAL LOCATION} | i64 | -| main.rs:838:21:838:33 | MyType(...) | | main.rs:817:5:817:24 | MyType | -| main.rs:838:21:838:33 | MyType(...) | T | {EXTERNAL LOCATION} | i64 | -| main.rs:838:28:838:32 | 42i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:839:25:839:29 | item1 | | main.rs:817:5:817:24 | MyType | -| main.rs:839:25:839:29 | item1 | T | {EXTERNAL LOCATION} | i64 | -| main.rs:841:13:841:17 | item2 | | main.rs:817:5:817:24 | MyType | -| main.rs:841:13:841:17 | item2 | T | {EXTERNAL LOCATION} | bool | -| main.rs:841:21:841:32 | MyType(...) | | main.rs:817:5:817:24 | MyType | -| main.rs:841:21:841:32 | MyType(...) | T | {EXTERNAL LOCATION} | bool | -| main.rs:841:28:841:31 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:842:37:842:42 | &item2 | | file://:0:0:0:0 | & | -| main.rs:842:37:842:42 | &item2 | &T | main.rs:817:5:817:24 | MyType | -| main.rs:842:37:842:42 | &item2 | &T.T | {EXTERNAL LOCATION} | bool | -| main.rs:842:38:842:42 | item2 | | main.rs:817:5:817:24 | MyType | -| main.rs:842:38:842:42 | item2 | T | {EXTERNAL LOCATION} | bool | -| main.rs:859:15:859:18 | SelfParam | | main.rs:847:5:851:5 | MyEnum | -| main.rs:859:15:859:18 | SelfParam | A | main.rs:858:10:858:10 | T | -| main.rs:859:26:864:9 | { ... } | | main.rs:858:10:858:10 | T | -| main.rs:860:13:863:13 | match self { ... } | | main.rs:858:10:858:10 | T | -| main.rs:860:19:860:22 | self | | main.rs:847:5:851:5 | MyEnum | -| main.rs:860:19:860:22 | self | A | main.rs:858:10:858:10 | T | -| main.rs:861:17:861:29 | ...::C1(...) | | main.rs:847:5:851:5 | MyEnum | -| main.rs:861:17:861:29 | ...::C1(...) | A | main.rs:858:10:858:10 | T | -| main.rs:861:28:861:28 | a | | main.rs:858:10:858:10 | T | -| main.rs:861:34:861:34 | a | | main.rs:858:10:858:10 | T | -| main.rs:862:17:862:32 | ...::C2 {...} | | main.rs:847:5:851:5 | MyEnum | -| main.rs:862:17:862:32 | ...::C2 {...} | A | main.rs:858:10:858:10 | T | -| main.rs:862:30:862:30 | a | | main.rs:858:10:858:10 | T | -| main.rs:862:37:862:37 | a | | main.rs:858:10:858:10 | T | -| main.rs:868:13:868:13 | x | | main.rs:847:5:851:5 | MyEnum | -| main.rs:868:13:868:13 | x | A | main.rs:853:5:854:14 | S1 | -| main.rs:868:17:868:30 | ...::C1(...) | | main.rs:847:5:851:5 | MyEnum | -| main.rs:868:17:868:30 | ...::C1(...) | A | main.rs:853:5:854:14 | S1 | -| main.rs:868:28:868:29 | S1 | | main.rs:853:5:854:14 | S1 | -| main.rs:869:13:869:13 | y | | main.rs:847:5:851:5 | MyEnum | -| main.rs:869:13:869:13 | y | A | main.rs:855:5:856:14 | S2 | -| main.rs:869:17:869:36 | ...::C2 {...} | | main.rs:847:5:851:5 | MyEnum | -| main.rs:869:17:869:36 | ...::C2 {...} | A | main.rs:855:5:856:14 | S2 | -| main.rs:869:33:869:34 | S2 | | main.rs:855:5:856:14 | S2 | -| main.rs:871:18:871:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:871:18:871:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:871:18:871:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:871:18:871:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:871:26:871:26 | x | | main.rs:847:5:851:5 | MyEnum | -| main.rs:871:26:871:26 | x | A | main.rs:853:5:854:14 | S1 | -| main.rs:871:26:871:31 | x.m1() | | main.rs:853:5:854:14 | S1 | -| main.rs:872:18:872:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:872:18:872:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:872:18:872:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:872:18:872:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:872:26:872:26 | y | | main.rs:847:5:851:5 | MyEnum | -| main.rs:872:26:872:26 | y | A | main.rs:855:5:856:14 | S2 | -| main.rs:872:26:872:31 | y.m1() | | main.rs:855:5:856:14 | S2 | -| main.rs:894:15:894:18 | SelfParam | | main.rs:892:5:895:5 | Self [trait MyTrait1] | -| main.rs:899:15:899:18 | SelfParam | | main.rs:897:5:909:5 | Self [trait MyTrait2] | -| main.rs:902:9:908:9 | { ... } | | main.rs:897:20:897:22 | Tr2 | -| main.rs:903:13:907:13 | if ... {...} else {...} | | main.rs:897:20:897:22 | Tr2 | -| main.rs:903:16:903:16 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:903:16:903:20 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:903:20:903:20 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:903:22:905:13 | { ... } | | main.rs:897:20:897:22 | Tr2 | -| main.rs:904:17:904:20 | self | | main.rs:897:5:909:5 | Self [trait MyTrait2] | -| main.rs:904:17:904:25 | self.m1() | | main.rs:897:20:897:22 | Tr2 | -| main.rs:905:20:907:13 | { ... } | | main.rs:897:20:897:22 | Tr2 | -| main.rs:906:17:906:30 | ...::m1(...) | | main.rs:897:20:897:22 | Tr2 | -| main.rs:906:26:906:29 | self | | main.rs:897:5:909:5 | Self [trait MyTrait2] | -| main.rs:913:15:913:18 | SelfParam | | main.rs:911:5:923:5 | Self [trait MyTrait3] | -| main.rs:916:9:922:9 | { ... } | | main.rs:911:20:911:22 | Tr3 | -| main.rs:917:13:921:13 | if ... {...} else {...} | | main.rs:911:20:911:22 | Tr3 | -| main.rs:917:16:917:16 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:917:16:917:20 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:917:20:917:20 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:917:22:919:13 | { ... } | | main.rs:911:20:911:22 | Tr3 | -| main.rs:918:17:918:20 | self | | main.rs:911:5:923:5 | Self [trait MyTrait3] | -| main.rs:918:17:918:25 | self.m2() | | main.rs:877:5:880:5 | MyThing | -| main.rs:918:17:918:25 | self.m2() | A | main.rs:911:20:911:22 | Tr3 | -| main.rs:918:17:918:27 | ... .a | | main.rs:911:20:911:22 | Tr3 | -| main.rs:919:20:921:13 | { ... } | | main.rs:911:20:911:22 | Tr3 | -| main.rs:920:17:920:30 | ...::m2(...) | | main.rs:877:5:880:5 | MyThing | -| main.rs:920:17:920:30 | ...::m2(...) | A | main.rs:911:20:911:22 | Tr3 | -| main.rs:920:17:920:32 | ... .a | | main.rs:911:20:911:22 | Tr3 | -| main.rs:920:26:920:29 | self | | main.rs:911:5:923:5 | Self [trait MyTrait3] | -| main.rs:927:15:927:18 | SelfParam | | main.rs:877:5:880:5 | MyThing | -| main.rs:927:15:927:18 | SelfParam | A | main.rs:925:10:925:10 | T | -| main.rs:927:26:929:9 | { ... } | | main.rs:925:10:925:10 | T | -| main.rs:928:13:928:16 | self | | main.rs:877:5:880:5 | MyThing | -| main.rs:928:13:928:16 | self | A | main.rs:925:10:925:10 | T | -| main.rs:928:13:928:18 | self.a | | main.rs:925:10:925:10 | T | -| main.rs:936:15:936:18 | SelfParam | | main.rs:882:5:885:5 | MyThing2 | -| main.rs:936:15:936:18 | SelfParam | A | main.rs:934:10:934:10 | T | -| main.rs:936:35:938:9 | { ... } | | main.rs:877:5:880:5 | MyThing | -| main.rs:936:35:938:9 | { ... } | A | main.rs:934:10:934:10 | T | -| main.rs:937:13:937:33 | MyThing {...} | | main.rs:877:5:880:5 | MyThing | -| main.rs:937:13:937:33 | MyThing {...} | A | main.rs:934:10:934:10 | T | -| main.rs:937:26:937:29 | self | | main.rs:882:5:885:5 | MyThing2 | -| main.rs:937:26:937:29 | self | A | main.rs:934:10:934:10 | T | -| main.rs:937:26:937:31 | self.a | | main.rs:934:10:934:10 | T | -| main.rs:945:44:945:44 | x | | main.rs:945:26:945:41 | T2 | -| main.rs:945:57:947:5 | { ... } | | main.rs:945:22:945:23 | T1 | -| main.rs:946:9:946:9 | x | | main.rs:945:26:945:41 | T2 | -| main.rs:946:9:946:14 | x.m1() | | main.rs:945:22:945:23 | T1 | -| main.rs:949:56:949:56 | x | | main.rs:949:39:949:53 | T | -| main.rs:951:13:951:13 | a | | main.rs:877:5:880:5 | MyThing | -| main.rs:951:13:951:13 | a | A | main.rs:887:5:888:14 | S1 | -| main.rs:951:17:951:17 | x | | main.rs:949:39:949:53 | T | -| main.rs:951:17:951:22 | x.m1() | | main.rs:877:5:880:5 | MyThing | -| main.rs:951:17:951:22 | x.m1() | A | main.rs:887:5:888:14 | S1 | -| main.rs:952:18:952:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:952:18:952:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:952:18:952:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:952:18:952:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:952:26:952:26 | a | | main.rs:877:5:880:5 | MyThing | -| main.rs:952:26:952:26 | a | A | main.rs:887:5:888:14 | S1 | -| main.rs:956:13:956:13 | x | | main.rs:877:5:880:5 | MyThing | -| main.rs:956:13:956:13 | x | A | main.rs:887:5:888:14 | S1 | -| main.rs:956:17:956:33 | MyThing {...} | | main.rs:877:5:880:5 | MyThing | -| main.rs:956:17:956:33 | MyThing {...} | A | main.rs:887:5:888:14 | S1 | -| main.rs:956:30:956:31 | S1 | | main.rs:887:5:888:14 | S1 | -| main.rs:957:13:957:13 | y | | main.rs:877:5:880:5 | MyThing | -| main.rs:957:13:957:13 | y | A | main.rs:889:5:890:14 | S2 | -| main.rs:957:17:957:33 | MyThing {...} | | main.rs:877:5:880:5 | MyThing | -| main.rs:957:17:957:33 | MyThing {...} | A | main.rs:889:5:890:14 | S2 | -| main.rs:957:30:957:31 | S2 | | main.rs:889:5:890:14 | S2 | -| main.rs:959:18:959:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:959:18:959:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:959:18:959:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:959:18:959:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:959:26:959:26 | x | | main.rs:877:5:880:5 | MyThing | -| main.rs:959:26:959:26 | x | A | main.rs:887:5:888:14 | S1 | -| main.rs:959:26:959:31 | x.m1() | | main.rs:887:5:888:14 | S1 | -| main.rs:960:18:960:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:960:18:960:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:960:18:960:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:960:18:960:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:960:26:960:26 | y | | main.rs:877:5:880:5 | MyThing | -| main.rs:960:26:960:26 | y | A | main.rs:889:5:890:14 | S2 | -| main.rs:960:26:960:31 | y.m1() | | main.rs:889:5:890:14 | S2 | -| main.rs:962:13:962:13 | x | | main.rs:877:5:880:5 | MyThing | -| main.rs:962:13:962:13 | x | A | main.rs:887:5:888:14 | S1 | -| main.rs:962:17:962:33 | MyThing {...} | | main.rs:877:5:880:5 | MyThing | -| main.rs:962:17:962:33 | MyThing {...} | A | main.rs:887:5:888:14 | S1 | -| main.rs:962:30:962:31 | S1 | | main.rs:887:5:888:14 | S1 | -| main.rs:963:13:963:13 | y | | main.rs:877:5:880:5 | MyThing | -| main.rs:963:13:963:13 | y | A | main.rs:889:5:890:14 | S2 | -| main.rs:963:17:963:33 | MyThing {...} | | main.rs:877:5:880:5 | MyThing | -| main.rs:963:17:963:33 | MyThing {...} | A | main.rs:889:5:890:14 | S2 | -| main.rs:963:30:963:31 | S2 | | main.rs:889:5:890:14 | S2 | -| main.rs:965:18:965:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:965:18:965:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:965:18:965:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:965:18:965:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:965:26:965:26 | x | | main.rs:877:5:880:5 | MyThing | -| main.rs:965:26:965:26 | x | A | main.rs:887:5:888:14 | S1 | -| main.rs:965:26:965:31 | x.m2() | | main.rs:887:5:888:14 | S1 | -| main.rs:966:18:966:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:966:18:966:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:966:18:966:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:966:18:966:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:966:26:966:26 | y | | main.rs:877:5:880:5 | MyThing | -| main.rs:966:26:966:26 | y | A | main.rs:889:5:890:14 | S2 | -| main.rs:966:26:966:31 | y.m2() | | main.rs:889:5:890:14 | S2 | -| main.rs:968:13:968:13 | x | | main.rs:882:5:885:5 | MyThing2 | -| main.rs:968:13:968:13 | x | A | main.rs:887:5:888:14 | S1 | -| main.rs:968:17:968:34 | MyThing2 {...} | | main.rs:882:5:885:5 | MyThing2 | -| main.rs:968:17:968:34 | MyThing2 {...} | A | main.rs:887:5:888:14 | S1 | -| main.rs:968:31:968:32 | S1 | | main.rs:887:5:888:14 | S1 | -| main.rs:969:13:969:13 | y | | main.rs:882:5:885:5 | MyThing2 | -| main.rs:969:13:969:13 | y | A | main.rs:889:5:890:14 | S2 | -| main.rs:969:17:969:34 | MyThing2 {...} | | main.rs:882:5:885:5 | MyThing2 | -| main.rs:969:17:969:34 | MyThing2 {...} | A | main.rs:889:5:890:14 | S2 | -| main.rs:969:31:969:32 | S2 | | main.rs:889:5:890:14 | S2 | -| main.rs:971:18:971:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:971:18:971:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:971:18:971:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:971:18:971:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:971:26:971:26 | x | | main.rs:882:5:885:5 | MyThing2 | -| main.rs:971:26:971:26 | x | A | main.rs:887:5:888:14 | S1 | -| main.rs:971:26:971:31 | x.m3() | | main.rs:887:5:888:14 | S1 | -| main.rs:972:18:972:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:972:18:972:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:972:18:972:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:972:18:972:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:972:26:972:26 | y | | main.rs:882:5:885:5 | MyThing2 | -| main.rs:972:26:972:26 | y | A | main.rs:889:5:890:14 | S2 | -| main.rs:972:26:972:31 | y.m3() | | main.rs:889:5:890:14 | S2 | -| main.rs:974:13:974:13 | x | | main.rs:877:5:880:5 | MyThing | -| main.rs:974:13:974:13 | x | A | main.rs:887:5:888:14 | S1 | -| main.rs:974:17:974:33 | MyThing {...} | | main.rs:877:5:880:5 | MyThing | -| main.rs:974:17:974:33 | MyThing {...} | A | main.rs:887:5:888:14 | S1 | -| main.rs:974:30:974:31 | S1 | | main.rs:887:5:888:14 | S1 | -| main.rs:975:13:975:13 | s | | main.rs:887:5:888:14 | S1 | -| main.rs:975:17:975:32 | call_trait_m1(...) | | main.rs:887:5:888:14 | S1 | -| main.rs:975:31:975:31 | x | | main.rs:877:5:880:5 | MyThing | -| main.rs:975:31:975:31 | x | A | main.rs:887:5:888:14 | S1 | -| main.rs:977:13:977:13 | x | | main.rs:882:5:885:5 | MyThing2 | -| main.rs:977:13:977:13 | x | A | main.rs:889:5:890:14 | S2 | -| main.rs:977:17:977:34 | MyThing2 {...} | | main.rs:882:5:885:5 | MyThing2 | -| main.rs:977:17:977:34 | MyThing2 {...} | A | main.rs:889:5:890:14 | S2 | -| main.rs:977:31:977:32 | S2 | | main.rs:889:5:890:14 | S2 | -| main.rs:978:13:978:13 | s | | main.rs:877:5:880:5 | MyThing | -| main.rs:978:13:978:13 | s | A | main.rs:889:5:890:14 | S2 | -| main.rs:978:17:978:32 | call_trait_m1(...) | | main.rs:877:5:880:5 | MyThing | -| main.rs:978:17:978:32 | call_trait_m1(...) | A | main.rs:889:5:890:14 | S2 | -| main.rs:978:31:978:31 | x | | main.rs:882:5:885:5 | MyThing2 | -| main.rs:978:31:978:31 | x | A | main.rs:889:5:890:14 | S2 | -| main.rs:995:22:995:22 | x | | file://:0:0:0:0 | & | -| main.rs:995:22:995:22 | x | &T | main.rs:995:11:995:19 | T | -| main.rs:995:35:997:5 | { ... } | | file://:0:0:0:0 | & | -| main.rs:995:35:997:5 | { ... } | &T | main.rs:995:11:995:19 | T | -| main.rs:996:9:996:9 | x | | file://:0:0:0:0 | & | -| main.rs:996:9:996:9 | x | &T | main.rs:995:11:995:19 | T | -| main.rs:1000:17:1000:20 | SelfParam | | main.rs:985:5:986:14 | S1 | -| main.rs:1000:29:1002:9 | { ... } | | main.rs:988:5:989:14 | S2 | -| main.rs:1001:13:1001:14 | S2 | | main.rs:988:5:989:14 | S2 | -| main.rs:1005:21:1005:21 | x | | main.rs:1005:13:1005:14 | T1 | -| main.rs:1008:5:1010:5 | { ... } | | main.rs:1005:17:1005:18 | T2 | -| main.rs:1009:9:1009:9 | x | | main.rs:1005:13:1005:14 | T1 | -| main.rs:1009:9:1009:16 | x.into() | | main.rs:1005:17:1005:18 | T2 | -| main.rs:1013:13:1013:13 | x | | main.rs:985:5:986:14 | S1 | -| main.rs:1013:17:1013:18 | S1 | | main.rs:985:5:986:14 | S1 | -| main.rs:1014:18:1014:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1014:18:1014:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1014:18:1014:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1014:18:1014:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1014:26:1014:31 | id(...) | | file://:0:0:0:0 | & | -| main.rs:1014:26:1014:31 | id(...) | &T | main.rs:985:5:986:14 | S1 | -| main.rs:1014:29:1014:30 | &x | | file://:0:0:0:0 | & | -| main.rs:1014:29:1014:30 | &x | &T | main.rs:985:5:986:14 | S1 | -| main.rs:1014:30:1014:30 | x | | main.rs:985:5:986:14 | S1 | -| main.rs:1016:13:1016:13 | x | | main.rs:985:5:986:14 | S1 | -| main.rs:1016:17:1016:18 | S1 | | main.rs:985:5:986:14 | S1 | -| main.rs:1017:18:1017:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1017:18:1017:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1017:18:1017:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1017:18:1017:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1017:26:1017:37 | id::<...>(...) | | file://:0:0:0:0 | & | -| main.rs:1017:26:1017:37 | id::<...>(...) | &T | main.rs:985:5:986:14 | S1 | -| main.rs:1017:35:1017:36 | &x | | file://:0:0:0:0 | & | -| main.rs:1017:35:1017:36 | &x | &T | main.rs:985:5:986:14 | S1 | -| main.rs:1017:36:1017:36 | x | | main.rs:985:5:986:14 | S1 | -| main.rs:1019:13:1019:13 | x | | main.rs:985:5:986:14 | S1 | -| main.rs:1019:13:1019:13 | x | | main.rs:991:5:991:25 | dyn Trait | -| main.rs:1019:17:1019:18 | S1 | | main.rs:985:5:986:14 | S1 | -| main.rs:1019:17:1019:18 | S1 | | main.rs:991:5:991:25 | dyn Trait | -| main.rs:1021:18:1021:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1021:18:1021:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1021:18:1021:44 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1021:18:1021:44 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1021:26:1021:44 | id::<...>(...) | | file://:0:0:0:0 | & | -| main.rs:1021:26:1021:44 | id::<...>(...) | &T | main.rs:991:5:991:25 | dyn Trait | -| main.rs:1021:42:1021:43 | &x | | file://:0:0:0:0 | & | -| main.rs:1021:42:1021:43 | &x | &T | main.rs:985:5:986:14 | S1 | -| main.rs:1021:42:1021:43 | &x | &T | main.rs:991:5:991:25 | dyn Trait | -| main.rs:1021:43:1021:43 | x | | main.rs:985:5:986:14 | S1 | -| main.rs:1021:43:1021:43 | x | | main.rs:991:5:991:25 | dyn Trait | -| main.rs:1023:13:1023:13 | x | | main.rs:985:5:986:14 | S1 | -| main.rs:1023:17:1023:18 | S1 | | main.rs:985:5:986:14 | S1 | -| main.rs:1024:9:1024:25 | into::<...>(...) | | main.rs:988:5:989:14 | S2 | -| main.rs:1024:24:1024:24 | x | | main.rs:985:5:986:14 | S1 | -| main.rs:1026:13:1026:13 | x | | main.rs:985:5:986:14 | S1 | -| main.rs:1026:17:1026:18 | S1 | | main.rs:985:5:986:14 | S1 | -| main.rs:1027:13:1027:13 | y | | main.rs:988:5:989:14 | S2 | -| main.rs:1027:21:1027:27 | into(...) | | main.rs:988:5:989:14 | S2 | -| main.rs:1027:26:1027:26 | x | | main.rs:985:5:986:14 | S1 | -| main.rs:1041:22:1041:25 | SelfParam | | main.rs:1032:5:1038:5 | PairOption | -| main.rs:1041:22:1041:25 | SelfParam | Fst | main.rs:1040:10:1040:12 | Fst | -| main.rs:1041:22:1041:25 | SelfParam | Snd | main.rs:1040:15:1040:17 | Snd | -| main.rs:1041:35:1048:9 | { ... } | | main.rs:1040:15:1040:17 | Snd | -| main.rs:1042:13:1047:13 | match self { ... } | | main.rs:1040:15:1040:17 | Snd | -| main.rs:1042:19:1042:22 | self | | main.rs:1032:5:1038:5 | PairOption | -| main.rs:1042:19:1042:22 | self | Fst | main.rs:1040:10:1040:12 | Fst | -| main.rs:1042:19:1042:22 | self | Snd | main.rs:1040:15:1040:17 | Snd | -| main.rs:1043:17:1043:38 | ...::PairNone(...) | | main.rs:1032:5:1038:5 | PairOption | -| main.rs:1043:17:1043:38 | ...::PairNone(...) | Fst | main.rs:1040:10:1040:12 | Fst | -| main.rs:1043:17:1043:38 | ...::PairNone(...) | Snd | main.rs:1040:15:1040:17 | Snd | -| main.rs:1043:43:1043:82 | MacroExpr | | main.rs:1040:15:1040:17 | Snd | -| main.rs:1043:50:1043:81 | "PairNone has no second elemen... | | file://:0:0:0:0 | & | -| main.rs:1043:50:1043:81 | "PairNone has no second elemen... | &T | {EXTERNAL LOCATION} | str | -| main.rs:1043:50:1043:81 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1043:50:1043:81 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1043:50:1043:81 | MacroExpr | | main.rs:1040:15:1040:17 | Snd | -| main.rs:1043:50:1043:81 | { ... } | | main.rs:1040:15:1040:17 | Snd | -| main.rs:1044:17:1044:38 | ...::PairFst(...) | | main.rs:1032:5:1038:5 | PairOption | -| main.rs:1044:17:1044:38 | ...::PairFst(...) | Fst | main.rs:1040:10:1040:12 | Fst | -| main.rs:1044:17:1044:38 | ...::PairFst(...) | Snd | main.rs:1040:15:1040:17 | Snd | -| main.rs:1044:37:1044:37 | _ | | main.rs:1040:10:1040:12 | Fst | -| main.rs:1044:43:1044:81 | MacroExpr | | main.rs:1040:15:1040:17 | Snd | -| main.rs:1044:50:1044:80 | "PairFst has no second element... | | file://:0:0:0:0 | & | -| main.rs:1044:50:1044:80 | "PairFst has no second element... | &T | {EXTERNAL LOCATION} | str | -| main.rs:1044:50:1044:80 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1044:50:1044:80 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1044:50:1044:80 | MacroExpr | | main.rs:1040:15:1040:17 | Snd | -| main.rs:1044:50:1044:80 | { ... } | | main.rs:1040:15:1040:17 | Snd | -| main.rs:1045:17:1045:40 | ...::PairSnd(...) | | main.rs:1032:5:1038:5 | PairOption | -| main.rs:1045:17:1045:40 | ...::PairSnd(...) | Fst | main.rs:1040:10:1040:12 | Fst | -| main.rs:1045:17:1045:40 | ...::PairSnd(...) | Snd | main.rs:1040:15:1040:17 | Snd | -| main.rs:1045:37:1045:39 | snd | | main.rs:1040:15:1040:17 | Snd | -| main.rs:1045:45:1045:47 | snd | | main.rs:1040:15:1040:17 | Snd | -| main.rs:1046:17:1046:44 | ...::PairBoth(...) | | main.rs:1032:5:1038:5 | PairOption | -| main.rs:1046:17:1046:44 | ...::PairBoth(...) | Fst | main.rs:1040:10:1040:12 | Fst | -| main.rs:1046:17:1046:44 | ...::PairBoth(...) | Snd | main.rs:1040:15:1040:17 | Snd | -| main.rs:1046:38:1046:38 | _ | | main.rs:1040:10:1040:12 | Fst | -| main.rs:1046:41:1046:43 | snd | | main.rs:1040:15:1040:17 | Snd | -| main.rs:1046:49:1046:51 | snd | | main.rs:1040:15:1040:17 | Snd | -| main.rs:1072:10:1072:10 | t | | main.rs:1032:5:1038:5 | PairOption | -| main.rs:1072:10:1072:10 | t | Fst | main.rs:1054:5:1055:14 | S2 | -| main.rs:1072:10:1072:10 | t | Snd | main.rs:1032:5:1038:5 | PairOption | -| main.rs:1072:10:1072:10 | t | Snd.Fst | main.rs:1054:5:1055:14 | S2 | -| main.rs:1072:10:1072:10 | t | Snd.Snd | main.rs:1057:5:1058:14 | S3 | -| main.rs:1073:13:1073:13 | x | | main.rs:1057:5:1058:14 | S3 | -| main.rs:1073:17:1073:17 | t | | main.rs:1032:5:1038:5 | PairOption | -| main.rs:1073:17:1073:17 | t | Fst | main.rs:1054:5:1055:14 | S2 | -| main.rs:1073:17:1073:17 | t | Snd | main.rs:1032:5:1038:5 | PairOption | -| main.rs:1073:17:1073:17 | t | Snd.Fst | main.rs:1054:5:1055:14 | S2 | -| main.rs:1073:17:1073:17 | t | Snd.Snd | main.rs:1057:5:1058:14 | S3 | -| main.rs:1073:17:1073:29 | t.unwrapSnd() | | main.rs:1032:5:1038:5 | PairOption | -| main.rs:1073:17:1073:29 | t.unwrapSnd() | Fst | main.rs:1054:5:1055:14 | S2 | -| main.rs:1073:17:1073:29 | t.unwrapSnd() | Snd | main.rs:1057:5:1058:14 | S3 | -| main.rs:1073:17:1073:41 | ... .unwrapSnd() | | main.rs:1057:5:1058:14 | S3 | -| main.rs:1074:18:1074:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1074:18:1074:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1074:18:1074:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1074:18:1074:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1074:26:1074:26 | x | | main.rs:1057:5:1058:14 | S3 | -| main.rs:1089:22:1089:25 | SelfParam | | main.rs:1087:5:1090:5 | Self [trait TraitWithAssocType] | -| main.rs:1097:22:1097:25 | SelfParam | | main.rs:1085:5:1085:28 | GenS | -| main.rs:1097:22:1097:25 | SelfParam | GenT | main.rs:1092:10:1092:15 | Output | -| main.rs:1097:44:1099:9 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1097:44:1099:9 | { ... } | E | main.rs:1092:10:1092:15 | Output | -| main.rs:1097:44:1099:9 | { ... } | T | main.rs:1092:10:1092:15 | Output | -| main.rs:1098:13:1098:22 | Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1098:13:1098:22 | Ok(...) | E | main.rs:1092:10:1092:15 | Output | -| main.rs:1098:13:1098:22 | Ok(...) | T | main.rs:1092:10:1092:15 | Output | -| main.rs:1098:16:1098:19 | self | | main.rs:1085:5:1085:28 | GenS | -| main.rs:1098:16:1098:19 | self | GenT | main.rs:1092:10:1092:15 | Output | -| main.rs:1098:16:1098:21 | self.0 | | main.rs:1092:10:1092:15 | Output | -| main.rs:1104:13:1104:14 | p1 | | main.rs:1032:5:1038:5 | PairOption | -| main.rs:1104:13:1104:14 | p1 | Fst | main.rs:1051:5:1052:14 | S1 | -| main.rs:1104:13:1104:14 | p1 | Snd | main.rs:1054:5:1055:14 | S2 | -| main.rs:1104:26:1104:53 | ...::PairBoth(...) | | main.rs:1032:5:1038:5 | PairOption | -| main.rs:1104:26:1104:53 | ...::PairBoth(...) | Fst | main.rs:1051:5:1052:14 | S1 | -| main.rs:1104:26:1104:53 | ...::PairBoth(...) | Snd | main.rs:1054:5:1055:14 | S2 | -| main.rs:1104:47:1104:48 | S1 | | main.rs:1051:5:1052:14 | S1 | -| main.rs:1104:51:1104:52 | S2 | | main.rs:1054:5:1055:14 | S2 | -| main.rs:1105:18:1105:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1105:18:1105:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1105:18:1105:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1105:18:1105:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1105:26:1105:27 | p1 | | main.rs:1032:5:1038:5 | PairOption | -| main.rs:1105:26:1105:27 | p1 | Fst | main.rs:1051:5:1052:14 | S1 | -| main.rs:1105:26:1105:27 | p1 | Snd | main.rs:1054:5:1055:14 | S2 | -| main.rs:1108:13:1108:14 | p2 | | main.rs:1032:5:1038:5 | PairOption | -| main.rs:1108:13:1108:14 | p2 | Fst | main.rs:1051:5:1052:14 | S1 | -| main.rs:1108:13:1108:14 | p2 | Snd | main.rs:1054:5:1055:14 | S2 | -| main.rs:1108:26:1108:47 | ...::PairNone(...) | | main.rs:1032:5:1038:5 | PairOption | -| main.rs:1108:26:1108:47 | ...::PairNone(...) | Fst | main.rs:1051:5:1052:14 | S1 | -| main.rs:1108:26:1108:47 | ...::PairNone(...) | Snd | main.rs:1054:5:1055:14 | S2 | +| main.rs:650:18:650:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:650:18:650:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:650:26:650:26 | x | | main.rs:601:5:604:5 | MyThing | +| main.rs:650:26:650:26 | x | T | main.rs:606:5:607:14 | S1 | +| main.rs:650:26:650:31 | x.m2() | | main.rs:606:5:607:14 | S1 | +| main.rs:651:18:651:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:651:18:651:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:651:18:651:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:651:18:651:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:651:26:651:26 | y | | main.rs:601:5:604:5 | MyThing | +| main.rs:651:26:651:26 | y | T | main.rs:608:5:609:14 | S2 | +| main.rs:651:26:651:31 | y.m2() | | main.rs:608:5:609:14 | S2 | +| main.rs:653:13:653:14 | x2 | | main.rs:601:5:604:5 | MyThing | +| main.rs:653:13:653:14 | x2 | T | main.rs:606:5:607:14 | S1 | +| main.rs:653:18:653:34 | MyThing {...} | | main.rs:601:5:604:5 | MyThing | +| main.rs:653:18:653:34 | MyThing {...} | T | main.rs:606:5:607:14 | S1 | +| main.rs:653:31:653:32 | S1 | | main.rs:606:5:607:14 | S1 | +| main.rs:654:13:654:14 | y2 | | main.rs:601:5:604:5 | MyThing | +| main.rs:654:13:654:14 | y2 | T | main.rs:608:5:609:14 | S2 | +| main.rs:654:18:654:34 | MyThing {...} | | main.rs:601:5:604:5 | MyThing | +| main.rs:654:18:654:34 | MyThing {...} | T | main.rs:608:5:609:14 | S2 | +| main.rs:654:31:654:32 | S2 | | main.rs:608:5:609:14 | S2 | +| main.rs:656:18:656:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:656:18:656:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:656:18:656:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:656:18:656:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:656:26:656:42 | call_trait_m1(...) | | main.rs:606:5:607:14 | S1 | +| main.rs:656:40:656:41 | x2 | | main.rs:601:5:604:5 | MyThing | +| main.rs:656:40:656:41 | x2 | T | main.rs:606:5:607:14 | S1 | +| main.rs:657:18:657:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:657:18:657:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:657:18:657:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:657:18:657:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:657:26:657:42 | call_trait_m1(...) | | main.rs:608:5:609:14 | S2 | +| main.rs:657:40:657:41 | y2 | | main.rs:601:5:604:5 | MyThing | +| main.rs:657:40:657:41 | y2 | T | main.rs:608:5:609:14 | S2 | +| main.rs:659:13:659:14 | x3 | | main.rs:601:5:604:5 | MyThing | +| main.rs:659:13:659:14 | x3 | T | main.rs:601:5:604:5 | MyThing | +| main.rs:659:13:659:14 | x3 | T.T | main.rs:606:5:607:14 | S1 | +| main.rs:659:18:661:9 | MyThing {...} | | main.rs:601:5:604:5 | MyThing | +| main.rs:659:18:661:9 | MyThing {...} | T | main.rs:601:5:604:5 | MyThing | +| main.rs:659:18:661:9 | MyThing {...} | T.T | main.rs:606:5:607:14 | S1 | +| main.rs:660:16:660:32 | MyThing {...} | | main.rs:601:5:604:5 | MyThing | +| main.rs:660:16:660:32 | MyThing {...} | T | main.rs:606:5:607:14 | S1 | +| main.rs:660:29:660:30 | S1 | | main.rs:606:5:607:14 | S1 | +| main.rs:662:13:662:14 | y3 | | main.rs:601:5:604:5 | MyThing | +| main.rs:662:13:662:14 | y3 | T | main.rs:601:5:604:5 | MyThing | +| main.rs:662:13:662:14 | y3 | T.T | main.rs:608:5:609:14 | S2 | +| main.rs:662:18:664:9 | MyThing {...} | | main.rs:601:5:604:5 | MyThing | +| main.rs:662:18:664:9 | MyThing {...} | T | main.rs:601:5:604:5 | MyThing | +| main.rs:662:18:664:9 | MyThing {...} | T.T | main.rs:608:5:609:14 | S2 | +| main.rs:663:16:663:32 | MyThing {...} | | main.rs:601:5:604:5 | MyThing | +| main.rs:663:16:663:32 | MyThing {...} | T | main.rs:608:5:609:14 | S2 | +| main.rs:663:29:663:30 | S2 | | main.rs:608:5:609:14 | S2 | +| main.rs:666:13:666:13 | a | | main.rs:606:5:607:14 | S1 | +| main.rs:666:17:666:39 | call_trait_thing_m1(...) | | main.rs:606:5:607:14 | S1 | +| main.rs:666:37:666:38 | x3 | | main.rs:601:5:604:5 | MyThing | +| main.rs:666:37:666:38 | x3 | T | main.rs:601:5:604:5 | MyThing | +| main.rs:666:37:666:38 | x3 | T.T | main.rs:606:5:607:14 | S1 | +| main.rs:667:18:667:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:667:18:667:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:667:18:667:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:667:18:667:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:667:26:667:26 | a | | main.rs:606:5:607:14 | S1 | +| main.rs:668:13:668:13 | b | | main.rs:608:5:609:14 | S2 | +| main.rs:668:17:668:39 | call_trait_thing_m1(...) | | main.rs:608:5:609:14 | S2 | +| main.rs:668:37:668:38 | y3 | | main.rs:601:5:604:5 | MyThing | +| main.rs:668:37:668:38 | y3 | T | main.rs:601:5:604:5 | MyThing | +| main.rs:668:37:668:38 | y3 | T.T | main.rs:608:5:609:14 | S2 | +| main.rs:669:18:669:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:669:18:669:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:669:18:669:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:669:18:669:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:669:26:669:26 | b | | main.rs:608:5:609:14 | S2 | +| main.rs:680:19:680:22 | SelfParam | | main.rs:674:5:677:5 | Wrapper | +| main.rs:680:19:680:22 | SelfParam | A | main.rs:679:10:679:10 | A | +| main.rs:680:30:682:9 | { ... } | | main.rs:679:10:679:10 | A | +| main.rs:681:13:681:16 | self | | main.rs:674:5:677:5 | Wrapper | +| main.rs:681:13:681:16 | self | A | main.rs:679:10:679:10 | A | +| main.rs:681:13:681:22 | self.field | | main.rs:679:10:679:10 | A | +| main.rs:689:15:689:18 | SelfParam | | main.rs:685:5:699:5 | Self [trait MyTrait] | +| main.rs:691:15:691:18 | SelfParam | | main.rs:685:5:699:5 | Self [trait MyTrait] | +| main.rs:695:9:698:9 | { ... } | | main.rs:686:9:686:28 | AssociatedType | +| main.rs:696:13:696:16 | self | | main.rs:685:5:699:5 | Self [trait MyTrait] | +| main.rs:696:13:696:21 | self.m1() | | main.rs:686:9:686:28 | AssociatedType | +| main.rs:697:13:697:43 | ...::default(...) | | main.rs:686:9:686:28 | AssociatedType | +| main.rs:705:19:705:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:705:19:705:23 | SelfParam | &T | main.rs:701:5:711:5 | Self [trait MyTraitAssoc2] | +| main.rs:705:26:705:26 | a | | main.rs:705:16:705:16 | A | +| main.rs:707:22:707:26 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:707:22:707:26 | SelfParam | &T | main.rs:701:5:711:5 | Self [trait MyTraitAssoc2] | +| main.rs:707:29:707:29 | a | | main.rs:707:19:707:19 | A | +| main.rs:707:35:707:35 | b | | main.rs:707:19:707:19 | A | +| main.rs:707:75:710:9 | { ... } | | main.rs:702:9:702:52 | GenericAssociatedType | +| main.rs:708:13:708:16 | self | | file://:0:0:0:0 | & | +| main.rs:708:13:708:16 | self | &T | main.rs:701:5:711:5 | Self [trait MyTraitAssoc2] | +| main.rs:708:13:708:23 | self.put(...) | | main.rs:702:9:702:52 | GenericAssociatedType | +| main.rs:708:22:708:22 | a | | main.rs:707:19:707:19 | A | +| main.rs:709:13:709:16 | self | | file://:0:0:0:0 | & | +| main.rs:709:13:709:16 | self | &T | main.rs:701:5:711:5 | Self [trait MyTraitAssoc2] | +| main.rs:709:13:709:23 | self.put(...) | | main.rs:702:9:702:52 | GenericAssociatedType | +| main.rs:709:22:709:22 | b | | main.rs:707:19:707:19 | A | +| main.rs:718:21:718:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:718:21:718:25 | SelfParam | &T | main.rs:713:5:723:5 | Self [trait TraitMultipleAssoc] | +| main.rs:720:20:720:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:720:20:720:24 | SelfParam | &T | main.rs:713:5:723:5 | Self [trait TraitMultipleAssoc] | +| main.rs:722:20:722:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:722:20:722:24 | SelfParam | &T | main.rs:713:5:723:5 | Self [trait TraitMultipleAssoc] | +| main.rs:738:15:738:18 | SelfParam | | main.rs:725:5:726:13 | S | +| main.rs:738:45:740:9 | { ... } | | main.rs:731:5:732:14 | AT | +| main.rs:739:13:739:14 | AT | | main.rs:731:5:732:14 | AT | +| main.rs:748:19:748:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:748:19:748:23 | SelfParam | &T | main.rs:725:5:726:13 | S | +| main.rs:748:26:748:26 | a | | main.rs:748:16:748:16 | A | +| main.rs:748:46:750:9 | { ... } | | main.rs:674:5:677:5 | Wrapper | +| main.rs:748:46:750:9 | { ... } | A | main.rs:748:16:748:16 | A | +| main.rs:749:13:749:32 | Wrapper {...} | | main.rs:674:5:677:5 | Wrapper | +| main.rs:749:13:749:32 | Wrapper {...} | A | main.rs:748:16:748:16 | A | +| main.rs:749:30:749:30 | a | | main.rs:748:16:748:16 | A | +| main.rs:757:15:757:18 | SelfParam | | main.rs:728:5:729:14 | S2 | +| main.rs:757:45:759:9 | { ... } | | main.rs:674:5:677:5 | Wrapper | +| main.rs:757:45:759:9 | { ... } | A | main.rs:728:5:729:14 | S2 | +| main.rs:758:13:758:35 | Wrapper {...} | | main.rs:674:5:677:5 | Wrapper | +| main.rs:758:13:758:35 | Wrapper {...} | A | main.rs:728:5:729:14 | S2 | +| main.rs:758:30:758:33 | self | | main.rs:728:5:729:14 | S2 | +| main.rs:764:30:766:9 | { ... } | | main.rs:674:5:677:5 | Wrapper | +| main.rs:764:30:766:9 | { ... } | A | main.rs:728:5:729:14 | S2 | +| main.rs:765:13:765:33 | Wrapper {...} | | main.rs:674:5:677:5 | Wrapper | +| main.rs:765:13:765:33 | Wrapper {...} | A | main.rs:728:5:729:14 | S2 | +| main.rs:765:30:765:31 | S2 | | main.rs:728:5:729:14 | S2 | +| main.rs:771:22:771:26 | thing | | main.rs:771:10:771:19 | T | +| main.rs:772:9:772:13 | thing | | main.rs:771:10:771:19 | T | +| main.rs:779:21:779:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:779:21:779:25 | SelfParam | &T | main.rs:731:5:732:14 | AT | +| main.rs:779:34:781:9 | { ... } | | main.rs:731:5:732:14 | AT | +| main.rs:780:13:780:14 | AT | | main.rs:731:5:732:14 | AT | +| main.rs:783:20:783:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:783:20:783:24 | SelfParam | &T | main.rs:731:5:732:14 | AT | +| main.rs:783:43:785:9 | { ... } | | main.rs:725:5:726:13 | S | +| main.rs:784:13:784:13 | S | | main.rs:725:5:726:13 | S | +| main.rs:787:20:787:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:787:20:787:24 | SelfParam | &T | main.rs:731:5:732:14 | AT | +| main.rs:787:43:789:9 | { ... } | | main.rs:728:5:729:14 | S2 | +| main.rs:788:13:788:14 | S2 | | main.rs:728:5:729:14 | S2 | +| main.rs:793:13:793:14 | x1 | | main.rs:725:5:726:13 | S | +| main.rs:793:18:793:18 | S | | main.rs:725:5:726:13 | S | +| main.rs:795:18:795:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:795:18:795:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:795:18:795:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:795:18:795:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:795:26:795:27 | x1 | | main.rs:725:5:726:13 | S | +| main.rs:795:26:795:32 | x1.m1() | | main.rs:731:5:732:14 | AT | +| main.rs:797:13:797:14 | x2 | | main.rs:725:5:726:13 | S | +| main.rs:797:18:797:18 | S | | main.rs:725:5:726:13 | S | +| main.rs:799:13:799:13 | y | | main.rs:731:5:732:14 | AT | +| main.rs:799:17:799:18 | x2 | | main.rs:725:5:726:13 | S | +| main.rs:799:17:799:23 | x2.m2() | | main.rs:731:5:732:14 | AT | +| main.rs:800:18:800:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:800:18:800:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:800:18:800:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:800:18:800:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:800:26:800:26 | y | | main.rs:731:5:732:14 | AT | +| main.rs:802:13:802:14 | x3 | | main.rs:725:5:726:13 | S | +| main.rs:802:18:802:18 | S | | main.rs:725:5:726:13 | S | +| main.rs:804:18:804:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:804:18:804:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:804:18:804:43 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:804:18:804:43 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:804:26:804:27 | x3 | | main.rs:725:5:726:13 | S | +| main.rs:804:26:804:34 | x3.put(...) | | main.rs:674:5:677:5 | Wrapper | +| main.rs:804:26:804:34 | x3.put(...) | A | {EXTERNAL LOCATION} | i32 | +| main.rs:804:26:804:43 | ... .unwrap() | | {EXTERNAL LOCATION} | i32 | +| main.rs:804:33:804:33 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:807:18:807:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:807:18:807:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:807:18:807:49 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:807:18:807:49 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:807:26:807:27 | x3 | | main.rs:725:5:726:13 | S | +| main.rs:807:26:807:40 | x3.putTwo(...) | | main.rs:674:5:677:5 | Wrapper | +| main.rs:807:26:807:40 | x3.putTwo(...) | A | main.rs:745:36:745:50 | AssociatedParam | +| main.rs:807:26:807:49 | ... .unwrap() | | main.rs:745:36:745:50 | AssociatedParam | +| main.rs:807:36:807:36 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:807:39:807:39 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:809:20:809:20 | S | | main.rs:725:5:726:13 | S | +| main.rs:810:18:810:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:810:18:810:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:810:18:810:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:810:18:810:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:812:13:812:14 | x5 | | main.rs:728:5:729:14 | S2 | +| main.rs:812:18:812:19 | S2 | | main.rs:728:5:729:14 | S2 | +| main.rs:813:18:813:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:813:18:813:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:813:18:813:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:813:18:813:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:813:26:813:27 | x5 | | main.rs:728:5:729:14 | S2 | +| main.rs:813:26:813:32 | x5.m1() | | main.rs:674:5:677:5 | Wrapper | +| main.rs:813:26:813:32 | x5.m1() | A | main.rs:728:5:729:14 | S2 | +| main.rs:814:13:814:14 | x6 | | main.rs:728:5:729:14 | S2 | +| main.rs:814:18:814:19 | S2 | | main.rs:728:5:729:14 | S2 | +| main.rs:815:18:815:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:815:18:815:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:815:18:815:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:815:18:815:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:815:26:815:27 | x6 | | main.rs:728:5:729:14 | S2 | +| main.rs:815:26:815:32 | x6.m2() | | main.rs:674:5:677:5 | Wrapper | +| main.rs:815:26:815:32 | x6.m2() | A | main.rs:728:5:729:14 | S2 | +| main.rs:817:13:817:22 | assoc_zero | | main.rs:731:5:732:14 | AT | +| main.rs:817:26:817:27 | AT | | main.rs:731:5:732:14 | AT | +| main.rs:817:26:817:38 | AT.get_zero() | | main.rs:731:5:732:14 | AT | +| main.rs:818:13:818:21 | assoc_one | | main.rs:725:5:726:13 | S | +| main.rs:818:25:818:26 | AT | | main.rs:731:5:732:14 | AT | +| main.rs:818:25:818:36 | AT.get_one() | | main.rs:725:5:726:13 | S | +| main.rs:819:13:819:21 | assoc_two | | main.rs:728:5:729:14 | S2 | +| main.rs:819:25:819:26 | AT | | main.rs:731:5:732:14 | AT | +| main.rs:819:25:819:36 | AT.get_two() | | main.rs:728:5:729:14 | S2 | +| main.rs:827:19:827:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:827:19:827:23 | SelfParam | &T | main.rs:824:5:828:5 | Self [trait Supertrait] | +| main.rs:827:26:827:32 | content | | main.rs:825:9:825:21 | Content | +| main.rs:832:24:832:28 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:832:24:832:28 | SelfParam | &T | main.rs:830:5:833:5 | Self [trait Subtrait] | +| main.rs:841:23:841:27 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:841:23:841:27 | SelfParam | &T | main.rs:835:5:845:5 | Self [trait Subtrait2] | +| main.rs:841:30:841:31 | c1 | | main.rs:825:9:825:21 | Content | +| main.rs:841:49:841:50 | c2 | | main.rs:825:9:825:21 | Content | +| main.rs:842:13:842:16 | self | | file://:0:0:0:0 | & | +| main.rs:842:13:842:16 | self | &T | main.rs:835:5:845:5 | Self [trait Subtrait2] | +| main.rs:842:25:842:26 | c1 | | main.rs:825:9:825:21 | Content | +| main.rs:843:13:843:16 | self | | file://:0:0:0:0 | & | +| main.rs:843:13:843:16 | self | &T | main.rs:835:5:845:5 | Self [trait Subtrait2] | +| main.rs:843:25:843:26 | c2 | | main.rs:825:9:825:21 | Content | +| main.rs:851:19:851:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:851:19:851:23 | SelfParam | &T | main.rs:847:5:847:24 | MyType | +| main.rs:851:19:851:23 | SelfParam | &T.T | main.rs:849:10:849:10 | T | +| main.rs:851:26:851:33 | _content | | main.rs:849:10:849:10 | T | +| main.rs:852:22:852:42 | "Inserting content: \\n" | | file://:0:0:0:0 | & | +| main.rs:852:22:852:42 | "Inserting content: \\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:852:22:852:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:852:22:852:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:858:24:858:28 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:858:24:858:28 | SelfParam | &T | main.rs:847:5:847:24 | MyType | +| main.rs:858:24:858:28 | SelfParam | &T.T | main.rs:856:10:856:17 | T | +| main.rs:858:48:860:9 | { ... } | | main.rs:856:10:856:17 | T | +| main.rs:859:13:859:19 | (...) | | main.rs:847:5:847:24 | MyType | +| main.rs:859:13:859:19 | (...) | T | main.rs:856:10:856:17 | T | +| main.rs:859:13:859:21 | ... .0 | | main.rs:856:10:856:17 | T | +| main.rs:859:13:859:29 | ... .clone() | | main.rs:856:10:856:17 | T | +| main.rs:859:14:859:18 | * ... | | main.rs:847:5:847:24 | MyType | +| main.rs:859:14:859:18 | * ... | T | main.rs:856:10:856:17 | T | +| main.rs:859:15:859:18 | self | | file://:0:0:0:0 | & | +| main.rs:859:15:859:18 | self | &T | main.rs:847:5:847:24 | MyType | +| main.rs:859:15:859:18 | self | &T.T | main.rs:856:10:856:17 | T | +| main.rs:863:33:863:36 | item | | file://:0:0:0:0 | & | +| main.rs:863:33:863:36 | item | &T | main.rs:863:20:863:30 | T | +| main.rs:863:57:865:5 | { ... } | | main.rs:825:9:825:21 | Content | +| main.rs:864:9:864:12 | item | | file://:0:0:0:0 | & | +| main.rs:864:9:864:12 | item | &T | main.rs:863:20:863:30 | T | +| main.rs:864:9:864:26 | item.get_content() | | main.rs:825:9:825:21 | Content | +| main.rs:867:35:867:38 | item | | file://:0:0:0:0 | & | +| main.rs:867:35:867:38 | item | &T | main.rs:867:21:867:32 | T | +| main.rs:867:45:867:46 | c1 | | main.rs:825:9:825:21 | Content | +| main.rs:867:61:867:62 | c2 | | main.rs:825:9:825:21 | Content | +| main.rs:867:77:867:78 | c3 | | main.rs:825:9:825:21 | Content | +| main.rs:868:9:868:12 | item | | file://:0:0:0:0 | & | +| main.rs:868:9:868:12 | item | &T | main.rs:867:21:867:32 | T | +| main.rs:868:21:868:22 | c1 | | main.rs:825:9:825:21 | Content | +| main.rs:869:9:869:12 | item | | file://:0:0:0:0 | & | +| main.rs:869:9:869:12 | item | &T | main.rs:867:21:867:32 | T | +| main.rs:869:25:869:26 | c2 | | main.rs:825:9:825:21 | Content | +| main.rs:869:29:869:30 | c3 | | main.rs:825:9:825:21 | Content | +| main.rs:873:13:873:17 | item1 | | main.rs:847:5:847:24 | MyType | +| main.rs:873:13:873:17 | item1 | T | {EXTERNAL LOCATION} | i64 | +| main.rs:873:21:873:33 | MyType(...) | | main.rs:847:5:847:24 | MyType | +| main.rs:873:21:873:33 | MyType(...) | T | {EXTERNAL LOCATION} | i64 | +| main.rs:873:28:873:32 | 42i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:874:25:874:29 | item1 | | main.rs:847:5:847:24 | MyType | +| main.rs:874:25:874:29 | item1 | T | {EXTERNAL LOCATION} | i64 | +| main.rs:876:13:876:17 | item2 | | main.rs:847:5:847:24 | MyType | +| main.rs:876:13:876:17 | item2 | T | {EXTERNAL LOCATION} | bool | +| main.rs:876:21:876:32 | MyType(...) | | main.rs:847:5:847:24 | MyType | +| main.rs:876:21:876:32 | MyType(...) | T | {EXTERNAL LOCATION} | bool | +| main.rs:876:28:876:31 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:877:37:877:42 | &item2 | | file://:0:0:0:0 | & | +| main.rs:877:37:877:42 | &item2 | &T | main.rs:847:5:847:24 | MyType | +| main.rs:877:37:877:42 | &item2 | &T.T | {EXTERNAL LOCATION} | bool | +| main.rs:877:38:877:42 | item2 | | main.rs:847:5:847:24 | MyType | +| main.rs:877:38:877:42 | item2 | T | {EXTERNAL LOCATION} | bool | +| main.rs:894:15:894:18 | SelfParam | | main.rs:882:5:886:5 | MyEnum | +| main.rs:894:15:894:18 | SelfParam | A | main.rs:893:10:893:10 | T | +| main.rs:894:26:899:9 | { ... } | | main.rs:893:10:893:10 | T | +| main.rs:895:13:898:13 | match self { ... } | | main.rs:893:10:893:10 | T | +| main.rs:895:19:895:22 | self | | main.rs:882:5:886:5 | MyEnum | +| main.rs:895:19:895:22 | self | A | main.rs:893:10:893:10 | T | +| main.rs:896:17:896:29 | ...::C1(...) | | main.rs:882:5:886:5 | MyEnum | +| main.rs:896:17:896:29 | ...::C1(...) | A | main.rs:893:10:893:10 | T | +| main.rs:896:28:896:28 | a | | main.rs:893:10:893:10 | T | +| main.rs:896:34:896:34 | a | | main.rs:893:10:893:10 | T | +| main.rs:897:17:897:32 | ...::C2 {...} | | main.rs:882:5:886:5 | MyEnum | +| main.rs:897:17:897:32 | ...::C2 {...} | A | main.rs:893:10:893:10 | T | +| main.rs:897:30:897:30 | a | | main.rs:893:10:893:10 | T | +| main.rs:897:37:897:37 | a | | main.rs:893:10:893:10 | T | +| main.rs:903:13:903:13 | x | | main.rs:882:5:886:5 | MyEnum | +| main.rs:903:13:903:13 | x | A | main.rs:888:5:889:14 | S1 | +| main.rs:903:17:903:30 | ...::C1(...) | | main.rs:882:5:886:5 | MyEnum | +| main.rs:903:17:903:30 | ...::C1(...) | A | main.rs:888:5:889:14 | S1 | +| main.rs:903:28:903:29 | S1 | | main.rs:888:5:889:14 | S1 | +| main.rs:904:13:904:13 | y | | main.rs:882:5:886:5 | MyEnum | +| main.rs:904:13:904:13 | y | A | main.rs:890:5:891:14 | S2 | +| main.rs:904:17:904:36 | ...::C2 {...} | | main.rs:882:5:886:5 | MyEnum | +| main.rs:904:17:904:36 | ...::C2 {...} | A | main.rs:890:5:891:14 | S2 | +| main.rs:904:33:904:34 | S2 | | main.rs:890:5:891:14 | S2 | +| main.rs:906:18:906:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:906:18:906:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:906:18:906:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:906:18:906:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:906:26:906:26 | x | | main.rs:882:5:886:5 | MyEnum | +| main.rs:906:26:906:26 | x | A | main.rs:888:5:889:14 | S1 | +| main.rs:906:26:906:31 | x.m1() | | main.rs:888:5:889:14 | S1 | +| main.rs:907:18:907:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:907:18:907:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:907:18:907:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:907:18:907:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:907:26:907:26 | y | | main.rs:882:5:886:5 | MyEnum | +| main.rs:907:26:907:26 | y | A | main.rs:890:5:891:14 | S2 | +| main.rs:907:26:907:31 | y.m1() | | main.rs:890:5:891:14 | S2 | +| main.rs:929:15:929:18 | SelfParam | | main.rs:927:5:930:5 | Self [trait MyTrait1] | +| main.rs:934:15:934:18 | SelfParam | | main.rs:932:5:944:5 | Self [trait MyTrait2] | +| main.rs:937:9:943:9 | { ... } | | main.rs:932:20:932:22 | Tr2 | +| main.rs:938:13:942:13 | if ... {...} else {...} | | main.rs:932:20:932:22 | Tr2 | +| main.rs:938:16:938:16 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:938:16:938:20 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:938:20:938:20 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:938:22:940:13 | { ... } | | main.rs:932:20:932:22 | Tr2 | +| main.rs:939:17:939:20 | self | | main.rs:932:5:944:5 | Self [trait MyTrait2] | +| main.rs:939:17:939:25 | self.m1() | | main.rs:932:20:932:22 | Tr2 | +| main.rs:940:20:942:13 | { ... } | | main.rs:932:20:932:22 | Tr2 | +| main.rs:941:17:941:30 | ...::m1(...) | | main.rs:932:20:932:22 | Tr2 | +| main.rs:941:26:941:29 | self | | main.rs:932:5:944:5 | Self [trait MyTrait2] | +| main.rs:948:15:948:18 | SelfParam | | main.rs:946:5:958:5 | Self [trait MyTrait3] | +| main.rs:951:9:957:9 | { ... } | | main.rs:946:20:946:22 | Tr3 | +| main.rs:952:13:956:13 | if ... {...} else {...} | | main.rs:946:20:946:22 | Tr3 | +| main.rs:952:16:952:16 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:952:16:952:20 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:952:20:952:20 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:952:22:954:13 | { ... } | | main.rs:946:20:946:22 | Tr3 | +| main.rs:953:17:953:20 | self | | main.rs:946:5:958:5 | Self [trait MyTrait3] | +| main.rs:953:17:953:25 | self.m2() | | main.rs:912:5:915:5 | MyThing | +| main.rs:953:17:953:25 | self.m2() | A | main.rs:946:20:946:22 | Tr3 | +| main.rs:953:17:953:27 | ... .a | | main.rs:946:20:946:22 | Tr3 | +| main.rs:954:20:956:13 | { ... } | | main.rs:946:20:946:22 | Tr3 | +| main.rs:955:17:955:30 | ...::m2(...) | | main.rs:912:5:915:5 | MyThing | +| main.rs:955:17:955:30 | ...::m2(...) | A | main.rs:946:20:946:22 | Tr3 | +| main.rs:955:17:955:32 | ... .a | | main.rs:946:20:946:22 | Tr3 | +| main.rs:955:26:955:29 | self | | main.rs:946:5:958:5 | Self [trait MyTrait3] | +| main.rs:962:15:962:18 | SelfParam | | main.rs:912:5:915:5 | MyThing | +| main.rs:962:15:962:18 | SelfParam | A | main.rs:960:10:960:10 | T | +| main.rs:962:26:964:9 | { ... } | | main.rs:960:10:960:10 | T | +| main.rs:963:13:963:16 | self | | main.rs:912:5:915:5 | MyThing | +| main.rs:963:13:963:16 | self | A | main.rs:960:10:960:10 | T | +| main.rs:963:13:963:18 | self.a | | main.rs:960:10:960:10 | T | +| main.rs:971:15:971:18 | SelfParam | | main.rs:917:5:920:5 | MyThing2 | +| main.rs:971:15:971:18 | SelfParam | A | main.rs:969:10:969:10 | T | +| main.rs:971:35:973:9 | { ... } | | main.rs:912:5:915:5 | MyThing | +| main.rs:971:35:973:9 | { ... } | A | main.rs:969:10:969:10 | T | +| main.rs:972:13:972:33 | MyThing {...} | | main.rs:912:5:915:5 | MyThing | +| main.rs:972:13:972:33 | MyThing {...} | A | main.rs:969:10:969:10 | T | +| main.rs:972:26:972:29 | self | | main.rs:917:5:920:5 | MyThing2 | +| main.rs:972:26:972:29 | self | A | main.rs:969:10:969:10 | T | +| main.rs:972:26:972:31 | self.a | | main.rs:969:10:969:10 | T | +| main.rs:980:44:980:44 | x | | main.rs:980:26:980:41 | T2 | +| main.rs:980:57:982:5 | { ... } | | main.rs:980:22:980:23 | T1 | +| main.rs:981:9:981:9 | x | | main.rs:980:26:980:41 | T2 | +| main.rs:981:9:981:14 | x.m1() | | main.rs:980:22:980:23 | T1 | +| main.rs:984:56:984:56 | x | | main.rs:984:39:984:53 | T | +| main.rs:986:13:986:13 | a | | main.rs:912:5:915:5 | MyThing | +| main.rs:986:13:986:13 | a | A | main.rs:922:5:923:14 | S1 | +| main.rs:986:17:986:17 | x | | main.rs:984:39:984:53 | T | +| main.rs:986:17:986:22 | x.m1() | | main.rs:912:5:915:5 | MyThing | +| main.rs:986:17:986:22 | x.m1() | A | main.rs:922:5:923:14 | S1 | +| main.rs:987:18:987:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:987:18:987:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:987:18:987:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:987:18:987:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:987:26:987:26 | a | | main.rs:912:5:915:5 | MyThing | +| main.rs:987:26:987:26 | a | A | main.rs:922:5:923:14 | S1 | +| main.rs:991:13:991:13 | x | | main.rs:912:5:915:5 | MyThing | +| main.rs:991:13:991:13 | x | A | main.rs:922:5:923:14 | S1 | +| main.rs:991:17:991:33 | MyThing {...} | | main.rs:912:5:915:5 | MyThing | +| main.rs:991:17:991:33 | MyThing {...} | A | main.rs:922:5:923:14 | S1 | +| main.rs:991:30:991:31 | S1 | | main.rs:922:5:923:14 | S1 | +| main.rs:992:13:992:13 | y | | main.rs:912:5:915:5 | MyThing | +| main.rs:992:13:992:13 | y | A | main.rs:924:5:925:14 | S2 | +| main.rs:992:17:992:33 | MyThing {...} | | main.rs:912:5:915:5 | MyThing | +| main.rs:992:17:992:33 | MyThing {...} | A | main.rs:924:5:925:14 | S2 | +| main.rs:992:30:992:31 | S2 | | main.rs:924:5:925:14 | S2 | +| main.rs:994:18:994:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:994:18:994:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:994:18:994:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:994:18:994:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:994:26:994:26 | x | | main.rs:912:5:915:5 | MyThing | +| main.rs:994:26:994:26 | x | A | main.rs:922:5:923:14 | S1 | +| main.rs:994:26:994:31 | x.m1() | | main.rs:922:5:923:14 | S1 | +| main.rs:995:18:995:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:995:18:995:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:995:18:995:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:995:18:995:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:995:26:995:26 | y | | main.rs:912:5:915:5 | MyThing | +| main.rs:995:26:995:26 | y | A | main.rs:924:5:925:14 | S2 | +| main.rs:995:26:995:31 | y.m1() | | main.rs:924:5:925:14 | S2 | +| main.rs:997:13:997:13 | x | | main.rs:912:5:915:5 | MyThing | +| main.rs:997:13:997:13 | x | A | main.rs:922:5:923:14 | S1 | +| main.rs:997:17:997:33 | MyThing {...} | | main.rs:912:5:915:5 | MyThing | +| main.rs:997:17:997:33 | MyThing {...} | A | main.rs:922:5:923:14 | S1 | +| main.rs:997:30:997:31 | S1 | | main.rs:922:5:923:14 | S1 | +| main.rs:998:13:998:13 | y | | main.rs:912:5:915:5 | MyThing | +| main.rs:998:13:998:13 | y | A | main.rs:924:5:925:14 | S2 | +| main.rs:998:17:998:33 | MyThing {...} | | main.rs:912:5:915:5 | MyThing | +| main.rs:998:17:998:33 | MyThing {...} | A | main.rs:924:5:925:14 | S2 | +| main.rs:998:30:998:31 | S2 | | main.rs:924:5:925:14 | S2 | +| main.rs:1000:18:1000:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1000:18:1000:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1000:18:1000:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1000:18:1000:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1000:26:1000:26 | x | | main.rs:912:5:915:5 | MyThing | +| main.rs:1000:26:1000:26 | x | A | main.rs:922:5:923:14 | S1 | +| main.rs:1000:26:1000:31 | x.m2() | | main.rs:922:5:923:14 | S1 | +| main.rs:1001:18:1001:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1001:18:1001:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1001:18:1001:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1001:18:1001:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1001:26:1001:26 | y | | main.rs:912:5:915:5 | MyThing | +| main.rs:1001:26:1001:26 | y | A | main.rs:924:5:925:14 | S2 | +| main.rs:1001:26:1001:31 | y.m2() | | main.rs:924:5:925:14 | S2 | +| main.rs:1003:13:1003:13 | x | | main.rs:917:5:920:5 | MyThing2 | +| main.rs:1003:13:1003:13 | x | A | main.rs:922:5:923:14 | S1 | +| main.rs:1003:17:1003:34 | MyThing2 {...} | | main.rs:917:5:920:5 | MyThing2 | +| main.rs:1003:17:1003:34 | MyThing2 {...} | A | main.rs:922:5:923:14 | S1 | +| main.rs:1003:31:1003:32 | S1 | | main.rs:922:5:923:14 | S1 | +| main.rs:1004:13:1004:13 | y | | main.rs:917:5:920:5 | MyThing2 | +| main.rs:1004:13:1004:13 | y | A | main.rs:924:5:925:14 | S2 | +| main.rs:1004:17:1004:34 | MyThing2 {...} | | main.rs:917:5:920:5 | MyThing2 | +| main.rs:1004:17:1004:34 | MyThing2 {...} | A | main.rs:924:5:925:14 | S2 | +| main.rs:1004:31:1004:32 | S2 | | main.rs:924:5:925:14 | S2 | +| main.rs:1006:18:1006:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1006:18:1006:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1006:18:1006:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1006:18:1006:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1006:26:1006:26 | x | | main.rs:917:5:920:5 | MyThing2 | +| main.rs:1006:26:1006:26 | x | A | main.rs:922:5:923:14 | S1 | +| main.rs:1006:26:1006:31 | x.m3() | | main.rs:922:5:923:14 | S1 | +| main.rs:1007:18:1007:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1007:18:1007:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1007:18:1007:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1007:18:1007:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1007:26:1007:26 | y | | main.rs:917:5:920:5 | MyThing2 | +| main.rs:1007:26:1007:26 | y | A | main.rs:924:5:925:14 | S2 | +| main.rs:1007:26:1007:31 | y.m3() | | main.rs:924:5:925:14 | S2 | +| main.rs:1009:13:1009:13 | x | | main.rs:912:5:915:5 | MyThing | +| main.rs:1009:13:1009:13 | x | A | main.rs:922:5:923:14 | S1 | +| main.rs:1009:17:1009:33 | MyThing {...} | | main.rs:912:5:915:5 | MyThing | +| main.rs:1009:17:1009:33 | MyThing {...} | A | main.rs:922:5:923:14 | S1 | +| main.rs:1009:30:1009:31 | S1 | | main.rs:922:5:923:14 | S1 | +| main.rs:1010:13:1010:13 | s | | main.rs:922:5:923:14 | S1 | +| main.rs:1010:17:1010:32 | call_trait_m1(...) | | main.rs:922:5:923:14 | S1 | +| main.rs:1010:31:1010:31 | x | | main.rs:912:5:915:5 | MyThing | +| main.rs:1010:31:1010:31 | x | A | main.rs:922:5:923:14 | S1 | +| main.rs:1012:13:1012:13 | x | | main.rs:917:5:920:5 | MyThing2 | +| main.rs:1012:13:1012:13 | x | A | main.rs:924:5:925:14 | S2 | +| main.rs:1012:17:1012:34 | MyThing2 {...} | | main.rs:917:5:920:5 | MyThing2 | +| main.rs:1012:17:1012:34 | MyThing2 {...} | A | main.rs:924:5:925:14 | S2 | +| main.rs:1012:31:1012:32 | S2 | | main.rs:924:5:925:14 | S2 | +| main.rs:1013:13:1013:13 | s | | main.rs:912:5:915:5 | MyThing | +| main.rs:1013:13:1013:13 | s | A | main.rs:924:5:925:14 | S2 | +| main.rs:1013:17:1013:32 | call_trait_m1(...) | | main.rs:912:5:915:5 | MyThing | +| main.rs:1013:17:1013:32 | call_trait_m1(...) | A | main.rs:924:5:925:14 | S2 | +| main.rs:1013:31:1013:31 | x | | main.rs:917:5:920:5 | MyThing2 | +| main.rs:1013:31:1013:31 | x | A | main.rs:924:5:925:14 | S2 | +| main.rs:1030:22:1030:22 | x | | file://:0:0:0:0 | & | +| main.rs:1030:22:1030:22 | x | &T | main.rs:1030:11:1030:19 | T | +| main.rs:1030:35:1032:5 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1030:35:1032:5 | { ... } | &T | main.rs:1030:11:1030:19 | T | +| main.rs:1031:9:1031:9 | x | | file://:0:0:0:0 | & | +| main.rs:1031:9:1031:9 | x | &T | main.rs:1030:11:1030:19 | T | +| main.rs:1035:17:1035:20 | SelfParam | | main.rs:1020:5:1021:14 | S1 | +| main.rs:1035:29:1037:9 | { ... } | | main.rs:1023:5:1024:14 | S2 | +| main.rs:1036:13:1036:14 | S2 | | main.rs:1023:5:1024:14 | S2 | +| main.rs:1040:21:1040:21 | x | | main.rs:1040:13:1040:14 | T1 | +| main.rs:1043:5:1045:5 | { ... } | | main.rs:1040:17:1040:18 | T2 | +| main.rs:1044:9:1044:9 | x | | main.rs:1040:13:1040:14 | T1 | +| main.rs:1044:9:1044:16 | x.into() | | main.rs:1040:17:1040:18 | T2 | +| main.rs:1048:13:1048:13 | x | | main.rs:1020:5:1021:14 | S1 | +| main.rs:1048:17:1048:18 | S1 | | main.rs:1020:5:1021:14 | S1 | +| main.rs:1049:18:1049:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1049:18:1049:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1049:18:1049:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1049:18:1049:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1049:26:1049:31 | id(...) | | file://:0:0:0:0 | & | +| main.rs:1049:26:1049:31 | id(...) | &T | main.rs:1020:5:1021:14 | S1 | +| main.rs:1049:29:1049:30 | &x | | file://:0:0:0:0 | & | +| main.rs:1049:29:1049:30 | &x | &T | main.rs:1020:5:1021:14 | S1 | +| main.rs:1049:30:1049:30 | x | | main.rs:1020:5:1021:14 | S1 | +| main.rs:1051:13:1051:13 | x | | main.rs:1020:5:1021:14 | S1 | +| main.rs:1051:17:1051:18 | S1 | | main.rs:1020:5:1021:14 | S1 | +| main.rs:1052:18:1052:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1052:18:1052:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1052:18:1052:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1052:18:1052:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1052:26:1052:37 | id::<...>(...) | | file://:0:0:0:0 | & | +| main.rs:1052:26:1052:37 | id::<...>(...) | &T | main.rs:1020:5:1021:14 | S1 | +| main.rs:1052:35:1052:36 | &x | | file://:0:0:0:0 | & | +| main.rs:1052:35:1052:36 | &x | &T | main.rs:1020:5:1021:14 | S1 | +| main.rs:1052:36:1052:36 | x | | main.rs:1020:5:1021:14 | S1 | +| main.rs:1054:13:1054:13 | x | | main.rs:1020:5:1021:14 | S1 | +| main.rs:1054:13:1054:13 | x | | main.rs:1026:5:1026:25 | dyn Trait | +| main.rs:1054:17:1054:18 | S1 | | main.rs:1020:5:1021:14 | S1 | +| main.rs:1054:17:1054:18 | S1 | | main.rs:1026:5:1026:25 | dyn Trait | +| main.rs:1056:18:1056:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1056:18:1056:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1056:18:1056:44 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1056:18:1056:44 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1056:26:1056:44 | id::<...>(...) | | file://:0:0:0:0 | & | +| main.rs:1056:26:1056:44 | id::<...>(...) | &T | main.rs:1026:5:1026:25 | dyn Trait | +| main.rs:1056:42:1056:43 | &x | | file://:0:0:0:0 | & | +| main.rs:1056:42:1056:43 | &x | &T | main.rs:1020:5:1021:14 | S1 | +| main.rs:1056:42:1056:43 | &x | &T | main.rs:1026:5:1026:25 | dyn Trait | +| main.rs:1056:43:1056:43 | x | | main.rs:1020:5:1021:14 | S1 | +| main.rs:1056:43:1056:43 | x | | main.rs:1026:5:1026:25 | dyn Trait | +| main.rs:1058:13:1058:13 | x | | main.rs:1020:5:1021:14 | S1 | +| main.rs:1058:17:1058:18 | S1 | | main.rs:1020:5:1021:14 | S1 | +| main.rs:1059:9:1059:25 | into::<...>(...) | | main.rs:1023:5:1024:14 | S2 | +| main.rs:1059:24:1059:24 | x | | main.rs:1020:5:1021:14 | S1 | +| main.rs:1061:13:1061:13 | x | | main.rs:1020:5:1021:14 | S1 | +| main.rs:1061:17:1061:18 | S1 | | main.rs:1020:5:1021:14 | S1 | +| main.rs:1062:13:1062:13 | y | | main.rs:1023:5:1024:14 | S2 | +| main.rs:1062:21:1062:27 | into(...) | | main.rs:1023:5:1024:14 | S2 | +| main.rs:1062:26:1062:26 | x | | main.rs:1020:5:1021:14 | S1 | +| main.rs:1076:22:1076:25 | SelfParam | | main.rs:1067:5:1073:5 | PairOption | +| main.rs:1076:22:1076:25 | SelfParam | Fst | main.rs:1075:10:1075:12 | Fst | +| main.rs:1076:22:1076:25 | SelfParam | Snd | main.rs:1075:15:1075:17 | Snd | +| main.rs:1076:35:1083:9 | { ... } | | main.rs:1075:15:1075:17 | Snd | +| main.rs:1077:13:1082:13 | match self { ... } | | main.rs:1075:15:1075:17 | Snd | +| main.rs:1077:19:1077:22 | self | | main.rs:1067:5:1073:5 | PairOption | +| main.rs:1077:19:1077:22 | self | Fst | main.rs:1075:10:1075:12 | Fst | +| main.rs:1077:19:1077:22 | self | Snd | main.rs:1075:15:1075:17 | Snd | +| main.rs:1078:17:1078:38 | ...::PairNone(...) | | main.rs:1067:5:1073:5 | PairOption | +| main.rs:1078:17:1078:38 | ...::PairNone(...) | Fst | main.rs:1075:10:1075:12 | Fst | +| main.rs:1078:17:1078:38 | ...::PairNone(...) | Snd | main.rs:1075:15:1075:17 | Snd | +| main.rs:1078:43:1078:82 | MacroExpr | | main.rs:1075:15:1075:17 | Snd | +| main.rs:1078:50:1078:81 | "PairNone has no second elemen... | | file://:0:0:0:0 | & | +| main.rs:1078:50:1078:81 | "PairNone has no second elemen... | &T | {EXTERNAL LOCATION} | str | +| main.rs:1078:50:1078:81 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1078:50:1078:81 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1078:50:1078:81 | MacroExpr | | main.rs:1075:15:1075:17 | Snd | +| main.rs:1078:50:1078:81 | { ... } | | main.rs:1075:15:1075:17 | Snd | +| main.rs:1079:17:1079:38 | ...::PairFst(...) | | main.rs:1067:5:1073:5 | PairOption | +| main.rs:1079:17:1079:38 | ...::PairFst(...) | Fst | main.rs:1075:10:1075:12 | Fst | +| main.rs:1079:17:1079:38 | ...::PairFst(...) | Snd | main.rs:1075:15:1075:17 | Snd | +| main.rs:1079:37:1079:37 | _ | | main.rs:1075:10:1075:12 | Fst | +| main.rs:1079:43:1079:81 | MacroExpr | | main.rs:1075:15:1075:17 | Snd | +| main.rs:1079:50:1079:80 | "PairFst has no second element... | | file://:0:0:0:0 | & | +| main.rs:1079:50:1079:80 | "PairFst has no second element... | &T | {EXTERNAL LOCATION} | str | +| main.rs:1079:50:1079:80 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1079:50:1079:80 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1079:50:1079:80 | MacroExpr | | main.rs:1075:15:1075:17 | Snd | +| main.rs:1079:50:1079:80 | { ... } | | main.rs:1075:15:1075:17 | Snd | +| main.rs:1080:17:1080:40 | ...::PairSnd(...) | | main.rs:1067:5:1073:5 | PairOption | +| main.rs:1080:17:1080:40 | ...::PairSnd(...) | Fst | main.rs:1075:10:1075:12 | Fst | +| main.rs:1080:17:1080:40 | ...::PairSnd(...) | Snd | main.rs:1075:15:1075:17 | Snd | +| main.rs:1080:37:1080:39 | snd | | main.rs:1075:15:1075:17 | Snd | +| main.rs:1080:45:1080:47 | snd | | main.rs:1075:15:1075:17 | Snd | +| main.rs:1081:17:1081:44 | ...::PairBoth(...) | | main.rs:1067:5:1073:5 | PairOption | +| main.rs:1081:17:1081:44 | ...::PairBoth(...) | Fst | main.rs:1075:10:1075:12 | Fst | +| main.rs:1081:17:1081:44 | ...::PairBoth(...) | Snd | main.rs:1075:15:1075:17 | Snd | +| main.rs:1081:38:1081:38 | _ | | main.rs:1075:10:1075:12 | Fst | +| main.rs:1081:41:1081:43 | snd | | main.rs:1075:15:1075:17 | Snd | +| main.rs:1081:49:1081:51 | snd | | main.rs:1075:15:1075:17 | Snd | +| main.rs:1107:10:1107:10 | t | | main.rs:1067:5:1073:5 | PairOption | +| main.rs:1107:10:1107:10 | t | Fst | main.rs:1089:5:1090:14 | S2 | +| main.rs:1107:10:1107:10 | t | Snd | main.rs:1067:5:1073:5 | PairOption | +| main.rs:1107:10:1107:10 | t | Snd.Fst | main.rs:1089:5:1090:14 | S2 | +| main.rs:1107:10:1107:10 | t | Snd.Snd | main.rs:1092:5:1093:14 | S3 | +| main.rs:1108:13:1108:13 | x | | main.rs:1092:5:1093:14 | S3 | +| main.rs:1108:17:1108:17 | t | | main.rs:1067:5:1073:5 | PairOption | +| main.rs:1108:17:1108:17 | t | Fst | main.rs:1089:5:1090:14 | S2 | +| main.rs:1108:17:1108:17 | t | Snd | main.rs:1067:5:1073:5 | PairOption | +| main.rs:1108:17:1108:17 | t | Snd.Fst | main.rs:1089:5:1090:14 | S2 | +| main.rs:1108:17:1108:17 | t | Snd.Snd | main.rs:1092:5:1093:14 | S3 | +| main.rs:1108:17:1108:29 | t.unwrapSnd() | | main.rs:1067:5:1073:5 | PairOption | +| main.rs:1108:17:1108:29 | t.unwrapSnd() | Fst | main.rs:1089:5:1090:14 | S2 | +| main.rs:1108:17:1108:29 | t.unwrapSnd() | Snd | main.rs:1092:5:1093:14 | S3 | +| main.rs:1108:17:1108:41 | ... .unwrapSnd() | | main.rs:1092:5:1093:14 | S3 | | main.rs:1109:18:1109:23 | "{:?}\\n" | | file://:0:0:0:0 | & | | main.rs:1109:18:1109:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1109:18:1109:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1109:18:1109:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1109:26:1109:27 | p2 | | main.rs:1032:5:1038:5 | PairOption | -| main.rs:1109:26:1109:27 | p2 | Fst | main.rs:1051:5:1052:14 | S1 | -| main.rs:1109:26:1109:27 | p2 | Snd | main.rs:1054:5:1055:14 | S2 | -| main.rs:1112:13:1112:14 | p3 | | main.rs:1032:5:1038:5 | PairOption | -| main.rs:1112:13:1112:14 | p3 | Fst | main.rs:1054:5:1055:14 | S2 | -| main.rs:1112:13:1112:14 | p3 | Snd | main.rs:1057:5:1058:14 | S3 | -| main.rs:1112:34:1112:56 | ...::PairSnd(...) | | main.rs:1032:5:1038:5 | PairOption | -| main.rs:1112:34:1112:56 | ...::PairSnd(...) | Fst | main.rs:1054:5:1055:14 | S2 | -| main.rs:1112:34:1112:56 | ...::PairSnd(...) | Snd | main.rs:1057:5:1058:14 | S3 | -| main.rs:1112:54:1112:55 | S3 | | main.rs:1057:5:1058:14 | S3 | -| main.rs:1113:18:1113:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1113:18:1113:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1113:18:1113:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1113:18:1113:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1113:26:1113:27 | p3 | | main.rs:1032:5:1038:5 | PairOption | -| main.rs:1113:26:1113:27 | p3 | Fst | main.rs:1054:5:1055:14 | S2 | -| main.rs:1113:26:1113:27 | p3 | Snd | main.rs:1057:5:1058:14 | S3 | -| main.rs:1116:13:1116:14 | p3 | | main.rs:1032:5:1038:5 | PairOption | -| main.rs:1116:13:1116:14 | p3 | Fst | main.rs:1054:5:1055:14 | S2 | -| main.rs:1116:13:1116:14 | p3 | Snd | main.rs:1057:5:1058:14 | S3 | -| main.rs:1116:35:1116:56 | ...::PairNone(...) | | main.rs:1032:5:1038:5 | PairOption | -| main.rs:1116:35:1116:56 | ...::PairNone(...) | Fst | main.rs:1054:5:1055:14 | S2 | -| main.rs:1116:35:1116:56 | ...::PairNone(...) | Snd | main.rs:1057:5:1058:14 | S3 | -| main.rs:1117:18:1117:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1117:18:1117:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1117:18:1117:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1117:18:1117:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1117:26:1117:27 | p3 | | main.rs:1032:5:1038:5 | PairOption | -| main.rs:1117:26:1117:27 | p3 | Fst | main.rs:1054:5:1055:14 | S2 | -| main.rs:1117:26:1117:27 | p3 | Snd | main.rs:1057:5:1058:14 | S3 | -| main.rs:1119:11:1119:54 | ...::PairSnd(...) | | main.rs:1032:5:1038:5 | PairOption | -| main.rs:1119:11:1119:54 | ...::PairSnd(...) | Fst | main.rs:1054:5:1055:14 | S2 | -| main.rs:1119:11:1119:54 | ...::PairSnd(...) | Snd | main.rs:1032:5:1038:5 | PairOption | -| main.rs:1119:11:1119:54 | ...::PairSnd(...) | Snd.Fst | main.rs:1054:5:1055:14 | S2 | -| main.rs:1119:11:1119:54 | ...::PairSnd(...) | Snd.Snd | main.rs:1057:5:1058:14 | S3 | -| main.rs:1119:31:1119:53 | ...::PairSnd(...) | | main.rs:1032:5:1038:5 | PairOption | -| main.rs:1119:31:1119:53 | ...::PairSnd(...) | Fst | main.rs:1054:5:1055:14 | S2 | -| main.rs:1119:31:1119:53 | ...::PairSnd(...) | Snd | main.rs:1057:5:1058:14 | S3 | -| main.rs:1119:51:1119:52 | S3 | | main.rs:1057:5:1058:14 | S3 | -| main.rs:1121:13:1121:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1121:13:1121:13 | x | E | main.rs:1051:5:1052:14 | S1 | -| main.rs:1121:13:1121:13 | x | T | main.rs:1077:5:1077:34 | S4 | -| main.rs:1121:13:1121:13 | x | T.T41 | main.rs:1054:5:1055:14 | S2 | -| main.rs:1121:13:1121:13 | x | T.T42 | main.rs:1079:5:1079:22 | S5 | -| main.rs:1121:13:1121:13 | x | T.T42.T5 | main.rs:1054:5:1055:14 | S2 | -| main.rs:1123:13:1123:13 | y | | {EXTERNAL LOCATION} | Result | -| main.rs:1123:13:1123:13 | y | E | {EXTERNAL LOCATION} | bool | -| main.rs:1123:13:1123:13 | y | T | {EXTERNAL LOCATION} | bool | -| main.rs:1123:17:1123:26 | GenS(...) | | main.rs:1085:5:1085:28 | GenS | -| main.rs:1123:17:1123:26 | GenS(...) | GenT | {EXTERNAL LOCATION} | bool | -| main.rs:1123:17:1123:38 | ... .get_input() | | {EXTERNAL LOCATION} | Result | -| main.rs:1123:17:1123:38 | ... .get_input() | E | {EXTERNAL LOCATION} | bool | -| main.rs:1123:17:1123:38 | ... .get_input() | T | {EXTERNAL LOCATION} | bool | -| main.rs:1123:22:1123:25 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1136:16:1136:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1136:16:1136:24 | SelfParam | &T | main.rs:1134:5:1141:5 | Self [trait MyTrait] | -| main.rs:1136:27:1136:31 | value | | main.rs:1134:19:1134:19 | S | -| main.rs:1138:21:1138:29 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1138:21:1138:29 | SelfParam | &T | main.rs:1134:5:1141:5 | Self [trait MyTrait] | -| main.rs:1138:32:1138:36 | value | | main.rs:1134:19:1134:19 | S | -| main.rs:1139:13:1139:16 | self | | file://:0:0:0:0 | & | -| main.rs:1139:13:1139:16 | self | &T | main.rs:1134:5:1141:5 | Self [trait MyTrait] | -| main.rs:1139:22:1139:26 | value | | main.rs:1134:19:1134:19 | S | -| main.rs:1145:16:1145:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1145:16:1145:24 | SelfParam | &T | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1145:16:1145:24 | SelfParam | &T.T | main.rs:1143:10:1143:10 | T | -| main.rs:1145:27:1145:31 | value | | main.rs:1143:10:1143:10 | T | -| main.rs:1149:26:1151:9 | { ... } | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1149:26:1151:9 | { ... } | T | main.rs:1148:10:1148:10 | T | -| main.rs:1150:13:1150:30 | ...::MyNone(...) | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1150:13:1150:30 | ...::MyNone(...) | T | main.rs:1148:10:1148:10 | T | -| main.rs:1155:20:1155:23 | SelfParam | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1155:20:1155:23 | SelfParam | T | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1155:20:1155:23 | SelfParam | T.T | main.rs:1154:10:1154:10 | T | -| main.rs:1155:41:1160:9 | { ... } | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1155:41:1160:9 | { ... } | T | main.rs:1154:10:1154:10 | T | -| main.rs:1156:13:1159:13 | match self { ... } | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1156:13:1159:13 | match self { ... } | T | main.rs:1154:10:1154:10 | T | -| main.rs:1156:19:1156:22 | self | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1156:19:1156:22 | self | T | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1156:19:1156:22 | self | T.T | main.rs:1154:10:1154:10 | T | -| main.rs:1157:17:1157:34 | ...::MyNone(...) | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1157:17:1157:34 | ...::MyNone(...) | T | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1157:17:1157:34 | ...::MyNone(...) | T.T | main.rs:1154:10:1154:10 | T | -| main.rs:1157:39:1157:56 | ...::MyNone(...) | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1157:39:1157:56 | ...::MyNone(...) | T | main.rs:1154:10:1154:10 | T | -| main.rs:1158:17:1158:35 | ...::MySome(...) | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1158:17:1158:35 | ...::MySome(...) | T | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1158:17:1158:35 | ...::MySome(...) | T.T | main.rs:1154:10:1154:10 | T | -| main.rs:1158:34:1158:34 | x | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1158:34:1158:34 | x | T | main.rs:1154:10:1154:10 | T | -| main.rs:1158:40:1158:40 | x | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1158:40:1158:40 | x | T | main.rs:1154:10:1154:10 | T | -| main.rs:1167:13:1167:14 | x1 | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1167:13:1167:14 | x1 | T | main.rs:1163:5:1164:13 | S | -| main.rs:1167:18:1167:37 | ...::new(...) | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1167:18:1167:37 | ...::new(...) | T | main.rs:1163:5:1164:13 | S | -| main.rs:1168:18:1168:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1168:18:1168:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1168:18:1168:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1168:18:1168:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1168:26:1168:27 | x1 | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1168:26:1168:27 | x1 | T | main.rs:1163:5:1164:13 | S | -| main.rs:1170:17:1170:18 | x2 | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1170:17:1170:18 | x2 | T | main.rs:1163:5:1164:13 | S | -| main.rs:1170:22:1170:36 | ...::new(...) | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1170:22:1170:36 | ...::new(...) | T | main.rs:1163:5:1164:13 | S | -| main.rs:1171:9:1171:10 | x2 | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1171:9:1171:10 | x2 | T | main.rs:1163:5:1164:13 | S | -| main.rs:1171:16:1171:16 | S | | main.rs:1163:5:1164:13 | S | -| main.rs:1172:18:1172:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1172:18:1172:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1172:18:1172:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1172:18:1172:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1172:26:1172:27 | x2 | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1172:26:1172:27 | x2 | T | main.rs:1163:5:1164:13 | S | -| main.rs:1175:17:1175:18 | x3 | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1175:22:1175:36 | ...::new(...) | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1176:9:1176:10 | x3 | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1176:21:1176:21 | S | | main.rs:1163:5:1164:13 | S | -| main.rs:1177:18:1177:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1177:18:1177:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1177:18:1177:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1177:18:1177:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1177:26:1177:27 | x3 | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1179:17:1179:18 | x4 | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1179:17:1179:18 | x4 | T | main.rs:1163:5:1164:13 | S | -| main.rs:1179:22:1179:36 | ...::new(...) | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1179:22:1179:36 | ...::new(...) | T | main.rs:1163:5:1164:13 | S | -| main.rs:1180:23:1180:29 | &mut x4 | | file://:0:0:0:0 | & | -| main.rs:1180:23:1180:29 | &mut x4 | &T | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1180:23:1180:29 | &mut x4 | &T.T | main.rs:1163:5:1164:13 | S | -| main.rs:1180:28:1180:29 | x4 | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1180:28:1180:29 | x4 | T | main.rs:1163:5:1164:13 | S | -| main.rs:1180:32:1180:32 | S | | main.rs:1163:5:1164:13 | S | -| main.rs:1181:18:1181:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1181:18:1181:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1181:18:1181:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1181:18:1181:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1181:26:1181:27 | x4 | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1181:26:1181:27 | x4 | T | main.rs:1163:5:1164:13 | S | -| main.rs:1183:13:1183:14 | x5 | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1183:13:1183:14 | x5 | T | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1183:13:1183:14 | x5 | T.T | main.rs:1163:5:1164:13 | S | -| main.rs:1183:18:1183:58 | ...::MySome(...) | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1183:18:1183:58 | ...::MySome(...) | T | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1183:18:1183:58 | ...::MySome(...) | T.T | main.rs:1163:5:1164:13 | S | -| main.rs:1183:35:1183:57 | ...::MyNone(...) | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1183:35:1183:57 | ...::MyNone(...) | T | main.rs:1163:5:1164:13 | S | -| main.rs:1184:18:1184:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1184:18:1184:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1184:18:1184:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1184:18:1184:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1184:26:1184:27 | x5 | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1184:26:1184:27 | x5 | T | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1184:26:1184:27 | x5 | T.T | main.rs:1163:5:1164:13 | S | -| main.rs:1184:26:1184:37 | x5.flatten() | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1184:26:1184:37 | x5.flatten() | T | main.rs:1163:5:1164:13 | S | -| main.rs:1186:13:1186:14 | x6 | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1186:13:1186:14 | x6 | T | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1186:13:1186:14 | x6 | T.T | main.rs:1163:5:1164:13 | S | -| main.rs:1186:18:1186:58 | ...::MySome(...) | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1186:18:1186:58 | ...::MySome(...) | T | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1186:18:1186:58 | ...::MySome(...) | T.T | main.rs:1163:5:1164:13 | S | -| main.rs:1186:35:1186:57 | ...::MyNone(...) | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1186:35:1186:57 | ...::MyNone(...) | T | main.rs:1163:5:1164:13 | S | -| main.rs:1187:18:1187:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1187:18:1187:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1187:18:1187:61 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1187:18:1187:61 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1187:26:1187:61 | ...::flatten(...) | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1187:26:1187:61 | ...::flatten(...) | T | main.rs:1163:5:1164:13 | S | -| main.rs:1187:59:1187:60 | x6 | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1187:59:1187:60 | x6 | T | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1187:59:1187:60 | x6 | T.T | main.rs:1163:5:1164:13 | S | -| main.rs:1190:13:1190:19 | from_if | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1190:13:1190:19 | from_if | T | main.rs:1163:5:1164:13 | S | -| main.rs:1190:23:1194:9 | if ... {...} else {...} | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1190:23:1194:9 | if ... {...} else {...} | T | main.rs:1163:5:1164:13 | S | -| main.rs:1190:26:1190:26 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1190:26:1190:30 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1190:30:1190:30 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1190:32:1192:9 | { ... } | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1190:32:1192:9 | { ... } | T | main.rs:1163:5:1164:13 | S | -| main.rs:1191:13:1191:30 | ...::MyNone(...) | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1191:13:1191:30 | ...::MyNone(...) | T | main.rs:1163:5:1164:13 | S | -| main.rs:1192:16:1194:9 | { ... } | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1192:16:1194:9 | { ... } | T | main.rs:1163:5:1164:13 | S | -| main.rs:1193:13:1193:31 | ...::MySome(...) | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1193:13:1193:31 | ...::MySome(...) | T | main.rs:1163:5:1164:13 | S | -| main.rs:1193:30:1193:30 | S | | main.rs:1163:5:1164:13 | S | -| main.rs:1195:18:1195:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1195:18:1195:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1195:18:1195:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1195:18:1195:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1195:26:1195:32 | from_if | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1195:26:1195:32 | from_if | T | main.rs:1163:5:1164:13 | S | -| main.rs:1198:13:1198:22 | from_match | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1198:13:1198:22 | from_match | T | main.rs:1163:5:1164:13 | S | -| main.rs:1198:26:1201:9 | match ... { ... } | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1198:26:1201:9 | match ... { ... } | T | main.rs:1163:5:1164:13 | S | -| main.rs:1198:32:1198:32 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1198:32:1198:36 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1198:36:1198:36 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1199:13:1199:16 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1199:21:1199:38 | ...::MyNone(...) | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1199:21:1199:38 | ...::MyNone(...) | T | main.rs:1163:5:1164:13 | S | -| main.rs:1200:13:1200:17 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1200:22:1200:40 | ...::MySome(...) | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1200:22:1200:40 | ...::MySome(...) | T | main.rs:1163:5:1164:13 | S | -| main.rs:1200:39:1200:39 | S | | main.rs:1163:5:1164:13 | S | -| main.rs:1202:18:1202:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1202:18:1202:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1202:18:1202:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1202:18:1202:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1202:26:1202:35 | from_match | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1202:26:1202:35 | from_match | T | main.rs:1163:5:1164:13 | S | -| main.rs:1205:13:1205:21 | from_loop | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1205:13:1205:21 | from_loop | T | main.rs:1163:5:1164:13 | S | -| main.rs:1205:25:1210:9 | loop { ... } | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1205:25:1210:9 | loop { ... } | T | main.rs:1163:5:1164:13 | S | -| main.rs:1206:16:1206:16 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1206:16:1206:20 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1206:20:1206:20 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1207:23:1207:40 | ...::MyNone(...) | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1207:23:1207:40 | ...::MyNone(...) | T | main.rs:1163:5:1164:13 | S | -| main.rs:1209:19:1209:37 | ...::MySome(...) | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1209:19:1209:37 | ...::MySome(...) | T | main.rs:1163:5:1164:13 | S | -| main.rs:1209:36:1209:36 | S | | main.rs:1163:5:1164:13 | S | -| main.rs:1211:18:1211:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1211:18:1211:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1211:18:1211:34 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1211:18:1211:34 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1211:26:1211:34 | from_loop | | main.rs:1128:5:1132:5 | MyOption | -| main.rs:1211:26:1211:34 | from_loop | T | main.rs:1163:5:1164:13 | S | -| main.rs:1229:15:1229:18 | SelfParam | | main.rs:1217:5:1218:19 | S | -| main.rs:1229:15:1229:18 | SelfParam | T | main.rs:1228:10:1228:10 | T | -| main.rs:1229:26:1231:9 | { ... } | | main.rs:1228:10:1228:10 | T | -| main.rs:1230:13:1230:16 | self | | main.rs:1217:5:1218:19 | S | -| main.rs:1230:13:1230:16 | self | T | main.rs:1228:10:1228:10 | T | -| main.rs:1230:13:1230:18 | self.0 | | main.rs:1228:10:1228:10 | T | -| main.rs:1233:15:1233:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1233:15:1233:19 | SelfParam | &T | main.rs:1217:5:1218:19 | S | -| main.rs:1233:15:1233:19 | SelfParam | &T.T | main.rs:1228:10:1228:10 | T | -| main.rs:1233:28:1235:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1233:28:1235:9 | { ... } | &T | main.rs:1228:10:1228:10 | T | -| main.rs:1234:13:1234:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1234:13:1234:19 | &... | &T | main.rs:1228:10:1228:10 | T | -| main.rs:1234:14:1234:17 | self | | file://:0:0:0:0 | & | -| main.rs:1234:14:1234:17 | self | &T | main.rs:1217:5:1218:19 | S | -| main.rs:1234:14:1234:17 | self | &T.T | main.rs:1228:10:1228:10 | T | -| main.rs:1234:14:1234:19 | self.0 | | main.rs:1228:10:1228:10 | T | -| main.rs:1237:15:1237:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1237:15:1237:25 | SelfParam | &T | main.rs:1217:5:1218:19 | S | -| main.rs:1237:15:1237:25 | SelfParam | &T.T | main.rs:1228:10:1228:10 | T | -| main.rs:1237:34:1239:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1237:34:1239:9 | { ... } | &T | main.rs:1228:10:1228:10 | T | -| main.rs:1238:13:1238:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1238:13:1238:19 | &... | &T | main.rs:1228:10:1228:10 | T | -| main.rs:1238:14:1238:17 | self | | file://:0:0:0:0 | & | -| main.rs:1238:14:1238:17 | self | &T | main.rs:1217:5:1218:19 | S | -| main.rs:1238:14:1238:17 | self | &T.T | main.rs:1228:10:1228:10 | T | -| main.rs:1238:14:1238:19 | self.0 | | main.rs:1228:10:1228:10 | T | -| main.rs:1243:29:1243:33 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1243:29:1243:33 | SelfParam | &T | main.rs:1242:5:1245:5 | Self [trait ATrait] | -| main.rs:1244:33:1244:36 | SelfParam | | main.rs:1242:5:1245:5 | Self [trait ATrait] | -| main.rs:1250:29:1250:33 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1250:29:1250:33 | SelfParam | &T | file://:0:0:0:0 | & | -| main.rs:1250:29:1250:33 | SelfParam | &T | main.rs:1223:5:1226:5 | MyInt | -| main.rs:1250:29:1250:33 | SelfParam | &T.&T | main.rs:1223:5:1226:5 | MyInt | -| main.rs:1250:43:1252:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:1251:13:1251:22 | (...) | | main.rs:1223:5:1226:5 | MyInt | -| main.rs:1251:13:1251:24 | ... .a | | {EXTERNAL LOCATION} | i64 | -| main.rs:1251:14:1251:21 | * ... | | main.rs:1223:5:1226:5 | MyInt | -| main.rs:1251:15:1251:21 | (...) | | file://:0:0:0:0 | & | -| main.rs:1251:15:1251:21 | (...) | | main.rs:1223:5:1226:5 | MyInt | -| main.rs:1251:15:1251:21 | (...) | &T | main.rs:1223:5:1226:5 | MyInt | -| main.rs:1251:16:1251:20 | * ... | | file://:0:0:0:0 | & | -| main.rs:1251:16:1251:20 | * ... | | main.rs:1223:5:1226:5 | MyInt | -| main.rs:1251:16:1251:20 | * ... | &T | main.rs:1223:5:1226:5 | MyInt | -| main.rs:1251:17:1251:20 | self | | file://:0:0:0:0 | & | -| main.rs:1251:17:1251:20 | self | &T | file://:0:0:0:0 | & | -| main.rs:1251:17:1251:20 | self | &T | main.rs:1223:5:1226:5 | MyInt | -| main.rs:1251:17:1251:20 | self | &T.&T | main.rs:1223:5:1226:5 | MyInt | -| main.rs:1255:33:1255:36 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1255:33:1255:36 | SelfParam | &T | main.rs:1223:5:1226:5 | MyInt | -| main.rs:1255:46:1257:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:1256:13:1256:19 | (...) | | main.rs:1223:5:1226:5 | MyInt | -| main.rs:1256:13:1256:21 | ... .a | | {EXTERNAL LOCATION} | i64 | -| main.rs:1256:14:1256:18 | * ... | | main.rs:1223:5:1226:5 | MyInt | -| main.rs:1256:15:1256:18 | self | | file://:0:0:0:0 | & | -| main.rs:1256:15:1256:18 | self | &T | main.rs:1223:5:1226:5 | MyInt | -| main.rs:1261:13:1261:14 | x1 | | main.rs:1217:5:1218:19 | S | -| main.rs:1261:13:1261:14 | x1 | T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1261:18:1261:22 | S(...) | | main.rs:1217:5:1218:19 | S | -| main.rs:1261:18:1261:22 | S(...) | T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1261:20:1261:21 | S2 | | main.rs:1220:5:1221:14 | S2 | -| main.rs:1262:18:1262:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1262:18:1262:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1262:18:1262:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1262:18:1262:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1262:26:1262:27 | x1 | | main.rs:1217:5:1218:19 | S | -| main.rs:1262:26:1262:27 | x1 | T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1262:26:1262:32 | x1.m1() | | main.rs:1220:5:1221:14 | S2 | -| main.rs:1264:13:1264:14 | x2 | | main.rs:1217:5:1218:19 | S | -| main.rs:1264:13:1264:14 | x2 | T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1264:18:1264:22 | S(...) | | main.rs:1217:5:1218:19 | S | -| main.rs:1264:18:1264:22 | S(...) | T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1264:20:1264:21 | S2 | | main.rs:1220:5:1221:14 | S2 | -| main.rs:1266:18:1266:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1266:18:1266:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1266:18:1266:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1266:18:1266:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1266:26:1266:27 | x2 | | main.rs:1217:5:1218:19 | S | -| main.rs:1266:26:1266:27 | x2 | T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1266:26:1266:32 | x2.m2() | | file://:0:0:0:0 | & | -| main.rs:1266:26:1266:32 | x2.m2() | &T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1267:18:1267:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1267:18:1267:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1267:18:1267:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1267:18:1267:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1267:26:1267:27 | x2 | | main.rs:1217:5:1218:19 | S | -| main.rs:1267:26:1267:27 | x2 | T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1267:26:1267:32 | x2.m3() | | file://:0:0:0:0 | & | -| main.rs:1267:26:1267:32 | x2.m3() | &T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1269:13:1269:14 | x3 | | main.rs:1217:5:1218:19 | S | -| main.rs:1269:13:1269:14 | x3 | T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1269:18:1269:22 | S(...) | | main.rs:1217:5:1218:19 | S | -| main.rs:1269:18:1269:22 | S(...) | T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1269:20:1269:21 | S2 | | main.rs:1220:5:1221:14 | S2 | -| main.rs:1271:18:1271:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1271:18:1271:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1271:18:1271:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1271:18:1271:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1271:26:1271:41 | ...::m2(...) | | file://:0:0:0:0 | & | -| main.rs:1271:26:1271:41 | ...::m2(...) | &T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1271:38:1271:40 | &x3 | | file://:0:0:0:0 | & | -| main.rs:1271:38:1271:40 | &x3 | &T | main.rs:1217:5:1218:19 | S | -| main.rs:1271:38:1271:40 | &x3 | &T.T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1271:39:1271:40 | x3 | | main.rs:1217:5:1218:19 | S | -| main.rs:1271:39:1271:40 | x3 | T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1272:18:1272:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1272:18:1272:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1272:18:1272:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1272:18:1272:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1272:26:1272:41 | ...::m3(...) | | file://:0:0:0:0 | & | -| main.rs:1272:26:1272:41 | ...::m3(...) | &T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1272:38:1272:40 | &x3 | | file://:0:0:0:0 | & | -| main.rs:1272:38:1272:40 | &x3 | &T | main.rs:1217:5:1218:19 | S | -| main.rs:1272:38:1272:40 | &x3 | &T.T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1272:39:1272:40 | x3 | | main.rs:1217:5:1218:19 | S | -| main.rs:1272:39:1272:40 | x3 | T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1274:13:1274:14 | x4 | | file://:0:0:0:0 | & | -| main.rs:1274:13:1274:14 | x4 | &T | main.rs:1217:5:1218:19 | S | -| main.rs:1274:13:1274:14 | x4 | &T.T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1274:18:1274:23 | &... | | file://:0:0:0:0 | & | -| main.rs:1274:18:1274:23 | &... | &T | main.rs:1217:5:1218:19 | S | -| main.rs:1274:18:1274:23 | &... | &T.T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1274:19:1274:23 | S(...) | | main.rs:1217:5:1218:19 | S | -| main.rs:1274:19:1274:23 | S(...) | T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1274:21:1274:22 | S2 | | main.rs:1220:5:1221:14 | S2 | -| main.rs:1276:18:1276:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1276:18:1276:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1276:18:1276:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1276:18:1276:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1276:26:1276:27 | x4 | | file://:0:0:0:0 | & | -| main.rs:1276:26:1276:27 | x4 | &T | main.rs:1217:5:1218:19 | S | -| main.rs:1276:26:1276:27 | x4 | &T.T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1276:26:1276:32 | x4.m2() | | file://:0:0:0:0 | & | -| main.rs:1276:26:1276:32 | x4.m2() | &T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1277:18:1277:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1277:18:1277:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1277:18:1277:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1277:18:1277:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1277:26:1277:27 | x4 | | file://:0:0:0:0 | & | -| main.rs:1277:26:1277:27 | x4 | &T | main.rs:1217:5:1218:19 | S | -| main.rs:1277:26:1277:27 | x4 | &T.T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1277:26:1277:32 | x4.m3() | | file://:0:0:0:0 | & | -| main.rs:1277:26:1277:32 | x4.m3() | &T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1279:13:1279:14 | x5 | | file://:0:0:0:0 | & | -| main.rs:1279:13:1279:14 | x5 | &T | main.rs:1217:5:1218:19 | S | -| main.rs:1279:13:1279:14 | x5 | &T.T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1279:18:1279:23 | &... | | file://:0:0:0:0 | & | -| main.rs:1279:18:1279:23 | &... | &T | main.rs:1217:5:1218:19 | S | -| main.rs:1279:18:1279:23 | &... | &T.T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1279:19:1279:23 | S(...) | | main.rs:1217:5:1218:19 | S | -| main.rs:1279:19:1279:23 | S(...) | T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1279:21:1279:22 | S2 | | main.rs:1220:5:1221:14 | S2 | -| main.rs:1281:18:1281:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1281:18:1281:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1281:18:1281:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1281:18:1281:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1281:26:1281:27 | x5 | | file://:0:0:0:0 | & | -| main.rs:1281:26:1281:27 | x5 | &T | main.rs:1217:5:1218:19 | S | -| main.rs:1281:26:1281:27 | x5 | &T.T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1281:26:1281:32 | x5.m1() | | main.rs:1220:5:1221:14 | S2 | -| main.rs:1282:18:1282:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1282:18:1282:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1282:18:1282:29 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1282:18:1282:29 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1282:26:1282:27 | x5 | | file://:0:0:0:0 | & | -| main.rs:1282:26:1282:27 | x5 | &T | main.rs:1217:5:1218:19 | S | -| main.rs:1282:26:1282:27 | x5 | &T.T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1282:26:1282:29 | x5.0 | | main.rs:1220:5:1221:14 | S2 | -| main.rs:1284:13:1284:14 | x6 | | file://:0:0:0:0 | & | -| main.rs:1284:13:1284:14 | x6 | &T | main.rs:1217:5:1218:19 | S | -| main.rs:1284:13:1284:14 | x6 | &T.T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1284:18:1284:23 | &... | | file://:0:0:0:0 | & | -| main.rs:1284:18:1284:23 | &... | &T | main.rs:1217:5:1218:19 | S | -| main.rs:1284:18:1284:23 | &... | &T.T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1284:19:1284:23 | S(...) | | main.rs:1217:5:1218:19 | S | -| main.rs:1284:19:1284:23 | S(...) | T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1284:21:1284:22 | S2 | | main.rs:1220:5:1221:14 | S2 | -| main.rs:1287:18:1287:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1287:18:1287:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1287:18:1287:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1287:18:1287:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1287:26:1287:30 | (...) | | main.rs:1217:5:1218:19 | S | -| main.rs:1287:26:1287:30 | (...) | T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1287:26:1287:35 | ... .m1() | | main.rs:1220:5:1221:14 | S2 | -| main.rs:1287:27:1287:29 | * ... | | main.rs:1217:5:1218:19 | S | -| main.rs:1287:27:1287:29 | * ... | T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1287:28:1287:29 | x6 | | file://:0:0:0:0 | & | -| main.rs:1287:28:1287:29 | x6 | &T | main.rs:1217:5:1218:19 | S | -| main.rs:1287:28:1287:29 | x6 | &T.T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1289:13:1289:14 | x7 | | main.rs:1217:5:1218:19 | S | -| main.rs:1289:13:1289:14 | x7 | T | file://:0:0:0:0 | & | -| main.rs:1289:13:1289:14 | x7 | T.&T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1289:18:1289:23 | S(...) | | main.rs:1217:5:1218:19 | S | -| main.rs:1289:18:1289:23 | S(...) | T | file://:0:0:0:0 | & | -| main.rs:1289:18:1289:23 | S(...) | T.&T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1289:20:1289:22 | &S2 | | file://:0:0:0:0 | & | -| main.rs:1289:20:1289:22 | &S2 | &T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1289:21:1289:22 | S2 | | main.rs:1220:5:1221:14 | S2 | -| main.rs:1292:13:1292:13 | t | | file://:0:0:0:0 | & | -| main.rs:1292:13:1292:13 | t | &T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1292:17:1292:18 | x7 | | main.rs:1217:5:1218:19 | S | -| main.rs:1292:17:1292:18 | x7 | T | file://:0:0:0:0 | & | -| main.rs:1292:17:1292:18 | x7 | T.&T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1292:17:1292:23 | x7.m1() | | file://:0:0:0:0 | & | -| main.rs:1292:17:1292:23 | x7.m1() | &T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1293:18:1293:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1293:18:1293:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1293:18:1293:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1293:18:1293:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1293:26:1293:27 | x7 | | main.rs:1217:5:1218:19 | S | -| main.rs:1293:26:1293:27 | x7 | T | file://:0:0:0:0 | & | -| main.rs:1293:26:1293:27 | x7 | T.&T | main.rs:1220:5:1221:14 | S2 | -| main.rs:1295:13:1295:14 | x9 | | {EXTERNAL LOCATION} | String | -| main.rs:1295:26:1295:32 | "Hello" | | file://:0:0:0:0 | & | -| main.rs:1295:26:1295:32 | "Hello" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1295:26:1295:44 | "Hello".to_string() | | {EXTERNAL LOCATION} | String | -| main.rs:1299:13:1299:13 | u | | {EXTERNAL LOCATION} | Result | -| main.rs:1299:13:1299:13 | u | T | {EXTERNAL LOCATION} | u32 | -| main.rs:1299:17:1299:18 | x9 | | {EXTERNAL LOCATION} | String | -| main.rs:1299:17:1299:33 | x9.parse() | | {EXTERNAL LOCATION} | Result | -| main.rs:1299:17:1299:33 | x9.parse() | T | {EXTERNAL LOCATION} | u32 | -| main.rs:1301:13:1301:20 | my_thing | | file://:0:0:0:0 | & | -| main.rs:1301:13:1301:20 | my_thing | &T | main.rs:1223:5:1226:5 | MyInt | -| main.rs:1301:24:1301:39 | &... | | file://:0:0:0:0 | & | -| main.rs:1301:24:1301:39 | &... | &T | main.rs:1223:5:1226:5 | MyInt | -| main.rs:1301:25:1301:39 | MyInt {...} | | main.rs:1223:5:1226:5 | MyInt | -| main.rs:1301:36:1301:37 | 37 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1301:36:1301:37 | 37 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1303:17:1303:24 | my_thing | | file://:0:0:0:0 | & | -| main.rs:1303:17:1303:24 | my_thing | &T | main.rs:1223:5:1226:5 | MyInt | -| main.rs:1304:18:1304:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1304:18:1304:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1304:18:1304:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1304:18:1304:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1307:13:1307:20 | my_thing | | file://:0:0:0:0 | & | -| main.rs:1307:13:1307:20 | my_thing | &T | main.rs:1223:5:1226:5 | MyInt | -| main.rs:1307:24:1307:39 | &... | | file://:0:0:0:0 | & | -| main.rs:1307:24:1307:39 | &... | &T | main.rs:1223:5:1226:5 | MyInt | -| main.rs:1307:25:1307:39 | MyInt {...} | | main.rs:1223:5:1226:5 | MyInt | -| main.rs:1307:36:1307:37 | 38 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1307:36:1307:37 | 38 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1308:17:1308:24 | my_thing | | file://:0:0:0:0 | & | -| main.rs:1308:17:1308:24 | my_thing | &T | main.rs:1223:5:1226:5 | MyInt | -| main.rs:1309:18:1309:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1309:18:1309:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1309:18:1309:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1309:18:1309:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1316:16:1316:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1316:16:1316:20 | SelfParam | &T | main.rs:1314:5:1322:5 | Self [trait MyTrait] | -| main.rs:1319:16:1319:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1319:16:1319:20 | SelfParam | &T | main.rs:1314:5:1322:5 | Self [trait MyTrait] | -| main.rs:1319:32:1321:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1319:32:1321:9 | { ... } | &T | main.rs:1314:5:1322:5 | Self [trait MyTrait] | -| main.rs:1320:13:1320:16 | self | | file://:0:0:0:0 | & | -| main.rs:1320:13:1320:16 | self | &T | main.rs:1314:5:1322:5 | Self [trait MyTrait] | -| main.rs:1320:13:1320:22 | self.foo() | | file://:0:0:0:0 | & | -| main.rs:1320:13:1320:22 | self.foo() | &T | main.rs:1314:5:1322:5 | Self [trait MyTrait] | -| main.rs:1328:16:1328:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1328:16:1328:20 | SelfParam | &T | main.rs:1324:5:1324:20 | MyStruct | -| main.rs:1328:36:1330:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1328:36:1330:9 | { ... } | &T | main.rs:1324:5:1324:20 | MyStruct | -| main.rs:1329:13:1329:16 | self | | file://:0:0:0:0 | & | -| main.rs:1329:13:1329:16 | self | &T | main.rs:1324:5:1324:20 | MyStruct | -| main.rs:1334:13:1334:13 | x | | main.rs:1324:5:1324:20 | MyStruct | -| main.rs:1334:17:1334:24 | MyStruct | | main.rs:1324:5:1324:20 | MyStruct | -| main.rs:1335:9:1335:9 | x | | main.rs:1324:5:1324:20 | MyStruct | -| main.rs:1335:9:1335:15 | x.bar() | | file://:0:0:0:0 | & | -| main.rs:1335:9:1335:15 | x.bar() | &T | main.rs:1324:5:1324:20 | MyStruct | -| main.rs:1345:16:1345:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1345:16:1345:20 | SelfParam | &T | main.rs:1342:5:1342:26 | MyStruct | -| main.rs:1345:16:1345:20 | SelfParam | &T.T | main.rs:1344:10:1344:10 | T | -| main.rs:1345:32:1347:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1345:32:1347:9 | { ... } | &T | main.rs:1342:5:1342:26 | MyStruct | -| main.rs:1345:32:1347:9 | { ... } | &T.T | main.rs:1344:10:1344:10 | T | -| main.rs:1346:13:1346:16 | self | | file://:0:0:0:0 | & | -| main.rs:1346:13:1346:16 | self | &T | main.rs:1342:5:1342:26 | MyStruct | -| main.rs:1346:13:1346:16 | self | &T.T | main.rs:1344:10:1344:10 | T | -| main.rs:1351:13:1351:13 | x | | main.rs:1342:5:1342:26 | MyStruct | -| main.rs:1351:13:1351:13 | x | T | main.rs:1340:5:1340:13 | S | -| main.rs:1351:17:1351:27 | MyStruct(...) | | main.rs:1342:5:1342:26 | MyStruct | -| main.rs:1351:17:1351:27 | MyStruct(...) | T | main.rs:1340:5:1340:13 | S | -| main.rs:1351:26:1351:26 | S | | main.rs:1340:5:1340:13 | S | -| main.rs:1352:9:1352:9 | x | | main.rs:1342:5:1342:26 | MyStruct | -| main.rs:1352:9:1352:9 | x | T | main.rs:1340:5:1340:13 | S | -| main.rs:1352:9:1352:15 | x.foo() | | file://:0:0:0:0 | & | -| main.rs:1352:9:1352:15 | x.foo() | &T | main.rs:1342:5:1342:26 | MyStruct | -| main.rs:1352:9:1352:15 | x.foo() | &T.T | main.rs:1340:5:1340:13 | S | -| main.rs:1363:17:1363:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1363:17:1363:25 | SelfParam | &T | main.rs:1357:5:1360:5 | MyFlag | +| main.rs:1109:18:1109:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1109:18:1109:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1109:26:1109:26 | x | | main.rs:1092:5:1093:14 | S3 | +| main.rs:1124:22:1124:25 | SelfParam | | main.rs:1122:5:1125:5 | Self [trait TraitWithAssocType] | +| main.rs:1132:22:1132:25 | SelfParam | | main.rs:1120:5:1120:28 | GenS | +| main.rs:1132:22:1132:25 | SelfParam | GenT | main.rs:1127:10:1127:15 | Output | +| main.rs:1132:44:1134:9 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1132:44:1134:9 | { ... } | E | main.rs:1127:10:1127:15 | Output | +| main.rs:1132:44:1134:9 | { ... } | T | main.rs:1127:10:1127:15 | Output | +| main.rs:1133:13:1133:22 | Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1133:13:1133:22 | Ok(...) | E | main.rs:1127:10:1127:15 | Output | +| main.rs:1133:13:1133:22 | Ok(...) | T | main.rs:1127:10:1127:15 | Output | +| main.rs:1133:16:1133:19 | self | | main.rs:1120:5:1120:28 | GenS | +| main.rs:1133:16:1133:19 | self | GenT | main.rs:1127:10:1127:15 | Output | +| main.rs:1133:16:1133:21 | self.0 | | main.rs:1127:10:1127:15 | Output | +| main.rs:1139:13:1139:14 | p1 | | main.rs:1067:5:1073:5 | PairOption | +| main.rs:1139:13:1139:14 | p1 | Fst | main.rs:1086:5:1087:14 | S1 | +| main.rs:1139:13:1139:14 | p1 | Snd | main.rs:1089:5:1090:14 | S2 | +| main.rs:1139:26:1139:53 | ...::PairBoth(...) | | main.rs:1067:5:1073:5 | PairOption | +| main.rs:1139:26:1139:53 | ...::PairBoth(...) | Fst | main.rs:1086:5:1087:14 | S1 | +| main.rs:1139:26:1139:53 | ...::PairBoth(...) | Snd | main.rs:1089:5:1090:14 | S2 | +| main.rs:1139:47:1139:48 | S1 | | main.rs:1086:5:1087:14 | S1 | +| main.rs:1139:51:1139:52 | S2 | | main.rs:1089:5:1090:14 | S2 | +| main.rs:1140:18:1140:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1140:18:1140:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1140:18:1140:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1140:18:1140:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1140:26:1140:27 | p1 | | main.rs:1067:5:1073:5 | PairOption | +| main.rs:1140:26:1140:27 | p1 | Fst | main.rs:1086:5:1087:14 | S1 | +| main.rs:1140:26:1140:27 | p1 | Snd | main.rs:1089:5:1090:14 | S2 | +| main.rs:1143:13:1143:14 | p2 | | main.rs:1067:5:1073:5 | PairOption | +| main.rs:1143:13:1143:14 | p2 | Fst | main.rs:1086:5:1087:14 | S1 | +| main.rs:1143:13:1143:14 | p2 | Snd | main.rs:1089:5:1090:14 | S2 | +| main.rs:1143:26:1143:47 | ...::PairNone(...) | | main.rs:1067:5:1073:5 | PairOption | +| main.rs:1143:26:1143:47 | ...::PairNone(...) | Fst | main.rs:1086:5:1087:14 | S1 | +| main.rs:1143:26:1143:47 | ...::PairNone(...) | Snd | main.rs:1089:5:1090:14 | S2 | +| main.rs:1144:18:1144:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1144:18:1144:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1144:18:1144:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1144:18:1144:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1144:26:1144:27 | p2 | | main.rs:1067:5:1073:5 | PairOption | +| main.rs:1144:26:1144:27 | p2 | Fst | main.rs:1086:5:1087:14 | S1 | +| main.rs:1144:26:1144:27 | p2 | Snd | main.rs:1089:5:1090:14 | S2 | +| main.rs:1147:13:1147:14 | p3 | | main.rs:1067:5:1073:5 | PairOption | +| main.rs:1147:13:1147:14 | p3 | Fst | main.rs:1089:5:1090:14 | S2 | +| main.rs:1147:13:1147:14 | p3 | Snd | main.rs:1092:5:1093:14 | S3 | +| main.rs:1147:34:1147:56 | ...::PairSnd(...) | | main.rs:1067:5:1073:5 | PairOption | +| main.rs:1147:34:1147:56 | ...::PairSnd(...) | Fst | main.rs:1089:5:1090:14 | S2 | +| main.rs:1147:34:1147:56 | ...::PairSnd(...) | Snd | main.rs:1092:5:1093:14 | S3 | +| main.rs:1147:54:1147:55 | S3 | | main.rs:1092:5:1093:14 | S3 | +| main.rs:1148:18:1148:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1148:18:1148:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1148:18:1148:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1148:18:1148:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1148:26:1148:27 | p3 | | main.rs:1067:5:1073:5 | PairOption | +| main.rs:1148:26:1148:27 | p3 | Fst | main.rs:1089:5:1090:14 | S2 | +| main.rs:1148:26:1148:27 | p3 | Snd | main.rs:1092:5:1093:14 | S3 | +| main.rs:1151:13:1151:14 | p3 | | main.rs:1067:5:1073:5 | PairOption | +| main.rs:1151:13:1151:14 | p3 | Fst | main.rs:1089:5:1090:14 | S2 | +| main.rs:1151:13:1151:14 | p3 | Snd | main.rs:1092:5:1093:14 | S3 | +| main.rs:1151:35:1151:56 | ...::PairNone(...) | | main.rs:1067:5:1073:5 | PairOption | +| main.rs:1151:35:1151:56 | ...::PairNone(...) | Fst | main.rs:1089:5:1090:14 | S2 | +| main.rs:1151:35:1151:56 | ...::PairNone(...) | Snd | main.rs:1092:5:1093:14 | S3 | +| main.rs:1152:18:1152:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1152:18:1152:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1152:18:1152:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1152:18:1152:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1152:26:1152:27 | p3 | | main.rs:1067:5:1073:5 | PairOption | +| main.rs:1152:26:1152:27 | p3 | Fst | main.rs:1089:5:1090:14 | S2 | +| main.rs:1152:26:1152:27 | p3 | Snd | main.rs:1092:5:1093:14 | S3 | +| main.rs:1154:11:1154:54 | ...::PairSnd(...) | | main.rs:1067:5:1073:5 | PairOption | +| main.rs:1154:11:1154:54 | ...::PairSnd(...) | Fst | main.rs:1089:5:1090:14 | S2 | +| main.rs:1154:11:1154:54 | ...::PairSnd(...) | Snd | main.rs:1067:5:1073:5 | PairOption | +| main.rs:1154:11:1154:54 | ...::PairSnd(...) | Snd.Fst | main.rs:1089:5:1090:14 | S2 | +| main.rs:1154:11:1154:54 | ...::PairSnd(...) | Snd.Snd | main.rs:1092:5:1093:14 | S3 | +| main.rs:1154:31:1154:53 | ...::PairSnd(...) | | main.rs:1067:5:1073:5 | PairOption | +| main.rs:1154:31:1154:53 | ...::PairSnd(...) | Fst | main.rs:1089:5:1090:14 | S2 | +| main.rs:1154:31:1154:53 | ...::PairSnd(...) | Snd | main.rs:1092:5:1093:14 | S3 | +| main.rs:1154:51:1154:52 | S3 | | main.rs:1092:5:1093:14 | S3 | +| main.rs:1156:13:1156:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1156:13:1156:13 | x | E | main.rs:1086:5:1087:14 | S1 | +| main.rs:1156:13:1156:13 | x | T | main.rs:1112:5:1112:34 | S4 | +| main.rs:1156:13:1156:13 | x | T.T41 | main.rs:1089:5:1090:14 | S2 | +| main.rs:1156:13:1156:13 | x | T.T42 | main.rs:1114:5:1114:22 | S5 | +| main.rs:1156:13:1156:13 | x | T.T42.T5 | main.rs:1089:5:1090:14 | S2 | +| main.rs:1158:13:1158:13 | y | | {EXTERNAL LOCATION} | Result | +| main.rs:1158:13:1158:13 | y | E | {EXTERNAL LOCATION} | bool | +| main.rs:1158:13:1158:13 | y | T | {EXTERNAL LOCATION} | bool | +| main.rs:1158:17:1158:26 | GenS(...) | | main.rs:1120:5:1120:28 | GenS | +| main.rs:1158:17:1158:26 | GenS(...) | GenT | {EXTERNAL LOCATION} | bool | +| main.rs:1158:17:1158:38 | ... .get_input() | | {EXTERNAL LOCATION} | Result | +| main.rs:1158:17:1158:38 | ... .get_input() | E | {EXTERNAL LOCATION} | bool | +| main.rs:1158:17:1158:38 | ... .get_input() | T | {EXTERNAL LOCATION} | bool | +| main.rs:1158:22:1158:25 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1171:16:1171:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1171:16:1171:24 | SelfParam | &T | main.rs:1169:5:1176:5 | Self [trait MyTrait] | +| main.rs:1171:27:1171:31 | value | | main.rs:1169:19:1169:19 | S | +| main.rs:1173:21:1173:29 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1173:21:1173:29 | SelfParam | &T | main.rs:1169:5:1176:5 | Self [trait MyTrait] | +| main.rs:1173:32:1173:36 | value | | main.rs:1169:19:1169:19 | S | +| main.rs:1174:13:1174:16 | self | | file://:0:0:0:0 | & | +| main.rs:1174:13:1174:16 | self | &T | main.rs:1169:5:1176:5 | Self [trait MyTrait] | +| main.rs:1174:22:1174:26 | value | | main.rs:1169:19:1169:19 | S | +| main.rs:1180:16:1180:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1180:16:1180:24 | SelfParam | &T | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1180:16:1180:24 | SelfParam | &T.T | main.rs:1178:10:1178:10 | T | +| main.rs:1180:27:1180:31 | value | | main.rs:1178:10:1178:10 | T | +| main.rs:1184:26:1186:9 | { ... } | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1184:26:1186:9 | { ... } | T | main.rs:1183:10:1183:10 | T | +| main.rs:1185:13:1185:30 | ...::MyNone(...) | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1185:13:1185:30 | ...::MyNone(...) | T | main.rs:1183:10:1183:10 | T | +| main.rs:1190:20:1190:23 | SelfParam | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1190:20:1190:23 | SelfParam | T | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1190:20:1190:23 | SelfParam | T.T | main.rs:1189:10:1189:10 | T | +| main.rs:1190:41:1195:9 | { ... } | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1190:41:1195:9 | { ... } | T | main.rs:1189:10:1189:10 | T | +| main.rs:1191:13:1194:13 | match self { ... } | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1191:13:1194:13 | match self { ... } | T | main.rs:1189:10:1189:10 | T | +| main.rs:1191:19:1191:22 | self | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1191:19:1191:22 | self | T | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1191:19:1191:22 | self | T.T | main.rs:1189:10:1189:10 | T | +| main.rs:1192:17:1192:34 | ...::MyNone(...) | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1192:17:1192:34 | ...::MyNone(...) | T | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1192:17:1192:34 | ...::MyNone(...) | T.T | main.rs:1189:10:1189:10 | T | +| main.rs:1192:39:1192:56 | ...::MyNone(...) | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1192:39:1192:56 | ...::MyNone(...) | T | main.rs:1189:10:1189:10 | T | +| main.rs:1193:17:1193:35 | ...::MySome(...) | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1193:17:1193:35 | ...::MySome(...) | T | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1193:17:1193:35 | ...::MySome(...) | T.T | main.rs:1189:10:1189:10 | T | +| main.rs:1193:34:1193:34 | x | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1193:34:1193:34 | x | T | main.rs:1189:10:1189:10 | T | +| main.rs:1193:40:1193:40 | x | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1193:40:1193:40 | x | T | main.rs:1189:10:1189:10 | T | +| main.rs:1202:13:1202:14 | x1 | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1202:13:1202:14 | x1 | T | main.rs:1198:5:1199:13 | S | +| main.rs:1202:18:1202:37 | ...::new(...) | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1202:18:1202:37 | ...::new(...) | T | main.rs:1198:5:1199:13 | S | +| main.rs:1203:18:1203:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1203:18:1203:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1203:18:1203:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1203:18:1203:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1203:26:1203:27 | x1 | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1203:26:1203:27 | x1 | T | main.rs:1198:5:1199:13 | S | +| main.rs:1205:17:1205:18 | x2 | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1205:17:1205:18 | x2 | T | main.rs:1198:5:1199:13 | S | +| main.rs:1205:22:1205:36 | ...::new(...) | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1205:22:1205:36 | ...::new(...) | T | main.rs:1198:5:1199:13 | S | +| main.rs:1206:9:1206:10 | x2 | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1206:9:1206:10 | x2 | T | main.rs:1198:5:1199:13 | S | +| main.rs:1206:16:1206:16 | S | | main.rs:1198:5:1199:13 | S | +| main.rs:1207:18:1207:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1207:18:1207:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1207:18:1207:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1207:18:1207:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1207:26:1207:27 | x2 | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1207:26:1207:27 | x2 | T | main.rs:1198:5:1199:13 | S | +| main.rs:1210:17:1210:18 | x3 | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1210:22:1210:36 | ...::new(...) | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1211:9:1211:10 | x3 | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1211:21:1211:21 | S | | main.rs:1198:5:1199:13 | S | +| main.rs:1212:18:1212:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1212:18:1212:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1212:18:1212:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1212:18:1212:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1212:26:1212:27 | x3 | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1214:17:1214:18 | x4 | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1214:17:1214:18 | x4 | T | main.rs:1198:5:1199:13 | S | +| main.rs:1214:22:1214:36 | ...::new(...) | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1214:22:1214:36 | ...::new(...) | T | main.rs:1198:5:1199:13 | S | +| main.rs:1215:23:1215:29 | &mut x4 | | file://:0:0:0:0 | & | +| main.rs:1215:23:1215:29 | &mut x4 | &T | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1215:23:1215:29 | &mut x4 | &T.T | main.rs:1198:5:1199:13 | S | +| main.rs:1215:28:1215:29 | x4 | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1215:28:1215:29 | x4 | T | main.rs:1198:5:1199:13 | S | +| main.rs:1215:32:1215:32 | S | | main.rs:1198:5:1199:13 | S | +| main.rs:1216:18:1216:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1216:18:1216:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1216:18:1216:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1216:18:1216:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1216:26:1216:27 | x4 | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1216:26:1216:27 | x4 | T | main.rs:1198:5:1199:13 | S | +| main.rs:1218:13:1218:14 | x5 | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1218:13:1218:14 | x5 | T | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1218:13:1218:14 | x5 | T.T | main.rs:1198:5:1199:13 | S | +| main.rs:1218:18:1218:58 | ...::MySome(...) | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1218:18:1218:58 | ...::MySome(...) | T | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1218:18:1218:58 | ...::MySome(...) | T.T | main.rs:1198:5:1199:13 | S | +| main.rs:1218:35:1218:57 | ...::MyNone(...) | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1218:35:1218:57 | ...::MyNone(...) | T | main.rs:1198:5:1199:13 | S | +| main.rs:1219:18:1219:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1219:18:1219:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1219:18:1219:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1219:18:1219:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1219:26:1219:27 | x5 | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1219:26:1219:27 | x5 | T | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1219:26:1219:27 | x5 | T.T | main.rs:1198:5:1199:13 | S | +| main.rs:1219:26:1219:37 | x5.flatten() | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1219:26:1219:37 | x5.flatten() | T | main.rs:1198:5:1199:13 | S | +| main.rs:1221:13:1221:14 | x6 | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1221:13:1221:14 | x6 | T | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1221:13:1221:14 | x6 | T.T | main.rs:1198:5:1199:13 | S | +| main.rs:1221:18:1221:58 | ...::MySome(...) | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1221:18:1221:58 | ...::MySome(...) | T | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1221:18:1221:58 | ...::MySome(...) | T.T | main.rs:1198:5:1199:13 | S | +| main.rs:1221:35:1221:57 | ...::MyNone(...) | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1221:35:1221:57 | ...::MyNone(...) | T | main.rs:1198:5:1199:13 | S | +| main.rs:1222:18:1222:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1222:18:1222:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1222:18:1222:61 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1222:18:1222:61 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1222:26:1222:61 | ...::flatten(...) | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1222:26:1222:61 | ...::flatten(...) | T | main.rs:1198:5:1199:13 | S | +| main.rs:1222:59:1222:60 | x6 | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1222:59:1222:60 | x6 | T | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1222:59:1222:60 | x6 | T.T | main.rs:1198:5:1199:13 | S | +| main.rs:1225:13:1225:19 | from_if | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1225:13:1225:19 | from_if | T | main.rs:1198:5:1199:13 | S | +| main.rs:1225:23:1229:9 | if ... {...} else {...} | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1225:23:1229:9 | if ... {...} else {...} | T | main.rs:1198:5:1199:13 | S | +| main.rs:1225:26:1225:26 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1225:26:1225:30 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1225:30:1225:30 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1225:32:1227:9 | { ... } | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1225:32:1227:9 | { ... } | T | main.rs:1198:5:1199:13 | S | +| main.rs:1226:13:1226:30 | ...::MyNone(...) | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1226:13:1226:30 | ...::MyNone(...) | T | main.rs:1198:5:1199:13 | S | +| main.rs:1227:16:1229:9 | { ... } | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1227:16:1229:9 | { ... } | T | main.rs:1198:5:1199:13 | S | +| main.rs:1228:13:1228:31 | ...::MySome(...) | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1228:13:1228:31 | ...::MySome(...) | T | main.rs:1198:5:1199:13 | S | +| main.rs:1228:30:1228:30 | S | | main.rs:1198:5:1199:13 | S | +| main.rs:1230:18:1230:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1230:18:1230:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1230:18:1230:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1230:18:1230:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1230:26:1230:32 | from_if | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1230:26:1230:32 | from_if | T | main.rs:1198:5:1199:13 | S | +| main.rs:1233:13:1233:22 | from_match | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1233:13:1233:22 | from_match | T | main.rs:1198:5:1199:13 | S | +| main.rs:1233:26:1236:9 | match ... { ... } | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1233:26:1236:9 | match ... { ... } | T | main.rs:1198:5:1199:13 | S | +| main.rs:1233:32:1233:32 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1233:32:1233:36 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1233:36:1233:36 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1234:13:1234:16 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1234:21:1234:38 | ...::MyNone(...) | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1234:21:1234:38 | ...::MyNone(...) | T | main.rs:1198:5:1199:13 | S | +| main.rs:1235:13:1235:17 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1235:22:1235:40 | ...::MySome(...) | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1235:22:1235:40 | ...::MySome(...) | T | main.rs:1198:5:1199:13 | S | +| main.rs:1235:39:1235:39 | S | | main.rs:1198:5:1199:13 | S | +| main.rs:1237:18:1237:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1237:18:1237:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1237:18:1237:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1237:18:1237:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1237:26:1237:35 | from_match | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1237:26:1237:35 | from_match | T | main.rs:1198:5:1199:13 | S | +| main.rs:1240:13:1240:21 | from_loop | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1240:13:1240:21 | from_loop | T | main.rs:1198:5:1199:13 | S | +| main.rs:1240:25:1245:9 | loop { ... } | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1240:25:1245:9 | loop { ... } | T | main.rs:1198:5:1199:13 | S | +| main.rs:1241:16:1241:16 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1241:16:1241:20 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1241:20:1241:20 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1242:23:1242:40 | ...::MyNone(...) | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1242:23:1242:40 | ...::MyNone(...) | T | main.rs:1198:5:1199:13 | S | +| main.rs:1244:19:1244:37 | ...::MySome(...) | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1244:19:1244:37 | ...::MySome(...) | T | main.rs:1198:5:1199:13 | S | +| main.rs:1244:36:1244:36 | S | | main.rs:1198:5:1199:13 | S | +| main.rs:1246:18:1246:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1246:18:1246:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1246:18:1246:34 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1246:18:1246:34 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1246:26:1246:34 | from_loop | | main.rs:1163:5:1167:5 | MyOption | +| main.rs:1246:26:1246:34 | from_loop | T | main.rs:1198:5:1199:13 | S | +| main.rs:1264:15:1264:18 | SelfParam | | main.rs:1252:5:1253:19 | S | +| main.rs:1264:15:1264:18 | SelfParam | T | main.rs:1263:10:1263:10 | T | +| main.rs:1264:26:1266:9 | { ... } | | main.rs:1263:10:1263:10 | T | +| main.rs:1265:13:1265:16 | self | | main.rs:1252:5:1253:19 | S | +| main.rs:1265:13:1265:16 | self | T | main.rs:1263:10:1263:10 | T | +| main.rs:1265:13:1265:18 | self.0 | | main.rs:1263:10:1263:10 | T | +| main.rs:1268:15:1268:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1268:15:1268:19 | SelfParam | &T | main.rs:1252:5:1253:19 | S | +| main.rs:1268:15:1268:19 | SelfParam | &T.T | main.rs:1263:10:1263:10 | T | +| main.rs:1268:28:1270:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1268:28:1270:9 | { ... } | &T | main.rs:1263:10:1263:10 | T | +| main.rs:1269:13:1269:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1269:13:1269:19 | &... | &T | main.rs:1263:10:1263:10 | T | +| main.rs:1269:14:1269:17 | self | | file://:0:0:0:0 | & | +| main.rs:1269:14:1269:17 | self | &T | main.rs:1252:5:1253:19 | S | +| main.rs:1269:14:1269:17 | self | &T.T | main.rs:1263:10:1263:10 | T | +| main.rs:1269:14:1269:19 | self.0 | | main.rs:1263:10:1263:10 | T | +| main.rs:1272:15:1272:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1272:15:1272:25 | SelfParam | &T | main.rs:1252:5:1253:19 | S | +| main.rs:1272:15:1272:25 | SelfParam | &T.T | main.rs:1263:10:1263:10 | T | +| main.rs:1272:34:1274:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1272:34:1274:9 | { ... } | &T | main.rs:1263:10:1263:10 | T | +| main.rs:1273:13:1273:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1273:13:1273:19 | &... | &T | main.rs:1263:10:1263:10 | T | +| main.rs:1273:14:1273:17 | self | | file://:0:0:0:0 | & | +| main.rs:1273:14:1273:17 | self | &T | main.rs:1252:5:1253:19 | S | +| main.rs:1273:14:1273:17 | self | &T.T | main.rs:1263:10:1263:10 | T | +| main.rs:1273:14:1273:19 | self.0 | | main.rs:1263:10:1263:10 | T | +| main.rs:1278:29:1278:33 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1278:29:1278:33 | SelfParam | &T | main.rs:1277:5:1280:5 | Self [trait ATrait] | +| main.rs:1279:33:1279:36 | SelfParam | | main.rs:1277:5:1280:5 | Self [trait ATrait] | +| main.rs:1285:29:1285:33 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1285:29:1285:33 | SelfParam | &T | file://:0:0:0:0 | & | +| main.rs:1285:29:1285:33 | SelfParam | &T | main.rs:1258:5:1261:5 | MyInt | +| main.rs:1285:29:1285:33 | SelfParam | &T.&T | main.rs:1258:5:1261:5 | MyInt | +| main.rs:1285:43:1287:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:1286:13:1286:22 | (...) | | main.rs:1258:5:1261:5 | MyInt | +| main.rs:1286:13:1286:24 | ... .a | | {EXTERNAL LOCATION} | i64 | +| main.rs:1286:14:1286:21 | * ... | | main.rs:1258:5:1261:5 | MyInt | +| main.rs:1286:15:1286:21 | (...) | | file://:0:0:0:0 | & | +| main.rs:1286:15:1286:21 | (...) | | main.rs:1258:5:1261:5 | MyInt | +| main.rs:1286:15:1286:21 | (...) | &T | main.rs:1258:5:1261:5 | MyInt | +| main.rs:1286:16:1286:20 | * ... | | file://:0:0:0:0 | & | +| main.rs:1286:16:1286:20 | * ... | | main.rs:1258:5:1261:5 | MyInt | +| main.rs:1286:16:1286:20 | * ... | &T | main.rs:1258:5:1261:5 | MyInt | +| main.rs:1286:17:1286:20 | self | | file://:0:0:0:0 | & | +| main.rs:1286:17:1286:20 | self | &T | file://:0:0:0:0 | & | +| main.rs:1286:17:1286:20 | self | &T | main.rs:1258:5:1261:5 | MyInt | +| main.rs:1286:17:1286:20 | self | &T.&T | main.rs:1258:5:1261:5 | MyInt | +| main.rs:1290:33:1290:36 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1290:33:1290:36 | SelfParam | &T | main.rs:1258:5:1261:5 | MyInt | +| main.rs:1290:46:1292:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:1291:13:1291:19 | (...) | | main.rs:1258:5:1261:5 | MyInt | +| main.rs:1291:13:1291:21 | ... .a | | {EXTERNAL LOCATION} | i64 | +| main.rs:1291:14:1291:18 | * ... | | main.rs:1258:5:1261:5 | MyInt | +| main.rs:1291:15:1291:18 | self | | file://:0:0:0:0 | & | +| main.rs:1291:15:1291:18 | self | &T | main.rs:1258:5:1261:5 | MyInt | +| main.rs:1296:13:1296:14 | x1 | | main.rs:1252:5:1253:19 | S | +| main.rs:1296:13:1296:14 | x1 | T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1296:18:1296:22 | S(...) | | main.rs:1252:5:1253:19 | S | +| main.rs:1296:18:1296:22 | S(...) | T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1296:20:1296:21 | S2 | | main.rs:1255:5:1256:14 | S2 | +| main.rs:1297:18:1297:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1297:18:1297:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1297:18:1297:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1297:18:1297:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1297:26:1297:27 | x1 | | main.rs:1252:5:1253:19 | S | +| main.rs:1297:26:1297:27 | x1 | T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1297:26:1297:32 | x1.m1() | | main.rs:1255:5:1256:14 | S2 | +| main.rs:1299:13:1299:14 | x2 | | main.rs:1252:5:1253:19 | S | +| main.rs:1299:13:1299:14 | x2 | T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1299:18:1299:22 | S(...) | | main.rs:1252:5:1253:19 | S | +| main.rs:1299:18:1299:22 | S(...) | T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1299:20:1299:21 | S2 | | main.rs:1255:5:1256:14 | S2 | +| main.rs:1301:18:1301:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1301:18:1301:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1301:18:1301:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1301:18:1301:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1301:26:1301:27 | x2 | | main.rs:1252:5:1253:19 | S | +| main.rs:1301:26:1301:27 | x2 | T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1301:26:1301:32 | x2.m2() | | file://:0:0:0:0 | & | +| main.rs:1301:26:1301:32 | x2.m2() | &T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1302:18:1302:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1302:18:1302:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1302:18:1302:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1302:18:1302:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1302:26:1302:27 | x2 | | main.rs:1252:5:1253:19 | S | +| main.rs:1302:26:1302:27 | x2 | T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1302:26:1302:32 | x2.m3() | | file://:0:0:0:0 | & | +| main.rs:1302:26:1302:32 | x2.m3() | &T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1304:13:1304:14 | x3 | | main.rs:1252:5:1253:19 | S | +| main.rs:1304:13:1304:14 | x3 | T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1304:18:1304:22 | S(...) | | main.rs:1252:5:1253:19 | S | +| main.rs:1304:18:1304:22 | S(...) | T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1304:20:1304:21 | S2 | | main.rs:1255:5:1256:14 | S2 | +| main.rs:1306:18:1306:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1306:18:1306:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1306:18:1306:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1306:18:1306:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1306:26:1306:41 | ...::m2(...) | | file://:0:0:0:0 | & | +| main.rs:1306:26:1306:41 | ...::m2(...) | &T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1306:38:1306:40 | &x3 | | file://:0:0:0:0 | & | +| main.rs:1306:38:1306:40 | &x3 | &T | main.rs:1252:5:1253:19 | S | +| main.rs:1306:38:1306:40 | &x3 | &T.T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1306:39:1306:40 | x3 | | main.rs:1252:5:1253:19 | S | +| main.rs:1306:39:1306:40 | x3 | T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1307:18:1307:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1307:18:1307:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1307:18:1307:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1307:18:1307:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1307:26:1307:41 | ...::m3(...) | | file://:0:0:0:0 | & | +| main.rs:1307:26:1307:41 | ...::m3(...) | &T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1307:38:1307:40 | &x3 | | file://:0:0:0:0 | & | +| main.rs:1307:38:1307:40 | &x3 | &T | main.rs:1252:5:1253:19 | S | +| main.rs:1307:38:1307:40 | &x3 | &T.T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1307:39:1307:40 | x3 | | main.rs:1252:5:1253:19 | S | +| main.rs:1307:39:1307:40 | x3 | T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1309:13:1309:14 | x4 | | file://:0:0:0:0 | & | +| main.rs:1309:13:1309:14 | x4 | &T | main.rs:1252:5:1253:19 | S | +| main.rs:1309:13:1309:14 | x4 | &T.T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1309:18:1309:23 | &... | | file://:0:0:0:0 | & | +| main.rs:1309:18:1309:23 | &... | &T | main.rs:1252:5:1253:19 | S | +| main.rs:1309:18:1309:23 | &... | &T.T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1309:19:1309:23 | S(...) | | main.rs:1252:5:1253:19 | S | +| main.rs:1309:19:1309:23 | S(...) | T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1309:21:1309:22 | S2 | | main.rs:1255:5:1256:14 | S2 | +| main.rs:1311:18:1311:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1311:18:1311:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1311:18:1311:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1311:18:1311:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1311:26:1311:27 | x4 | | file://:0:0:0:0 | & | +| main.rs:1311:26:1311:27 | x4 | &T | main.rs:1252:5:1253:19 | S | +| main.rs:1311:26:1311:27 | x4 | &T.T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1311:26:1311:32 | x4.m2() | | file://:0:0:0:0 | & | +| main.rs:1311:26:1311:32 | x4.m2() | &T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1312:18:1312:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1312:18:1312:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1312:18:1312:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1312:18:1312:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1312:26:1312:27 | x4 | | file://:0:0:0:0 | & | +| main.rs:1312:26:1312:27 | x4 | &T | main.rs:1252:5:1253:19 | S | +| main.rs:1312:26:1312:27 | x4 | &T.T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1312:26:1312:32 | x4.m3() | | file://:0:0:0:0 | & | +| main.rs:1312:26:1312:32 | x4.m3() | &T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1314:13:1314:14 | x5 | | file://:0:0:0:0 | & | +| main.rs:1314:13:1314:14 | x5 | &T | main.rs:1252:5:1253:19 | S | +| main.rs:1314:13:1314:14 | x5 | &T.T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1314:18:1314:23 | &... | | file://:0:0:0:0 | & | +| main.rs:1314:18:1314:23 | &... | &T | main.rs:1252:5:1253:19 | S | +| main.rs:1314:18:1314:23 | &... | &T.T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1314:19:1314:23 | S(...) | | main.rs:1252:5:1253:19 | S | +| main.rs:1314:19:1314:23 | S(...) | T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1314:21:1314:22 | S2 | | main.rs:1255:5:1256:14 | S2 | +| main.rs:1316:18:1316:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1316:18:1316:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1316:18:1316:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1316:18:1316:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1316:26:1316:27 | x5 | | file://:0:0:0:0 | & | +| main.rs:1316:26:1316:27 | x5 | &T | main.rs:1252:5:1253:19 | S | +| main.rs:1316:26:1316:27 | x5 | &T.T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1316:26:1316:32 | x5.m1() | | main.rs:1255:5:1256:14 | S2 | +| main.rs:1317:18:1317:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1317:18:1317:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1317:18:1317:29 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1317:18:1317:29 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1317:26:1317:27 | x5 | | file://:0:0:0:0 | & | +| main.rs:1317:26:1317:27 | x5 | &T | main.rs:1252:5:1253:19 | S | +| main.rs:1317:26:1317:27 | x5 | &T.T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1317:26:1317:29 | x5.0 | | main.rs:1255:5:1256:14 | S2 | +| main.rs:1319:13:1319:14 | x6 | | file://:0:0:0:0 | & | +| main.rs:1319:13:1319:14 | x6 | &T | main.rs:1252:5:1253:19 | S | +| main.rs:1319:13:1319:14 | x6 | &T.T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1319:18:1319:23 | &... | | file://:0:0:0:0 | & | +| main.rs:1319:18:1319:23 | &... | &T | main.rs:1252:5:1253:19 | S | +| main.rs:1319:18:1319:23 | &... | &T.T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1319:19:1319:23 | S(...) | | main.rs:1252:5:1253:19 | S | +| main.rs:1319:19:1319:23 | S(...) | T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1319:21:1319:22 | S2 | | main.rs:1255:5:1256:14 | S2 | +| main.rs:1322:18:1322:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1322:18:1322:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1322:18:1322:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1322:18:1322:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1322:26:1322:30 | (...) | | main.rs:1252:5:1253:19 | S | +| main.rs:1322:26:1322:30 | (...) | T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1322:26:1322:35 | ... .m1() | | main.rs:1255:5:1256:14 | S2 | +| main.rs:1322:27:1322:29 | * ... | | main.rs:1252:5:1253:19 | S | +| main.rs:1322:27:1322:29 | * ... | T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1322:28:1322:29 | x6 | | file://:0:0:0:0 | & | +| main.rs:1322:28:1322:29 | x6 | &T | main.rs:1252:5:1253:19 | S | +| main.rs:1322:28:1322:29 | x6 | &T.T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1324:13:1324:14 | x7 | | main.rs:1252:5:1253:19 | S | +| main.rs:1324:13:1324:14 | x7 | T | file://:0:0:0:0 | & | +| main.rs:1324:13:1324:14 | x7 | T.&T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1324:18:1324:23 | S(...) | | main.rs:1252:5:1253:19 | S | +| main.rs:1324:18:1324:23 | S(...) | T | file://:0:0:0:0 | & | +| main.rs:1324:18:1324:23 | S(...) | T.&T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1324:20:1324:22 | &S2 | | file://:0:0:0:0 | & | +| main.rs:1324:20:1324:22 | &S2 | &T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1324:21:1324:22 | S2 | | main.rs:1255:5:1256:14 | S2 | +| main.rs:1327:13:1327:13 | t | | file://:0:0:0:0 | & | +| main.rs:1327:13:1327:13 | t | &T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1327:17:1327:18 | x7 | | main.rs:1252:5:1253:19 | S | +| main.rs:1327:17:1327:18 | x7 | T | file://:0:0:0:0 | & | +| main.rs:1327:17:1327:18 | x7 | T.&T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1327:17:1327:23 | x7.m1() | | file://:0:0:0:0 | & | +| main.rs:1327:17:1327:23 | x7.m1() | &T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1328:18:1328:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1328:18:1328:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1328:18:1328:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1328:18:1328:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1328:26:1328:27 | x7 | | main.rs:1252:5:1253:19 | S | +| main.rs:1328:26:1328:27 | x7 | T | file://:0:0:0:0 | & | +| main.rs:1328:26:1328:27 | x7 | T.&T | main.rs:1255:5:1256:14 | S2 | +| main.rs:1330:13:1330:14 | x9 | | {EXTERNAL LOCATION} | String | +| main.rs:1330:26:1330:32 | "Hello" | | file://:0:0:0:0 | & | +| main.rs:1330:26:1330:32 | "Hello" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1330:26:1330:44 | "Hello".to_string() | | {EXTERNAL LOCATION} | String | +| main.rs:1334:13:1334:13 | u | | {EXTERNAL LOCATION} | Result | +| main.rs:1334:13:1334:13 | u | T | {EXTERNAL LOCATION} | u32 | +| main.rs:1334:17:1334:18 | x9 | | {EXTERNAL LOCATION} | String | +| main.rs:1334:17:1334:33 | x9.parse() | | {EXTERNAL LOCATION} | Result | +| main.rs:1334:17:1334:33 | x9.parse() | T | {EXTERNAL LOCATION} | u32 | +| main.rs:1336:13:1336:20 | my_thing | | file://:0:0:0:0 | & | +| main.rs:1336:13:1336:20 | my_thing | &T | main.rs:1258:5:1261:5 | MyInt | +| main.rs:1336:24:1336:39 | &... | | file://:0:0:0:0 | & | +| main.rs:1336:24:1336:39 | &... | &T | main.rs:1258:5:1261:5 | MyInt | +| main.rs:1336:25:1336:39 | MyInt {...} | | main.rs:1258:5:1261:5 | MyInt | +| main.rs:1336:36:1336:37 | 37 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1336:36:1336:37 | 37 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1338:17:1338:24 | my_thing | | file://:0:0:0:0 | & | +| main.rs:1338:17:1338:24 | my_thing | &T | main.rs:1258:5:1261:5 | MyInt | +| main.rs:1339:18:1339:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1339:18:1339:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1339:18:1339:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1339:18:1339:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1342:13:1342:20 | my_thing | | file://:0:0:0:0 | & | +| main.rs:1342:13:1342:20 | my_thing | &T | main.rs:1258:5:1261:5 | MyInt | +| main.rs:1342:24:1342:39 | &... | | file://:0:0:0:0 | & | +| main.rs:1342:24:1342:39 | &... | &T | main.rs:1258:5:1261:5 | MyInt | +| main.rs:1342:25:1342:39 | MyInt {...} | | main.rs:1258:5:1261:5 | MyInt | +| main.rs:1342:36:1342:37 | 38 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1342:36:1342:37 | 38 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1343:17:1343:24 | my_thing | | file://:0:0:0:0 | & | +| main.rs:1343:17:1343:24 | my_thing | &T | main.rs:1258:5:1261:5 | MyInt | +| main.rs:1344:18:1344:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1344:18:1344:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1344:18:1344:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1344:18:1344:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1351:16:1351:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1351:16:1351:20 | SelfParam | &T | main.rs:1349:5:1357:5 | Self [trait MyTrait] | +| main.rs:1354:16:1354:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1354:16:1354:20 | SelfParam | &T | main.rs:1349:5:1357:5 | Self [trait MyTrait] | +| main.rs:1354:32:1356:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1354:32:1356:9 | { ... } | &T | main.rs:1349:5:1357:5 | Self [trait MyTrait] | +| main.rs:1355:13:1355:16 | self | | file://:0:0:0:0 | & | +| main.rs:1355:13:1355:16 | self | &T | main.rs:1349:5:1357:5 | Self [trait MyTrait] | +| main.rs:1355:13:1355:22 | self.foo() | | file://:0:0:0:0 | & | +| main.rs:1355:13:1355:22 | self.foo() | &T | main.rs:1349:5:1357:5 | Self [trait MyTrait] | +| main.rs:1363:16:1363:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1363:16:1363:20 | SelfParam | &T | main.rs:1359:5:1359:20 | MyStruct | +| main.rs:1363:36:1365:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1363:36:1365:9 | { ... } | &T | main.rs:1359:5:1359:20 | MyStruct | | main.rs:1364:13:1364:16 | self | | file://:0:0:0:0 | & | -| main.rs:1364:13:1364:16 | self | &T | main.rs:1357:5:1360:5 | MyFlag | -| main.rs:1364:13:1364:21 | self.bool | | {EXTERNAL LOCATION} | bool | -| main.rs:1364:13:1364:34 | ... = ... | | file://:0:0:0:0 | () | -| main.rs:1364:25:1364:34 | ! ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1364:26:1364:29 | self | | file://:0:0:0:0 | & | -| main.rs:1364:26:1364:29 | self | &T | main.rs:1357:5:1360:5 | MyFlag | -| main.rs:1364:26:1364:34 | self.bool | | {EXTERNAL LOCATION} | bool | -| main.rs:1371:15:1371:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1371:15:1371:19 | SelfParam | &T | main.rs:1368:5:1368:13 | S | -| main.rs:1371:31:1373:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1371:31:1373:9 | { ... } | &T | file://:0:0:0:0 | & | -| main.rs:1371:31:1373:9 | { ... } | &T | main.rs:1368:5:1368:13 | S | -| main.rs:1371:31:1373:9 | { ... } | &T.&T | file://:0:0:0:0 | & | -| main.rs:1371:31:1373:9 | { ... } | &T.&T.&T | file://:0:0:0:0 | & | -| main.rs:1371:31:1373:9 | { ... } | &T.&T.&T.&T | main.rs:1368:5:1368:13 | S | -| main.rs:1372:13:1372:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1372:13:1372:19 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1372:13:1372:19 | &... | &T | main.rs:1368:5:1368:13 | S | -| main.rs:1372:13:1372:19 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1372:13:1372:19 | &... | &T.&T.&T | file://:0:0:0:0 | & | -| main.rs:1372:13:1372:19 | &... | &T.&T.&T.&T | main.rs:1368:5:1368:13 | S | -| main.rs:1372:14:1372:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1372:14:1372:19 | &... | | main.rs:1368:5:1368:13 | S | -| main.rs:1372:14:1372:19 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1372:14:1372:19 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1372:14:1372:19 | &... | &T.&T.&T | main.rs:1368:5:1368:13 | S | -| main.rs:1372:15:1372:19 | &self | | file://:0:0:0:0 | & | -| main.rs:1372:15:1372:19 | &self | &T | file://:0:0:0:0 | & | -| main.rs:1372:15:1372:19 | &self | &T.&T | main.rs:1368:5:1368:13 | S | -| main.rs:1372:16:1372:19 | self | | file://:0:0:0:0 | & | -| main.rs:1372:16:1372:19 | self | &T | main.rs:1368:5:1368:13 | S | -| main.rs:1375:15:1375:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1375:15:1375:25 | SelfParam | &T | main.rs:1368:5:1368:13 | S | -| main.rs:1375:37:1377:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1375:37:1377:9 | { ... } | &T | file://:0:0:0:0 | & | -| main.rs:1375:37:1377:9 | { ... } | &T | main.rs:1368:5:1368:13 | S | -| main.rs:1375:37:1377:9 | { ... } | &T.&T | file://:0:0:0:0 | & | -| main.rs:1375:37:1377:9 | { ... } | &T.&T.&T | file://:0:0:0:0 | & | -| main.rs:1375:37:1377:9 | { ... } | &T.&T.&T.&T | main.rs:1368:5:1368:13 | S | -| main.rs:1376:13:1376:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1376:13:1376:19 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1376:13:1376:19 | &... | &T | main.rs:1368:5:1368:13 | S | -| main.rs:1376:13:1376:19 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1376:13:1376:19 | &... | &T.&T.&T | file://:0:0:0:0 | & | -| main.rs:1376:13:1376:19 | &... | &T.&T.&T.&T | main.rs:1368:5:1368:13 | S | -| main.rs:1376:14:1376:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1376:14:1376:19 | &... | | main.rs:1368:5:1368:13 | S | -| main.rs:1376:14:1376:19 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1376:14:1376:19 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1376:14:1376:19 | &... | &T.&T.&T | main.rs:1368:5:1368:13 | S | -| main.rs:1376:15:1376:19 | &self | | file://:0:0:0:0 | & | -| main.rs:1376:15:1376:19 | &self | &T | file://:0:0:0:0 | & | -| main.rs:1376:15:1376:19 | &self | &T.&T | main.rs:1368:5:1368:13 | S | -| main.rs:1376:16:1376:19 | self | | file://:0:0:0:0 | & | -| main.rs:1376:16:1376:19 | self | &T | main.rs:1368:5:1368:13 | S | -| main.rs:1379:15:1379:15 | x | | file://:0:0:0:0 | & | -| main.rs:1379:15:1379:15 | x | &T | main.rs:1368:5:1368:13 | S | -| main.rs:1379:34:1381:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1379:34:1381:9 | { ... } | &T | main.rs:1368:5:1368:13 | S | -| main.rs:1380:13:1380:13 | x | | file://:0:0:0:0 | & | -| main.rs:1380:13:1380:13 | x | &T | main.rs:1368:5:1368:13 | S | -| main.rs:1383:15:1383:15 | x | | file://:0:0:0:0 | & | -| main.rs:1383:15:1383:15 | x | &T | main.rs:1368:5:1368:13 | S | -| main.rs:1383:34:1385:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1383:34:1385:9 | { ... } | &T | file://:0:0:0:0 | & | -| main.rs:1383:34:1385:9 | { ... } | &T | main.rs:1368:5:1368:13 | S | -| main.rs:1383:34:1385:9 | { ... } | &T.&T | file://:0:0:0:0 | & | -| main.rs:1383:34:1385:9 | { ... } | &T.&T.&T | file://:0:0:0:0 | & | -| main.rs:1383:34:1385:9 | { ... } | &T.&T.&T.&T | main.rs:1368:5:1368:13 | S | -| main.rs:1384:13:1384:16 | &... | | file://:0:0:0:0 | & | -| main.rs:1384:13:1384:16 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1384:13:1384:16 | &... | &T | main.rs:1368:5:1368:13 | S | -| main.rs:1384:13:1384:16 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1384:13:1384:16 | &... | &T.&T.&T | file://:0:0:0:0 | & | -| main.rs:1384:13:1384:16 | &... | &T.&T.&T.&T | main.rs:1368:5:1368:13 | S | -| main.rs:1384:14:1384:16 | &... | | file://:0:0:0:0 | & | -| main.rs:1384:14:1384:16 | &... | | main.rs:1368:5:1368:13 | S | -| main.rs:1384:14:1384:16 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1384:14:1384:16 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1384:14:1384:16 | &... | &T.&T.&T | main.rs:1368:5:1368:13 | S | -| main.rs:1384:15:1384:16 | &x | | file://:0:0:0:0 | & | -| main.rs:1384:15:1384:16 | &x | &T | file://:0:0:0:0 | & | -| main.rs:1384:15:1384:16 | &x | &T.&T | main.rs:1368:5:1368:13 | S | -| main.rs:1384:16:1384:16 | x | | file://:0:0:0:0 | & | -| main.rs:1384:16:1384:16 | x | &T | main.rs:1368:5:1368:13 | S | -| main.rs:1389:13:1389:13 | x | | main.rs:1368:5:1368:13 | S | -| main.rs:1389:17:1389:20 | S {...} | | main.rs:1368:5:1368:13 | S | -| main.rs:1390:9:1390:9 | x | | main.rs:1368:5:1368:13 | S | -| main.rs:1390:9:1390:14 | x.f1() | | file://:0:0:0:0 | & | -| main.rs:1390:9:1390:14 | x.f1() | &T | main.rs:1368:5:1368:13 | S | -| main.rs:1391:9:1391:9 | x | | main.rs:1368:5:1368:13 | S | -| main.rs:1391:9:1391:14 | x.f2() | | file://:0:0:0:0 | & | -| main.rs:1391:9:1391:14 | x.f2() | &T | main.rs:1368:5:1368:13 | S | -| main.rs:1392:9:1392:17 | ...::f3(...) | | file://:0:0:0:0 | & | -| main.rs:1392:9:1392:17 | ...::f3(...) | &T | main.rs:1368:5:1368:13 | S | -| main.rs:1392:15:1392:16 | &x | | file://:0:0:0:0 | & | -| main.rs:1392:15:1392:16 | &x | &T | main.rs:1368:5:1368:13 | S | -| main.rs:1392:16:1392:16 | x | | main.rs:1368:5:1368:13 | S | -| main.rs:1394:13:1394:13 | n | | {EXTERNAL LOCATION} | bool | -| main.rs:1394:17:1394:24 | * ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1394:18:1394:24 | * ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1394:18:1394:24 | * ... | | file://:0:0:0:0 | & | -| main.rs:1394:18:1394:24 | * ... | &T | {EXTERNAL LOCATION} | bool | -| main.rs:1394:19:1394:24 | &... | | file://:0:0:0:0 | & | -| main.rs:1394:19:1394:24 | &... | &T | {EXTERNAL LOCATION} | bool | -| main.rs:1394:19:1394:24 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1394:19:1394:24 | &... | &T.&T | {EXTERNAL LOCATION} | bool | -| main.rs:1394:20:1394:24 | &true | | {EXTERNAL LOCATION} | bool | -| main.rs:1394:20:1394:24 | &true | | file://:0:0:0:0 | & | -| main.rs:1394:20:1394:24 | &true | &T | {EXTERNAL LOCATION} | bool | -| main.rs:1394:21:1394:24 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1398:17:1398:20 | flag | | main.rs:1357:5:1360:5 | MyFlag | -| main.rs:1398:24:1398:41 | ...::default(...) | | main.rs:1357:5:1360:5 | MyFlag | -| main.rs:1399:22:1399:30 | &mut flag | | file://:0:0:0:0 | & | -| main.rs:1399:22:1399:30 | &mut flag | &T | main.rs:1357:5:1360:5 | MyFlag | -| main.rs:1399:27:1399:30 | flag | | main.rs:1357:5:1360:5 | MyFlag | -| main.rs:1400:18:1400:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1400:18:1400:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1400:18:1400:29 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1400:18:1400:29 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1400:26:1400:29 | flag | | main.rs:1357:5:1360:5 | MyFlag | -| main.rs:1415:43:1418:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1415:43:1418:5 | { ... } | E | main.rs:1407:5:1408:14 | S1 | -| main.rs:1415:43:1418:5 | { ... } | T | main.rs:1407:5:1408:14 | S1 | -| main.rs:1416:13:1416:13 | x | | main.rs:1407:5:1408:14 | S1 | -| main.rs:1416:17:1416:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1416:17:1416:30 | ...::Ok(...) | T | main.rs:1407:5:1408:14 | S1 | -| main.rs:1416:17:1416:31 | TryExpr | | main.rs:1407:5:1408:14 | S1 | -| main.rs:1416:28:1416:29 | S1 | | main.rs:1407:5:1408:14 | S1 | -| main.rs:1417:9:1417:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1417:9:1417:22 | ...::Ok(...) | E | main.rs:1407:5:1408:14 | S1 | -| main.rs:1417:9:1417:22 | ...::Ok(...) | T | main.rs:1407:5:1408:14 | S1 | -| main.rs:1417:20:1417:21 | S1 | | main.rs:1407:5:1408:14 | S1 | -| main.rs:1422:46:1426:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1422:46:1426:5 | { ... } | E | main.rs:1410:5:1411:14 | S2 | -| main.rs:1422:46:1426:5 | { ... } | T | main.rs:1407:5:1408:14 | S1 | -| main.rs:1423:13:1423:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1423:13:1423:13 | x | T | main.rs:1407:5:1408:14 | S1 | -| main.rs:1423:17:1423:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1423:17:1423:30 | ...::Ok(...) | T | main.rs:1407:5:1408:14 | S1 | -| main.rs:1423:28:1423:29 | S1 | | main.rs:1407:5:1408:14 | S1 | -| main.rs:1424:13:1424:13 | y | | main.rs:1407:5:1408:14 | S1 | -| main.rs:1424:17:1424:17 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1424:17:1424:17 | x | T | main.rs:1407:5:1408:14 | S1 | -| main.rs:1424:17:1424:18 | TryExpr | | main.rs:1407:5:1408:14 | S1 | -| main.rs:1425:9:1425:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1425:9:1425:22 | ...::Ok(...) | E | main.rs:1410:5:1411:14 | S2 | -| main.rs:1425:9:1425:22 | ...::Ok(...) | T | main.rs:1407:5:1408:14 | S1 | -| main.rs:1425:20:1425:21 | S1 | | main.rs:1407:5:1408:14 | S1 | -| main.rs:1430:40:1435:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1430:40:1435:5 | { ... } | E | main.rs:1410:5:1411:14 | S2 | -| main.rs:1430:40:1435:5 | { ... } | T | main.rs:1407:5:1408:14 | S1 | -| main.rs:1431:13:1431:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1431:13:1431:13 | x | T | {EXTERNAL LOCATION} | Result | -| main.rs:1431:13:1431:13 | x | T.T | main.rs:1407:5:1408:14 | S1 | -| main.rs:1431:17:1431:42 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1431:17:1431:42 | ...::Ok(...) | T | {EXTERNAL LOCATION} | Result | -| main.rs:1431:17:1431:42 | ...::Ok(...) | T.T | main.rs:1407:5:1408:14 | S1 | -| main.rs:1431:28:1431:41 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1431:28:1431:41 | ...::Ok(...) | T | main.rs:1407:5:1408:14 | S1 | -| main.rs:1431:39:1431:40 | S1 | | main.rs:1407:5:1408:14 | S1 | -| main.rs:1433:17:1433:17 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1433:17:1433:17 | x | T | {EXTERNAL LOCATION} | Result | -| main.rs:1433:17:1433:17 | x | T.T | main.rs:1407:5:1408:14 | S1 | -| main.rs:1433:17:1433:18 | TryExpr | | {EXTERNAL LOCATION} | Result | -| main.rs:1433:17:1433:18 | TryExpr | T | main.rs:1407:5:1408:14 | S1 | -| main.rs:1433:17:1433:29 | ... .map(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1433:24:1433:28 | \|...\| s | | {EXTERNAL LOCATION} | dyn FnOnce | -| main.rs:1433:24:1433:28 | \|...\| s | dyn(Args) | file://:0:0:0:0 | (T_1) | -| main.rs:1434:9:1434:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1434:9:1434:22 | ...::Ok(...) | E | main.rs:1410:5:1411:14 | S2 | -| main.rs:1434:9:1434:22 | ...::Ok(...) | T | main.rs:1407:5:1408:14 | S1 | -| main.rs:1434:20:1434:21 | S1 | | main.rs:1407:5:1408:14 | S1 | -| main.rs:1439:30:1439:34 | input | | {EXTERNAL LOCATION} | Result | -| main.rs:1439:30:1439:34 | input | E | main.rs:1407:5:1408:14 | S1 | -| main.rs:1439:30:1439:34 | input | T | main.rs:1439:20:1439:27 | T | -| main.rs:1439:69:1446:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1439:69:1446:5 | { ... } | E | main.rs:1407:5:1408:14 | S1 | -| main.rs:1439:69:1446:5 | { ... } | T | main.rs:1439:20:1439:27 | T | -| main.rs:1440:13:1440:17 | value | | main.rs:1439:20:1439:27 | T | -| main.rs:1440:21:1440:25 | input | | {EXTERNAL LOCATION} | Result | -| main.rs:1440:21:1440:25 | input | E | main.rs:1407:5:1408:14 | S1 | -| main.rs:1440:21:1440:25 | input | T | main.rs:1439:20:1439:27 | T | -| main.rs:1440:21:1440:26 | TryExpr | | main.rs:1439:20:1439:27 | T | -| main.rs:1441:22:1441:38 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1441:22:1441:38 | ...::Ok(...) | E | main.rs:1407:5:1408:14 | S1 | -| main.rs:1441:22:1441:38 | ...::Ok(...) | T | main.rs:1439:20:1439:27 | T | -| main.rs:1441:22:1444:10 | ... .and_then(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1441:22:1444:10 | ... .and_then(...) | E | main.rs:1407:5:1408:14 | S1 | -| main.rs:1441:33:1441:37 | value | | main.rs:1439:20:1439:27 | T | -| main.rs:1441:49:1444:9 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | -| main.rs:1441:49:1444:9 | \|...\| ... | dyn(Args) | file://:0:0:0:0 | (T_1) | -| main.rs:1441:49:1444:9 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | Result | -| main.rs:1441:49:1444:9 | \|...\| ... | dyn(Output).E | main.rs:1407:5:1408:14 | S1 | -| main.rs:1441:53:1444:9 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1441:53:1444:9 | { ... } | E | main.rs:1407:5:1408:14 | S1 | -| main.rs:1442:22:1442:27 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1442:22:1442:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1442:22:1442:30 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1442:22:1442:30 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1443:13:1443:34 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1443:13:1443:34 | ...::Ok::<...>(...) | E | main.rs:1407:5:1408:14 | S1 | -| main.rs:1445:9:1445:23 | ...::Err(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1445:9:1445:23 | ...::Err(...) | E | main.rs:1407:5:1408:14 | S1 | -| main.rs:1445:9:1445:23 | ...::Err(...) | T | main.rs:1439:20:1439:27 | T | -| main.rs:1445:21:1445:22 | S1 | | main.rs:1407:5:1408:14 | S1 | -| main.rs:1450:16:1450:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1450:16:1450:33 | ...::Ok(...) | E | main.rs:1407:5:1408:14 | S1 | -| main.rs:1450:16:1450:33 | ...::Ok(...) | T | main.rs:1407:5:1408:14 | S1 | -| main.rs:1450:27:1450:32 | result | | main.rs:1407:5:1408:14 | S1 | -| main.rs:1450:37:1450:52 | try_same_error(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1450:37:1450:52 | try_same_error(...) | E | main.rs:1407:5:1408:14 | S1 | -| main.rs:1450:37:1450:52 | try_same_error(...) | T | main.rs:1407:5:1408:14 | S1 | -| main.rs:1451:22:1451:27 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1451:22:1451:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1451:22:1451:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1451:22:1451:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1451:30:1451:35 | result | | main.rs:1407:5:1408:14 | S1 | -| main.rs:1454:16:1454:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1454:16:1454:33 | ...::Ok(...) | E | main.rs:1410:5:1411:14 | S2 | -| main.rs:1454:16:1454:33 | ...::Ok(...) | T | main.rs:1407:5:1408:14 | S1 | -| main.rs:1454:27:1454:32 | result | | main.rs:1407:5:1408:14 | S1 | -| main.rs:1454:37:1454:55 | try_convert_error(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1454:37:1454:55 | try_convert_error(...) | E | main.rs:1410:5:1411:14 | S2 | -| main.rs:1454:37:1454:55 | try_convert_error(...) | T | main.rs:1407:5:1408:14 | S1 | -| main.rs:1455:22:1455:27 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1455:22:1455:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1455:22:1455:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1455:22:1455:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1455:30:1455:35 | result | | main.rs:1407:5:1408:14 | S1 | -| main.rs:1458:16:1458:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1458:16:1458:33 | ...::Ok(...) | E | main.rs:1410:5:1411:14 | S2 | -| main.rs:1458:16:1458:33 | ...::Ok(...) | T | main.rs:1407:5:1408:14 | S1 | -| main.rs:1458:27:1458:32 | result | | main.rs:1407:5:1408:14 | S1 | -| main.rs:1458:37:1458:49 | try_chained(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1458:37:1458:49 | try_chained(...) | E | main.rs:1410:5:1411:14 | S2 | -| main.rs:1458:37:1458:49 | try_chained(...) | T | main.rs:1407:5:1408:14 | S1 | -| main.rs:1459:22:1459:27 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1459:22:1459:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1459:22:1459:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1459:22:1459:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1459:30:1459:35 | result | | main.rs:1407:5:1408:14 | S1 | -| main.rs:1462:16:1462:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1462:16:1462:33 | ...::Ok(...) | E | main.rs:1407:5:1408:14 | S1 | -| main.rs:1462:16:1462:33 | ...::Ok(...) | T | main.rs:1407:5:1408:14 | S1 | -| main.rs:1462:27:1462:32 | result | | main.rs:1407:5:1408:14 | S1 | -| main.rs:1462:37:1462:63 | try_complex(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1462:37:1462:63 | try_complex(...) | E | main.rs:1407:5:1408:14 | S1 | -| main.rs:1462:37:1462:63 | try_complex(...) | T | main.rs:1407:5:1408:14 | S1 | -| main.rs:1462:49:1462:62 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1462:49:1462:62 | ...::Ok(...) | E | main.rs:1407:5:1408:14 | S1 | -| main.rs:1462:49:1462:62 | ...::Ok(...) | T | main.rs:1407:5:1408:14 | S1 | -| main.rs:1462:60:1462:61 | S1 | | main.rs:1407:5:1408:14 | S1 | -| main.rs:1463:22:1463:27 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1463:22:1463:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1463:22:1463:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1463:22:1463:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1463:30:1463:35 | result | | main.rs:1407:5:1408:14 | S1 | -| main.rs:1470:13:1470:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1470:22:1470:22 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1471:13:1471:13 | y | | {EXTERNAL LOCATION} | i32 | -| main.rs:1471:17:1471:17 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1472:13:1472:13 | z | | {EXTERNAL LOCATION} | i32 | -| main.rs:1472:17:1472:17 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1472:17:1472:21 | ... + ... | | {EXTERNAL LOCATION} | i32 | -| main.rs:1472:21:1472:21 | y | | {EXTERNAL LOCATION} | i32 | -| main.rs:1473:13:1473:13 | z | | {EXTERNAL LOCATION} | i32 | -| main.rs:1473:17:1473:17 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1473:17:1473:23 | x.abs() | | {EXTERNAL LOCATION} | i32 | -| main.rs:1474:13:1474:13 | c | | {EXTERNAL LOCATION} | char | -| main.rs:1474:17:1474:19 | 'c' | | {EXTERNAL LOCATION} | char | -| main.rs:1475:13:1475:17 | hello | | file://:0:0:0:0 | & | -| main.rs:1475:13:1475:17 | hello | &T | {EXTERNAL LOCATION} | str | -| main.rs:1475:21:1475:27 | "Hello" | | file://:0:0:0:0 | & | -| main.rs:1475:21:1475:27 | "Hello" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1476:13:1476:13 | f | | {EXTERNAL LOCATION} | f64 | -| main.rs:1476:17:1476:24 | 123.0f64 | | {EXTERNAL LOCATION} | f64 | -| main.rs:1477:13:1477:13 | t | | {EXTERNAL LOCATION} | bool | -| main.rs:1477:17:1477:20 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1478:13:1478:13 | f | | {EXTERNAL LOCATION} | bool | -| main.rs:1478:17:1478:21 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1485:13:1485:13 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:1485:17:1485:20 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1485:17:1485:29 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1485:25:1485:29 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1486:13:1486:13 | y | | {EXTERNAL LOCATION} | bool | -| main.rs:1486:17:1486:20 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1486:17:1486:29 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1486:25:1486:29 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1488:17:1488:17 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1489:13:1489:16 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:1489:20:1489:21 | 34 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1489:20:1489:27 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1489:26:1489:27 | 33 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1490:12:1490:15 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:1491:17:1491:17 | z | | file://:0:0:0:0 | () | -| main.rs:1491:21:1491:27 | (...) | | file://:0:0:0:0 | () | -| main.rs:1491:22:1491:22 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1491:22:1491:26 | ... = ... | | file://:0:0:0:0 | () | -| main.rs:1491:26:1491:26 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1493:13:1493:13 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1493:13:1493:17 | ... = ... | | file://:0:0:0:0 | () | -| main.rs:1493:17:1493:17 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1495:9:1495:9 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1509:30:1511:9 | { ... } | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1510:13:1510:31 | Vec2 {...} | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1510:23:1510:23 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1510:23:1510:23 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1510:29:1510:29 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1510:29:1510:29 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1517:16:1517:19 | SelfParam | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1517:22:1517:24 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1517:41:1522:9 | { ... } | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1518:13:1521:13 | Vec2 {...} | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1519:20:1519:23 | self | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1519:20:1519:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1519:20:1519:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1519:29:1519:31 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1519:29:1519:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1520:20:1520:23 | self | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1520:20:1520:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1520:20:1520:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1520:29:1520:31 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1520:29:1520:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1527:23:1527:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1527:23:1527:31 | SelfParam | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1527:34:1527:36 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1528:13:1528:16 | self | | file://:0:0:0:0 | & | -| main.rs:1528:13:1528:16 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1528:13:1528:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1528:13:1528:27 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:1528:23:1528:25 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1528:23:1528:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1529:13:1529:16 | self | | file://:0:0:0:0 | & | -| main.rs:1529:13:1529:16 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1529:13:1529:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1529:13:1529:27 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:1529:23:1529:25 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1529:23:1529:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1535:16:1535:19 | SelfParam | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1535:22:1535:24 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1535:41:1540:9 | { ... } | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1536:13:1539:13 | Vec2 {...} | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1537:20:1537:23 | self | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1537:20:1537:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1537:20:1537:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1537:29:1537:31 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1537:29:1537:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1538:20:1538:23 | self | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1538:20:1538:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1538:20:1538:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1538:29:1538:31 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1538:29:1538:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1545:23:1545:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1545:23:1545:31 | SelfParam | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1545:34:1545:36 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1546:13:1546:16 | self | | file://:0:0:0:0 | & | -| main.rs:1546:13:1546:16 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1546:13:1546:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1546:13:1546:27 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:1546:23:1546:25 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1546:23:1546:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1547:13:1547:16 | self | | file://:0:0:0:0 | & | -| main.rs:1547:13:1547:16 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1547:13:1547:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1547:13:1547:27 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:1547:23:1547:25 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1547:23:1547:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1553:16:1553:19 | SelfParam | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1553:22:1553:24 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1553:41:1558:9 | { ... } | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1554:13:1557:13 | Vec2 {...} | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1555:20:1555:23 | self | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1555:20:1555:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1555:20:1555:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1555:29:1555:31 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1555:29:1555:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1556:20:1556:23 | self | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1556:20:1556:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1556:20:1556:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1556:29:1556:31 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1556:29:1556:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1364:13:1364:16 | self | &T | main.rs:1359:5:1359:20 | MyStruct | +| main.rs:1369:13:1369:13 | x | | main.rs:1359:5:1359:20 | MyStruct | +| main.rs:1369:17:1369:24 | MyStruct | | main.rs:1359:5:1359:20 | MyStruct | +| main.rs:1370:9:1370:9 | x | | main.rs:1359:5:1359:20 | MyStruct | +| main.rs:1370:9:1370:15 | x.bar() | | file://:0:0:0:0 | & | +| main.rs:1370:9:1370:15 | x.bar() | &T | main.rs:1359:5:1359:20 | MyStruct | +| main.rs:1380:16:1380:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1380:16:1380:20 | SelfParam | &T | main.rs:1377:5:1377:26 | MyStruct | +| main.rs:1380:16:1380:20 | SelfParam | &T.T | main.rs:1379:10:1379:10 | T | +| main.rs:1380:32:1382:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1380:32:1382:9 | { ... } | &T | main.rs:1377:5:1377:26 | MyStruct | +| main.rs:1380:32:1382:9 | { ... } | &T.T | main.rs:1379:10:1379:10 | T | +| main.rs:1381:13:1381:16 | self | | file://:0:0:0:0 | & | +| main.rs:1381:13:1381:16 | self | &T | main.rs:1377:5:1377:26 | MyStruct | +| main.rs:1381:13:1381:16 | self | &T.T | main.rs:1379:10:1379:10 | T | +| main.rs:1386:13:1386:13 | x | | main.rs:1377:5:1377:26 | MyStruct | +| main.rs:1386:13:1386:13 | x | T | main.rs:1375:5:1375:13 | S | +| main.rs:1386:17:1386:27 | MyStruct(...) | | main.rs:1377:5:1377:26 | MyStruct | +| main.rs:1386:17:1386:27 | MyStruct(...) | T | main.rs:1375:5:1375:13 | S | +| main.rs:1386:26:1386:26 | S | | main.rs:1375:5:1375:13 | S | +| main.rs:1387:9:1387:9 | x | | main.rs:1377:5:1377:26 | MyStruct | +| main.rs:1387:9:1387:9 | x | T | main.rs:1375:5:1375:13 | S | +| main.rs:1387:9:1387:15 | x.foo() | | file://:0:0:0:0 | & | +| main.rs:1387:9:1387:15 | x.foo() | &T | main.rs:1377:5:1377:26 | MyStruct | +| main.rs:1387:9:1387:15 | x.foo() | &T.T | main.rs:1375:5:1375:13 | S | +| main.rs:1398:17:1398:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1398:17:1398:25 | SelfParam | &T | main.rs:1392:5:1395:5 | MyFlag | +| main.rs:1399:13:1399:16 | self | | file://:0:0:0:0 | & | +| main.rs:1399:13:1399:16 | self | &T | main.rs:1392:5:1395:5 | MyFlag | +| main.rs:1399:13:1399:21 | self.bool | | {EXTERNAL LOCATION} | bool | +| main.rs:1399:13:1399:34 | ... = ... | | file://:0:0:0:0 | () | +| main.rs:1399:25:1399:34 | ! ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1399:26:1399:29 | self | | file://:0:0:0:0 | & | +| main.rs:1399:26:1399:29 | self | &T | main.rs:1392:5:1395:5 | MyFlag | +| main.rs:1399:26:1399:34 | self.bool | | {EXTERNAL LOCATION} | bool | +| main.rs:1406:15:1406:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1406:15:1406:19 | SelfParam | &T | main.rs:1403:5:1403:13 | S | +| main.rs:1406:31:1408:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1406:31:1408:9 | { ... } | &T | main.rs:1403:5:1403:13 | S | +| main.rs:1407:13:1407:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1407:13:1407:19 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1407:13:1407:19 | &... | &T | main.rs:1403:5:1403:13 | S | +| main.rs:1407:13:1407:19 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1407:13:1407:19 | &... | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1407:13:1407:19 | &... | &T.&T.&T.&T | main.rs:1403:5:1403:13 | S | +| main.rs:1407:14:1407:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1407:14:1407:19 | &... | | main.rs:1403:5:1403:13 | S | +| main.rs:1407:14:1407:19 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1407:14:1407:19 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1407:14:1407:19 | &... | &T.&T.&T | main.rs:1403:5:1403:13 | S | +| main.rs:1407:15:1407:19 | &self | | file://:0:0:0:0 | & | +| main.rs:1407:15:1407:19 | &self | &T | file://:0:0:0:0 | & | +| main.rs:1407:15:1407:19 | &self | &T.&T | main.rs:1403:5:1403:13 | S | +| main.rs:1407:16:1407:19 | self | | file://:0:0:0:0 | & | +| main.rs:1407:16:1407:19 | self | &T | main.rs:1403:5:1403:13 | S | +| main.rs:1410:15:1410:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1410:15:1410:25 | SelfParam | &T | main.rs:1403:5:1403:13 | S | +| main.rs:1410:37:1412:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1410:37:1412:9 | { ... } | &T | main.rs:1403:5:1403:13 | S | +| main.rs:1411:13:1411:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1411:13:1411:19 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1411:13:1411:19 | &... | &T | main.rs:1403:5:1403:13 | S | +| main.rs:1411:13:1411:19 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1411:13:1411:19 | &... | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1411:13:1411:19 | &... | &T.&T.&T.&T | main.rs:1403:5:1403:13 | S | +| main.rs:1411:14:1411:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1411:14:1411:19 | &... | | main.rs:1403:5:1403:13 | S | +| main.rs:1411:14:1411:19 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1411:14:1411:19 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1411:14:1411:19 | &... | &T.&T.&T | main.rs:1403:5:1403:13 | S | +| main.rs:1411:15:1411:19 | &self | | file://:0:0:0:0 | & | +| main.rs:1411:15:1411:19 | &self | &T | file://:0:0:0:0 | & | +| main.rs:1411:15:1411:19 | &self | &T.&T | main.rs:1403:5:1403:13 | S | +| main.rs:1411:16:1411:19 | self | | file://:0:0:0:0 | & | +| main.rs:1411:16:1411:19 | self | &T | main.rs:1403:5:1403:13 | S | +| main.rs:1414:15:1414:15 | x | | file://:0:0:0:0 | & | +| main.rs:1414:15:1414:15 | x | &T | main.rs:1403:5:1403:13 | S | +| main.rs:1414:34:1416:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1414:34:1416:9 | { ... } | &T | main.rs:1403:5:1403:13 | S | +| main.rs:1415:13:1415:13 | x | | file://:0:0:0:0 | & | +| main.rs:1415:13:1415:13 | x | &T | main.rs:1403:5:1403:13 | S | +| main.rs:1418:15:1418:15 | x | | file://:0:0:0:0 | & | +| main.rs:1418:15:1418:15 | x | &T | main.rs:1403:5:1403:13 | S | +| main.rs:1418:34:1420:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1418:34:1420:9 | { ... } | &T | main.rs:1403:5:1403:13 | S | +| main.rs:1419:13:1419:16 | &... | | file://:0:0:0:0 | & | +| main.rs:1419:13:1419:16 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1419:13:1419:16 | &... | &T | main.rs:1403:5:1403:13 | S | +| main.rs:1419:13:1419:16 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1419:13:1419:16 | &... | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1419:13:1419:16 | &... | &T.&T.&T.&T | main.rs:1403:5:1403:13 | S | +| main.rs:1419:14:1419:16 | &... | | file://:0:0:0:0 | & | +| main.rs:1419:14:1419:16 | &... | | main.rs:1403:5:1403:13 | S | +| main.rs:1419:14:1419:16 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1419:14:1419:16 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1419:14:1419:16 | &... | &T.&T.&T | main.rs:1403:5:1403:13 | S | +| main.rs:1419:15:1419:16 | &x | | file://:0:0:0:0 | & | +| main.rs:1419:15:1419:16 | &x | &T | file://:0:0:0:0 | & | +| main.rs:1419:15:1419:16 | &x | &T.&T | main.rs:1403:5:1403:13 | S | +| main.rs:1419:16:1419:16 | x | | file://:0:0:0:0 | & | +| main.rs:1419:16:1419:16 | x | &T | main.rs:1403:5:1403:13 | S | +| main.rs:1424:13:1424:13 | x | | main.rs:1403:5:1403:13 | S | +| main.rs:1424:17:1424:20 | S {...} | | main.rs:1403:5:1403:13 | S | +| main.rs:1425:9:1425:9 | x | | main.rs:1403:5:1403:13 | S | +| main.rs:1425:9:1425:14 | x.f1() | | file://:0:0:0:0 | & | +| main.rs:1425:9:1425:14 | x.f1() | &T | main.rs:1403:5:1403:13 | S | +| main.rs:1426:9:1426:9 | x | | main.rs:1403:5:1403:13 | S | +| main.rs:1426:9:1426:14 | x.f2() | | file://:0:0:0:0 | & | +| main.rs:1426:9:1426:14 | x.f2() | &T | main.rs:1403:5:1403:13 | S | +| main.rs:1427:9:1427:17 | ...::f3(...) | | file://:0:0:0:0 | & | +| main.rs:1427:9:1427:17 | ...::f3(...) | &T | main.rs:1403:5:1403:13 | S | +| main.rs:1427:15:1427:16 | &x | | file://:0:0:0:0 | & | +| main.rs:1427:15:1427:16 | &x | &T | main.rs:1403:5:1403:13 | S | +| main.rs:1427:16:1427:16 | x | | main.rs:1403:5:1403:13 | S | +| main.rs:1429:13:1429:13 | n | | {EXTERNAL LOCATION} | bool | +| main.rs:1429:17:1429:24 | * ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1429:18:1429:24 | * ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1429:18:1429:24 | * ... | | file://:0:0:0:0 | & | +| main.rs:1429:18:1429:24 | * ... | &T | {EXTERNAL LOCATION} | bool | +| main.rs:1429:19:1429:24 | &... | | file://:0:0:0:0 | & | +| main.rs:1429:19:1429:24 | &... | &T | {EXTERNAL LOCATION} | bool | +| main.rs:1429:19:1429:24 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1429:19:1429:24 | &... | &T.&T | {EXTERNAL LOCATION} | bool | +| main.rs:1429:20:1429:24 | &true | | {EXTERNAL LOCATION} | bool | +| main.rs:1429:20:1429:24 | &true | | file://:0:0:0:0 | & | +| main.rs:1429:20:1429:24 | &true | &T | {EXTERNAL LOCATION} | bool | +| main.rs:1429:21:1429:24 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1433:17:1433:20 | flag | | main.rs:1392:5:1395:5 | MyFlag | +| main.rs:1433:24:1433:41 | ...::default(...) | | main.rs:1392:5:1395:5 | MyFlag | +| main.rs:1434:22:1434:30 | &mut flag | | file://:0:0:0:0 | & | +| main.rs:1434:22:1434:30 | &mut flag | &T | main.rs:1392:5:1395:5 | MyFlag | +| main.rs:1434:27:1434:30 | flag | | main.rs:1392:5:1395:5 | MyFlag | +| main.rs:1435:18:1435:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1435:18:1435:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1435:18:1435:29 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1435:18:1435:29 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1435:26:1435:29 | flag | | main.rs:1392:5:1395:5 | MyFlag | +| main.rs:1450:43:1453:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1450:43:1453:5 | { ... } | E | main.rs:1442:5:1443:14 | S1 | +| main.rs:1450:43:1453:5 | { ... } | T | main.rs:1442:5:1443:14 | S1 | +| main.rs:1451:13:1451:13 | x | | main.rs:1442:5:1443:14 | S1 | +| main.rs:1451:17:1451:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1451:17:1451:30 | ...::Ok(...) | T | main.rs:1442:5:1443:14 | S1 | +| main.rs:1451:17:1451:31 | TryExpr | | main.rs:1442:5:1443:14 | S1 | +| main.rs:1451:28:1451:29 | S1 | | main.rs:1442:5:1443:14 | S1 | +| main.rs:1452:9:1452:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1452:9:1452:22 | ...::Ok(...) | E | main.rs:1442:5:1443:14 | S1 | +| main.rs:1452:9:1452:22 | ...::Ok(...) | T | main.rs:1442:5:1443:14 | S1 | +| main.rs:1452:20:1452:21 | S1 | | main.rs:1442:5:1443:14 | S1 | +| main.rs:1457:46:1461:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1457:46:1461:5 | { ... } | E | main.rs:1445:5:1446:14 | S2 | +| main.rs:1457:46:1461:5 | { ... } | T | main.rs:1442:5:1443:14 | S1 | +| main.rs:1458:13:1458:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1458:13:1458:13 | x | T | main.rs:1442:5:1443:14 | S1 | +| main.rs:1458:17:1458:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1458:17:1458:30 | ...::Ok(...) | T | main.rs:1442:5:1443:14 | S1 | +| main.rs:1458:28:1458:29 | S1 | | main.rs:1442:5:1443:14 | S1 | +| main.rs:1459:13:1459:13 | y | | main.rs:1442:5:1443:14 | S1 | +| main.rs:1459:17:1459:17 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1459:17:1459:17 | x | T | main.rs:1442:5:1443:14 | S1 | +| main.rs:1459:17:1459:18 | TryExpr | | main.rs:1442:5:1443:14 | S1 | +| main.rs:1460:9:1460:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1460:9:1460:22 | ...::Ok(...) | E | main.rs:1445:5:1446:14 | S2 | +| main.rs:1460:9:1460:22 | ...::Ok(...) | T | main.rs:1442:5:1443:14 | S1 | +| main.rs:1460:20:1460:21 | S1 | | main.rs:1442:5:1443:14 | S1 | +| main.rs:1465:40:1470:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1465:40:1470:5 | { ... } | E | main.rs:1445:5:1446:14 | S2 | +| main.rs:1465:40:1470:5 | { ... } | T | main.rs:1442:5:1443:14 | S1 | +| main.rs:1466:13:1466:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1466:13:1466:13 | x | T | {EXTERNAL LOCATION} | Result | +| main.rs:1466:13:1466:13 | x | T.T | main.rs:1442:5:1443:14 | S1 | +| main.rs:1466:17:1466:42 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1466:17:1466:42 | ...::Ok(...) | T | {EXTERNAL LOCATION} | Result | +| main.rs:1466:17:1466:42 | ...::Ok(...) | T.T | main.rs:1442:5:1443:14 | S1 | +| main.rs:1466:28:1466:41 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1466:28:1466:41 | ...::Ok(...) | T | main.rs:1442:5:1443:14 | S1 | +| main.rs:1466:39:1466:40 | S1 | | main.rs:1442:5:1443:14 | S1 | +| main.rs:1468:17:1468:17 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1468:17:1468:17 | x | T | {EXTERNAL LOCATION} | Result | +| main.rs:1468:17:1468:17 | x | T.T | main.rs:1442:5:1443:14 | S1 | +| main.rs:1468:17:1468:18 | TryExpr | | {EXTERNAL LOCATION} | Result | +| main.rs:1468:17:1468:18 | TryExpr | T | main.rs:1442:5:1443:14 | S1 | +| main.rs:1468:17:1468:29 | ... .map(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1468:24:1468:28 | \|...\| s | | {EXTERNAL LOCATION} | dyn FnOnce | +| main.rs:1468:24:1468:28 | \|...\| s | dyn(Args) | file://:0:0:0:0 | (T_1) | +| main.rs:1469:9:1469:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1469:9:1469:22 | ...::Ok(...) | E | main.rs:1445:5:1446:14 | S2 | +| main.rs:1469:9:1469:22 | ...::Ok(...) | T | main.rs:1442:5:1443:14 | S1 | +| main.rs:1469:20:1469:21 | S1 | | main.rs:1442:5:1443:14 | S1 | +| main.rs:1474:30:1474:34 | input | | {EXTERNAL LOCATION} | Result | +| main.rs:1474:30:1474:34 | input | E | main.rs:1442:5:1443:14 | S1 | +| main.rs:1474:30:1474:34 | input | T | main.rs:1474:20:1474:27 | T | +| main.rs:1474:69:1481:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1474:69:1481:5 | { ... } | E | main.rs:1442:5:1443:14 | S1 | +| main.rs:1474:69:1481:5 | { ... } | T | main.rs:1474:20:1474:27 | T | +| main.rs:1475:13:1475:17 | value | | main.rs:1474:20:1474:27 | T | +| main.rs:1475:21:1475:25 | input | | {EXTERNAL LOCATION} | Result | +| main.rs:1475:21:1475:25 | input | E | main.rs:1442:5:1443:14 | S1 | +| main.rs:1475:21:1475:25 | input | T | main.rs:1474:20:1474:27 | T | +| main.rs:1475:21:1475:26 | TryExpr | | main.rs:1474:20:1474:27 | T | +| main.rs:1476:22:1476:38 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1476:22:1476:38 | ...::Ok(...) | E | main.rs:1442:5:1443:14 | S1 | +| main.rs:1476:22:1476:38 | ...::Ok(...) | T | main.rs:1474:20:1474:27 | T | +| main.rs:1476:22:1479:10 | ... .and_then(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1476:22:1479:10 | ... .and_then(...) | E | main.rs:1442:5:1443:14 | S1 | +| main.rs:1476:33:1476:37 | value | | main.rs:1474:20:1474:27 | T | +| main.rs:1476:49:1479:9 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | +| main.rs:1476:49:1479:9 | \|...\| ... | dyn(Args) | file://:0:0:0:0 | (T_1) | +| main.rs:1476:49:1479:9 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | Result | +| main.rs:1476:49:1479:9 | \|...\| ... | dyn(Output).E | main.rs:1442:5:1443:14 | S1 | +| main.rs:1476:53:1479:9 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1476:53:1479:9 | { ... } | E | main.rs:1442:5:1443:14 | S1 | +| main.rs:1477:22:1477:27 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1477:22:1477:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1477:22:1477:30 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1477:22:1477:30 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1478:13:1478:34 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1478:13:1478:34 | ...::Ok::<...>(...) | E | main.rs:1442:5:1443:14 | S1 | +| main.rs:1480:9:1480:23 | ...::Err(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1480:9:1480:23 | ...::Err(...) | E | main.rs:1442:5:1443:14 | S1 | +| main.rs:1480:9:1480:23 | ...::Err(...) | T | main.rs:1474:20:1474:27 | T | +| main.rs:1480:21:1480:22 | S1 | | main.rs:1442:5:1443:14 | S1 | +| main.rs:1485:16:1485:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1485:16:1485:33 | ...::Ok(...) | E | main.rs:1442:5:1443:14 | S1 | +| main.rs:1485:16:1485:33 | ...::Ok(...) | T | main.rs:1442:5:1443:14 | S1 | +| main.rs:1485:27:1485:32 | result | | main.rs:1442:5:1443:14 | S1 | +| main.rs:1485:37:1485:52 | try_same_error(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1485:37:1485:52 | try_same_error(...) | E | main.rs:1442:5:1443:14 | S1 | +| main.rs:1485:37:1485:52 | try_same_error(...) | T | main.rs:1442:5:1443:14 | S1 | +| main.rs:1486:22:1486:27 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1486:22:1486:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1486:22:1486:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1486:22:1486:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1486:30:1486:35 | result | | main.rs:1442:5:1443:14 | S1 | +| main.rs:1489:16:1489:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1489:16:1489:33 | ...::Ok(...) | E | main.rs:1445:5:1446:14 | S2 | +| main.rs:1489:16:1489:33 | ...::Ok(...) | T | main.rs:1442:5:1443:14 | S1 | +| main.rs:1489:27:1489:32 | result | | main.rs:1442:5:1443:14 | S1 | +| main.rs:1489:37:1489:55 | try_convert_error(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1489:37:1489:55 | try_convert_error(...) | E | main.rs:1445:5:1446:14 | S2 | +| main.rs:1489:37:1489:55 | try_convert_error(...) | T | main.rs:1442:5:1443:14 | S1 | +| main.rs:1490:22:1490:27 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1490:22:1490:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1490:22:1490:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1490:22:1490:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1490:30:1490:35 | result | | main.rs:1442:5:1443:14 | S1 | +| main.rs:1493:16:1493:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1493:16:1493:33 | ...::Ok(...) | E | main.rs:1445:5:1446:14 | S2 | +| main.rs:1493:16:1493:33 | ...::Ok(...) | T | main.rs:1442:5:1443:14 | S1 | +| main.rs:1493:27:1493:32 | result | | main.rs:1442:5:1443:14 | S1 | +| main.rs:1493:37:1493:49 | try_chained(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1493:37:1493:49 | try_chained(...) | E | main.rs:1445:5:1446:14 | S2 | +| main.rs:1493:37:1493:49 | try_chained(...) | T | main.rs:1442:5:1443:14 | S1 | +| main.rs:1494:22:1494:27 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1494:22:1494:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1494:22:1494:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1494:22:1494:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1494:30:1494:35 | result | | main.rs:1442:5:1443:14 | S1 | +| main.rs:1497:16:1497:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1497:16:1497:33 | ...::Ok(...) | E | main.rs:1442:5:1443:14 | S1 | +| main.rs:1497:16:1497:33 | ...::Ok(...) | T | main.rs:1442:5:1443:14 | S1 | +| main.rs:1497:27:1497:32 | result | | main.rs:1442:5:1443:14 | S1 | +| main.rs:1497:37:1497:63 | try_complex(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1497:37:1497:63 | try_complex(...) | E | main.rs:1442:5:1443:14 | S1 | +| main.rs:1497:37:1497:63 | try_complex(...) | T | main.rs:1442:5:1443:14 | S1 | +| main.rs:1497:49:1497:62 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1497:49:1497:62 | ...::Ok(...) | E | main.rs:1442:5:1443:14 | S1 | +| main.rs:1497:49:1497:62 | ...::Ok(...) | T | main.rs:1442:5:1443:14 | S1 | +| main.rs:1497:60:1497:61 | S1 | | main.rs:1442:5:1443:14 | S1 | +| main.rs:1498:22:1498:27 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1498:22:1498:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1498:22:1498:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1498:22:1498:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1498:30:1498:35 | result | | main.rs:1442:5:1443:14 | S1 | +| main.rs:1505:13:1505:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1505:22:1505:22 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1506:13:1506:13 | y | | {EXTERNAL LOCATION} | i32 | +| main.rs:1506:17:1506:17 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1507:13:1507:13 | z | | {EXTERNAL LOCATION} | i32 | +| main.rs:1507:17:1507:17 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1507:17:1507:21 | ... + ... | | {EXTERNAL LOCATION} | i32 | +| main.rs:1507:21:1507:21 | y | | {EXTERNAL LOCATION} | i32 | +| main.rs:1508:13:1508:13 | z | | {EXTERNAL LOCATION} | i32 | +| main.rs:1508:17:1508:17 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1508:17:1508:23 | x.abs() | | {EXTERNAL LOCATION} | i32 | +| main.rs:1509:13:1509:13 | c | | {EXTERNAL LOCATION} | char | +| main.rs:1509:17:1509:19 | 'c' | | {EXTERNAL LOCATION} | char | +| main.rs:1510:13:1510:17 | hello | | file://:0:0:0:0 | & | +| main.rs:1510:13:1510:17 | hello | &T | {EXTERNAL LOCATION} | str | +| main.rs:1510:21:1510:27 | "Hello" | | file://:0:0:0:0 | & | +| main.rs:1510:21:1510:27 | "Hello" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1511:13:1511:13 | f | | {EXTERNAL LOCATION} | f64 | +| main.rs:1511:17:1511:24 | 123.0f64 | | {EXTERNAL LOCATION} | f64 | +| main.rs:1512:13:1512:13 | t | | {EXTERNAL LOCATION} | bool | +| main.rs:1512:17:1512:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1513:13:1513:13 | f | | {EXTERNAL LOCATION} | bool | +| main.rs:1513:17:1513:21 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1520:13:1520:13 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:1520:17:1520:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1520:17:1520:29 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1520:25:1520:29 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1521:13:1521:13 | y | | {EXTERNAL LOCATION} | bool | +| main.rs:1521:17:1521:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1521:17:1521:29 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1521:25:1521:29 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1523:17:1523:17 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1524:13:1524:16 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:1524:20:1524:21 | 34 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1524:20:1524:27 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1524:26:1524:27 | 33 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1525:12:1525:15 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:1526:17:1526:17 | z | | file://:0:0:0:0 | () | +| main.rs:1526:21:1526:27 | (...) | | file://:0:0:0:0 | () | +| main.rs:1526:22:1526:22 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1526:22:1526:26 | ... = ... | | file://:0:0:0:0 | () | +| main.rs:1526:26:1526:26 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1528:13:1528:13 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1528:13:1528:17 | ... = ... | | file://:0:0:0:0 | () | +| main.rs:1528:17:1528:17 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1530:9:1530:9 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1544:30:1546:9 | { ... } | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1545:13:1545:31 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1545:23:1545:23 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1545:23:1545:23 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1545:29:1545:29 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1545:29:1545:29 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1552:16:1552:19 | SelfParam | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1552:22:1552:24 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1552:41:1557:9 | { ... } | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1553:13:1556:13 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1554:20:1554:23 | self | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1554:20:1554:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1554:20:1554:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1554:29:1554:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1554:29:1554:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1555:20:1555:23 | self | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1555:20:1555:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1555:20:1555:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1555:29:1555:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1555:29:1555:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1562:23:1562:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1562:23:1562:31 | SelfParam | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1562:34:1562:36 | rhs | | main.rs:1502:5:1507:5 | Vec2 | +| main.rs:1562:23:1562:31 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1562:34:1562:36 | rhs | | main.rs:1537:5:1542:5 | Vec2 | | main.rs:1563:13:1563:16 | self | | file://:0:0:0:0 | & | -| main.rs:1563:13:1563:16 | self | &T | main.rs:1502:5:1507:5 | Vec2 | +| main.rs:1563:13:1563:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | | main.rs:1563:13:1563:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1563:13:1563:27 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:1563:23:1563:25 | rhs | | main.rs:1502:5:1507:5 | Vec2 | +| main.rs:1563:13:1563:27 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:1563:23:1563:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | | main.rs:1563:23:1563:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1564:13:1564:16 | self | | file://:0:0:0:0 | & | -| main.rs:1564:13:1564:16 | self | &T | main.rs:1502:5:1507:5 | Vec2 | +| main.rs:1564:13:1564:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | | main.rs:1564:13:1564:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1564:13:1564:27 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:1564:23:1564:25 | rhs | | main.rs:1502:5:1507:5 | Vec2 | +| main.rs:1564:13:1564:27 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:1564:23:1564:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | | main.rs:1564:23:1564:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1570:16:1570:19 | SelfParam | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1570:22:1570:24 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1570:41:1575:9 | { ... } | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1571:13:1574:13 | Vec2 {...} | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1572:20:1572:23 | self | | main.rs:1502:5:1507:5 | Vec2 | +| main.rs:1570:16:1570:19 | SelfParam | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1570:22:1570:24 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1570:41:1575:9 | { ... } | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1571:13:1574:13 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1572:20:1572:23 | self | | main.rs:1537:5:1542:5 | Vec2 | | main.rs:1572:20:1572:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1572:20:1572:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1572:29:1572:31 | rhs | | main.rs:1502:5:1507:5 | Vec2 | +| main.rs:1572:20:1572:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1572:29:1572:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | | main.rs:1572:29:1572:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1573:20:1573:23 | self | | main.rs:1502:5:1507:5 | Vec2 | +| main.rs:1573:20:1573:23 | self | | main.rs:1537:5:1542:5 | Vec2 | | main.rs:1573:20:1573:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1573:20:1573:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1573:29:1573:31 | rhs | | main.rs:1502:5:1507:5 | Vec2 | +| main.rs:1573:20:1573:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1573:29:1573:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | | main.rs:1573:29:1573:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1579:23:1579:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1579:23:1579:31 | SelfParam | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1579:34:1579:36 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1580:13:1580:16 | self | | file://:0:0:0:0 | & | -| main.rs:1580:13:1580:16 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1580:13:1580:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1580:13:1580:27 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:1580:23:1580:25 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1580:23:1580:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1580:23:1580:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1580:23:1580:31 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1580:34:1580:36 | rhs | | main.rs:1537:5:1542:5 | Vec2 | | main.rs:1581:13:1581:16 | self | | file://:0:0:0:0 | & | -| main.rs:1581:13:1581:16 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1581:13:1581:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1581:13:1581:27 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:1581:23:1581:25 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1581:23:1581:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1587:16:1587:19 | SelfParam | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1587:22:1587:24 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1587:41:1592:9 | { ... } | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1588:13:1591:13 | Vec2 {...} | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1589:20:1589:23 | self | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1589:20:1589:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1589:20:1589:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1589:29:1589:31 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1589:29:1589:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1590:20:1590:23 | self | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1590:20:1590:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1590:20:1590:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1590:29:1590:31 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1590:29:1590:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1596:23:1596:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1596:23:1596:31 | SelfParam | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1596:34:1596:36 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1597:13:1597:16 | self | | file://:0:0:0:0 | & | -| main.rs:1597:13:1597:16 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1597:13:1597:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1597:13:1597:27 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:1597:23:1597:25 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1597:23:1597:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1581:13:1581:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1581:13:1581:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1581:13:1581:27 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:1581:23:1581:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1581:23:1581:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1582:13:1582:16 | self | | file://:0:0:0:0 | & | +| main.rs:1582:13:1582:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1582:13:1582:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1582:13:1582:27 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:1582:23:1582:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1582:23:1582:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1588:16:1588:19 | SelfParam | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1588:22:1588:24 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1588:41:1593:9 | { ... } | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1589:13:1592:13 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1590:20:1590:23 | self | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1590:20:1590:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1590:20:1590:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1590:29:1590:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1590:29:1590:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1591:20:1591:23 | self | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1591:20:1591:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1591:20:1591:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1591:29:1591:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1591:29:1591:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1597:23:1597:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1597:23:1597:31 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1597:34:1597:36 | rhs | | main.rs:1537:5:1542:5 | Vec2 | | main.rs:1598:13:1598:16 | self | | file://:0:0:0:0 | & | -| main.rs:1598:13:1598:16 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1598:13:1598:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1598:13:1598:27 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:1598:23:1598:25 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1598:23:1598:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1604:19:1604:22 | SelfParam | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1604:25:1604:27 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1604:44:1609:9 | { ... } | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1605:13:1608:13 | Vec2 {...} | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1606:20:1606:23 | self | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1606:20:1606:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1606:20:1606:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1606:29:1606:31 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1606:29:1606:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1607:20:1607:23 | self | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1607:20:1607:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1607:20:1607:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1607:29:1607:31 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1607:29:1607:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1613:26:1613:34 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1613:26:1613:34 | SelfParam | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1613:37:1613:39 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1614:13:1614:16 | self | | file://:0:0:0:0 | & | -| main.rs:1614:13:1614:16 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1614:13:1614:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1614:13:1614:27 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:1614:23:1614:25 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1614:23:1614:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1598:13:1598:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1598:13:1598:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1598:13:1598:27 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:1598:23:1598:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1598:23:1598:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1599:13:1599:16 | self | | file://:0:0:0:0 | & | +| main.rs:1599:13:1599:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1599:13:1599:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1599:13:1599:27 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:1599:23:1599:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1599:23:1599:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1605:16:1605:19 | SelfParam | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1605:22:1605:24 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1605:41:1610:9 | { ... } | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1606:13:1609:13 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1607:20:1607:23 | self | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1607:20:1607:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1607:20:1607:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1607:29:1607:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1607:29:1607:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1608:20:1608:23 | self | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1608:20:1608:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1608:20:1608:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1608:29:1608:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1608:29:1608:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1614:23:1614:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1614:23:1614:31 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1614:34:1614:36 | rhs | | main.rs:1537:5:1542:5 | Vec2 | | main.rs:1615:13:1615:16 | self | | file://:0:0:0:0 | & | -| main.rs:1615:13:1615:16 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1615:13:1615:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1615:13:1615:27 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:1615:23:1615:25 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1615:23:1615:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1621:18:1621:21 | SelfParam | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1621:24:1621:26 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1621:43:1626:9 | { ... } | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1622:13:1625:13 | Vec2 {...} | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1623:20:1623:23 | self | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1623:20:1623:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1623:20:1623:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1623:29:1623:31 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1623:29:1623:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1624:20:1624:23 | self | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1624:20:1624:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1624:20:1624:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1624:29:1624:31 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1624:29:1624:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1630:25:1630:33 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1630:25:1630:33 | SelfParam | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1630:36:1630:38 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1631:13:1631:16 | self | | file://:0:0:0:0 | & | -| main.rs:1631:13:1631:16 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1631:13:1631:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1631:13:1631:27 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:1631:23:1631:25 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1631:23:1631:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1615:13:1615:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1615:13:1615:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1615:13:1615:27 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:1615:23:1615:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1615:23:1615:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1616:13:1616:16 | self | | file://:0:0:0:0 | & | +| main.rs:1616:13:1616:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1616:13:1616:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1616:13:1616:27 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:1616:23:1616:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1616:23:1616:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1622:16:1622:19 | SelfParam | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1622:22:1622:24 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1622:41:1627:9 | { ... } | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1623:13:1626:13 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1624:20:1624:23 | self | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1624:20:1624:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1624:20:1624:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1624:29:1624:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1624:29:1624:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1625:20:1625:23 | self | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1625:20:1625:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1625:20:1625:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1625:29:1625:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1625:29:1625:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1631:23:1631:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1631:23:1631:31 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1631:34:1631:36 | rhs | | main.rs:1537:5:1542:5 | Vec2 | | main.rs:1632:13:1632:16 | self | | file://:0:0:0:0 | & | -| main.rs:1632:13:1632:16 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1632:13:1632:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1632:13:1632:27 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:1632:23:1632:25 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1632:23:1632:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1638:19:1638:22 | SelfParam | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1638:25:1638:27 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1638:44:1643:9 | { ... } | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1639:13:1642:13 | Vec2 {...} | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1640:20:1640:23 | self | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1640:20:1640:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1640:20:1640:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1640:29:1640:31 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1640:29:1640:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1641:20:1641:23 | self | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1641:20:1641:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1641:20:1641:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1641:29:1641:31 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1641:29:1641:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1647:26:1647:34 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1647:26:1647:34 | SelfParam | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1647:37:1647:39 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1648:13:1648:16 | self | | file://:0:0:0:0 | & | -| main.rs:1648:13:1648:16 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1648:13:1648:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1648:13:1648:27 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:1648:23:1648:25 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1648:23:1648:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1632:13:1632:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1632:13:1632:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1632:13:1632:27 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:1632:23:1632:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1632:23:1632:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1633:13:1633:16 | self | | file://:0:0:0:0 | & | +| main.rs:1633:13:1633:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1633:13:1633:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1633:13:1633:27 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:1633:23:1633:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1633:23:1633:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1639:19:1639:22 | SelfParam | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1639:25:1639:27 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1639:44:1644:9 | { ... } | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1640:13:1643:13 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1641:20:1641:23 | self | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1641:20:1641:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1641:20:1641:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1641:29:1641:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1641:29:1641:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1642:20:1642:23 | self | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1642:20:1642:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1642:20:1642:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1642:29:1642:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1642:29:1642:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1648:26:1648:34 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1648:26:1648:34 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1648:37:1648:39 | rhs | | main.rs:1537:5:1542:5 | Vec2 | | main.rs:1649:13:1649:16 | self | | file://:0:0:0:0 | & | -| main.rs:1649:13:1649:16 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1649:13:1649:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1649:13:1649:27 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:1649:23:1649:25 | rhs | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1649:23:1649:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1655:16:1655:19 | SelfParam | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1655:22:1655:24 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1655:40:1660:9 | { ... } | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1656:13:1659:13 | Vec2 {...} | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1657:20:1657:23 | self | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1657:20:1657:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1657:20:1657:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1657:30:1657:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1658:20:1658:23 | self | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1658:20:1658:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1658:20:1658:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1658:30:1658:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1664:23:1664:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1664:23:1664:31 | SelfParam | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1664:34:1664:36 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1665:13:1665:16 | self | | file://:0:0:0:0 | & | -| main.rs:1665:13:1665:16 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1665:13:1665:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1665:13:1665:26 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1665:24:1665:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1649:13:1649:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1649:13:1649:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1649:13:1649:27 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:1649:23:1649:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1649:23:1649:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1650:13:1650:16 | self | | file://:0:0:0:0 | & | +| main.rs:1650:13:1650:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1650:13:1650:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1650:13:1650:27 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:1650:23:1650:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1650:23:1650:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1656:18:1656:21 | SelfParam | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1656:24:1656:26 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1656:43:1661:9 | { ... } | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1657:13:1660:13 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1658:20:1658:23 | self | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1658:20:1658:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1658:20:1658:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1658:29:1658:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1658:29:1658:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1659:20:1659:23 | self | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1659:20:1659:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1659:20:1659:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1659:29:1659:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1659:29:1659:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1665:25:1665:33 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1665:25:1665:33 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1665:36:1665:38 | rhs | | main.rs:1537:5:1542:5 | Vec2 | | main.rs:1666:13:1666:16 | self | | file://:0:0:0:0 | & | -| main.rs:1666:13:1666:16 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1666:13:1666:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1666:13:1666:26 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1666:24:1666:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1672:16:1672:19 | SelfParam | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1672:22:1672:24 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1672:40:1677:9 | { ... } | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1673:13:1676:13 | Vec2 {...} | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1674:20:1674:23 | self | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1674:20:1674:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1674:20:1674:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1674:30:1674:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1675:20:1675:23 | self | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1675:20:1675:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1675:20:1675:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1675:30:1675:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1681:23:1681:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1681:23:1681:31 | SelfParam | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1681:34:1681:36 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1682:13:1682:16 | self | | file://:0:0:0:0 | & | -| main.rs:1682:13:1682:16 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1682:13:1682:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1682:13:1682:26 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1682:24:1682:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1666:13:1666:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1666:13:1666:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1666:13:1666:27 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:1666:23:1666:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1666:23:1666:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1667:13:1667:16 | self | | file://:0:0:0:0 | & | +| main.rs:1667:13:1667:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1667:13:1667:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1667:13:1667:27 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:1667:23:1667:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1667:23:1667:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1673:19:1673:22 | SelfParam | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1673:25:1673:27 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1673:44:1678:9 | { ... } | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1674:13:1677:13 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1675:20:1675:23 | self | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1675:20:1675:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1675:20:1675:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1675:29:1675:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1675:29:1675:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1676:20:1676:23 | self | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1676:20:1676:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1676:20:1676:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1676:29:1676:31 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1676:29:1676:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1682:26:1682:34 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1682:26:1682:34 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1682:37:1682:39 | rhs | | main.rs:1537:5:1542:5 | Vec2 | | main.rs:1683:13:1683:16 | self | | file://:0:0:0:0 | & | -| main.rs:1683:13:1683:16 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1683:13:1683:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1683:13:1683:26 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1683:24:1683:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1689:16:1689:19 | SelfParam | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1689:30:1694:9 | { ... } | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1690:13:1693:13 | Vec2 {...} | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1691:20:1691:26 | - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1691:21:1691:24 | self | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1691:21:1691:26 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1692:20:1692:26 | - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1692:21:1692:24 | self | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1692:21:1692:26 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1699:16:1699:19 | SelfParam | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1699:30:1704:9 | { ... } | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1700:13:1703:13 | Vec2 {...} | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1701:20:1701:26 | ! ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1701:21:1701:24 | self | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1701:21:1701:26 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1702:20:1702:26 | ! ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1702:21:1702:24 | self | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1702:21:1702:26 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1708:15:1708:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1708:15:1708:19 | SelfParam | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1708:22:1708:26 | other | | file://:0:0:0:0 | & | -| main.rs:1708:22:1708:26 | other | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1708:44:1710:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1709:13:1709:16 | self | | file://:0:0:0:0 | & | -| main.rs:1709:13:1709:16 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1709:13:1709:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1709:13:1709:29 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1709:13:1709:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1709:23:1709:27 | other | | file://:0:0:0:0 | & | -| main.rs:1709:23:1709:27 | other | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1709:23:1709:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1709:34:1709:37 | self | | file://:0:0:0:0 | & | -| main.rs:1709:34:1709:37 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1709:34:1709:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1709:34:1709:50 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1709:44:1709:48 | other | | file://:0:0:0:0 | & | -| main.rs:1709:44:1709:48 | other | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1709:44:1709:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1712:15:1712:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1712:15:1712:19 | SelfParam | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1712:22:1712:26 | other | | file://:0:0:0:0 | & | -| main.rs:1712:22:1712:26 | other | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1712:44:1714:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1713:13:1713:16 | self | | file://:0:0:0:0 | & | -| main.rs:1713:13:1713:16 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1713:13:1713:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1713:13:1713:29 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1713:13:1713:50 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1713:23:1713:27 | other | | file://:0:0:0:0 | & | -| main.rs:1713:23:1713:27 | other | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1713:23:1713:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1713:34:1713:37 | self | | file://:0:0:0:0 | & | -| main.rs:1713:34:1713:37 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1713:34:1713:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1713:34:1713:50 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1713:44:1713:48 | other | | file://:0:0:0:0 | & | -| main.rs:1713:44:1713:48 | other | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1713:44:1713:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1718:24:1718:28 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1718:24:1718:28 | SelfParam | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1718:31:1718:35 | other | | file://:0:0:0:0 | & | -| main.rs:1718:31:1718:35 | other | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1718:75:1720:9 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:1718:75:1720:9 | { ... } | T | {EXTERNAL LOCATION} | Ordering | -| main.rs:1719:13:1719:29 | (...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:1719:13:1719:63 | ... .partial_cmp(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:1719:13:1719:63 | ... .partial_cmp(...) | T | {EXTERNAL LOCATION} | Ordering | -| main.rs:1719:14:1719:17 | self | | file://:0:0:0:0 | & | -| main.rs:1719:14:1719:17 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1719:14:1719:19 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1719:14:1719:28 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1719:23:1719:26 | self | | file://:0:0:0:0 | & | -| main.rs:1719:23:1719:26 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1719:23:1719:28 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1719:43:1719:62 | &... | | file://:0:0:0:0 | & | -| main.rs:1719:43:1719:62 | &... | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:1719:44:1719:62 | (...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:1719:45:1719:49 | other | | file://:0:0:0:0 | & | -| main.rs:1719:45:1719:49 | other | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1719:45:1719:51 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1719:45:1719:61 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1719:55:1719:59 | other | | file://:0:0:0:0 | & | -| main.rs:1719:55:1719:59 | other | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1719:55:1719:61 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1722:15:1722:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1722:15:1722:19 | SelfParam | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1722:22:1722:26 | other | | file://:0:0:0:0 | & | -| main.rs:1722:22:1722:26 | other | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1722:44:1724:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1723:13:1723:16 | self | | file://:0:0:0:0 | & | -| main.rs:1723:13:1723:16 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1723:13:1723:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1723:13:1723:28 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1723:13:1723:48 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1723:22:1723:26 | other | | file://:0:0:0:0 | & | -| main.rs:1723:22:1723:26 | other | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1723:22:1723:28 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1723:33:1723:36 | self | | file://:0:0:0:0 | & | -| main.rs:1723:33:1723:36 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1723:33:1723:38 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1723:33:1723:48 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1723:42:1723:46 | other | | file://:0:0:0:0 | & | -| main.rs:1723:42:1723:46 | other | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1723:42:1723:48 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1726:15:1726:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1726:15:1726:19 | SelfParam | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1726:22:1726:26 | other | | file://:0:0:0:0 | & | -| main.rs:1726:22:1726:26 | other | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1726:44:1728:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1727:13:1727:16 | self | | file://:0:0:0:0 | & | -| main.rs:1727:13:1727:16 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1727:13:1727:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1727:13:1727:29 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1727:13:1727:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1727:23:1727:27 | other | | file://:0:0:0:0 | & | -| main.rs:1727:23:1727:27 | other | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1727:23:1727:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1727:34:1727:37 | self | | file://:0:0:0:0 | & | -| main.rs:1727:34:1727:37 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1727:34:1727:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1727:34:1727:50 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1727:44:1727:48 | other | | file://:0:0:0:0 | & | -| main.rs:1727:44:1727:48 | other | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1727:44:1727:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1730:15:1730:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1730:15:1730:19 | SelfParam | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1730:22:1730:26 | other | | file://:0:0:0:0 | & | -| main.rs:1730:22:1730:26 | other | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1730:44:1732:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1731:13:1731:16 | self | | file://:0:0:0:0 | & | -| main.rs:1731:13:1731:16 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1731:13:1731:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1731:13:1731:28 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1731:13:1731:48 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1731:22:1731:26 | other | | file://:0:0:0:0 | & | -| main.rs:1731:22:1731:26 | other | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1731:22:1731:28 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1731:33:1731:36 | self | | file://:0:0:0:0 | & | -| main.rs:1731:33:1731:36 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1731:33:1731:38 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1731:33:1731:48 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1731:42:1731:46 | other | | file://:0:0:0:0 | & | -| main.rs:1731:42:1731:46 | other | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1731:42:1731:48 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1734:15:1734:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1734:15:1734:19 | SelfParam | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1734:22:1734:26 | other | | file://:0:0:0:0 | & | -| main.rs:1734:22:1734:26 | other | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1734:44:1736:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1735:13:1735:16 | self | | file://:0:0:0:0 | & | -| main.rs:1735:13:1735:16 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1735:13:1735:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1735:13:1735:29 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1735:13:1735:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1735:23:1735:27 | other | | file://:0:0:0:0 | & | -| main.rs:1735:23:1735:27 | other | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1735:23:1735:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1735:34:1735:37 | self | | file://:0:0:0:0 | & | -| main.rs:1735:34:1735:37 | self | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1735:34:1735:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1735:34:1735:50 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1735:44:1735:48 | other | | file://:0:0:0:0 | & | -| main.rs:1735:44:1735:48 | other | &T | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1735:44:1735:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1742:13:1742:18 | i64_eq | | {EXTERNAL LOCATION} | bool | -| main.rs:1742:22:1742:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1742:23:1742:26 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1742:23:1742:34 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1742:31:1742:34 | 2i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1743:13:1743:18 | i64_ne | | {EXTERNAL LOCATION} | bool | -| main.rs:1743:22:1743:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1743:23:1743:26 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1743:23:1743:34 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1743:31:1743:34 | 4i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1744:13:1744:18 | i64_lt | | {EXTERNAL LOCATION} | bool | -| main.rs:1744:22:1744:34 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1744:23:1744:26 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1744:23:1744:33 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1744:30:1744:33 | 6i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1745:13:1745:18 | i64_le | | {EXTERNAL LOCATION} | bool | -| main.rs:1745:22:1745:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1745:23:1745:26 | 7i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1745:23:1745:34 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1745:31:1745:34 | 8i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1746:13:1746:18 | i64_gt | | {EXTERNAL LOCATION} | bool | -| main.rs:1746:22:1746:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1746:23:1746:26 | 9i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1746:23:1746:34 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1746:30:1746:34 | 10i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1747:13:1747:18 | i64_ge | | {EXTERNAL LOCATION} | bool | -| main.rs:1747:22:1747:37 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1747:23:1747:27 | 11i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1747:23:1747:36 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1747:32:1747:36 | 12i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1750:13:1750:19 | i64_add | | {EXTERNAL LOCATION} | i64 | -| main.rs:1750:23:1750:27 | 13i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1750:23:1750:35 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1750:31:1750:35 | 14i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1751:13:1751:19 | i64_sub | | {EXTERNAL LOCATION} | i64 | -| main.rs:1751:23:1751:27 | 15i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1751:23:1751:35 | ... - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1751:31:1751:35 | 16i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1752:13:1752:19 | i64_mul | | {EXTERNAL LOCATION} | i64 | -| main.rs:1752:23:1752:27 | 17i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1752:23:1752:35 | ... * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1752:31:1752:35 | 18i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1753:13:1753:19 | i64_div | | {EXTERNAL LOCATION} | i64 | -| main.rs:1753:23:1753:27 | 19i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1753:23:1753:35 | ... / ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1753:31:1753:35 | 20i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1754:13:1754:19 | i64_rem | | {EXTERNAL LOCATION} | i64 | -| main.rs:1754:23:1754:27 | 21i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1754:23:1754:35 | ... % ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1754:31:1754:35 | 22i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1757:17:1757:30 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1757:34:1757:38 | 23i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1758:9:1758:22 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1758:9:1758:31 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:1758:27:1758:31 | 24i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1760:17:1760:30 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1760:34:1760:38 | 25i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1761:9:1761:22 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1761:9:1761:31 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:1761:27:1761:31 | 26i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1763:17:1763:30 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1763:34:1763:38 | 27i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1764:9:1764:22 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1764:9:1764:31 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:1764:27:1764:31 | 28i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1766:17:1766:30 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1766:34:1766:38 | 29i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1767:9:1767:22 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1767:9:1767:31 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:1767:27:1767:31 | 30i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1769:17:1769:30 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1769:34:1769:38 | 31i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1770:9:1770:22 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1770:9:1770:31 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:1770:27:1770:31 | 32i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1773:13:1773:22 | i64_bitand | | {EXTERNAL LOCATION} | i64 | -| main.rs:1773:26:1773:30 | 33i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1773:26:1773:38 | ... & ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1773:34:1773:38 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1774:13:1774:21 | i64_bitor | | {EXTERNAL LOCATION} | i64 | -| main.rs:1774:25:1774:29 | 35i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1774:25:1774:37 | ... \| ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1774:33:1774:37 | 36i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1775:13:1775:22 | i64_bitxor | | {EXTERNAL LOCATION} | i64 | -| main.rs:1775:26:1775:30 | 37i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1775:26:1775:38 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1775:34:1775:38 | 38i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1776:13:1776:19 | i64_shl | | {EXTERNAL LOCATION} | i64 | -| main.rs:1776:23:1776:27 | 39i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1776:23:1776:36 | ... << ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1776:32:1776:36 | 40i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1777:13:1777:19 | i64_shr | | {EXTERNAL LOCATION} | i64 | -| main.rs:1777:23:1777:27 | 41i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1777:23:1777:36 | ... >> ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1777:32:1777:36 | 42i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1780:17:1780:33 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1780:37:1780:41 | 43i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1781:9:1781:25 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1781:9:1781:34 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:1781:30:1781:34 | 44i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1783:17:1783:32 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1783:36:1783:40 | 45i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1784:9:1784:24 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1784:9:1784:33 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:1784:29:1784:33 | 46i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1786:17:1786:33 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1786:37:1786:41 | 47i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1787:9:1787:25 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1787:9:1787:34 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:1787:30:1787:34 | 48i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1789:17:1789:30 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1789:34:1789:38 | 49i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1790:9:1790:22 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1790:9:1790:32 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1790:28:1790:32 | 50i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1792:17:1792:30 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1792:34:1792:38 | 51i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1793:9:1793:22 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1793:9:1793:32 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1793:28:1793:32 | 52i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1795:13:1795:19 | i64_neg | | {EXTERNAL LOCATION} | i64 | -| main.rs:1795:23:1795:28 | - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1795:24:1795:28 | 53i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1796:13:1796:19 | i64_not | | {EXTERNAL LOCATION} | i64 | -| main.rs:1796:23:1796:28 | ! ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1796:24:1796:28 | 54i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1799:13:1799:14 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1799:18:1799:36 | Vec2 {...} | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1799:28:1799:28 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1799:28:1799:28 | 1 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1799:34:1799:34 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1799:34:1799:34 | 2 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1800:13:1800:14 | v2 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1800:18:1800:36 | Vec2 {...} | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1800:28:1800:28 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1800:28:1800:28 | 3 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1800:34:1800:34 | 4 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1800:34:1800:34 | 4 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1803:13:1803:19 | vec2_eq | | {EXTERNAL LOCATION} | bool | -| main.rs:1803:23:1803:24 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1803:23:1803:30 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1803:29:1803:30 | v2 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1804:13:1804:19 | vec2_ne | | {EXTERNAL LOCATION} | bool | -| main.rs:1804:23:1804:24 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1804:23:1804:30 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1804:29:1804:30 | v2 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1805:13:1805:19 | vec2_lt | | {EXTERNAL LOCATION} | bool | -| main.rs:1805:23:1805:24 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1805:23:1805:29 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1805:28:1805:29 | v2 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1806:13:1806:19 | vec2_le | | {EXTERNAL LOCATION} | bool | -| main.rs:1806:23:1806:24 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1806:23:1806:30 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1806:29:1806:30 | v2 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1807:13:1807:19 | vec2_gt | | {EXTERNAL LOCATION} | bool | -| main.rs:1807:23:1807:24 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1807:23:1807:29 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1807:28:1807:29 | v2 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1808:13:1808:19 | vec2_ge | | {EXTERNAL LOCATION} | bool | -| main.rs:1808:23:1808:24 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1808:23:1808:30 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1808:29:1808:30 | v2 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1811:13:1811:20 | vec2_add | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1811:24:1811:25 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1811:24:1811:30 | ... + ... | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1811:29:1811:30 | v2 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1812:13:1812:20 | vec2_sub | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1812:24:1812:25 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1812:24:1812:30 | ... - ... | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1812:29:1812:30 | v2 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1813:13:1813:20 | vec2_mul | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1813:24:1813:25 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1813:24:1813:30 | ... * ... | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1813:29:1813:30 | v2 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1814:13:1814:20 | vec2_div | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1814:24:1814:25 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1814:24:1814:30 | ... / ... | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1814:29:1814:30 | v2 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1815:13:1815:20 | vec2_rem | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1815:24:1815:25 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1815:24:1815:30 | ... % ... | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1815:29:1815:30 | v2 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1818:17:1818:31 | vec2_add_assign | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1818:35:1818:36 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1819:9:1819:23 | vec2_add_assign | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1819:9:1819:29 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:1819:28:1819:29 | v2 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1821:17:1821:31 | vec2_sub_assign | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1821:35:1821:36 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1822:9:1822:23 | vec2_sub_assign | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1822:9:1822:29 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:1822:28:1822:29 | v2 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1824:17:1824:31 | vec2_mul_assign | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1824:35:1824:36 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1825:9:1825:23 | vec2_mul_assign | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1825:9:1825:29 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:1825:28:1825:29 | v2 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1827:17:1827:31 | vec2_div_assign | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1827:35:1827:36 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1828:9:1828:23 | vec2_div_assign | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1828:9:1828:29 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:1828:28:1828:29 | v2 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1830:17:1830:31 | vec2_rem_assign | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1830:35:1830:36 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1831:9:1831:23 | vec2_rem_assign | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1831:9:1831:29 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:1831:28:1831:29 | v2 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1834:13:1834:23 | vec2_bitand | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1834:27:1834:28 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1834:27:1834:33 | ... & ... | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1834:32:1834:33 | v2 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1835:13:1835:22 | vec2_bitor | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1835:26:1835:27 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1835:26:1835:32 | ... \| ... | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1835:31:1835:32 | v2 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1836:13:1836:23 | vec2_bitxor | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1836:27:1836:28 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1836:27:1836:33 | ... ^ ... | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1836:32:1836:33 | v2 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1837:13:1837:20 | vec2_shl | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1837:24:1837:25 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1837:24:1837:33 | ... << ... | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1837:30:1837:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:1838:13:1838:20 | vec2_shr | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1838:24:1838:25 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1838:24:1838:33 | ... >> ... | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1838:30:1838:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:1841:17:1841:34 | vec2_bitand_assign | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1841:38:1841:39 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1842:9:1842:26 | vec2_bitand_assign | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1842:9:1842:32 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:1842:31:1842:32 | v2 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1844:17:1844:33 | vec2_bitor_assign | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1844:37:1844:38 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1845:9:1845:25 | vec2_bitor_assign | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1845:9:1845:31 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:1845:30:1845:31 | v2 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1847:17:1847:34 | vec2_bitxor_assign | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1847:38:1847:39 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1848:9:1848:26 | vec2_bitxor_assign | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1848:9:1848:32 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:1848:31:1848:32 | v2 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1850:17:1850:31 | vec2_shl_assign | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1850:35:1850:36 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1851:9:1851:23 | vec2_shl_assign | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1851:9:1851:32 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1851:29:1851:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:1853:17:1853:31 | vec2_shr_assign | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1853:35:1853:36 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1854:9:1854:23 | vec2_shr_assign | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1854:9:1854:32 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1854:29:1854:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:1857:13:1857:20 | vec2_neg | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1857:24:1857:26 | - ... | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1857:25:1857:26 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1858:13:1858:20 | vec2_not | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1858:24:1858:26 | ! ... | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1858:25:1858:26 | v1 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1861:13:1861:24 | default_vec2 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1861:28:1861:45 | ...::default(...) | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1862:13:1862:26 | vec2_zero_plus | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1862:30:1862:48 | Vec2 {...} | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1862:30:1862:63 | ... + ... | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1862:40:1862:40 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1862:40:1862:40 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1862:46:1862:46 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1862:46:1862:46 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1862:52:1862:63 | default_vec2 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1866:13:1866:24 | default_vec2 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1866:28:1866:45 | ...::default(...) | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1867:13:1867:26 | vec2_zero_plus | | {EXTERNAL LOCATION} | bool | -| main.rs:1867:30:1867:48 | Vec2 {...} | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1867:30:1867:64 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1867:40:1867:40 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1867:40:1867:40 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1867:46:1867:46 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1867:46:1867:46 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1867:53:1867:64 | default_vec2 | | main.rs:1502:5:1507:5 | Vec2 | -| main.rs:1877:18:1877:21 | SelfParam | | main.rs:1874:5:1874:14 | S1 | -| main.rs:1880:25:1882:5 | { ... } | | main.rs:1874:5:1874:14 | S1 | -| main.rs:1881:9:1881:10 | S1 | | main.rs:1874:5:1874:14 | S1 | -| main.rs:1884:41:1886:5 | { ... } | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1884:41:1886:5 | { ... } | | main.rs:1884:16:1884:39 | ImplTraitTypeRepr | -| main.rs:1884:41:1886:5 | { ... } | Output | main.rs:1874:5:1874:14 | S1 | -| main.rs:1885:9:1885:20 | { ... } | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1885:9:1885:20 | { ... } | | main.rs:1884:16:1884:39 | ImplTraitTypeRepr | -| main.rs:1885:9:1885:20 | { ... } | Output | main.rs:1874:5:1874:14 | S1 | -| main.rs:1885:17:1885:18 | S1 | | main.rs:1874:5:1874:14 | S1 | -| main.rs:1894:13:1894:42 | SelfParam | | {EXTERNAL LOCATION} | Pin | -| main.rs:1894:13:1894:42 | SelfParam | Ptr | file://:0:0:0:0 | & | -| main.rs:1894:13:1894:42 | SelfParam | Ptr.&T | main.rs:1888:5:1888:14 | S2 | -| main.rs:1895:13:1895:15 | _cx | | file://:0:0:0:0 | & | -| main.rs:1895:13:1895:15 | _cx | &T | {EXTERNAL LOCATION} | Context | -| main.rs:1896:44:1898:9 | { ... } | | {EXTERNAL LOCATION} | Poll | -| main.rs:1896:44:1898:9 | { ... } | T | main.rs:1874:5:1874:14 | S1 | -| main.rs:1897:13:1897:38 | ...::Ready(...) | | {EXTERNAL LOCATION} | Poll | -| main.rs:1897:13:1897:38 | ...::Ready(...) | T | main.rs:1874:5:1874:14 | S1 | -| main.rs:1897:36:1897:37 | S1 | | main.rs:1874:5:1874:14 | S1 | -| main.rs:1901:41:1903:5 | { ... } | | main.rs:1888:5:1888:14 | S2 | -| main.rs:1901:41:1903:5 | { ... } | | main.rs:1901:16:1901:39 | ImplTraitTypeRepr | -| main.rs:1902:9:1902:10 | S2 | | main.rs:1888:5:1888:14 | S2 | -| main.rs:1902:9:1902:10 | S2 | | main.rs:1901:16:1901:39 | ImplTraitTypeRepr | -| main.rs:1906:9:1906:12 | f1(...) | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1906:9:1906:12 | f1(...) | Output | main.rs:1874:5:1874:14 | S1 | -| main.rs:1906:9:1906:18 | await ... | | main.rs:1874:5:1874:14 | S1 | -| main.rs:1907:9:1907:12 | f2(...) | | main.rs:1884:16:1884:39 | ImplTraitTypeRepr | -| main.rs:1907:9:1907:18 | await ... | | main.rs:1874:5:1874:14 | S1 | -| main.rs:1908:9:1908:12 | f3(...) | | main.rs:1901:16:1901:39 | ImplTraitTypeRepr | -| main.rs:1908:9:1908:18 | await ... | | main.rs:1874:5:1874:14 | S1 | -| main.rs:1909:9:1909:10 | S2 | | main.rs:1888:5:1888:14 | S2 | -| main.rs:1909:9:1909:16 | await S2 | | main.rs:1874:5:1874:14 | S1 | -| main.rs:1910:13:1910:13 | b | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1910:13:1910:13 | b | Output | main.rs:1874:5:1874:14 | S1 | -| main.rs:1910:17:1910:28 | { ... } | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1910:17:1910:28 | { ... } | Output | main.rs:1874:5:1874:14 | S1 | -| main.rs:1910:25:1910:26 | S1 | | main.rs:1874:5:1874:14 | S1 | -| main.rs:1911:9:1911:9 | b | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1911:9:1911:9 | b | Output | main.rs:1874:5:1874:14 | S1 | -| main.rs:1911:9:1911:15 | await b | | main.rs:1874:5:1874:14 | S1 | -| main.rs:1922:15:1922:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1922:15:1922:19 | SelfParam | &T | main.rs:1921:5:1923:5 | Self [trait Trait1] | -| main.rs:1926:15:1926:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1926:15:1926:19 | SelfParam | &T | main.rs:1925:5:1927:5 | Self [trait Trait2] | -| main.rs:1930:15:1930:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1930:15:1930:19 | SelfParam | &T | main.rs:1916:5:1917:14 | S1 | -| main.rs:1934:15:1934:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1934:15:1934:19 | SelfParam | &T | main.rs:1916:5:1917:14 | S1 | -| main.rs:1937:37:1939:5 | { ... } | | main.rs:1916:5:1917:14 | S1 | -| main.rs:1937:37:1939:5 | { ... } | | main.rs:1937:16:1937:35 | ImplTraitTypeRepr | -| main.rs:1938:9:1938:10 | S1 | | main.rs:1916:5:1917:14 | S1 | -| main.rs:1938:9:1938:10 | S1 | | main.rs:1937:16:1937:35 | ImplTraitTypeRepr | -| main.rs:1942:18:1942:22 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1942:18:1942:22 | SelfParam | &T | main.rs:1941:5:1943:5 | Self [trait MyTrait] | -| main.rs:1946:18:1946:22 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1946:18:1946:22 | SelfParam | &T | main.rs:1916:5:1917:14 | S1 | -| main.rs:1946:31:1948:9 | { ... } | | main.rs:1918:5:1918:14 | S2 | -| main.rs:1947:13:1947:14 | S2 | | main.rs:1918:5:1918:14 | S2 | -| main.rs:1952:18:1952:22 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1952:18:1952:22 | SelfParam | | main.rs:1919:5:1919:22 | S3 | -| main.rs:1952:18:1952:22 | SelfParam | &T | main.rs:1919:5:1919:22 | S3 | -| main.rs:1952:18:1952:22 | SelfParam | &T.T3 | main.rs:1951:10:1951:17 | T | -| main.rs:1952:30:1955:9 | { ... } | | main.rs:1951:10:1951:17 | T | -| main.rs:1953:17:1953:21 | S3(...) | | file://:0:0:0:0 | & | -| main.rs:1953:17:1953:21 | S3(...) | | main.rs:1919:5:1919:22 | S3 | -| main.rs:1953:17:1953:21 | S3(...) | &T | main.rs:1919:5:1919:22 | S3 | -| main.rs:1953:17:1953:21 | S3(...) | &T.T3 | main.rs:1951:10:1951:17 | T | -| main.rs:1953:25:1953:28 | self | | file://:0:0:0:0 | & | -| main.rs:1953:25:1953:28 | self | | main.rs:1919:5:1919:22 | S3 | -| main.rs:1953:25:1953:28 | self | &T | main.rs:1919:5:1919:22 | S3 | -| main.rs:1953:25:1953:28 | self | &T.T3 | main.rs:1951:10:1951:17 | T | -| main.rs:1954:13:1954:21 | t.clone() | | main.rs:1951:10:1951:17 | T | -| main.rs:1958:45:1960:5 | { ... } | | main.rs:1916:5:1917:14 | S1 | -| main.rs:1958:45:1960:5 | { ... } | | main.rs:1958:28:1958:43 | ImplTraitTypeRepr | -| main.rs:1959:9:1959:10 | S1 | | main.rs:1916:5:1917:14 | S1 | -| main.rs:1959:9:1959:10 | S1 | | main.rs:1958:28:1958:43 | ImplTraitTypeRepr | -| main.rs:1962:41:1962:41 | t | | main.rs:1962:26:1962:38 | B | -| main.rs:1962:52:1964:5 | { ... } | | main.rs:1962:23:1962:23 | A | -| main.rs:1963:9:1963:9 | t | | main.rs:1962:26:1962:38 | B | -| main.rs:1963:9:1963:17 | t.get_a() | | main.rs:1962:23:1962:23 | A | -| main.rs:1966:34:1966:34 | x | | main.rs:1966:24:1966:31 | T | -| main.rs:1966:59:1968:5 | { ... } | | main.rs:1919:5:1919:22 | S3 | -| main.rs:1966:59:1968:5 | { ... } | | main.rs:1966:43:1966:57 | ImplTraitTypeRepr | -| main.rs:1966:59:1968:5 | { ... } | T3 | main.rs:1966:24:1966:31 | T | -| main.rs:1966:59:1968:5 | { ... } | impl(T) | main.rs:1966:24:1966:31 | T | -| main.rs:1967:9:1967:13 | S3(...) | | main.rs:1919:5:1919:22 | S3 | -| main.rs:1967:9:1967:13 | S3(...) | | main.rs:1966:43:1966:57 | ImplTraitTypeRepr | -| main.rs:1967:9:1967:13 | S3(...) | T3 | main.rs:1966:24:1966:31 | T | -| main.rs:1967:9:1967:13 | S3(...) | impl(T) | main.rs:1966:24:1966:31 | T | -| main.rs:1967:12:1967:12 | x | | main.rs:1966:24:1966:31 | T | -| main.rs:1970:34:1970:34 | x | | main.rs:1970:24:1970:31 | T | -| main.rs:1970:67:1972:5 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:1970:67:1972:5 | { ... } | T | main.rs:1919:5:1919:22 | S3 | -| main.rs:1970:67:1972:5 | { ... } | T | main.rs:1970:50:1970:64 | ImplTraitTypeRepr | -| main.rs:1970:67:1972:5 | { ... } | T.T3 | main.rs:1970:24:1970:31 | T | -| main.rs:1970:67:1972:5 | { ... } | T.impl(T) | main.rs:1970:24:1970:31 | T | -| main.rs:1971:9:1971:19 | Some(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:1971:9:1971:19 | Some(...) | T | main.rs:1919:5:1919:22 | S3 | -| main.rs:1971:9:1971:19 | Some(...) | T | main.rs:1970:50:1970:64 | ImplTraitTypeRepr | -| main.rs:1971:9:1971:19 | Some(...) | T.T3 | main.rs:1970:24:1970:31 | T | -| main.rs:1971:9:1971:19 | Some(...) | T.impl(T) | main.rs:1970:24:1970:31 | T | -| main.rs:1971:14:1971:18 | S3(...) | | main.rs:1919:5:1919:22 | S3 | -| main.rs:1971:14:1971:18 | S3(...) | | main.rs:1970:50:1970:64 | ImplTraitTypeRepr | -| main.rs:1971:14:1971:18 | S3(...) | T3 | main.rs:1970:24:1970:31 | T | -| main.rs:1971:14:1971:18 | S3(...) | impl(T) | main.rs:1970:24:1970:31 | T | -| main.rs:1971:17:1971:17 | x | | main.rs:1970:24:1970:31 | T | -| main.rs:1974:34:1974:34 | x | | main.rs:1974:24:1974:31 | T | -| main.rs:1974:78:1976:5 | { ... } | | file://:0:0:0:0 | (T_2) | -| main.rs:1974:78:1976:5 | { ... } | 0(2) | main.rs:1919:5:1919:22 | S3 | -| main.rs:1974:78:1976:5 | { ... } | 0(2) | main.rs:1974:44:1974:58 | ImplTraitTypeRepr | -| main.rs:1974:78:1976:5 | { ... } | 0(2).T3 | main.rs:1974:24:1974:31 | T | -| main.rs:1974:78:1976:5 | { ... } | 0(2).impl(T) | main.rs:1974:24:1974:31 | T | -| main.rs:1974:78:1976:5 | { ... } | 1(2) | main.rs:1919:5:1919:22 | S3 | -| main.rs:1974:78:1976:5 | { ... } | 1(2) | main.rs:1974:61:1974:75 | ImplTraitTypeRepr | -| main.rs:1974:78:1976:5 | { ... } | 1(2).T3 | main.rs:1974:24:1974:31 | T | -| main.rs:1974:78:1976:5 | { ... } | 1(2).impl(T) | main.rs:1974:24:1974:31 | T | -| main.rs:1975:9:1975:30 | TupleExpr | | file://:0:0:0:0 | (T_2) | -| main.rs:1975:9:1975:30 | TupleExpr | 0(2) | main.rs:1919:5:1919:22 | S3 | -| main.rs:1975:9:1975:30 | TupleExpr | 0(2) | main.rs:1974:44:1974:58 | ImplTraitTypeRepr | -| main.rs:1975:9:1975:30 | TupleExpr | 0(2).T3 | main.rs:1974:24:1974:31 | T | -| main.rs:1975:9:1975:30 | TupleExpr | 0(2).impl(T) | main.rs:1974:24:1974:31 | T | -| main.rs:1975:9:1975:30 | TupleExpr | 1(2) | main.rs:1919:5:1919:22 | S3 | -| main.rs:1975:9:1975:30 | TupleExpr | 1(2) | main.rs:1974:61:1974:75 | ImplTraitTypeRepr | -| main.rs:1975:9:1975:30 | TupleExpr | 1(2).T3 | main.rs:1974:24:1974:31 | T | -| main.rs:1975:9:1975:30 | TupleExpr | 1(2).impl(T) | main.rs:1974:24:1974:31 | T | -| main.rs:1975:10:1975:22 | S3(...) | | main.rs:1919:5:1919:22 | S3 | -| main.rs:1975:10:1975:22 | S3(...) | | main.rs:1974:44:1974:58 | ImplTraitTypeRepr | -| main.rs:1975:10:1975:22 | S3(...) | T3 | main.rs:1974:24:1974:31 | T | -| main.rs:1975:10:1975:22 | S3(...) | impl(T) | main.rs:1974:24:1974:31 | T | -| main.rs:1975:13:1975:13 | x | | main.rs:1974:24:1974:31 | T | -| main.rs:1975:13:1975:21 | x.clone() | | main.rs:1974:24:1974:31 | T | -| main.rs:1975:25:1975:29 | S3(...) | | main.rs:1919:5:1919:22 | S3 | -| main.rs:1975:25:1975:29 | S3(...) | | main.rs:1974:61:1974:75 | ImplTraitTypeRepr | -| main.rs:1975:25:1975:29 | S3(...) | T3 | main.rs:1974:24:1974:31 | T | -| main.rs:1975:25:1975:29 | S3(...) | impl(T) | main.rs:1974:24:1974:31 | T | -| main.rs:1975:28:1975:28 | x | | main.rs:1974:24:1974:31 | T | -| main.rs:1978:26:1978:26 | t | | main.rs:1978:29:1978:43 | ImplTraitTypeRepr | -| main.rs:1978:51:1980:5 | { ... } | | main.rs:1978:23:1978:23 | A | -| main.rs:1979:9:1979:9 | t | | main.rs:1978:29:1978:43 | ImplTraitTypeRepr | -| main.rs:1979:9:1979:17 | t.get_a() | | main.rs:1978:23:1978:23 | A | -| main.rs:1983:13:1983:13 | x | | main.rs:1937:16:1937:35 | ImplTraitTypeRepr | -| main.rs:1983:17:1983:20 | f1(...) | | main.rs:1937:16:1937:35 | ImplTraitTypeRepr | -| main.rs:1984:9:1984:9 | x | | main.rs:1937:16:1937:35 | ImplTraitTypeRepr | -| main.rs:1985:9:1985:9 | x | | main.rs:1937:16:1937:35 | ImplTraitTypeRepr | -| main.rs:1986:13:1986:13 | a | | main.rs:1958:28:1958:43 | ImplTraitTypeRepr | -| main.rs:1986:17:1986:32 | get_a_my_trait(...) | | main.rs:1958:28:1958:43 | ImplTraitTypeRepr | -| main.rs:1987:13:1987:13 | b | | main.rs:1918:5:1918:14 | S2 | -| main.rs:1987:17:1987:33 | uses_my_trait1(...) | | main.rs:1918:5:1918:14 | S2 | -| main.rs:1987:32:1987:32 | a | | main.rs:1958:28:1958:43 | ImplTraitTypeRepr | -| main.rs:1988:13:1988:13 | a | | main.rs:1958:28:1958:43 | ImplTraitTypeRepr | -| main.rs:1988:17:1988:32 | get_a_my_trait(...) | | main.rs:1958:28:1958:43 | ImplTraitTypeRepr | -| main.rs:1989:13:1989:13 | c | | main.rs:1918:5:1918:14 | S2 | -| main.rs:1989:17:1989:33 | uses_my_trait2(...) | | main.rs:1918:5:1918:14 | S2 | -| main.rs:1989:32:1989:32 | a | | main.rs:1958:28:1958:43 | ImplTraitTypeRepr | -| main.rs:1990:13:1990:13 | d | | main.rs:1918:5:1918:14 | S2 | -| main.rs:1990:17:1990:34 | uses_my_trait2(...) | | main.rs:1918:5:1918:14 | S2 | -| main.rs:1990:32:1990:33 | S1 | | main.rs:1916:5:1917:14 | S1 | -| main.rs:1991:13:1991:13 | e | | main.rs:1916:5:1917:14 | S1 | -| main.rs:1991:17:1991:35 | get_a_my_trait2(...) | | main.rs:1966:43:1966:57 | ImplTraitTypeRepr | -| main.rs:1991:17:1991:35 | get_a_my_trait2(...) | impl(T) | main.rs:1916:5:1917:14 | S1 | -| main.rs:1991:17:1991:43 | ... .get_a() | | main.rs:1916:5:1917:14 | S1 | -| main.rs:1991:33:1991:34 | S1 | | main.rs:1916:5:1917:14 | S1 | -| main.rs:1993:13:1993:13 | f | | main.rs:1916:5:1917:14 | S1 | -| main.rs:1993:17:1993:35 | get_a_my_trait3(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:1993:17:1993:35 | get_a_my_trait3(...) | T | main.rs:1970:50:1970:64 | ImplTraitTypeRepr | -| main.rs:1993:17:1993:35 | get_a_my_trait3(...) | T.impl(T) | main.rs:1916:5:1917:14 | S1 | -| main.rs:1993:17:1993:44 | ... .unwrap() | | main.rs:1970:50:1970:64 | ImplTraitTypeRepr | -| main.rs:1993:17:1993:44 | ... .unwrap() | impl(T) | main.rs:1916:5:1917:14 | S1 | -| main.rs:1993:17:1993:52 | ... .get_a() | | main.rs:1916:5:1917:14 | S1 | -| main.rs:1993:33:1993:34 | S1 | | main.rs:1916:5:1917:14 | S1 | -| main.rs:1994:13:1994:13 | g | | main.rs:1916:5:1917:14 | S1 | -| main.rs:1994:17:1994:35 | get_a_my_trait4(...) | | file://:0:0:0:0 | (T_2) | -| main.rs:1994:17:1994:35 | get_a_my_trait4(...) | 0(2) | main.rs:1974:44:1974:58 | ImplTraitTypeRepr | -| main.rs:1994:17:1994:35 | get_a_my_trait4(...) | 0(2).impl(T) | main.rs:1916:5:1917:14 | S1 | -| main.rs:1994:17:1994:35 | get_a_my_trait4(...) | 1(2) | main.rs:1974:61:1974:75 | ImplTraitTypeRepr | -| main.rs:1994:17:1994:35 | get_a_my_trait4(...) | 1(2).impl(T) | main.rs:1916:5:1917:14 | S1 | -| main.rs:1994:17:1994:37 | ... .0 | | main.rs:1974:44:1974:58 | ImplTraitTypeRepr | -| main.rs:1994:17:1994:37 | ... .0 | impl(T) | main.rs:1916:5:1917:14 | S1 | -| main.rs:1994:17:1994:45 | ... .get_a() | | main.rs:1916:5:1917:14 | S1 | -| main.rs:1994:33:1994:34 | S1 | | main.rs:1916:5:1917:14 | S1 | -| main.rs:2005:16:2005:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2005:16:2005:20 | SelfParam | &T | main.rs:2001:5:2002:13 | S | -| main.rs:2005:31:2007:9 | { ... } | | main.rs:2001:5:2002:13 | S | -| main.rs:2006:13:2006:13 | S | | main.rs:2001:5:2002:13 | S | -| main.rs:2016:26:2018:9 | { ... } | | main.rs:2010:5:2013:5 | MyVec | -| main.rs:2016:26:2018:9 | { ... } | T | main.rs:2015:10:2015:10 | T | -| main.rs:2017:13:2017:38 | MyVec {...} | | main.rs:2010:5:2013:5 | MyVec | -| main.rs:2017:13:2017:38 | MyVec {...} | T | main.rs:2015:10:2015:10 | T | -| main.rs:2017:27:2017:36 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2017:27:2017:36 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2017:27:2017:36 | ...::new(...) | T | main.rs:2015:10:2015:10 | T | -| main.rs:2020:17:2020:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2020:17:2020:25 | SelfParam | &T | main.rs:2010:5:2013:5 | MyVec | -| main.rs:2020:17:2020:25 | SelfParam | &T.T | main.rs:2015:10:2015:10 | T | -| main.rs:2020:28:2020:32 | value | | main.rs:2015:10:2015:10 | T | -| main.rs:2021:13:2021:16 | self | | file://:0:0:0:0 | & | -| main.rs:2021:13:2021:16 | self | &T | main.rs:2010:5:2013:5 | MyVec | -| main.rs:2021:13:2021:16 | self | &T.T | main.rs:2015:10:2015:10 | T | -| main.rs:2021:13:2021:21 | self.data | | {EXTERNAL LOCATION} | Vec | -| main.rs:2021:13:2021:21 | self.data | A | {EXTERNAL LOCATION} | Global | -| main.rs:2021:13:2021:21 | self.data | T | main.rs:2015:10:2015:10 | T | -| main.rs:2021:28:2021:32 | value | | main.rs:2015:10:2015:10 | T | -| main.rs:2029:18:2029:22 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2029:18:2029:22 | SelfParam | &T | main.rs:2010:5:2013:5 | MyVec | -| main.rs:2029:18:2029:22 | SelfParam | &T.T | main.rs:2025:10:2025:10 | T | -| main.rs:2029:25:2029:29 | index | | {EXTERNAL LOCATION} | usize | -| main.rs:2029:56:2031:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:2029:56:2031:9 | { ... } | &T | main.rs:2025:10:2025:10 | T | -| main.rs:2030:13:2030:29 | &... | | file://:0:0:0:0 | & | -| main.rs:2030:13:2030:29 | &... | &T | main.rs:2025:10:2025:10 | T | -| main.rs:2030:14:2030:17 | self | | file://:0:0:0:0 | & | -| main.rs:2030:14:2030:17 | self | &T | main.rs:2010:5:2013:5 | MyVec | -| main.rs:2030:14:2030:17 | self | &T.T | main.rs:2025:10:2025:10 | T | -| main.rs:2030:14:2030:22 | self.data | | {EXTERNAL LOCATION} | Vec | -| main.rs:2030:14:2030:22 | self.data | A | {EXTERNAL LOCATION} | Global | -| main.rs:2030:14:2030:22 | self.data | T | main.rs:2025:10:2025:10 | T | -| main.rs:2030:14:2030:29 | ...[index] | | main.rs:2025:10:2025:10 | T | -| main.rs:2030:24:2030:28 | index | | {EXTERNAL LOCATION} | usize | -| main.rs:2034:22:2034:26 | slice | | file://:0:0:0:0 | & | -| main.rs:2034:22:2034:26 | slice | | file://:0:0:0:0 | [] | -| main.rs:2034:22:2034:26 | slice | &T | file://:0:0:0:0 | [] | -| main.rs:2034:22:2034:26 | slice | &T.[T] | main.rs:2001:5:2002:13 | S | -| main.rs:2041:13:2041:13 | x | | main.rs:2001:5:2002:13 | S | -| main.rs:2041:17:2041:21 | slice | | file://:0:0:0:0 | & | -| main.rs:2041:17:2041:21 | slice | | file://:0:0:0:0 | [] | -| main.rs:2041:17:2041:21 | slice | &T | file://:0:0:0:0 | [] | -| main.rs:2041:17:2041:21 | slice | &T.[T] | main.rs:2001:5:2002:13 | S | -| main.rs:2041:17:2041:24 | slice[0] | | main.rs:2001:5:2002:13 | S | -| main.rs:2041:17:2041:30 | ... .foo() | | main.rs:2001:5:2002:13 | S | -| main.rs:2041:23:2041:23 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2045:17:2045:19 | vec | | main.rs:2010:5:2013:5 | MyVec | -| main.rs:2045:17:2045:19 | vec | T | main.rs:2001:5:2002:13 | S | -| main.rs:2045:23:2045:34 | ...::new(...) | | main.rs:2010:5:2013:5 | MyVec | -| main.rs:2045:23:2045:34 | ...::new(...) | T | main.rs:2001:5:2002:13 | S | -| main.rs:2046:9:2046:11 | vec | | main.rs:2010:5:2013:5 | MyVec | -| main.rs:2046:9:2046:11 | vec | T | main.rs:2001:5:2002:13 | S | -| main.rs:2046:18:2046:18 | S | | main.rs:2001:5:2002:13 | S | -| main.rs:2047:9:2047:11 | vec | | main.rs:2010:5:2013:5 | MyVec | -| main.rs:2047:9:2047:11 | vec | T | main.rs:2001:5:2002:13 | S | -| main.rs:2047:9:2047:14 | vec[0] | | main.rs:2001:5:2002:13 | S | -| main.rs:2047:9:2047:20 | ... .foo() | | main.rs:2001:5:2002:13 | S | -| main.rs:2047:13:2047:13 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2047:13:2047:13 | 0 | | {EXTERNAL LOCATION} | usize | -| main.rs:2049:13:2049:14 | xs | | file://:0:0:0:0 | [] | -| main.rs:2049:13:2049:14 | xs | | file://:0:0:0:0 | [] | -| main.rs:2049:13:2049:14 | xs | [T;...] | main.rs:2001:5:2002:13 | S | -| main.rs:2049:13:2049:14 | xs | [T] | main.rs:2001:5:2002:13 | S | -| main.rs:2049:21:2049:21 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2049:26:2049:28 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2049:26:2049:28 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2049:26:2049:28 | [...] | [T;...] | main.rs:2001:5:2002:13 | S | -| main.rs:2049:26:2049:28 | [...] | [T] | main.rs:2001:5:2002:13 | S | -| main.rs:2049:27:2049:27 | S | | main.rs:2001:5:2002:13 | S | -| main.rs:2050:13:2050:13 | x | | main.rs:2001:5:2002:13 | S | -| main.rs:2050:17:2050:18 | xs | | file://:0:0:0:0 | [] | -| main.rs:2050:17:2050:18 | xs | | file://:0:0:0:0 | [] | -| main.rs:2050:17:2050:18 | xs | [T;...] | main.rs:2001:5:2002:13 | S | -| main.rs:2050:17:2050:18 | xs | [T] | main.rs:2001:5:2002:13 | S | -| main.rs:2050:17:2050:21 | xs[0] | | main.rs:2001:5:2002:13 | S | -| main.rs:2050:17:2050:27 | ... .foo() | | main.rs:2001:5:2002:13 | S | -| main.rs:2050:20:2050:20 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2052:23:2052:25 | &xs | | file://:0:0:0:0 | & | -| main.rs:2052:23:2052:25 | &xs | &T | file://:0:0:0:0 | [] | -| main.rs:2052:23:2052:25 | &xs | &T | file://:0:0:0:0 | [] | -| main.rs:2052:23:2052:25 | &xs | &T.[T;...] | main.rs:2001:5:2002:13 | S | -| main.rs:2052:23:2052:25 | &xs | &T.[T] | main.rs:2001:5:2002:13 | S | -| main.rs:2052:24:2052:25 | xs | | file://:0:0:0:0 | [] | -| main.rs:2052:24:2052:25 | xs | | file://:0:0:0:0 | [] | -| main.rs:2052:24:2052:25 | xs | [T;...] | main.rs:2001:5:2002:13 | S | -| main.rs:2052:24:2052:25 | xs | [T] | main.rs:2001:5:2002:13 | S | -| main.rs:2058:13:2058:13 | x | | {EXTERNAL LOCATION} | String | -| main.rs:2058:17:2058:46 | MacroExpr | | {EXTERNAL LOCATION} | String | -| main.rs:2058:25:2058:35 | "Hello, {}" | | file://:0:0:0:0 | & | -| main.rs:2058:25:2058:35 | "Hello, {}" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2058:25:2058:45 | ...::format(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2058:25:2058:45 | ...::must_use(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2058:25:2058:45 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2058:25:2058:45 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2058:25:2058:45 | { ... } | | {EXTERNAL LOCATION} | String | -| main.rs:2058:38:2058:45 | "World!" | | file://:0:0:0:0 | & | -| main.rs:2058:38:2058:45 | "World!" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2067:19:2067:22 | SelfParam | | main.rs:2063:5:2068:5 | Self [trait MyAdd] | -| main.rs:2067:25:2067:27 | rhs | | main.rs:2063:17:2063:26 | Rhs | -| main.rs:2074:19:2074:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | -| main.rs:2074:25:2074:29 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2074:45:2076:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2075:13:2075:17 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2083:19:2083:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | -| main.rs:2083:25:2083:29 | value | | file://:0:0:0:0 | & | -| main.rs:2083:25:2083:29 | value | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:2083:46:2085:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2084:13:2084:18 | * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2084:14:2084:18 | value | | file://:0:0:0:0 | & | -| main.rs:2084:14:2084:18 | value | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:2092:19:2092:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | -| main.rs:2092:25:2092:29 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2092:46:2098:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2092:46:2098:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2093:13:2097:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | -| main.rs:2093:13:2097:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | -| main.rs:2093:16:2093:20 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2093:22:2095:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2093:22:2095:13 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2094:17:2094:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2094:17:2094:17 | 1 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2095:20:2097:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2095:20:2097:13 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2096:17:2096:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2096:17:2096:17 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2107:19:2107:22 | SelfParam | | main.rs:2101:5:2101:19 | S | -| main.rs:2107:19:2107:22 | SelfParam | T | main.rs:2103:10:2103:17 | T | -| main.rs:2107:25:2107:29 | other | | main.rs:2101:5:2101:19 | S | -| main.rs:2107:25:2107:29 | other | T | main.rs:2063:5:2068:5 | Self [trait MyAdd] | -| main.rs:2107:25:2107:29 | other | T | main.rs:2103:10:2103:17 | T | -| main.rs:2107:54:2109:9 | { ... } | | main.rs:2101:5:2101:19 | S | -| main.rs:2107:54:2109:9 | { ... } | T | main.rs:2064:9:2064:20 | Output | -| main.rs:2108:13:2108:39 | S(...) | | main.rs:2101:5:2101:19 | S | -| main.rs:2108:13:2108:39 | S(...) | T | main.rs:2064:9:2064:20 | Output | -| main.rs:2108:15:2108:22 | (...) | | main.rs:2103:10:2103:17 | T | -| main.rs:2108:15:2108:38 | ... .my_add(...) | | main.rs:2064:9:2064:20 | Output | -| main.rs:2108:16:2108:19 | self | | main.rs:2101:5:2101:19 | S | -| main.rs:2108:16:2108:19 | self | T | main.rs:2103:10:2103:17 | T | -| main.rs:2108:16:2108:21 | self.0 | | main.rs:2103:10:2103:17 | T | -| main.rs:2108:31:2108:35 | other | | main.rs:2101:5:2101:19 | S | -| main.rs:2108:31:2108:35 | other | T | main.rs:2063:5:2068:5 | Self [trait MyAdd] | -| main.rs:2108:31:2108:35 | other | T | main.rs:2103:10:2103:17 | T | -| main.rs:2108:31:2108:37 | other.0 | | main.rs:2063:5:2068:5 | Self [trait MyAdd] | -| main.rs:2108:31:2108:37 | other.0 | | main.rs:2103:10:2103:17 | T | -| main.rs:2116:19:2116:22 | SelfParam | | main.rs:2101:5:2101:19 | S | -| main.rs:2116:19:2116:22 | SelfParam | T | main.rs:2112:10:2112:17 | T | -| main.rs:2116:25:2116:29 | other | | main.rs:2063:5:2068:5 | Self [trait MyAdd] | -| main.rs:2116:25:2116:29 | other | | main.rs:2112:10:2112:17 | T | -| main.rs:2116:51:2118:9 | { ... } | | main.rs:2101:5:2101:19 | S | -| main.rs:2116:51:2118:9 | { ... } | T | main.rs:2064:9:2064:20 | Output | -| main.rs:2117:13:2117:37 | S(...) | | main.rs:2101:5:2101:19 | S | -| main.rs:2117:13:2117:37 | S(...) | T | main.rs:2064:9:2064:20 | Output | -| main.rs:2117:15:2117:22 | (...) | | main.rs:2112:10:2112:17 | T | -| main.rs:2117:15:2117:36 | ... .my_add(...) | | main.rs:2064:9:2064:20 | Output | -| main.rs:2117:16:2117:19 | self | | main.rs:2101:5:2101:19 | S | -| main.rs:2117:16:2117:19 | self | T | main.rs:2112:10:2112:17 | T | -| main.rs:2117:16:2117:21 | self.0 | | main.rs:2112:10:2112:17 | T | -| main.rs:2117:31:2117:35 | other | | main.rs:2063:5:2068:5 | Self [trait MyAdd] | -| main.rs:2117:31:2117:35 | other | | main.rs:2112:10:2112:17 | T | -| main.rs:2128:19:2128:22 | SelfParam | | main.rs:2101:5:2101:19 | S | -| main.rs:2128:19:2128:22 | SelfParam | T | main.rs:2121:14:2121:14 | T | -| main.rs:2128:25:2128:29 | other | | file://:0:0:0:0 | & | -| main.rs:2128:25:2128:29 | other | &T | main.rs:2121:14:2121:14 | T | -| main.rs:2128:55:2130:9 | { ... } | | main.rs:2101:5:2101:19 | S | -| main.rs:2129:13:2129:37 | S(...) | | main.rs:2101:5:2101:19 | S | -| main.rs:2129:15:2129:22 | (...) | | main.rs:2121:14:2121:14 | T | -| main.rs:2129:16:2129:19 | self | | main.rs:2101:5:2101:19 | S | -| main.rs:2129:16:2129:19 | self | T | main.rs:2121:14:2121:14 | T | -| main.rs:2129:16:2129:21 | self.0 | | main.rs:2121:14:2121:14 | T | -| main.rs:2129:31:2129:35 | other | | file://:0:0:0:0 | & | -| main.rs:2129:31:2129:35 | other | &T | main.rs:2121:14:2121:14 | T | -| main.rs:2135:20:2135:24 | value | | main.rs:2133:18:2133:18 | T | -| main.rs:2140:20:2140:24 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2140:40:2142:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2141:13:2141:17 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2147:20:2147:24 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2147:41:2153:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2147:41:2153:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2148:13:2152:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | -| main.rs:2148:13:2152:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | -| main.rs:2148:16:2148:20 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2148:22:2150:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2148:22:2150:13 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2149:17:2149:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2149:17:2149:17 | 1 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2150:20:2152:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2150:20:2152:13 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2151:17:2151:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2151:17:2151:17 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2158:21:2158:25 | value | | main.rs:2156:19:2156:19 | T | -| main.rs:2158:31:2158:31 | x | | main.rs:2156:5:2159:5 | Self [trait MyFrom2] | -| main.rs:2163:21:2163:25 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2163:33:2163:33 | _ | | {EXTERNAL LOCATION} | i64 | -| main.rs:2163:48:2165:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2164:13:2164:17 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2170:21:2170:25 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2170:34:2170:34 | _ | | {EXTERNAL LOCATION} | i64 | -| main.rs:2170:49:2176:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2171:13:2175:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | -| main.rs:2171:16:2171:20 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2171:22:2173:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2172:17:2172:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2173:20:2175:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2174:17:2174:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2181:15:2181:15 | x | | main.rs:2179:5:2185:5 | Self [trait MySelfTrait] | -| main.rs:2184:15:2184:15 | x | | main.rs:2179:5:2185:5 | Self [trait MySelfTrait] | -| main.rs:2189:15:2189:15 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2189:31:2191:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2190:13:2190:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2190:13:2190:17 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2190:17:2190:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2194:15:2194:15 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2194:32:2196:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2195:13:2195:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2195:13:2195:17 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2195:17:2195:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2201:15:2201:15 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:2201:31:2203:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2201:31:2203:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2202:13:2202:13 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2202:13:2202:13 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2206:15:2206:15 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:2206:32:2208:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:2207:13:2207:13 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:2212:13:2212:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2212:13:2212:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2212:22:2212:23 | 73 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2212:22:2212:23 | 73 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2213:9:2213:9 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2213:9:2213:9 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2213:9:2213:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2213:18:2213:21 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2214:9:2214:9 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2214:9:2214:9 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2214:9:2214:23 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2214:18:2214:22 | &5i64 | | file://:0:0:0:0 | & | -| main.rs:2214:18:2214:22 | &5i64 | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:2214:19:2214:22 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2215:9:2215:9 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2215:9:2215:9 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2215:9:2215:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2215:18:2215:21 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2217:9:2217:15 | S(...) | | main.rs:2101:5:2101:19 | S | -| main.rs:2217:9:2217:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | -| main.rs:2217:9:2217:31 | ... .my_add(...) | | main.rs:2101:5:2101:19 | S | -| main.rs:2217:11:2217:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2217:24:2217:30 | S(...) | | main.rs:2101:5:2101:19 | S | -| main.rs:2217:24:2217:30 | S(...) | T | {EXTERNAL LOCATION} | i64 | -| main.rs:2217:26:2217:29 | 2i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2218:9:2218:15 | S(...) | | main.rs:2101:5:2101:19 | S | -| main.rs:2218:9:2218:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | -| main.rs:2218:11:2218:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2218:24:2218:27 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2219:9:2219:15 | S(...) | | main.rs:2101:5:2101:19 | S | -| main.rs:2219:9:2219:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | -| main.rs:2219:9:2219:29 | ... .my_add(...) | | main.rs:2101:5:2101:19 | S | -| main.rs:2219:11:2219:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2219:24:2219:28 | &3i64 | | file://:0:0:0:0 | & | -| main.rs:2219:24:2219:28 | &3i64 | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:2219:25:2219:28 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2221:13:2221:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2221:17:2221:35 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2221:30:2221:34 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2222:13:2222:13 | y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2222:17:2222:34 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2222:30:2222:33 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2223:13:2223:13 | z | | {EXTERNAL LOCATION} | i64 | -| main.rs:2223:22:2223:43 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2223:38:2223:42 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2224:9:2224:34 | ...::my_from2(...) | | file://:0:0:0:0 | () | -| main.rs:2224:23:2224:27 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2224:30:2224:33 | 0i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2225:9:2225:33 | ...::my_from2(...) | | file://:0:0:0:0 | () | -| main.rs:2225:23:2225:26 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2225:29:2225:32 | 0i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2226:9:2226:38 | ...::my_from2(...) | | file://:0:0:0:0 | () | -| main.rs:2226:27:2226:31 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2226:34:2226:37 | 0i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2228:9:2228:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2228:17:2228:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2229:9:2229:22 | ...::f2(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2229:17:2229:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2230:9:2230:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2230:18:2230:21 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2231:9:2231:22 | ...::f2(...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2231:18:2231:21 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2232:9:2232:30 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2232:25:2232:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2233:9:2233:30 | ...::f2(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2233:25:2233:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2234:9:2234:29 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2234:25:2234:28 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2235:9:2235:29 | ...::f2(...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2235:25:2235:28 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2243:26:2245:9 | { ... } | | main.rs:2240:5:2240:24 | MyCallable | -| main.rs:2244:13:2244:25 | MyCallable {...} | | main.rs:2240:5:2240:24 | MyCallable | -| main.rs:2247:17:2247:21 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2247:17:2247:21 | SelfParam | &T | main.rs:2240:5:2240:24 | MyCallable | -| main.rs:2247:31:2249:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2247:31:2249:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2248:13:2248:13 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2248:13:2248:13 | 1 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2255:13:2255:13 | i | | {EXTERNAL LOCATION} | i32 | -| main.rs:2255:18:2255:26 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2255:18:2255:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2255:19:2255:19 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2255:22:2255:22 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2255:25:2255:25 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2256:18:2256:26 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2256:18:2256:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2256:18:2256:41 | ... .map(...) | | file://:0:0:0:0 | [] | -| main.rs:2256:19:2256:19 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2256:22:2256:22 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2256:25:2256:25 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2256:32:2256:40 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | -| main.rs:2256:32:2256:40 | \|...\| ... | dyn(Args) | file://:0:0:0:0 | (T_1) | -| main.rs:2256:40:2256:40 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2257:13:2257:13 | i | | {EXTERNAL LOCATION} | Item | -| main.rs:2257:13:2257:13 | i | | {EXTERNAL LOCATION} | i32 | -| main.rs:2257:18:2257:26 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2257:18:2257:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2257:18:2257:38 | ... .into_iter() | | {EXTERNAL LOCATION} | IntoIter | -| main.rs:2257:18:2257:38 | ... .into_iter() | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2257:19:2257:19 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2257:22:2257:22 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2257:25:2257:25 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2259:13:2259:17 | vals1 | | file://:0:0:0:0 | [] | -| main.rs:2259:13:2259:17 | vals1 | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2259:13:2259:17 | vals1 | [T;...] | {EXTERNAL LOCATION} | u8 | -| main.rs:2259:21:2259:31 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2259:21:2259:31 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2259:21:2259:31 | [...] | [T;...] | {EXTERNAL LOCATION} | u8 | -| main.rs:2259:22:2259:24 | 1u8 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2259:22:2259:24 | 1u8 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2259:27:2259:27 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2259:27:2259:27 | 2 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2259:30:2259:30 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2259:30:2259:30 | 3 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2260:13:2260:13 | u | | {EXTERNAL LOCATION} | i32 | -| main.rs:2260:13:2260:13 | u | | {EXTERNAL LOCATION} | u8 | -| main.rs:2260:18:2260:22 | vals1 | | file://:0:0:0:0 | [] | -| main.rs:2260:18:2260:22 | vals1 | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2260:18:2260:22 | vals1 | [T;...] | {EXTERNAL LOCATION} | u8 | -| main.rs:2262:13:2262:17 | vals2 | | file://:0:0:0:0 | [] | -| main.rs:2262:13:2262:17 | vals2 | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2262:21:2262:29 | [1u16; 3] | | file://:0:0:0:0 | [] | -| main.rs:2262:21:2262:29 | [1u16; 3] | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2262:22:2262:25 | 1u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2262:28:2262:28 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2263:13:2263:13 | u | | {EXTERNAL LOCATION} | u16 | -| main.rs:2263:18:2263:22 | vals2 | | file://:0:0:0:0 | [] | -| main.rs:2263:18:2263:22 | vals2 | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2265:13:2265:17 | vals3 | | file://:0:0:0:0 | [] | -| main.rs:2265:13:2265:17 | vals3 | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2265:13:2265:17 | vals3 | [T;...] | {EXTERNAL LOCATION} | u32 | -| main.rs:2265:26:2265:26 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2265:31:2265:39 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2265:31:2265:39 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2265:31:2265:39 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | -| main.rs:2265:32:2265:32 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2265:32:2265:32 | 1 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2265:35:2265:35 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2265:35:2265:35 | 2 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2265:38:2265:38 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2265:38:2265:38 | 3 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2266:13:2266:13 | u | | {EXTERNAL LOCATION} | i32 | -| main.rs:2266:13:2266:13 | u | | {EXTERNAL LOCATION} | u32 | -| main.rs:2266:18:2266:22 | vals3 | | file://:0:0:0:0 | [] | -| main.rs:2266:18:2266:22 | vals3 | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2266:18:2266:22 | vals3 | [T;...] | {EXTERNAL LOCATION} | u32 | -| main.rs:2268:13:2268:17 | vals4 | | file://:0:0:0:0 | [] | -| main.rs:2268:13:2268:17 | vals4 | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2268:13:2268:17 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | -| main.rs:2268:26:2268:26 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2268:31:2268:36 | [1; 3] | | file://:0:0:0:0 | [] | -| main.rs:2268:31:2268:36 | [1; 3] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2268:31:2268:36 | [1; 3] | [T;...] | {EXTERNAL LOCATION} | u64 | -| main.rs:2268:32:2268:32 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2268:32:2268:32 | 1 | | {EXTERNAL LOCATION} | u64 | -| main.rs:2268:35:2268:35 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2269:13:2269:13 | u | | {EXTERNAL LOCATION} | i32 | -| main.rs:2269:13:2269:13 | u | | {EXTERNAL LOCATION} | u64 | -| main.rs:2269:18:2269:22 | vals4 | | file://:0:0:0:0 | [] | -| main.rs:2269:18:2269:22 | vals4 | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2269:18:2269:22 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | -| main.rs:2271:17:2271:24 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2271:17:2271:24 | strings1 | [T;...] | file://:0:0:0:0 | & | -| main.rs:2271:17:2271:24 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2271:28:2271:48 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2271:28:2271:48 | [...] | [T;...] | file://:0:0:0:0 | & | -| main.rs:2271:28:2271:48 | [...] | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2271:29:2271:33 | "foo" | | file://:0:0:0:0 | & | -| main.rs:2271:29:2271:33 | "foo" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2271:36:2271:40 | "bar" | | file://:0:0:0:0 | & | -| main.rs:2271:36:2271:40 | "bar" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2271:43:2271:47 | "baz" | | file://:0:0:0:0 | & | -| main.rs:2271:43:2271:47 | "baz" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2272:13:2272:13 | s | | {EXTERNAL LOCATION} | Item | -| main.rs:2272:13:2272:13 | s | | file://:0:0:0:0 | & | -| main.rs:2272:13:2272:13 | s | &T | file://:0:0:0:0 | & | -| main.rs:2272:13:2272:13 | s | &T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2272:18:2272:26 | &strings1 | | file://:0:0:0:0 | & | -| main.rs:2272:18:2272:26 | &strings1 | &T | file://:0:0:0:0 | [] | -| main.rs:2272:18:2272:26 | &strings1 | &T.[T;...] | file://:0:0:0:0 | & | -| main.rs:2272:18:2272:26 | &strings1 | &T.[T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2272:19:2272:26 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2272:19:2272:26 | strings1 | [T;...] | file://:0:0:0:0 | & | -| main.rs:2272:19:2272:26 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2273:13:2273:13 | s | | {EXTERNAL LOCATION} | Item | -| main.rs:2273:13:2273:13 | s | | file://:0:0:0:0 | & | -| main.rs:2273:13:2273:13 | s | &T | file://:0:0:0:0 | & | -| main.rs:2273:13:2273:13 | s | &T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2273:18:2273:30 | &mut strings1 | | file://:0:0:0:0 | & | -| main.rs:2273:18:2273:30 | &mut strings1 | &T | file://:0:0:0:0 | [] | -| main.rs:2273:18:2273:30 | &mut strings1 | &T.[T;...] | file://:0:0:0:0 | & | -| main.rs:2273:18:2273:30 | &mut strings1 | &T.[T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2273:23:2273:30 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2273:23:2273:30 | strings1 | [T;...] | file://:0:0:0:0 | & | -| main.rs:2273:23:2273:30 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2274:13:2274:13 | s | | file://:0:0:0:0 | & | -| main.rs:2274:13:2274:13 | s | &T | {EXTERNAL LOCATION} | str | -| main.rs:2274:18:2274:25 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2274:18:2274:25 | strings1 | [T;...] | file://:0:0:0:0 | & | -| main.rs:2274:18:2274:25 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2276:13:2276:20 | strings2 | | file://:0:0:0:0 | [] | -| main.rs:2276:13:2276:20 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2277:9:2281:9 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2277:9:2281:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2278:13:2278:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2278:26:2278:30 | "foo" | | file://:0:0:0:0 | & | -| main.rs:2278:26:2278:30 | "foo" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2279:13:2279:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2279:26:2279:30 | "bar" | | file://:0:0:0:0 | & | -| main.rs:2279:26:2279:30 | "bar" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2280:13:2280:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2280:26:2280:30 | "baz" | | file://:0:0:0:0 | & | -| main.rs:2280:26:2280:30 | "baz" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2282:13:2282:13 | s | | {EXTERNAL LOCATION} | String | -| main.rs:2282:18:2282:25 | strings2 | | file://:0:0:0:0 | [] | -| main.rs:2282:18:2282:25 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2284:13:2284:20 | strings3 | | file://:0:0:0:0 | & | -| main.rs:2284:13:2284:20 | strings3 | &T | file://:0:0:0:0 | [] | -| main.rs:2284:13:2284:20 | strings3 | &T.[T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2285:9:2289:9 | &... | | file://:0:0:0:0 | & | -| main.rs:2285:9:2289:9 | &... | &T | file://:0:0:0:0 | [] | -| main.rs:2285:9:2289:9 | &... | &T.[T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2285:10:2289:9 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2285:10:2289:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2286:13:2286:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2286:26:2286:30 | "foo" | | file://:0:0:0:0 | & | -| main.rs:2286:26:2286:30 | "foo" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2287:13:2287:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2287:26:2287:30 | "bar" | | file://:0:0:0:0 | & | -| main.rs:2287:26:2287:30 | "bar" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2288:13:2288:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2288:26:2288:30 | "baz" | | file://:0:0:0:0 | & | -| main.rs:2288:26:2288:30 | "baz" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2290:13:2290:13 | s | | {EXTERNAL LOCATION} | Item | -| main.rs:2290:13:2290:13 | s | | file://:0:0:0:0 | & | -| main.rs:2290:13:2290:13 | s | &T | {EXTERNAL LOCATION} | String | -| main.rs:2290:18:2290:25 | strings3 | | file://:0:0:0:0 | & | -| main.rs:2290:18:2290:25 | strings3 | &T | file://:0:0:0:0 | [] | -| main.rs:2290:18:2290:25 | strings3 | &T.[T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2292:13:2292:21 | callables | | file://:0:0:0:0 | [] | -| main.rs:2292:13:2292:21 | callables | [T;...] | main.rs:2240:5:2240:24 | MyCallable | -| main.rs:2292:25:2292:81 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2292:25:2292:81 | [...] | [T;...] | main.rs:2240:5:2240:24 | MyCallable | -| main.rs:2292:26:2292:42 | ...::new(...) | | main.rs:2240:5:2240:24 | MyCallable | -| main.rs:2292:45:2292:61 | ...::new(...) | | main.rs:2240:5:2240:24 | MyCallable | -| main.rs:2292:64:2292:80 | ...::new(...) | | main.rs:2240:5:2240:24 | MyCallable | -| main.rs:2293:13:2293:13 | c | | main.rs:2240:5:2240:24 | MyCallable | -| main.rs:2294:12:2294:20 | callables | | file://:0:0:0:0 | [] | -| main.rs:2294:12:2294:20 | callables | [T;...] | main.rs:2240:5:2240:24 | MyCallable | -| main.rs:2296:17:2296:22 | result | | {EXTERNAL LOCATION} | i64 | -| main.rs:2296:26:2296:26 | c | | main.rs:2240:5:2240:24 | MyCallable | -| main.rs:2296:26:2296:33 | c.call() | | {EXTERNAL LOCATION} | i64 | -| main.rs:2301:13:2301:13 | i | | {EXTERNAL LOCATION} | Item | -| main.rs:2301:13:2301:13 | i | | {EXTERNAL LOCATION} | i32 | -| main.rs:2301:18:2301:18 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2301:18:2301:22 | 0..10 | | {EXTERNAL LOCATION} | Range | -| main.rs:2301:18:2301:22 | 0..10 | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2301:21:2301:22 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2302:13:2302:13 | u | | {EXTERNAL LOCATION} | Range | -| main.rs:2302:13:2302:13 | u | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2302:13:2302:13 | u | Idx | {EXTERNAL LOCATION} | u8 | -| main.rs:2302:18:2302:26 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2302:18:2302:26 | [...] | [T;...] | {EXTERNAL LOCATION} | Range | -| main.rs:2302:18:2302:26 | [...] | [T;...].Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2302:18:2302:26 | [...] | [T;...].Idx | {EXTERNAL LOCATION} | u8 | -| main.rs:2302:19:2302:21 | 0u8 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2302:19:2302:21 | 0u8 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2302:19:2302:25 | 0u8..10 | | {EXTERNAL LOCATION} | Range | -| main.rs:2302:19:2302:25 | 0u8..10 | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2302:19:2302:25 | 0u8..10 | Idx | {EXTERNAL LOCATION} | u8 | -| main.rs:2302:24:2302:25 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2302:24:2302:25 | 10 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2303:13:2303:17 | range | | {EXTERNAL LOCATION} | Range | -| main.rs:2303:13:2303:17 | range | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2303:21:2303:21 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2303:21:2303:25 | 0..10 | | {EXTERNAL LOCATION} | Range | -| main.rs:2303:21:2303:25 | 0..10 | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2303:24:2303:25 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2304:13:2304:13 | i | | {EXTERNAL LOCATION} | Item | -| main.rs:2304:13:2304:13 | i | | {EXTERNAL LOCATION} | i32 | -| main.rs:2304:18:2304:22 | range | | {EXTERNAL LOCATION} | Range | -| main.rs:2304:18:2304:22 | range | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2306:13:2306:18 | range1 | | {EXTERNAL LOCATION} | Range | -| main.rs:2306:13:2306:18 | range1 | Idx | {EXTERNAL LOCATION} | u16 | -| main.rs:2307:9:2310:9 | ...::Range {...} | | {EXTERNAL LOCATION} | Range | -| main.rs:2307:9:2310:9 | ...::Range {...} | Idx | {EXTERNAL LOCATION} | u16 | -| main.rs:2308:20:2308:23 | 0u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2309:18:2309:22 | 10u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2311:13:2311:13 | u | | {EXTERNAL LOCATION} | Item | -| main.rs:2311:13:2311:13 | u | | {EXTERNAL LOCATION} | u16 | -| main.rs:2311:18:2311:23 | range1 | | {EXTERNAL LOCATION} | Range | -| main.rs:2311:18:2311:23 | range1 | Idx | {EXTERNAL LOCATION} | u16 | -| main.rs:2315:26:2315:26 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2315:29:2315:29 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2315:32:2315:32 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2318:13:2318:18 | vals4a | | {EXTERNAL LOCATION} | Vec | -| main.rs:2318:13:2318:18 | vals4a | A | {EXTERNAL LOCATION} | Global | -| main.rs:2318:13:2318:18 | vals4a | T | {EXTERNAL LOCATION} | u16 | -| main.rs:2318:32:2318:43 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2318:32:2318:43 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2318:32:2318:43 | [...] | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2318:32:2318:52 | ... .to_vec() | | {EXTERNAL LOCATION} | Vec | -| main.rs:2318:32:2318:52 | ... .to_vec() | A | {EXTERNAL LOCATION} | Global | -| main.rs:2318:32:2318:52 | ... .to_vec() | T | {EXTERNAL LOCATION} | u16 | -| main.rs:2318:33:2318:36 | 1u16 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2318:33:2318:36 | 1u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2318:39:2318:39 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2318:39:2318:39 | 2 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2318:42:2318:42 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2318:42:2318:42 | 3 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2319:13:2319:13 | u | | {EXTERNAL LOCATION} | u16 | -| main.rs:2319:13:2319:13 | u | | file://:0:0:0:0 | & | -| main.rs:2319:18:2319:23 | vals4a | | {EXTERNAL LOCATION} | Vec | -| main.rs:2319:18:2319:23 | vals4a | A | {EXTERNAL LOCATION} | Global | -| main.rs:2319:18:2319:23 | vals4a | T | {EXTERNAL LOCATION} | u16 | -| main.rs:2321:22:2321:33 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2321:22:2321:33 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2321:22:2321:33 | [...] | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2321:23:2321:26 | 1u16 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2321:23:2321:26 | 1u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2321:29:2321:29 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2321:29:2321:29 | 2 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2321:32:2321:32 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2321:32:2321:32 | 3 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2324:13:2324:17 | vals5 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2324:13:2324:17 | vals5 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2324:13:2324:17 | vals5 | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2324:13:2324:17 | vals5 | T | {EXTERNAL LOCATION} | u32 | -| main.rs:2324:21:2324:43 | ...::from(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2324:21:2324:43 | ...::from(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2324:21:2324:43 | ...::from(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2324:21:2324:43 | ...::from(...) | T | {EXTERNAL LOCATION} | u32 | -| main.rs:2324:31:2324:42 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2324:31:2324:42 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2324:31:2324:42 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | -| main.rs:2324:32:2324:35 | 1u32 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2324:32:2324:35 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2324:38:2324:38 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2324:38:2324:38 | 2 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2324:41:2324:41 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2324:41:2324:41 | 3 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2325:13:2325:13 | u | | {EXTERNAL LOCATION} | i32 | -| main.rs:2325:13:2325:13 | u | | {EXTERNAL LOCATION} | u32 | -| main.rs:2325:13:2325:13 | u | | file://:0:0:0:0 | & | -| main.rs:2325:18:2325:22 | vals5 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2325:18:2325:22 | vals5 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2325:18:2325:22 | vals5 | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2325:18:2325:22 | vals5 | T | {EXTERNAL LOCATION} | u32 | -| main.rs:2327:13:2327:17 | vals6 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2327:13:2327:17 | vals6 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2327:13:2327:17 | vals6 | T | file://:0:0:0:0 | & | -| main.rs:2327:13:2327:17 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 | -| main.rs:2327:32:2327:43 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2327:32:2327:43 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2327:32:2327:43 | [...] | [T;...] | {EXTERNAL LOCATION} | u64 | -| main.rs:2327:32:2327:60 | ... .collect() | | {EXTERNAL LOCATION} | Vec | -| main.rs:2327:32:2327:60 | ... .collect() | A | {EXTERNAL LOCATION} | Global | -| main.rs:2327:32:2327:60 | ... .collect() | T | file://:0:0:0:0 | & | -| main.rs:2327:32:2327:60 | ... .collect() | T.&T | {EXTERNAL LOCATION} | u64 | -| main.rs:2327:33:2327:36 | 1u64 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2327:33:2327:36 | 1u64 | | {EXTERNAL LOCATION} | u64 | -| main.rs:2327:39:2327:39 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2327:39:2327:39 | 2 | | {EXTERNAL LOCATION} | u64 | -| main.rs:2327:42:2327:42 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2327:42:2327:42 | 3 | | {EXTERNAL LOCATION} | u64 | -| main.rs:2328:13:2328:13 | u | | file://:0:0:0:0 | & | -| main.rs:2328:13:2328:13 | u | &T | {EXTERNAL LOCATION} | u64 | -| main.rs:2328:18:2328:22 | vals6 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2328:18:2328:22 | vals6 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2328:18:2328:22 | vals6 | T | file://:0:0:0:0 | & | -| main.rs:2328:18:2328:22 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 | -| main.rs:2330:17:2330:21 | vals7 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2330:17:2330:21 | vals7 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2330:17:2330:21 | vals7 | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2330:25:2330:34 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2330:25:2330:34 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2330:25:2330:34 | ...::new(...) | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2331:9:2331:13 | vals7 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2331:9:2331:13 | vals7 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2331:9:2331:13 | vals7 | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2331:20:2331:22 | 1u8 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2332:13:2332:13 | u | | {EXTERNAL LOCATION} | u8 | -| main.rs:2332:13:2332:13 | u | | file://:0:0:0:0 | & | -| main.rs:2332:18:2332:22 | vals7 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2332:18:2332:22 | vals7 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2332:18:2332:22 | vals7 | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2334:33:2334:33 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2334:36:2334:36 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2334:45:2334:45 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2334:48:2334:48 | 4 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2341:17:2341:20 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2341:17:2341:20 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2341:17:2341:20 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2341:17:2341:20 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2341:17:2341:20 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2341:17:2341:20 | map1 | V.T | file://:0:0:0:0 | & | -| main.rs:2341:17:2341:20 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2341:24:2341:55 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2341:24:2341:55 | ...::new(...) | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2341:24:2341:55 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2341:24:2341:55 | ...::new(...) | V | {EXTERNAL LOCATION} | Box | -| main.rs:2341:24:2341:55 | ...::new(...) | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2341:24:2341:55 | ...::new(...) | V.T | file://:0:0:0:0 | & | -| main.rs:2341:24:2341:55 | ...::new(...) | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2342:9:2342:12 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2342:9:2342:12 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2342:9:2342:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2342:9:2342:12 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2342:9:2342:12 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2342:9:2342:12 | map1 | V.T | file://:0:0:0:0 | & | -| main.rs:2342:9:2342:12 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2342:9:2342:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2342:9:2342:39 | map1.insert(...) | T | {EXTERNAL LOCATION} | Box | -| main.rs:2342:9:2342:39 | map1.insert(...) | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2342:9:2342:39 | map1.insert(...) | T.T | file://:0:0:0:0 | & | -| main.rs:2342:9:2342:39 | map1.insert(...) | T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2342:21:2342:21 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2342:24:2342:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2342:24:2342:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2342:24:2342:38 | ...::new(...) | T | file://:0:0:0:0 | & | -| main.rs:2342:24:2342:38 | ...::new(...) | T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2342:33:2342:37 | "one" | | file://:0:0:0:0 | & | -| main.rs:2342:33:2342:37 | "one" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2343:9:2343:12 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2343:9:2343:12 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2343:9:2343:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2343:9:2343:12 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2343:9:2343:12 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2343:9:2343:12 | map1 | V.T | file://:0:0:0:0 | & | -| main.rs:2343:9:2343:12 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2343:9:2343:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2343:9:2343:39 | map1.insert(...) | T | {EXTERNAL LOCATION} | Box | -| main.rs:2343:9:2343:39 | map1.insert(...) | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2343:9:2343:39 | map1.insert(...) | T.T | file://:0:0:0:0 | & | -| main.rs:2343:9:2343:39 | map1.insert(...) | T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2343:21:2343:21 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2343:24:2343:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2343:24:2343:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2343:24:2343:38 | ...::new(...) | T | file://:0:0:0:0 | & | -| main.rs:2343:24:2343:38 | ...::new(...) | T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2343:33:2343:37 | "two" | | file://:0:0:0:0 | & | -| main.rs:2343:33:2343:37 | "two" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2344:13:2344:15 | key | | {EXTERNAL LOCATION} | Item | -| main.rs:2344:13:2344:15 | key | | file://:0:0:0:0 | & | -| main.rs:2344:13:2344:15 | key | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:2344:20:2344:23 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2344:20:2344:23 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2344:20:2344:23 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2344:20:2344:23 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2344:20:2344:23 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2344:20:2344:23 | map1 | V.T | file://:0:0:0:0 | & | -| main.rs:2344:20:2344:23 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2344:20:2344:30 | map1.keys() | | {EXTERNAL LOCATION} | Keys | -| main.rs:2344:20:2344:30 | map1.keys() | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2344:20:2344:30 | map1.keys() | V | {EXTERNAL LOCATION} | Box | -| main.rs:2344:20:2344:30 | map1.keys() | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2344:20:2344:30 | map1.keys() | V.T | file://:0:0:0:0 | & | -| main.rs:2344:20:2344:30 | map1.keys() | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2345:13:2345:17 | value | | {EXTERNAL LOCATION} | Item | -| main.rs:2345:13:2345:17 | value | | file://:0:0:0:0 | & | -| main.rs:2345:13:2345:17 | value | &T | {EXTERNAL LOCATION} | Box | -| main.rs:2345:13:2345:17 | value | &T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2345:13:2345:17 | value | &T.T | file://:0:0:0:0 | & | -| main.rs:2345:13:2345:17 | value | &T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2345:22:2345:25 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2345:22:2345:25 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2345:22:2345:25 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2345:22:2345:25 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2345:22:2345:25 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2345:22:2345:25 | map1 | V.T | file://:0:0:0:0 | & | -| main.rs:2345:22:2345:25 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2345:22:2345:34 | map1.values() | | {EXTERNAL LOCATION} | Values | -| main.rs:2345:22:2345:34 | map1.values() | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2345:22:2345:34 | map1.values() | V | {EXTERNAL LOCATION} | Box | -| main.rs:2345:22:2345:34 | map1.values() | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2345:22:2345:34 | map1.values() | V.T | file://:0:0:0:0 | & | -| main.rs:2345:22:2345:34 | map1.values() | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2346:13:2346:24 | TuplePat | | {EXTERNAL LOCATION} | Item | -| main.rs:2346:13:2346:24 | TuplePat | | file://:0:0:0:0 | (T_2) | -| main.rs:2346:13:2346:24 | TuplePat | 0(2) | file://:0:0:0:0 | & | -| main.rs:2346:13:2346:24 | TuplePat | 0(2).&T | {EXTERNAL LOCATION} | i32 | -| main.rs:2346:13:2346:24 | TuplePat | 1(2) | file://:0:0:0:0 | & | -| main.rs:2346:13:2346:24 | TuplePat | 1(2).&T | {EXTERNAL LOCATION} | Box | -| main.rs:2346:13:2346:24 | TuplePat | 1(2).&T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2346:13:2346:24 | TuplePat | 1(2).&T.T | file://:0:0:0:0 | & | -| main.rs:2346:13:2346:24 | TuplePat | 1(2).&T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2346:14:2346:16 | key | | file://:0:0:0:0 | & | -| main.rs:2346:14:2346:16 | key | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:2346:19:2346:23 | value | | file://:0:0:0:0 | & | -| main.rs:2346:19:2346:23 | value | &T | {EXTERNAL LOCATION} | Box | -| main.rs:2346:19:2346:23 | value | &T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2346:19:2346:23 | value | &T.T | file://:0:0:0:0 | & | -| main.rs:2346:19:2346:23 | value | &T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2346:29:2346:32 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2346:29:2346:32 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2346:29:2346:32 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2346:29:2346:32 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2346:29:2346:32 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2346:29:2346:32 | map1 | V.T | file://:0:0:0:0 | & | -| main.rs:2346:29:2346:32 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2346:29:2346:39 | map1.iter() | | {EXTERNAL LOCATION} | Iter | -| main.rs:2346:29:2346:39 | map1.iter() | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2346:29:2346:39 | map1.iter() | V | {EXTERNAL LOCATION} | Box | -| main.rs:2346:29:2346:39 | map1.iter() | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2346:29:2346:39 | map1.iter() | V.T | file://:0:0:0:0 | & | -| main.rs:2346:29:2346:39 | map1.iter() | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2347:13:2347:24 | TuplePat | | {EXTERNAL LOCATION} | Item | -| main.rs:2347:13:2347:24 | TuplePat | | file://:0:0:0:0 | (T_2) | -| main.rs:2347:13:2347:24 | TuplePat | 0(2) | file://:0:0:0:0 | & | -| main.rs:2347:13:2347:24 | TuplePat | 0(2).&T | {EXTERNAL LOCATION} | i32 | -| main.rs:2347:13:2347:24 | TuplePat | 1(2) | file://:0:0:0:0 | & | -| main.rs:2347:13:2347:24 | TuplePat | 1(2).&T | {EXTERNAL LOCATION} | Box | -| main.rs:2347:13:2347:24 | TuplePat | 1(2).&T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2347:13:2347:24 | TuplePat | 1(2).&T.T | file://:0:0:0:0 | & | -| main.rs:2347:13:2347:24 | TuplePat | 1(2).&T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2347:14:2347:16 | key | | file://:0:0:0:0 | & | -| main.rs:2347:14:2347:16 | key | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:2347:19:2347:23 | value | | file://:0:0:0:0 | & | -| main.rs:2347:19:2347:23 | value | &T | {EXTERNAL LOCATION} | Box | -| main.rs:2347:19:2347:23 | value | &T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2347:19:2347:23 | value | &T.T | file://:0:0:0:0 | & | -| main.rs:2347:19:2347:23 | value | &T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2347:29:2347:33 | &map1 | | file://:0:0:0:0 | & | -| main.rs:2347:29:2347:33 | &map1 | &T | {EXTERNAL LOCATION} | HashMap | -| main.rs:2347:29:2347:33 | &map1 | &T.K | {EXTERNAL LOCATION} | i32 | -| main.rs:2347:29:2347:33 | &map1 | &T.S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2347:29:2347:33 | &map1 | &T.V | {EXTERNAL LOCATION} | Box | -| main.rs:2347:29:2347:33 | &map1 | &T.V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2347:29:2347:33 | &map1 | &T.V.T | file://:0:0:0:0 | & | -| main.rs:2347:29:2347:33 | &map1 | &T.V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2347:30:2347:33 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2347:30:2347:33 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2347:30:2347:33 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2347:30:2347:33 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2347:30:2347:33 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2347:30:2347:33 | map1 | V.T | file://:0:0:0:0 | & | -| main.rs:2347:30:2347:33 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2351:17:2351:17 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:2351:17:2351:17 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2351:26:2351:26 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2351:26:2351:26 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2353:23:2353:23 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:2353:23:2353:23 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2353:23:2353:28 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2353:27:2353:28 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2353:27:2353:28 | 10 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2355:13:2355:13 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:2355:13:2355:13 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2355:13:2355:18 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:2355:18:2355:18 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2367:40:2369:9 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:2367:40:2369:9 | { ... } | T | main.rs:2361:5:2361:20 | S1 | -| main.rs:2367:40:2369:9 | { ... } | T.T | main.rs:2366:10:2366:19 | T | -| main.rs:2368:13:2368:16 | None | | {EXTERNAL LOCATION} | Option | -| main.rs:2368:13:2368:16 | None | T | main.rs:2361:5:2361:20 | S1 | -| main.rs:2368:13:2368:16 | None | T.T | main.rs:2366:10:2366:19 | T | -| main.rs:2371:30:2373:9 | { ... } | | main.rs:2361:5:2361:20 | S1 | -| main.rs:2371:30:2373:9 | { ... } | T | main.rs:2366:10:2366:19 | T | -| main.rs:2372:13:2372:28 | S1(...) | | main.rs:2361:5:2361:20 | S1 | -| main.rs:2372:13:2372:28 | S1(...) | T | main.rs:2366:10:2366:19 | T | -| main.rs:2372:16:2372:27 | ...::default(...) | | main.rs:2366:10:2366:19 | T | -| main.rs:2375:19:2375:22 | SelfParam | | main.rs:2361:5:2361:20 | S1 | -| main.rs:2375:19:2375:22 | SelfParam | T | main.rs:2366:10:2366:19 | T | -| main.rs:2375:33:2377:9 | { ... } | | main.rs:2361:5:2361:20 | S1 | -| main.rs:2375:33:2377:9 | { ... } | T | main.rs:2366:10:2366:19 | T | -| main.rs:2376:13:2376:16 | self | | main.rs:2361:5:2361:20 | S1 | -| main.rs:2376:13:2376:16 | self | T | main.rs:2366:10:2366:19 | T | -| main.rs:2388:15:2388:15 | x | | main.rs:2388:12:2388:12 | T | -| main.rs:2388:26:2390:5 | { ... } | | main.rs:2388:12:2388:12 | T | -| main.rs:2389:9:2389:9 | x | | main.rs:2388:12:2388:12 | T | -| main.rs:2393:13:2393:14 | x1 | | {EXTERNAL LOCATION} | Option | -| main.rs:2393:13:2393:14 | x1 | T | main.rs:2361:5:2361:20 | S1 | -| main.rs:2393:13:2393:14 | x1 | T.T | main.rs:2363:5:2364:14 | S2 | -| main.rs:2393:34:2393:48 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2393:34:2393:48 | ...::assoc_fun(...) | T | main.rs:2361:5:2361:20 | S1 | -| main.rs:2393:34:2393:48 | ...::assoc_fun(...) | T.T | main.rs:2363:5:2364:14 | S2 | -| main.rs:2394:13:2394:14 | x2 | | {EXTERNAL LOCATION} | Option | -| main.rs:2394:13:2394:14 | x2 | T | main.rs:2361:5:2361:20 | S1 | -| main.rs:2394:13:2394:14 | x2 | T.T | main.rs:2363:5:2364:14 | S2 | -| main.rs:2394:18:2394:38 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2394:18:2394:38 | ...::assoc_fun(...) | T | main.rs:2361:5:2361:20 | S1 | -| main.rs:2394:18:2394:38 | ...::assoc_fun(...) | T.T | main.rs:2363:5:2364:14 | S2 | -| main.rs:2395:13:2395:14 | x3 | | {EXTERNAL LOCATION} | Option | -| main.rs:2395:13:2395:14 | x3 | T | main.rs:2361:5:2361:20 | S1 | -| main.rs:2395:13:2395:14 | x3 | T.T | main.rs:2363:5:2364:14 | S2 | -| main.rs:2395:18:2395:32 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2395:18:2395:32 | ...::assoc_fun(...) | T | main.rs:2361:5:2361:20 | S1 | -| main.rs:2395:18:2395:32 | ...::assoc_fun(...) | T.T | main.rs:2363:5:2364:14 | S2 | -| main.rs:2396:13:2396:14 | x4 | | main.rs:2361:5:2361:20 | S1 | -| main.rs:2396:13:2396:14 | x4 | T | main.rs:2363:5:2364:14 | S2 | -| main.rs:2396:18:2396:48 | ...::method(...) | | main.rs:2361:5:2361:20 | S1 | -| main.rs:2396:18:2396:48 | ...::method(...) | T | main.rs:2363:5:2364:14 | S2 | -| main.rs:2396:35:2396:47 | ...::default(...) | | main.rs:2361:5:2361:20 | S1 | -| main.rs:2396:35:2396:47 | ...::default(...) | T | main.rs:2363:5:2364:14 | S2 | -| main.rs:2397:13:2397:14 | x5 | | main.rs:2361:5:2361:20 | S1 | -| main.rs:2397:13:2397:14 | x5 | T | main.rs:2363:5:2364:14 | S2 | -| main.rs:2397:18:2397:42 | ...::method(...) | | main.rs:2361:5:2361:20 | S1 | -| main.rs:2397:18:2397:42 | ...::method(...) | T | main.rs:2363:5:2364:14 | S2 | -| main.rs:2397:29:2397:41 | ...::default(...) | | main.rs:2361:5:2361:20 | S1 | -| main.rs:2397:29:2397:41 | ...::default(...) | T | main.rs:2363:5:2364:14 | S2 | -| main.rs:2398:13:2398:14 | x6 | | main.rs:2382:5:2382:27 | S4 | -| main.rs:2398:13:2398:14 | x6 | T4 | main.rs:2363:5:2364:14 | S2 | -| main.rs:2398:18:2398:45 | S4::<...>(...) | | main.rs:2382:5:2382:27 | S4 | -| main.rs:2398:18:2398:45 | S4::<...>(...) | T4 | main.rs:2363:5:2364:14 | S2 | -| main.rs:2398:27:2398:44 | ...::default(...) | | main.rs:2363:5:2364:14 | S2 | -| main.rs:2399:13:2399:14 | x7 | | main.rs:2382:5:2382:27 | S4 | -| main.rs:2399:13:2399:14 | x7 | T4 | main.rs:2363:5:2364:14 | S2 | -| main.rs:2399:18:2399:23 | S4(...) | | main.rs:2382:5:2382:27 | S4 | -| main.rs:2399:18:2399:23 | S4(...) | T4 | main.rs:2363:5:2364:14 | S2 | -| main.rs:2399:21:2399:22 | S2 | | main.rs:2363:5:2364:14 | S2 | -| main.rs:2400:13:2400:14 | x8 | | main.rs:2382:5:2382:27 | S4 | -| main.rs:2400:13:2400:14 | x8 | T4 | {EXTERNAL LOCATION} | i32 | -| main.rs:2400:18:2400:22 | S4(...) | | main.rs:2382:5:2382:27 | S4 | -| main.rs:2400:18:2400:22 | S4(...) | T4 | {EXTERNAL LOCATION} | i32 | -| main.rs:2400:21:2400:21 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2401:13:2401:14 | x9 | | main.rs:2382:5:2382:27 | S4 | -| main.rs:2401:13:2401:14 | x9 | T4 | main.rs:2363:5:2364:14 | S2 | -| main.rs:2401:18:2401:34 | S4(...) | | main.rs:2382:5:2382:27 | S4 | -| main.rs:2401:18:2401:34 | S4(...) | T4 | main.rs:2363:5:2364:14 | S2 | -| main.rs:2401:21:2401:33 | ...::default(...) | | main.rs:2363:5:2364:14 | S2 | -| main.rs:2402:13:2402:15 | x10 | | main.rs:2384:5:2386:5 | S5 | -| main.rs:2402:13:2402:15 | x10 | T5 | main.rs:2363:5:2364:14 | S2 | -| main.rs:2402:19:2405:9 | S5::<...> {...} | | main.rs:2384:5:2386:5 | S5 | -| main.rs:2402:19:2405:9 | S5::<...> {...} | T5 | main.rs:2363:5:2364:14 | S2 | -| main.rs:2404:20:2404:37 | ...::default(...) | | main.rs:2363:5:2364:14 | S2 | -| main.rs:2406:13:2406:15 | x11 | | main.rs:2384:5:2386:5 | S5 | -| main.rs:2406:13:2406:15 | x11 | T5 | main.rs:2363:5:2364:14 | S2 | -| main.rs:2406:19:2406:34 | S5 {...} | | main.rs:2384:5:2386:5 | S5 | -| main.rs:2406:19:2406:34 | S5 {...} | T5 | main.rs:2363:5:2364:14 | S2 | -| main.rs:2406:31:2406:32 | S2 | | main.rs:2363:5:2364:14 | S2 | -| main.rs:2407:13:2407:15 | x12 | | main.rs:2384:5:2386:5 | S5 | -| main.rs:2407:13:2407:15 | x12 | T5 | {EXTERNAL LOCATION} | i32 | -| main.rs:2407:19:2407:33 | S5 {...} | | main.rs:2384:5:2386:5 | S5 | -| main.rs:2407:19:2407:33 | S5 {...} | T5 | {EXTERNAL LOCATION} | i32 | -| main.rs:2407:31:2407:31 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2408:13:2408:15 | x13 | | main.rs:2384:5:2386:5 | S5 | -| main.rs:2408:13:2408:15 | x13 | T5 | main.rs:2363:5:2364:14 | S2 | -| main.rs:2408:19:2411:9 | S5 {...} | | main.rs:2384:5:2386:5 | S5 | -| main.rs:2408:19:2411:9 | S5 {...} | T5 | main.rs:2363:5:2364:14 | S2 | -| main.rs:2410:20:2410:32 | ...::default(...) | | main.rs:2363:5:2364:14 | S2 | -| main.rs:2412:13:2412:15 | x14 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2412:19:2412:48 | foo::<...>(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:2412:30:2412:47 | ...::default(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:2420:35:2422:9 | { ... } | | file://:0:0:0:0 | (T_2) | -| main.rs:2420:35:2422:9 | { ... } | 0(2) | main.rs:2417:5:2417:16 | S1 | -| main.rs:2420:35:2422:9 | { ... } | 1(2) | main.rs:2417:5:2417:16 | S1 | -| main.rs:2421:13:2421:26 | TupleExpr | | file://:0:0:0:0 | (T_2) | -| main.rs:2421:13:2421:26 | TupleExpr | 0(2) | main.rs:2417:5:2417:16 | S1 | -| main.rs:2421:13:2421:26 | TupleExpr | 1(2) | main.rs:2417:5:2417:16 | S1 | -| main.rs:2421:14:2421:18 | S1 {...} | | main.rs:2417:5:2417:16 | S1 | -| main.rs:2421:21:2421:25 | S1 {...} | | main.rs:2417:5:2417:16 | S1 | -| main.rs:2423:16:2423:19 | SelfParam | | main.rs:2417:5:2417:16 | S1 | -| main.rs:2427:13:2427:13 | a | | file://:0:0:0:0 | (T_2) | -| main.rs:2427:13:2427:13 | a | 0(2) | main.rs:2417:5:2417:16 | S1 | -| main.rs:2427:13:2427:13 | a | 1(2) | main.rs:2417:5:2417:16 | S1 | -| main.rs:2427:17:2427:30 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | -| main.rs:2427:17:2427:30 | ...::get_pair(...) | 0(2) | main.rs:2417:5:2417:16 | S1 | -| main.rs:2427:17:2427:30 | ...::get_pair(...) | 1(2) | main.rs:2417:5:2417:16 | S1 | -| main.rs:2428:17:2428:17 | b | | file://:0:0:0:0 | (T_2) | -| main.rs:2428:17:2428:17 | b | 0(2) | main.rs:2417:5:2417:16 | S1 | -| main.rs:2428:17:2428:17 | b | 1(2) | main.rs:2417:5:2417:16 | S1 | -| main.rs:2428:21:2428:34 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | -| main.rs:2428:21:2428:34 | ...::get_pair(...) | 0(2) | main.rs:2417:5:2417:16 | S1 | -| main.rs:2428:21:2428:34 | ...::get_pair(...) | 1(2) | main.rs:2417:5:2417:16 | S1 | -| main.rs:2429:13:2429:18 | TuplePat | | file://:0:0:0:0 | (T_2) | -| main.rs:2429:13:2429:18 | TuplePat | 0(2) | main.rs:2417:5:2417:16 | S1 | -| main.rs:2429:13:2429:18 | TuplePat | 1(2) | main.rs:2417:5:2417:16 | S1 | -| main.rs:2429:14:2429:14 | c | | main.rs:2417:5:2417:16 | S1 | -| main.rs:2429:17:2429:17 | d | | main.rs:2417:5:2417:16 | S1 | -| main.rs:2429:22:2429:35 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | -| main.rs:2429:22:2429:35 | ...::get_pair(...) | 0(2) | main.rs:2417:5:2417:16 | S1 | -| main.rs:2429:22:2429:35 | ...::get_pair(...) | 1(2) | main.rs:2417:5:2417:16 | S1 | -| main.rs:2430:13:2430:22 | TuplePat | | file://:0:0:0:0 | (T_2) | -| main.rs:2430:13:2430:22 | TuplePat | 0(2) | main.rs:2417:5:2417:16 | S1 | -| main.rs:2430:13:2430:22 | TuplePat | 1(2) | main.rs:2417:5:2417:16 | S1 | -| main.rs:2430:18:2430:18 | e | | main.rs:2417:5:2417:16 | S1 | -| main.rs:2430:21:2430:21 | f | | main.rs:2417:5:2417:16 | S1 | -| main.rs:2430:26:2430:39 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | -| main.rs:2430:26:2430:39 | ...::get_pair(...) | 0(2) | main.rs:2417:5:2417:16 | S1 | -| main.rs:2430:26:2430:39 | ...::get_pair(...) | 1(2) | main.rs:2417:5:2417:16 | S1 | -| main.rs:2431:13:2431:26 | TuplePat | | file://:0:0:0:0 | (T_2) | -| main.rs:2431:13:2431:26 | TuplePat | 0(2) | main.rs:2417:5:2417:16 | S1 | -| main.rs:2431:13:2431:26 | TuplePat | 1(2) | main.rs:2417:5:2417:16 | S1 | -| main.rs:2431:18:2431:18 | g | | main.rs:2417:5:2417:16 | S1 | -| main.rs:2431:25:2431:25 | h | | main.rs:2417:5:2417:16 | S1 | -| main.rs:2431:30:2431:43 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | -| main.rs:2431:30:2431:43 | ...::get_pair(...) | 0(2) | main.rs:2417:5:2417:16 | S1 | -| main.rs:2431:30:2431:43 | ...::get_pair(...) | 1(2) | main.rs:2417:5:2417:16 | S1 | -| main.rs:2433:9:2433:9 | a | | file://:0:0:0:0 | (T_2) | -| main.rs:2433:9:2433:9 | a | 0(2) | main.rs:2417:5:2417:16 | S1 | -| main.rs:2433:9:2433:9 | a | 1(2) | main.rs:2417:5:2417:16 | S1 | -| main.rs:2433:9:2433:11 | a.0 | | main.rs:2417:5:2417:16 | S1 | -| main.rs:2434:9:2434:9 | b | | file://:0:0:0:0 | (T_2) | -| main.rs:2434:9:2434:9 | b | 0(2) | main.rs:2417:5:2417:16 | S1 | -| main.rs:2434:9:2434:9 | b | 1(2) | main.rs:2417:5:2417:16 | S1 | -| main.rs:2434:9:2434:11 | b.1 | | main.rs:2417:5:2417:16 | S1 | -| main.rs:2435:9:2435:9 | c | | main.rs:2417:5:2417:16 | S1 | -| main.rs:2436:9:2436:9 | d | | main.rs:2417:5:2417:16 | S1 | -| main.rs:2437:9:2437:9 | e | | main.rs:2417:5:2417:16 | S1 | -| main.rs:2438:9:2438:9 | f | | main.rs:2417:5:2417:16 | S1 | -| main.rs:2439:9:2439:9 | g | | main.rs:2417:5:2417:16 | S1 | -| main.rs:2440:9:2440:9 | h | | main.rs:2417:5:2417:16 | S1 | -| main.rs:2445:13:2445:13 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2445:17:2445:34 | ...::default(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2446:13:2446:13 | b | | {EXTERNAL LOCATION} | bool | -| main.rs:2446:17:2446:34 | ...::default(...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2447:13:2447:16 | pair | | file://:0:0:0:0 | (T_2) | -| main.rs:2447:13:2447:16 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | -| main.rs:2447:13:2447:16 | pair | 1(2) | {EXTERNAL LOCATION} | bool | -| main.rs:2447:20:2447:25 | TupleExpr | | file://:0:0:0:0 | (T_2) | -| main.rs:2447:20:2447:25 | TupleExpr | 0(2) | {EXTERNAL LOCATION} | i64 | -| main.rs:2447:20:2447:25 | TupleExpr | 1(2) | {EXTERNAL LOCATION} | bool | -| main.rs:2447:21:2447:21 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2447:24:2447:24 | b | | {EXTERNAL LOCATION} | bool | -| main.rs:2448:13:2448:13 | i | | {EXTERNAL LOCATION} | i64 | -| main.rs:2448:22:2448:25 | pair | | file://:0:0:0:0 | (T_2) | -| main.rs:2448:22:2448:25 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | -| main.rs:2448:22:2448:25 | pair | 1(2) | {EXTERNAL LOCATION} | bool | -| main.rs:2448:22:2448:27 | pair.0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2449:13:2449:13 | j | | {EXTERNAL LOCATION} | bool | -| main.rs:2449:23:2449:26 | pair | | file://:0:0:0:0 | (T_2) | -| main.rs:2449:23:2449:26 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | -| main.rs:2449:23:2449:26 | pair | 1(2) | {EXTERNAL LOCATION} | bool | -| main.rs:2449:23:2449:28 | pair.1 | | {EXTERNAL LOCATION} | bool | -| main.rs:2451:13:2451:16 | pair | | file://:0:0:0:0 | (T_2) | -| main.rs:2451:13:2451:16 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2451:13:2451:16 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2451:20:2451:25 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2451:20:2451:25 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2451:20:2451:32 | ... .into() | | file://:0:0:0:0 | (T_2) | -| main.rs:2451:20:2451:32 | ... .into() | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2451:20:2451:32 | ... .into() | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2451:21:2451:21 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2451:24:2451:24 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2452:15:2452:18 | pair | | file://:0:0:0:0 | (T_2) | -| main.rs:2452:15:2452:18 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2452:15:2452:18 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2453:13:2453:18 | TuplePat | | file://:0:0:0:0 | (T_2) | -| main.rs:2453:13:2453:18 | TuplePat | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2453:13:2453:18 | TuplePat | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2453:14:2453:14 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2453:17:2453:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2453:30:2453:41 | "unexpected" | | file://:0:0:0:0 | & | -| main.rs:2453:30:2453:41 | "unexpected" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2453:30:2453:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2453:30:2453:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2454:13:2454:13 | _ | | file://:0:0:0:0 | (T_2) | -| main.rs:2454:13:2454:13 | _ | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2454:13:2454:13 | _ | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2454:25:2454:34 | "expected" | | file://:0:0:0:0 | & | -| main.rs:2454:25:2454:34 | "expected" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2454:25:2454:34 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2454:25:2454:34 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2456:13:2456:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2456:17:2456:20 | pair | | file://:0:0:0:0 | (T_2) | -| main.rs:2456:17:2456:20 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2456:17:2456:20 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2456:17:2456:22 | pair.0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2463:13:2463:23 | boxed_value | | {EXTERNAL LOCATION} | Box | -| main.rs:2463:13:2463:23 | boxed_value | A | {EXTERNAL LOCATION} | Global | -| main.rs:2463:13:2463:23 | boxed_value | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2463:27:2463:42 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2463:27:2463:42 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2463:27:2463:42 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2463:36:2463:41 | 100i32 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2466:15:2466:25 | boxed_value | | {EXTERNAL LOCATION} | Box | -| main.rs:2466:15:2466:25 | boxed_value | A | {EXTERNAL LOCATION} | Global | -| main.rs:2466:15:2466:25 | boxed_value | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2467:13:2467:19 | box 100 | | {EXTERNAL LOCATION} | Box | -| main.rs:2467:13:2467:19 | box 100 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2467:13:2467:19 | box 100 | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2467:17:2467:19 | 100 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2468:26:2468:36 | "Boxed 100\\n" | | file://:0:0:0:0 | & | -| main.rs:2468:26:2468:36 | "Boxed 100\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2468:26:2468:36 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2468:26:2468:36 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2470:13:2470:17 | box ... | | {EXTERNAL LOCATION} | Box | -| main.rs:2470:13:2470:17 | box ... | A | {EXTERNAL LOCATION} | Global | -| main.rs:2470:13:2470:17 | box ... | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2472:26:2472:42 | "Boxed value: {}\\n" | | file://:0:0:0:0 | & | -| main.rs:2472:26:2472:42 | "Boxed value: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2472:26:2472:51 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2472:26:2472:51 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2477:13:2477:22 | nested_box | | {EXTERNAL LOCATION} | Box | -| main.rs:2477:13:2477:22 | nested_box | A | {EXTERNAL LOCATION} | Global | -| main.rs:2477:13:2477:22 | nested_box | T | {EXTERNAL LOCATION} | Box | -| main.rs:2477:13:2477:22 | nested_box | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2477:13:2477:22 | nested_box | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2477:26:2477:50 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2477:26:2477:50 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2477:26:2477:50 | ...::new(...) | T | {EXTERNAL LOCATION} | Box | -| main.rs:2477:26:2477:50 | ...::new(...) | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2477:26:2477:50 | ...::new(...) | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2477:35:2477:49 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2477:35:2477:49 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2477:35:2477:49 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2477:44:2477:48 | 42i32 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2478:15:2478:24 | nested_box | | {EXTERNAL LOCATION} | Box | -| main.rs:2478:15:2478:24 | nested_box | A | {EXTERNAL LOCATION} | Global | -| main.rs:2478:15:2478:24 | nested_box | T | {EXTERNAL LOCATION} | Box | -| main.rs:2478:15:2478:24 | nested_box | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2478:15:2478:24 | nested_box | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2479:13:2479:21 | box ... | | {EXTERNAL LOCATION} | Box | -| main.rs:2479:13:2479:21 | box ... | A | {EXTERNAL LOCATION} | Global | -| main.rs:2479:13:2479:21 | box ... | T | {EXTERNAL LOCATION} | Box | -| main.rs:2479:13:2479:21 | box ... | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2479:13:2479:21 | box ... | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2481:26:2481:43 | "Nested boxed: {}\\n" | | file://:0:0:0:0 | & | -| main.rs:2481:26:2481:43 | "Nested boxed: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2481:26:2481:59 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2481:26:2481:59 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2494:21:2494:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2494:21:2494:25 | SelfParam | &T | main.rs:2493:5:2496:5 | Self [trait Executor] | -| main.rs:2495:24:2495:28 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2495:24:2495:28 | SelfParam | &T | main.rs:2493:5:2496:5 | Self [trait Executor] | -| main.rs:2495:31:2495:35 | query | | main.rs:2495:21:2495:21 | E | -| main.rs:2499:21:2499:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2499:21:2499:25 | SelfParam | &T | main.rs:2498:10:2498:22 | T | -| main.rs:2500:22:2500:41 | "Executor::execute1\\n" | | file://:0:0:0:0 | & | -| main.rs:2500:22:2500:41 | "Executor::execute1\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2500:22:2500:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2500:22:2500:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2503:24:2503:28 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2503:24:2503:28 | SelfParam | &T | main.rs:2498:10:2498:22 | T | -| main.rs:2503:31:2503:36 | _query | | main.rs:2503:21:2503:21 | E | -| main.rs:2504:22:2504:41 | "Executor::execute2\\n" | | file://:0:0:0:0 | & | -| main.rs:2504:22:2504:41 | "Executor::execute2\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2504:22:2504:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2504:22:2504:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2513:13:2513:13 | c | | main.rs:2508:5:2508:29 | MySqlConnection | -| main.rs:2513:17:2513:34 | MySqlConnection {...} | | main.rs:2508:5:2508:29 | MySqlConnection | -| main.rs:2515:9:2515:9 | c | | main.rs:2508:5:2508:29 | MySqlConnection | -| main.rs:2516:35:2516:36 | &c | | file://:0:0:0:0 | & | -| main.rs:2516:35:2516:36 | &c | &T | main.rs:2508:5:2508:29 | MySqlConnection | -| main.rs:2516:36:2516:36 | c | | main.rs:2508:5:2508:29 | MySqlConnection | -| main.rs:2518:9:2518:9 | c | | main.rs:2508:5:2508:29 | MySqlConnection | -| main.rs:2518:20:2518:40 | "SELECT * FROM users" | | file://:0:0:0:0 | & | -| main.rs:2518:20:2518:40 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2519:9:2519:9 | c | | main.rs:2508:5:2508:29 | MySqlConnection | -| main.rs:2519:28:2519:48 | "SELECT * FROM users" | | file://:0:0:0:0 | & | -| main.rs:2519:28:2519:48 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2520:35:2520:36 | &c | | file://:0:0:0:0 | & | -| main.rs:2520:35:2520:36 | &c | &T | main.rs:2508:5:2508:29 | MySqlConnection | -| main.rs:2520:36:2520:36 | c | | main.rs:2508:5:2508:29 | MySqlConnection | -| main.rs:2520:39:2520:59 | "SELECT * FROM users" | | file://:0:0:0:0 | & | -| main.rs:2520:39:2520:59 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2521:43:2521:44 | &c | | file://:0:0:0:0 | & | -| main.rs:2521:43:2521:44 | &c | &T | main.rs:2508:5:2508:29 | MySqlConnection | -| main.rs:2521:44:2521:44 | c | | main.rs:2508:5:2508:29 | MySqlConnection | -| main.rs:2521:47:2521:67 | "SELECT * FROM users" | | file://:0:0:0:0 | & | -| main.rs:2521:47:2521:67 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2532:5:2532:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2533:5:2533:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2533:20:2533:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2533:41:2533:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2549:5:2549:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1683:13:1683:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1683:13:1683:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1683:13:1683:27 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:1683:23:1683:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1683:23:1683:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1684:13:1684:16 | self | | file://:0:0:0:0 | & | +| main.rs:1684:13:1684:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1684:13:1684:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1684:13:1684:27 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:1684:23:1684:25 | rhs | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1684:23:1684:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1690:16:1690:19 | SelfParam | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1690:22:1690:24 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1690:40:1695:9 | { ... } | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1691:13:1694:13 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1692:20:1692:23 | self | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1692:20:1692:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1692:20:1692:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1692:30:1692:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1693:20:1693:23 | self | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1693:20:1693:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1693:20:1693:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1693:30:1693:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1699:23:1699:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1699:23:1699:31 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1699:34:1699:36 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1700:13:1700:16 | self | | file://:0:0:0:0 | & | +| main.rs:1700:13:1700:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1700:13:1700:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1700:13:1700:26 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:1700:24:1700:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1701:13:1701:16 | self | | file://:0:0:0:0 | & | +| main.rs:1701:13:1701:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1701:13:1701:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1701:13:1701:26 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:1701:24:1701:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1707:16:1707:19 | SelfParam | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1707:22:1707:24 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1707:40:1712:9 | { ... } | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1708:13:1711:13 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1709:20:1709:23 | self | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1709:20:1709:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1709:20:1709:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1709:30:1709:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1710:20:1710:23 | self | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1710:20:1710:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1710:20:1710:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1710:30:1710:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1716:23:1716:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1716:23:1716:31 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1716:34:1716:36 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1717:13:1717:16 | self | | file://:0:0:0:0 | & | +| main.rs:1717:13:1717:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1717:13:1717:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1717:13:1717:26 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:1717:24:1717:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1718:13:1718:16 | self | | file://:0:0:0:0 | & | +| main.rs:1718:13:1718:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1718:13:1718:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1718:13:1718:26 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:1718:24:1718:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1724:16:1724:19 | SelfParam | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1724:30:1729:9 | { ... } | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1725:13:1728:13 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1726:20:1726:26 | - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1726:21:1726:24 | self | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1726:21:1726:26 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1727:20:1727:26 | - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1727:21:1727:24 | self | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1727:21:1727:26 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1734:16:1734:19 | SelfParam | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1734:30:1739:9 | { ... } | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1735:13:1738:13 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1736:20:1736:26 | ! ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1736:21:1736:24 | self | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1736:21:1736:26 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1737:20:1737:26 | ! ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1737:21:1737:24 | self | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1737:21:1737:26 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1743:15:1743:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1743:15:1743:19 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1743:22:1743:26 | other | | file://:0:0:0:0 | & | +| main.rs:1743:22:1743:26 | other | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1743:44:1745:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1744:13:1744:16 | self | | file://:0:0:0:0 | & | +| main.rs:1744:13:1744:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1744:13:1744:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1744:13:1744:29 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1744:13:1744:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1744:23:1744:27 | other | | file://:0:0:0:0 | & | +| main.rs:1744:23:1744:27 | other | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1744:23:1744:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1744:34:1744:37 | self | | file://:0:0:0:0 | & | +| main.rs:1744:34:1744:37 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1744:34:1744:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1744:34:1744:50 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1744:44:1744:48 | other | | file://:0:0:0:0 | & | +| main.rs:1744:44:1744:48 | other | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1744:44:1744:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1747:15:1747:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1747:15:1747:19 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1747:22:1747:26 | other | | file://:0:0:0:0 | & | +| main.rs:1747:22:1747:26 | other | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1747:44:1749:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1748:13:1748:16 | self | | file://:0:0:0:0 | & | +| main.rs:1748:13:1748:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1748:13:1748:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1748:13:1748:29 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1748:13:1748:50 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1748:23:1748:27 | other | | file://:0:0:0:0 | & | +| main.rs:1748:23:1748:27 | other | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1748:23:1748:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1748:34:1748:37 | self | | file://:0:0:0:0 | & | +| main.rs:1748:34:1748:37 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1748:34:1748:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1748:34:1748:50 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1748:44:1748:48 | other | | file://:0:0:0:0 | & | +| main.rs:1748:44:1748:48 | other | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1748:44:1748:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1753:24:1753:28 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1753:24:1753:28 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1753:31:1753:35 | other | | file://:0:0:0:0 | & | +| main.rs:1753:31:1753:35 | other | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1753:75:1755:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| main.rs:1753:75:1755:9 | { ... } | T | {EXTERNAL LOCATION} | Ordering | +| main.rs:1754:13:1754:29 | (...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:1754:13:1754:63 | ... .partial_cmp(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:1754:13:1754:63 | ... .partial_cmp(...) | T | {EXTERNAL LOCATION} | Ordering | +| main.rs:1754:14:1754:17 | self | | file://:0:0:0:0 | & | +| main.rs:1754:14:1754:17 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1754:14:1754:19 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1754:14:1754:28 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1754:23:1754:26 | self | | file://:0:0:0:0 | & | +| main.rs:1754:23:1754:26 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1754:23:1754:28 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1754:43:1754:62 | &... | | file://:0:0:0:0 | & | +| main.rs:1754:43:1754:62 | &... | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:1754:44:1754:62 | (...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:1754:45:1754:49 | other | | file://:0:0:0:0 | & | +| main.rs:1754:45:1754:49 | other | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1754:45:1754:51 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1754:45:1754:61 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1754:55:1754:59 | other | | file://:0:0:0:0 | & | +| main.rs:1754:55:1754:59 | other | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1754:55:1754:61 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1757:15:1757:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1757:15:1757:19 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1757:22:1757:26 | other | | file://:0:0:0:0 | & | +| main.rs:1757:22:1757:26 | other | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1757:44:1759:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1758:13:1758:16 | self | | file://:0:0:0:0 | & | +| main.rs:1758:13:1758:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1758:13:1758:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1758:13:1758:28 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1758:13:1758:48 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1758:22:1758:26 | other | | file://:0:0:0:0 | & | +| main.rs:1758:22:1758:26 | other | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1758:22:1758:28 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1758:33:1758:36 | self | | file://:0:0:0:0 | & | +| main.rs:1758:33:1758:36 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1758:33:1758:38 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1758:33:1758:48 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1758:42:1758:46 | other | | file://:0:0:0:0 | & | +| main.rs:1758:42:1758:46 | other | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1758:42:1758:48 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1761:15:1761:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1761:15:1761:19 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1761:22:1761:26 | other | | file://:0:0:0:0 | & | +| main.rs:1761:22:1761:26 | other | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1761:44:1763:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1762:13:1762:16 | self | | file://:0:0:0:0 | & | +| main.rs:1762:13:1762:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1762:13:1762:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1762:13:1762:29 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1762:13:1762:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1762:23:1762:27 | other | | file://:0:0:0:0 | & | +| main.rs:1762:23:1762:27 | other | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1762:23:1762:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1762:34:1762:37 | self | | file://:0:0:0:0 | & | +| main.rs:1762:34:1762:37 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1762:34:1762:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1762:34:1762:50 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1762:44:1762:48 | other | | file://:0:0:0:0 | & | +| main.rs:1762:44:1762:48 | other | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1762:44:1762:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1765:15:1765:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1765:15:1765:19 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1765:22:1765:26 | other | | file://:0:0:0:0 | & | +| main.rs:1765:22:1765:26 | other | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1765:44:1767:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1766:13:1766:16 | self | | file://:0:0:0:0 | & | +| main.rs:1766:13:1766:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1766:13:1766:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1766:13:1766:28 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1766:13:1766:48 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1766:22:1766:26 | other | | file://:0:0:0:0 | & | +| main.rs:1766:22:1766:26 | other | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1766:22:1766:28 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1766:33:1766:36 | self | | file://:0:0:0:0 | & | +| main.rs:1766:33:1766:36 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1766:33:1766:38 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1766:33:1766:48 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1766:42:1766:46 | other | | file://:0:0:0:0 | & | +| main.rs:1766:42:1766:46 | other | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1766:42:1766:48 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1769:15:1769:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1769:15:1769:19 | SelfParam | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1769:22:1769:26 | other | | file://:0:0:0:0 | & | +| main.rs:1769:22:1769:26 | other | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1769:44:1771:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1770:13:1770:16 | self | | file://:0:0:0:0 | & | +| main.rs:1770:13:1770:16 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1770:13:1770:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1770:13:1770:29 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1770:13:1770:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1770:23:1770:27 | other | | file://:0:0:0:0 | & | +| main.rs:1770:23:1770:27 | other | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1770:23:1770:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1770:34:1770:37 | self | | file://:0:0:0:0 | & | +| main.rs:1770:34:1770:37 | self | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1770:34:1770:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1770:34:1770:50 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1770:44:1770:48 | other | | file://:0:0:0:0 | & | +| main.rs:1770:44:1770:48 | other | &T | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1770:44:1770:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1777:13:1777:18 | i64_eq | | {EXTERNAL LOCATION} | bool | +| main.rs:1777:22:1777:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1777:23:1777:26 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1777:23:1777:34 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1777:31:1777:34 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1778:13:1778:18 | i64_ne | | {EXTERNAL LOCATION} | bool | +| main.rs:1778:22:1778:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1778:23:1778:26 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1778:23:1778:34 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1778:31:1778:34 | 4i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1779:13:1779:18 | i64_lt | | {EXTERNAL LOCATION} | bool | +| main.rs:1779:22:1779:34 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1779:23:1779:26 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1779:23:1779:33 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1779:30:1779:33 | 6i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1780:13:1780:18 | i64_le | | {EXTERNAL LOCATION} | bool | +| main.rs:1780:22:1780:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1780:23:1780:26 | 7i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1780:23:1780:34 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1780:31:1780:34 | 8i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1781:13:1781:18 | i64_gt | | {EXTERNAL LOCATION} | bool | +| main.rs:1781:22:1781:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1781:23:1781:26 | 9i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1781:23:1781:34 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1781:30:1781:34 | 10i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1782:13:1782:18 | i64_ge | | {EXTERNAL LOCATION} | bool | +| main.rs:1782:22:1782:37 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1782:23:1782:27 | 11i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1782:23:1782:36 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1782:32:1782:36 | 12i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1785:13:1785:19 | i64_add | | {EXTERNAL LOCATION} | i64 | +| main.rs:1785:23:1785:27 | 13i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1785:23:1785:35 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1785:31:1785:35 | 14i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1786:13:1786:19 | i64_sub | | {EXTERNAL LOCATION} | i64 | +| main.rs:1786:23:1786:27 | 15i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1786:23:1786:35 | ... - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1786:31:1786:35 | 16i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1787:13:1787:19 | i64_mul | | {EXTERNAL LOCATION} | i64 | +| main.rs:1787:23:1787:27 | 17i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1787:23:1787:35 | ... * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1787:31:1787:35 | 18i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1788:13:1788:19 | i64_div | | {EXTERNAL LOCATION} | i64 | +| main.rs:1788:23:1788:27 | 19i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1788:23:1788:35 | ... / ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1788:31:1788:35 | 20i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1789:13:1789:19 | i64_rem | | {EXTERNAL LOCATION} | i64 | +| main.rs:1789:23:1789:27 | 21i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1789:23:1789:35 | ... % ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1789:31:1789:35 | 22i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1792:17:1792:30 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1792:34:1792:38 | 23i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1793:9:1793:22 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1793:9:1793:31 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:1793:27:1793:31 | 24i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1795:17:1795:30 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1795:34:1795:38 | 25i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1796:9:1796:22 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1796:9:1796:31 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:1796:27:1796:31 | 26i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1798:17:1798:30 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1798:34:1798:38 | 27i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1799:9:1799:22 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1799:9:1799:31 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:1799:27:1799:31 | 28i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1801:17:1801:30 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1801:34:1801:38 | 29i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1802:9:1802:22 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1802:9:1802:31 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:1802:27:1802:31 | 30i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1804:17:1804:30 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1804:34:1804:38 | 31i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1805:9:1805:22 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1805:9:1805:31 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:1805:27:1805:31 | 32i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1808:13:1808:22 | i64_bitand | | {EXTERNAL LOCATION} | i64 | +| main.rs:1808:26:1808:30 | 33i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1808:26:1808:38 | ... & ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1808:34:1808:38 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1809:13:1809:21 | i64_bitor | | {EXTERNAL LOCATION} | i64 | +| main.rs:1809:25:1809:29 | 35i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1809:25:1809:37 | ... \| ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1809:33:1809:37 | 36i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1810:13:1810:22 | i64_bitxor | | {EXTERNAL LOCATION} | i64 | +| main.rs:1810:26:1810:30 | 37i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1810:26:1810:38 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1810:34:1810:38 | 38i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1811:13:1811:19 | i64_shl | | {EXTERNAL LOCATION} | i64 | +| main.rs:1811:23:1811:27 | 39i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1811:23:1811:36 | ... << ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1811:32:1811:36 | 40i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1812:13:1812:19 | i64_shr | | {EXTERNAL LOCATION} | i64 | +| main.rs:1812:23:1812:27 | 41i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1812:23:1812:36 | ... >> ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1812:32:1812:36 | 42i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1815:17:1815:33 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1815:37:1815:41 | 43i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1816:9:1816:25 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1816:9:1816:34 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:1816:30:1816:34 | 44i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1818:17:1818:32 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1818:36:1818:40 | 45i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1819:9:1819:24 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1819:9:1819:33 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:1819:29:1819:33 | 46i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1821:17:1821:33 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1821:37:1821:41 | 47i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1822:9:1822:25 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1822:9:1822:34 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:1822:30:1822:34 | 48i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1824:17:1824:30 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1824:34:1824:38 | 49i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1825:9:1825:22 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1825:9:1825:32 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:1825:28:1825:32 | 50i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1827:17:1827:30 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1827:34:1827:38 | 51i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1828:9:1828:22 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1828:9:1828:32 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:1828:28:1828:32 | 52i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1830:13:1830:19 | i64_neg | | {EXTERNAL LOCATION} | i64 | +| main.rs:1830:23:1830:28 | - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1830:24:1830:28 | 53i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1831:13:1831:19 | i64_not | | {EXTERNAL LOCATION} | i64 | +| main.rs:1831:23:1831:28 | ! ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1831:24:1831:28 | 54i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1834:13:1834:14 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1834:18:1834:36 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1834:28:1834:28 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1834:28:1834:28 | 1 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1834:34:1834:34 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1834:34:1834:34 | 2 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1835:13:1835:14 | v2 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1835:18:1835:36 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1835:28:1835:28 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1835:28:1835:28 | 3 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1835:34:1835:34 | 4 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1835:34:1835:34 | 4 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1838:13:1838:19 | vec2_eq | | {EXTERNAL LOCATION} | bool | +| main.rs:1838:23:1838:24 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1838:23:1838:30 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1838:29:1838:30 | v2 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1839:13:1839:19 | vec2_ne | | {EXTERNAL LOCATION} | bool | +| main.rs:1839:23:1839:24 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1839:23:1839:30 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1839:29:1839:30 | v2 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1840:13:1840:19 | vec2_lt | | {EXTERNAL LOCATION} | bool | +| main.rs:1840:23:1840:24 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1840:23:1840:29 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1840:28:1840:29 | v2 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1841:13:1841:19 | vec2_le | | {EXTERNAL LOCATION} | bool | +| main.rs:1841:23:1841:24 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1841:23:1841:30 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1841:29:1841:30 | v2 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1842:13:1842:19 | vec2_gt | | {EXTERNAL LOCATION} | bool | +| main.rs:1842:23:1842:24 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1842:23:1842:29 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1842:28:1842:29 | v2 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1843:13:1843:19 | vec2_ge | | {EXTERNAL LOCATION} | bool | +| main.rs:1843:23:1843:24 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1843:23:1843:30 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1843:29:1843:30 | v2 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1846:13:1846:20 | vec2_add | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1846:24:1846:25 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1846:24:1846:30 | ... + ... | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1846:29:1846:30 | v2 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1847:13:1847:20 | vec2_sub | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1847:24:1847:25 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1847:24:1847:30 | ... - ... | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1847:29:1847:30 | v2 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1848:13:1848:20 | vec2_mul | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1848:24:1848:25 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1848:24:1848:30 | ... * ... | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1848:29:1848:30 | v2 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1849:13:1849:20 | vec2_div | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1849:24:1849:25 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1849:24:1849:30 | ... / ... | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1849:29:1849:30 | v2 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1850:13:1850:20 | vec2_rem | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1850:24:1850:25 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1850:24:1850:30 | ... % ... | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1850:29:1850:30 | v2 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1853:17:1853:31 | vec2_add_assign | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1853:35:1853:36 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1854:9:1854:23 | vec2_add_assign | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1854:9:1854:29 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:1854:28:1854:29 | v2 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1856:17:1856:31 | vec2_sub_assign | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1856:35:1856:36 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1857:9:1857:23 | vec2_sub_assign | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1857:9:1857:29 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:1857:28:1857:29 | v2 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1859:17:1859:31 | vec2_mul_assign | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1859:35:1859:36 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1860:9:1860:23 | vec2_mul_assign | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1860:9:1860:29 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:1860:28:1860:29 | v2 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1862:17:1862:31 | vec2_div_assign | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1862:35:1862:36 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1863:9:1863:23 | vec2_div_assign | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1863:9:1863:29 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:1863:28:1863:29 | v2 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1865:17:1865:31 | vec2_rem_assign | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1865:35:1865:36 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1866:9:1866:23 | vec2_rem_assign | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1866:9:1866:29 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:1866:28:1866:29 | v2 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1869:13:1869:23 | vec2_bitand | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1869:27:1869:28 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1869:27:1869:33 | ... & ... | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1869:32:1869:33 | v2 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1870:13:1870:22 | vec2_bitor | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1870:26:1870:27 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1870:26:1870:32 | ... \| ... | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1870:31:1870:32 | v2 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1871:13:1871:23 | vec2_bitxor | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1871:27:1871:28 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1871:27:1871:33 | ... ^ ... | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1871:32:1871:33 | v2 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1872:13:1872:20 | vec2_shl | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1872:24:1872:25 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1872:24:1872:33 | ... << ... | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1872:30:1872:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1873:13:1873:20 | vec2_shr | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1873:24:1873:25 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1873:24:1873:33 | ... >> ... | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1873:30:1873:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1876:17:1876:34 | vec2_bitand_assign | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1876:38:1876:39 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1877:9:1877:26 | vec2_bitand_assign | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1877:9:1877:32 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:1877:31:1877:32 | v2 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1879:17:1879:33 | vec2_bitor_assign | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1879:37:1879:38 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1880:9:1880:25 | vec2_bitor_assign | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1880:9:1880:31 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:1880:30:1880:31 | v2 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1882:17:1882:34 | vec2_bitxor_assign | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1882:38:1882:39 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1883:9:1883:26 | vec2_bitxor_assign | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1883:9:1883:32 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:1883:31:1883:32 | v2 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1885:17:1885:31 | vec2_shl_assign | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1885:35:1885:36 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1886:9:1886:23 | vec2_shl_assign | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1886:9:1886:32 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:1886:29:1886:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1888:17:1888:31 | vec2_shr_assign | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1888:35:1888:36 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1889:9:1889:23 | vec2_shr_assign | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1889:9:1889:32 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:1889:29:1889:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1892:13:1892:20 | vec2_neg | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1892:24:1892:26 | - ... | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1892:25:1892:26 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1893:13:1893:20 | vec2_not | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1893:24:1893:26 | ! ... | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1893:25:1893:26 | v1 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1896:13:1896:24 | default_vec2 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1896:28:1896:45 | ...::default(...) | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1897:13:1897:26 | vec2_zero_plus | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1897:30:1897:48 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1897:30:1897:63 | ... + ... | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1897:40:1897:40 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1897:40:1897:40 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1897:46:1897:46 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1897:46:1897:46 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1897:52:1897:63 | default_vec2 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1901:13:1901:24 | default_vec2 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1901:28:1901:45 | ...::default(...) | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1902:13:1902:26 | vec2_zero_plus | | {EXTERNAL LOCATION} | bool | +| main.rs:1902:30:1902:48 | Vec2 {...} | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1902:30:1902:64 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1902:40:1902:40 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1902:40:1902:40 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1902:46:1902:46 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1902:46:1902:46 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1902:53:1902:64 | default_vec2 | | main.rs:1537:5:1542:5 | Vec2 | +| main.rs:1912:18:1912:21 | SelfParam | | main.rs:1909:5:1909:14 | S1 | +| main.rs:1915:25:1917:5 | { ... } | | main.rs:1909:5:1909:14 | S1 | +| main.rs:1916:9:1916:10 | S1 | | main.rs:1909:5:1909:14 | S1 | +| main.rs:1919:41:1921:5 | { ... } | | main.rs:1919:16:1919:39 | ImplTraitTypeRepr | +| main.rs:1920:9:1920:20 | { ... } | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1920:9:1920:20 | { ... } | | main.rs:1919:16:1919:39 | ImplTraitTypeRepr | +| main.rs:1920:9:1920:20 | { ... } | Output | main.rs:1909:5:1909:14 | S1 | +| main.rs:1920:17:1920:18 | S1 | | main.rs:1909:5:1909:14 | S1 | +| main.rs:1929:13:1929:42 | SelfParam | | {EXTERNAL LOCATION} | Pin | +| main.rs:1929:13:1929:42 | SelfParam | Ptr | file://:0:0:0:0 | & | +| main.rs:1929:13:1929:42 | SelfParam | Ptr.&T | main.rs:1923:5:1923:14 | S2 | +| main.rs:1930:13:1930:15 | _cx | | file://:0:0:0:0 | & | +| main.rs:1930:13:1930:15 | _cx | &T | {EXTERNAL LOCATION} | Context | +| main.rs:1931:44:1933:9 | { ... } | | {EXTERNAL LOCATION} | Poll | +| main.rs:1931:44:1933:9 | { ... } | T | main.rs:1909:5:1909:14 | S1 | +| main.rs:1932:13:1932:38 | ...::Ready(...) | | {EXTERNAL LOCATION} | Poll | +| main.rs:1932:13:1932:38 | ...::Ready(...) | T | main.rs:1909:5:1909:14 | S1 | +| main.rs:1932:36:1932:37 | S1 | | main.rs:1909:5:1909:14 | S1 | +| main.rs:1936:41:1938:5 | { ... } | | main.rs:1936:16:1936:39 | ImplTraitTypeRepr | +| main.rs:1937:9:1937:10 | S2 | | main.rs:1923:5:1923:14 | S2 | +| main.rs:1937:9:1937:10 | S2 | | main.rs:1936:16:1936:39 | ImplTraitTypeRepr | +| main.rs:1941:9:1941:12 | f1(...) | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1941:9:1941:12 | f1(...) | Output | main.rs:1909:5:1909:14 | S1 | +| main.rs:1941:9:1941:18 | await ... | | main.rs:1909:5:1909:14 | S1 | +| main.rs:1942:9:1942:12 | f2(...) | | main.rs:1919:16:1919:39 | ImplTraitTypeRepr | +| main.rs:1942:9:1942:18 | await ... | | main.rs:1909:5:1909:14 | S1 | +| main.rs:1943:9:1943:12 | f3(...) | | main.rs:1936:16:1936:39 | ImplTraitTypeRepr | +| main.rs:1943:9:1943:18 | await ... | | main.rs:1909:5:1909:14 | S1 | +| main.rs:1944:9:1944:10 | S2 | | main.rs:1923:5:1923:14 | S2 | +| main.rs:1944:9:1944:16 | await S2 | | main.rs:1909:5:1909:14 | S1 | +| main.rs:1945:13:1945:13 | b | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1945:13:1945:13 | b | Output | main.rs:1909:5:1909:14 | S1 | +| main.rs:1945:17:1945:28 | { ... } | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1945:17:1945:28 | { ... } | Output | main.rs:1909:5:1909:14 | S1 | +| main.rs:1945:25:1945:26 | S1 | | main.rs:1909:5:1909:14 | S1 | +| main.rs:1946:9:1946:9 | b | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1946:9:1946:9 | b | Output | main.rs:1909:5:1909:14 | S1 | +| main.rs:1946:9:1946:15 | await b | | main.rs:1909:5:1909:14 | S1 | +| main.rs:1957:15:1957:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1957:15:1957:19 | SelfParam | &T | main.rs:1956:5:1958:5 | Self [trait Trait1] | +| main.rs:1961:15:1961:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1961:15:1961:19 | SelfParam | &T | main.rs:1960:5:1962:5 | Self [trait Trait2] | +| main.rs:1965:15:1965:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1965:15:1965:19 | SelfParam | &T | main.rs:1951:5:1952:14 | S1 | +| main.rs:1969:15:1969:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1969:15:1969:19 | SelfParam | &T | main.rs:1951:5:1952:14 | S1 | +| main.rs:1972:37:1974:5 | { ... } | | main.rs:1972:16:1972:35 | ImplTraitTypeRepr | +| main.rs:1973:9:1973:10 | S1 | | main.rs:1951:5:1952:14 | S1 | +| main.rs:1973:9:1973:10 | S1 | | main.rs:1972:16:1972:35 | ImplTraitTypeRepr | +| main.rs:1977:18:1977:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1977:18:1977:22 | SelfParam | &T | main.rs:1976:5:1978:5 | Self [trait MyTrait] | +| main.rs:1981:18:1981:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1981:18:1981:22 | SelfParam | &T | main.rs:1951:5:1952:14 | S1 | +| main.rs:1981:31:1983:9 | { ... } | | main.rs:1953:5:1953:14 | S2 | +| main.rs:1982:13:1982:14 | S2 | | main.rs:1953:5:1953:14 | S2 | +| main.rs:1987:18:1987:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1987:18:1987:22 | SelfParam | | main.rs:1954:5:1954:22 | S3 | +| main.rs:1987:18:1987:22 | SelfParam | &T | main.rs:1954:5:1954:22 | S3 | +| main.rs:1987:18:1987:22 | SelfParam | &T.T3 | main.rs:1986:10:1986:17 | T | +| main.rs:1987:30:1990:9 | { ... } | | main.rs:1986:10:1986:17 | T | +| main.rs:1988:17:1988:21 | S3(...) | | file://:0:0:0:0 | & | +| main.rs:1988:17:1988:21 | S3(...) | | main.rs:1954:5:1954:22 | S3 | +| main.rs:1988:17:1988:21 | S3(...) | &T | main.rs:1954:5:1954:22 | S3 | +| main.rs:1988:17:1988:21 | S3(...) | &T.T3 | main.rs:1986:10:1986:17 | T | +| main.rs:1988:25:1988:28 | self | | file://:0:0:0:0 | & | +| main.rs:1988:25:1988:28 | self | | main.rs:1954:5:1954:22 | S3 | +| main.rs:1988:25:1988:28 | self | &T | main.rs:1954:5:1954:22 | S3 | +| main.rs:1988:25:1988:28 | self | &T.T3 | main.rs:1986:10:1986:17 | T | +| main.rs:1989:13:1989:21 | t.clone() | | main.rs:1986:10:1986:17 | T | +| main.rs:1993:45:1995:5 | { ... } | | main.rs:1993:28:1993:43 | ImplTraitTypeRepr | +| main.rs:1994:9:1994:10 | S1 | | main.rs:1951:5:1952:14 | S1 | +| main.rs:1994:9:1994:10 | S1 | | main.rs:1993:28:1993:43 | ImplTraitTypeRepr | +| main.rs:1997:41:1997:41 | t | | main.rs:1997:26:1997:38 | B | +| main.rs:1997:52:1999:5 | { ... } | | main.rs:1997:23:1997:23 | A | +| main.rs:1998:9:1998:9 | t | | main.rs:1997:26:1997:38 | B | +| main.rs:1998:9:1998:17 | t.get_a() | | main.rs:1997:23:1997:23 | A | +| main.rs:2001:34:2001:34 | x | | main.rs:2001:24:2001:31 | T | +| main.rs:2001:59:2003:5 | { ... } | | main.rs:2001:43:2001:57 | ImplTraitTypeRepr | +| main.rs:2001:59:2003:5 | { ... } | impl(T) | main.rs:2001:24:2001:31 | T | +| main.rs:2002:9:2002:13 | S3(...) | | main.rs:1954:5:1954:22 | S3 | +| main.rs:2002:9:2002:13 | S3(...) | | main.rs:2001:43:2001:57 | ImplTraitTypeRepr | +| main.rs:2002:9:2002:13 | S3(...) | T3 | main.rs:2001:24:2001:31 | T | +| main.rs:2002:9:2002:13 | S3(...) | impl(T) | main.rs:2001:24:2001:31 | T | +| main.rs:2002:12:2002:12 | x | | main.rs:2001:24:2001:31 | T | +| main.rs:2005:34:2005:34 | x | | main.rs:2005:24:2005:31 | T | +| main.rs:2005:67:2007:5 | { ... } | | {EXTERNAL LOCATION} | Option | +| main.rs:2005:67:2007:5 | { ... } | T | main.rs:2005:50:2005:64 | ImplTraitTypeRepr | +| main.rs:2005:67:2007:5 | { ... } | T.impl(T) | main.rs:2005:24:2005:31 | T | +| main.rs:2006:9:2006:19 | Some(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2006:9:2006:19 | Some(...) | T | main.rs:1954:5:1954:22 | S3 | +| main.rs:2006:9:2006:19 | Some(...) | T | main.rs:2005:50:2005:64 | ImplTraitTypeRepr | +| main.rs:2006:9:2006:19 | Some(...) | T.T3 | main.rs:2005:24:2005:31 | T | +| main.rs:2006:9:2006:19 | Some(...) | T.impl(T) | main.rs:2005:24:2005:31 | T | +| main.rs:2006:14:2006:18 | S3(...) | | main.rs:1954:5:1954:22 | S3 | +| main.rs:2006:14:2006:18 | S3(...) | | main.rs:2005:50:2005:64 | ImplTraitTypeRepr | +| main.rs:2006:14:2006:18 | S3(...) | T3 | main.rs:2005:24:2005:31 | T | +| main.rs:2006:14:2006:18 | S3(...) | impl(T) | main.rs:2005:24:2005:31 | T | +| main.rs:2006:17:2006:17 | x | | main.rs:2005:24:2005:31 | T | +| main.rs:2009:34:2009:34 | x | | main.rs:2009:24:2009:31 | T | +| main.rs:2009:78:2011:5 | { ... } | | file://:0:0:0:0 | (T_2) | +| main.rs:2009:78:2011:5 | { ... } | 0(2) | main.rs:2009:44:2009:58 | ImplTraitTypeRepr | +| main.rs:2009:78:2011:5 | { ... } | 0(2).impl(T) | main.rs:2009:24:2009:31 | T | +| main.rs:2009:78:2011:5 | { ... } | 1(2) | main.rs:2009:61:2009:75 | ImplTraitTypeRepr | +| main.rs:2009:78:2011:5 | { ... } | 1(2).impl(T) | main.rs:2009:24:2009:31 | T | +| main.rs:2010:9:2010:30 | TupleExpr | | file://:0:0:0:0 | (T_2) | +| main.rs:2010:9:2010:30 | TupleExpr | 0(2) | main.rs:1954:5:1954:22 | S3 | +| main.rs:2010:9:2010:30 | TupleExpr | 0(2) | main.rs:2009:44:2009:58 | ImplTraitTypeRepr | +| main.rs:2010:9:2010:30 | TupleExpr | 0(2).T3 | main.rs:2009:24:2009:31 | T | +| main.rs:2010:9:2010:30 | TupleExpr | 0(2).impl(T) | main.rs:2009:24:2009:31 | T | +| main.rs:2010:9:2010:30 | TupleExpr | 1(2) | main.rs:1954:5:1954:22 | S3 | +| main.rs:2010:9:2010:30 | TupleExpr | 1(2) | main.rs:2009:61:2009:75 | ImplTraitTypeRepr | +| main.rs:2010:9:2010:30 | TupleExpr | 1(2).T3 | main.rs:2009:24:2009:31 | T | +| main.rs:2010:9:2010:30 | TupleExpr | 1(2).impl(T) | main.rs:2009:24:2009:31 | T | +| main.rs:2010:10:2010:22 | S3(...) | | main.rs:1954:5:1954:22 | S3 | +| main.rs:2010:10:2010:22 | S3(...) | | main.rs:2009:44:2009:58 | ImplTraitTypeRepr | +| main.rs:2010:10:2010:22 | S3(...) | T3 | main.rs:2009:24:2009:31 | T | +| main.rs:2010:10:2010:22 | S3(...) | impl(T) | main.rs:2009:24:2009:31 | T | +| main.rs:2010:13:2010:13 | x | | main.rs:2009:24:2009:31 | T | +| main.rs:2010:13:2010:21 | x.clone() | | main.rs:2009:24:2009:31 | T | +| main.rs:2010:25:2010:29 | S3(...) | | main.rs:1954:5:1954:22 | S3 | +| main.rs:2010:25:2010:29 | S3(...) | | main.rs:2009:61:2009:75 | ImplTraitTypeRepr | +| main.rs:2010:25:2010:29 | S3(...) | T3 | main.rs:2009:24:2009:31 | T | +| main.rs:2010:25:2010:29 | S3(...) | impl(T) | main.rs:2009:24:2009:31 | T | +| main.rs:2010:28:2010:28 | x | | main.rs:2009:24:2009:31 | T | +| main.rs:2013:26:2013:26 | t | | main.rs:2013:29:2013:43 | ImplTraitTypeRepr | +| main.rs:2013:51:2015:5 | { ... } | | main.rs:2013:23:2013:23 | A | +| main.rs:2014:9:2014:9 | t | | main.rs:2013:29:2013:43 | ImplTraitTypeRepr | +| main.rs:2014:9:2014:17 | t.get_a() | | main.rs:2013:23:2013:23 | A | +| main.rs:2018:13:2018:13 | x | | main.rs:1972:16:1972:35 | ImplTraitTypeRepr | +| main.rs:2018:17:2018:20 | f1(...) | | main.rs:1972:16:1972:35 | ImplTraitTypeRepr | +| main.rs:2019:9:2019:9 | x | | main.rs:1972:16:1972:35 | ImplTraitTypeRepr | +| main.rs:2020:9:2020:9 | x | | main.rs:1972:16:1972:35 | ImplTraitTypeRepr | +| main.rs:2021:13:2021:13 | a | | main.rs:1993:28:1993:43 | ImplTraitTypeRepr | +| main.rs:2021:17:2021:32 | get_a_my_trait(...) | | main.rs:1993:28:1993:43 | ImplTraitTypeRepr | +| main.rs:2022:13:2022:13 | b | | main.rs:1953:5:1953:14 | S2 | +| main.rs:2022:17:2022:33 | uses_my_trait1(...) | | main.rs:1953:5:1953:14 | S2 | +| main.rs:2022:32:2022:32 | a | | main.rs:1993:28:1993:43 | ImplTraitTypeRepr | +| main.rs:2023:13:2023:13 | a | | main.rs:1993:28:1993:43 | ImplTraitTypeRepr | +| main.rs:2023:17:2023:32 | get_a_my_trait(...) | | main.rs:1993:28:1993:43 | ImplTraitTypeRepr | +| main.rs:2024:13:2024:13 | c | | main.rs:1953:5:1953:14 | S2 | +| main.rs:2024:17:2024:33 | uses_my_trait2(...) | | main.rs:1953:5:1953:14 | S2 | +| main.rs:2024:32:2024:32 | a | | main.rs:1993:28:1993:43 | ImplTraitTypeRepr | +| main.rs:2025:13:2025:13 | d | | main.rs:1953:5:1953:14 | S2 | +| main.rs:2025:17:2025:34 | uses_my_trait2(...) | | main.rs:1953:5:1953:14 | S2 | +| main.rs:2025:32:2025:33 | S1 | | main.rs:1951:5:1952:14 | S1 | +| main.rs:2026:13:2026:13 | e | | main.rs:1951:5:1952:14 | S1 | +| main.rs:2026:17:2026:35 | get_a_my_trait2(...) | | main.rs:2001:43:2001:57 | ImplTraitTypeRepr | +| main.rs:2026:17:2026:35 | get_a_my_trait2(...) | impl(T) | main.rs:1951:5:1952:14 | S1 | +| main.rs:2026:17:2026:43 | ... .get_a() | | main.rs:1951:5:1952:14 | S1 | +| main.rs:2026:33:2026:34 | S1 | | main.rs:1951:5:1952:14 | S1 | +| main.rs:2029:13:2029:13 | f | | main.rs:1951:5:1952:14 | S1 | +| main.rs:2029:17:2029:35 | get_a_my_trait3(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2029:17:2029:35 | get_a_my_trait3(...) | T | main.rs:2005:50:2005:64 | ImplTraitTypeRepr | +| main.rs:2029:17:2029:35 | get_a_my_trait3(...) | T.impl(T) | main.rs:1951:5:1952:14 | S1 | +| main.rs:2029:17:2029:44 | ... .unwrap() | | main.rs:2005:50:2005:64 | ImplTraitTypeRepr | +| main.rs:2029:17:2029:44 | ... .unwrap() | impl(T) | main.rs:1951:5:1952:14 | S1 | +| main.rs:2029:17:2029:52 | ... .get_a() | | main.rs:1951:5:1952:14 | S1 | +| main.rs:2029:33:2029:34 | S1 | | main.rs:1951:5:1952:14 | S1 | +| main.rs:2030:13:2030:13 | g | | main.rs:1951:5:1952:14 | S1 | +| main.rs:2030:17:2030:35 | get_a_my_trait4(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2030:17:2030:35 | get_a_my_trait4(...) | 0(2) | main.rs:2009:44:2009:58 | ImplTraitTypeRepr | +| main.rs:2030:17:2030:35 | get_a_my_trait4(...) | 0(2).impl(T) | main.rs:1951:5:1952:14 | S1 | +| main.rs:2030:17:2030:35 | get_a_my_trait4(...) | 1(2) | main.rs:2009:61:2009:75 | ImplTraitTypeRepr | +| main.rs:2030:17:2030:35 | get_a_my_trait4(...) | 1(2).impl(T) | main.rs:1951:5:1952:14 | S1 | +| main.rs:2030:17:2030:37 | ... .0 | | main.rs:2009:44:2009:58 | ImplTraitTypeRepr | +| main.rs:2030:17:2030:37 | ... .0 | impl(T) | main.rs:1951:5:1952:14 | S1 | +| main.rs:2030:17:2030:45 | ... .get_a() | | main.rs:1951:5:1952:14 | S1 | +| main.rs:2030:33:2030:34 | S1 | | main.rs:1951:5:1952:14 | S1 | +| main.rs:2041:16:2041:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2041:16:2041:20 | SelfParam | &T | main.rs:2037:5:2038:13 | S | +| main.rs:2041:31:2043:9 | { ... } | | main.rs:2037:5:2038:13 | S | +| main.rs:2042:13:2042:13 | S | | main.rs:2037:5:2038:13 | S | +| main.rs:2052:26:2054:9 | { ... } | | main.rs:2046:5:2049:5 | MyVec | +| main.rs:2052:26:2054:9 | { ... } | T | main.rs:2051:10:2051:10 | T | +| main.rs:2053:13:2053:38 | MyVec {...} | | main.rs:2046:5:2049:5 | MyVec | +| main.rs:2053:13:2053:38 | MyVec {...} | T | main.rs:2051:10:2051:10 | T | +| main.rs:2053:27:2053:36 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2053:27:2053:36 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2053:27:2053:36 | ...::new(...) | T | main.rs:2051:10:2051:10 | T | +| main.rs:2056:17:2056:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2056:17:2056:25 | SelfParam | &T | main.rs:2046:5:2049:5 | MyVec | +| main.rs:2056:17:2056:25 | SelfParam | &T.T | main.rs:2051:10:2051:10 | T | +| main.rs:2056:28:2056:32 | value | | main.rs:2051:10:2051:10 | T | +| main.rs:2057:13:2057:16 | self | | file://:0:0:0:0 | & | +| main.rs:2057:13:2057:16 | self | &T | main.rs:2046:5:2049:5 | MyVec | +| main.rs:2057:13:2057:16 | self | &T.T | main.rs:2051:10:2051:10 | T | +| main.rs:2057:13:2057:21 | self.data | | {EXTERNAL LOCATION} | Vec | +| main.rs:2057:13:2057:21 | self.data | A | {EXTERNAL LOCATION} | Global | +| main.rs:2057:13:2057:21 | self.data | T | main.rs:2051:10:2051:10 | T | +| main.rs:2057:28:2057:32 | value | | main.rs:2051:10:2051:10 | T | +| main.rs:2065:18:2065:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2065:18:2065:22 | SelfParam | &T | main.rs:2046:5:2049:5 | MyVec | +| main.rs:2065:18:2065:22 | SelfParam | &T.T | main.rs:2061:10:2061:10 | T | +| main.rs:2065:25:2065:29 | index | | {EXTERNAL LOCATION} | usize | +| main.rs:2065:56:2067:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:2065:56:2067:9 | { ... } | &T | main.rs:2061:10:2061:10 | T | +| main.rs:2066:13:2066:29 | &... | | file://:0:0:0:0 | & | +| main.rs:2066:13:2066:29 | &... | &T | main.rs:2061:10:2061:10 | T | +| main.rs:2066:14:2066:17 | self | | file://:0:0:0:0 | & | +| main.rs:2066:14:2066:17 | self | &T | main.rs:2046:5:2049:5 | MyVec | +| main.rs:2066:14:2066:17 | self | &T.T | main.rs:2061:10:2061:10 | T | +| main.rs:2066:14:2066:22 | self.data | | {EXTERNAL LOCATION} | Vec | +| main.rs:2066:14:2066:22 | self.data | A | {EXTERNAL LOCATION} | Global | +| main.rs:2066:14:2066:22 | self.data | T | main.rs:2061:10:2061:10 | T | +| main.rs:2066:14:2066:29 | ...[index] | | main.rs:2061:10:2061:10 | T | +| main.rs:2066:24:2066:28 | index | | {EXTERNAL LOCATION} | usize | +| main.rs:2070:22:2070:26 | slice | | file://:0:0:0:0 | & | +| main.rs:2070:22:2070:26 | slice | &T | file://:0:0:0:0 | [] | +| main.rs:2070:22:2070:26 | slice | &T.[T] | main.rs:2037:5:2038:13 | S | +| main.rs:2071:13:2071:13 | x | | main.rs:2037:5:2038:13 | S | +| main.rs:2071:17:2071:21 | slice | | file://:0:0:0:0 | & | +| main.rs:2071:17:2071:21 | slice | &T | file://:0:0:0:0 | [] | +| main.rs:2071:17:2071:21 | slice | &T.[T] | main.rs:2037:5:2038:13 | S | +| main.rs:2071:17:2071:24 | slice[0] | | main.rs:2037:5:2038:13 | S | +| main.rs:2071:17:2071:30 | ... .foo() | | main.rs:2037:5:2038:13 | S | +| main.rs:2071:23:2071:23 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2075:17:2075:19 | vec | | main.rs:2046:5:2049:5 | MyVec | +| main.rs:2075:17:2075:19 | vec | T | main.rs:2037:5:2038:13 | S | +| main.rs:2075:23:2075:34 | ...::new(...) | | main.rs:2046:5:2049:5 | MyVec | +| main.rs:2075:23:2075:34 | ...::new(...) | T | main.rs:2037:5:2038:13 | S | +| main.rs:2076:9:2076:11 | vec | | main.rs:2046:5:2049:5 | MyVec | +| main.rs:2076:9:2076:11 | vec | T | main.rs:2037:5:2038:13 | S | +| main.rs:2076:18:2076:18 | S | | main.rs:2037:5:2038:13 | S | +| main.rs:2077:9:2077:11 | vec | | main.rs:2046:5:2049:5 | MyVec | +| main.rs:2077:9:2077:11 | vec | T | main.rs:2037:5:2038:13 | S | +| main.rs:2077:9:2077:14 | vec[0] | | main.rs:2037:5:2038:13 | S | +| main.rs:2077:9:2077:20 | ... .foo() | | main.rs:2037:5:2038:13 | S | +| main.rs:2077:13:2077:13 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2077:13:2077:13 | 0 | | {EXTERNAL LOCATION} | usize | +| main.rs:2079:13:2079:14 | xs | | file://:0:0:0:0 | [] | +| main.rs:2079:13:2079:14 | xs | [T;...] | main.rs:2037:5:2038:13 | S | +| main.rs:2079:21:2079:21 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2079:26:2079:28 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2079:26:2079:28 | [...] | [T;...] | main.rs:2037:5:2038:13 | S | +| main.rs:2079:27:2079:27 | S | | main.rs:2037:5:2038:13 | S | +| main.rs:2080:13:2080:13 | x | | main.rs:2037:5:2038:13 | S | +| main.rs:2080:17:2080:18 | xs | | file://:0:0:0:0 | [] | +| main.rs:2080:17:2080:18 | xs | [T;...] | main.rs:2037:5:2038:13 | S | +| main.rs:2080:17:2080:21 | xs[0] | | main.rs:2037:5:2038:13 | S | +| main.rs:2080:17:2080:27 | ... .foo() | | main.rs:2037:5:2038:13 | S | +| main.rs:2080:20:2080:20 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2082:23:2082:25 | &xs | | file://:0:0:0:0 | & | +| main.rs:2082:23:2082:25 | &xs | &T | file://:0:0:0:0 | [] | +| main.rs:2082:23:2082:25 | &xs | &T | file://:0:0:0:0 | [] | +| main.rs:2082:23:2082:25 | &xs | &T.[T;...] | main.rs:2037:5:2038:13 | S | +| main.rs:2082:23:2082:25 | &xs | &T.[T] | main.rs:2037:5:2038:13 | S | +| main.rs:2082:24:2082:25 | xs | | file://:0:0:0:0 | [] | +| main.rs:2082:24:2082:25 | xs | [T;...] | main.rs:2037:5:2038:13 | S | +| main.rs:2088:13:2088:13 | x | | {EXTERNAL LOCATION} | String | +| main.rs:2088:17:2088:46 | MacroExpr | | {EXTERNAL LOCATION} | String | +| main.rs:2088:25:2088:35 | "Hello, {}" | | file://:0:0:0:0 | & | +| main.rs:2088:25:2088:35 | "Hello, {}" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2088:25:2088:45 | ...::format(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2088:25:2088:45 | ...::must_use(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2088:25:2088:45 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2088:25:2088:45 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2088:25:2088:45 | { ... } | | {EXTERNAL LOCATION} | String | +| main.rs:2088:38:2088:45 | "World!" | | file://:0:0:0:0 | & | +| main.rs:2088:38:2088:45 | "World!" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2097:19:2097:22 | SelfParam | | main.rs:2093:5:2098:5 | Self [trait MyAdd] | +| main.rs:2097:25:2097:27 | rhs | | main.rs:2093:17:2093:26 | Rhs | +| main.rs:2104:19:2104:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | +| main.rs:2104:25:2104:29 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2104:45:2106:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2105:13:2105:17 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2113:19:2113:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | +| main.rs:2113:25:2113:29 | value | | file://:0:0:0:0 | & | +| main.rs:2113:25:2113:29 | value | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:2113:46:2115:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2114:13:2114:18 | * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2114:14:2114:18 | value | | file://:0:0:0:0 | & | +| main.rs:2114:14:2114:18 | value | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:2122:19:2122:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | +| main.rs:2122:25:2122:29 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2122:46:2128:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2123:13:2127:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | +| main.rs:2123:13:2127:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | +| main.rs:2123:16:2123:20 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2123:22:2125:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2123:22:2125:13 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2124:17:2124:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2124:17:2124:17 | 1 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2125:20:2127:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2125:20:2127:13 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2126:17:2126:17 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2126:17:2126:17 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2137:19:2137:22 | SelfParam | | main.rs:2131:5:2131:19 | S | +| main.rs:2137:19:2137:22 | SelfParam | T | main.rs:2133:10:2133:17 | T | +| main.rs:2137:25:2137:29 | other | | main.rs:2131:5:2131:19 | S | +| main.rs:2137:25:2137:29 | other | T | main.rs:2133:10:2133:17 | T | +| main.rs:2137:54:2139:9 | { ... } | | main.rs:2131:5:2131:19 | S | +| main.rs:2137:54:2139:9 | { ... } | T | main.rs:2094:9:2094:20 | Output | +| main.rs:2138:13:2138:39 | S(...) | | main.rs:2131:5:2131:19 | S | +| main.rs:2138:13:2138:39 | S(...) | T | main.rs:2094:9:2094:20 | Output | +| main.rs:2138:15:2138:22 | (...) | | main.rs:2133:10:2133:17 | T | +| main.rs:2138:15:2138:38 | ... .my_add(...) | | main.rs:2094:9:2094:20 | Output | +| main.rs:2138:16:2138:19 | self | | main.rs:2131:5:2131:19 | S | +| main.rs:2138:16:2138:19 | self | T | main.rs:2133:10:2133:17 | T | +| main.rs:2138:16:2138:21 | self.0 | | main.rs:2133:10:2133:17 | T | +| main.rs:2138:31:2138:35 | other | | main.rs:2131:5:2131:19 | S | +| main.rs:2138:31:2138:35 | other | T | main.rs:2133:10:2133:17 | T | +| main.rs:2138:31:2138:37 | other.0 | | main.rs:2093:5:2098:5 | Self [trait MyAdd] | +| main.rs:2138:31:2138:37 | other.0 | | main.rs:2133:10:2133:17 | T | +| main.rs:2146:19:2146:22 | SelfParam | | main.rs:2131:5:2131:19 | S | +| main.rs:2146:19:2146:22 | SelfParam | T | main.rs:2142:10:2142:17 | T | +| main.rs:2146:25:2146:29 | other | | main.rs:2142:10:2142:17 | T | +| main.rs:2146:51:2148:9 | { ... } | | main.rs:2131:5:2131:19 | S | +| main.rs:2146:51:2148:9 | { ... } | T | main.rs:2094:9:2094:20 | Output | +| main.rs:2147:13:2147:37 | S(...) | | main.rs:2131:5:2131:19 | S | +| main.rs:2147:13:2147:37 | S(...) | T | main.rs:2094:9:2094:20 | Output | +| main.rs:2147:15:2147:22 | (...) | | main.rs:2142:10:2142:17 | T | +| main.rs:2147:15:2147:36 | ... .my_add(...) | | main.rs:2094:9:2094:20 | Output | +| main.rs:2147:16:2147:19 | self | | main.rs:2131:5:2131:19 | S | +| main.rs:2147:16:2147:19 | self | T | main.rs:2142:10:2142:17 | T | +| main.rs:2147:16:2147:21 | self.0 | | main.rs:2142:10:2142:17 | T | +| main.rs:2147:31:2147:35 | other | | main.rs:2142:10:2142:17 | T | +| main.rs:2158:19:2158:22 | SelfParam | | main.rs:2131:5:2131:19 | S | +| main.rs:2158:19:2158:22 | SelfParam | T | main.rs:2151:14:2151:14 | T | +| main.rs:2158:25:2158:29 | other | | file://:0:0:0:0 | & | +| main.rs:2158:25:2158:29 | other | &T | main.rs:2151:14:2151:14 | T | +| main.rs:2158:55:2160:9 | { ... } | | main.rs:2131:5:2131:19 | S | +| main.rs:2159:13:2159:37 | S(...) | | main.rs:2131:5:2131:19 | S | +| main.rs:2159:15:2159:22 | (...) | | main.rs:2151:14:2151:14 | T | +| main.rs:2159:16:2159:19 | self | | main.rs:2131:5:2131:19 | S | +| main.rs:2159:16:2159:19 | self | T | main.rs:2151:14:2151:14 | T | +| main.rs:2159:16:2159:21 | self.0 | | main.rs:2151:14:2151:14 | T | +| main.rs:2159:31:2159:35 | other | | file://:0:0:0:0 | & | +| main.rs:2159:31:2159:35 | other | &T | main.rs:2151:14:2151:14 | T | +| main.rs:2165:20:2165:24 | value | | main.rs:2163:18:2163:18 | T | +| main.rs:2170:20:2170:24 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2170:40:2172:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2171:13:2171:17 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2177:20:2177:24 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2177:41:2183:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2178:13:2182:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | +| main.rs:2178:13:2182:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | +| main.rs:2178:16:2178:20 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2178:22:2180:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2178:22:2180:13 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2179:17:2179:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2179:17:2179:17 | 1 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2180:20:2182:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2180:20:2182:13 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2181:17:2181:17 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2181:17:2181:17 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2188:21:2188:25 | value | | main.rs:2186:19:2186:19 | T | +| main.rs:2188:31:2188:31 | x | | main.rs:2186:5:2189:5 | Self [trait MyFrom2] | +| main.rs:2193:21:2193:25 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2193:33:2193:33 | _ | | {EXTERNAL LOCATION} | i64 | +| main.rs:2193:48:2195:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2194:13:2194:17 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2200:21:2200:25 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2200:34:2200:34 | _ | | {EXTERNAL LOCATION} | i64 | +| main.rs:2200:49:2206:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2201:13:2205:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | +| main.rs:2201:16:2201:20 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2201:22:2203:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2202:17:2202:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2203:20:2205:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2204:17:2204:17 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2211:15:2211:15 | x | | main.rs:2209:5:2215:5 | Self [trait MySelfTrait] | +| main.rs:2214:15:2214:15 | x | | main.rs:2209:5:2215:5 | Self [trait MySelfTrait] | +| main.rs:2219:15:2219:15 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2219:31:2221:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2220:13:2220:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2220:13:2220:17 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2220:17:2220:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2224:15:2224:15 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2224:32:2226:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2225:13:2225:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2225:13:2225:17 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2225:17:2225:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2231:15:2231:15 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:2231:31:2233:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2232:13:2232:13 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2232:13:2232:13 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2236:15:2236:15 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:2236:32:2238:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:2237:13:2237:13 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:2242:13:2242:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2242:22:2242:23 | 73 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2242:22:2242:23 | 73 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2243:9:2243:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2243:9:2243:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2243:18:2243:21 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2244:9:2244:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2244:9:2244:23 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2244:18:2244:22 | &5i64 | | file://:0:0:0:0 | & | +| main.rs:2244:18:2244:22 | &5i64 | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:2244:19:2244:22 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2245:9:2245:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2245:9:2245:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2245:18:2245:21 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2247:9:2247:15 | S(...) | | main.rs:2131:5:2131:19 | S | +| main.rs:2247:9:2247:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | +| main.rs:2247:9:2247:31 | ... .my_add(...) | | main.rs:2131:5:2131:19 | S | +| main.rs:2247:11:2247:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2247:24:2247:30 | S(...) | | main.rs:2131:5:2131:19 | S | +| main.rs:2247:24:2247:30 | S(...) | T | {EXTERNAL LOCATION} | i64 | +| main.rs:2247:26:2247:29 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2248:9:2248:15 | S(...) | | main.rs:2131:5:2131:19 | S | +| main.rs:2248:9:2248:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | +| main.rs:2248:11:2248:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2248:24:2248:27 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2249:9:2249:15 | S(...) | | main.rs:2131:5:2131:19 | S | +| main.rs:2249:9:2249:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | +| main.rs:2249:9:2249:29 | ... .my_add(...) | | main.rs:2131:5:2131:19 | S | +| main.rs:2249:11:2249:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2249:24:2249:28 | &3i64 | | file://:0:0:0:0 | & | +| main.rs:2249:24:2249:28 | &3i64 | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:2249:25:2249:28 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2251:13:2251:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2251:17:2251:35 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2251:30:2251:34 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2252:13:2252:13 | y | | {EXTERNAL LOCATION} | i64 | +| main.rs:2252:17:2252:34 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2252:30:2252:33 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2253:13:2253:13 | z | | {EXTERNAL LOCATION} | i64 | +| main.rs:2253:22:2253:43 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2253:38:2253:42 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2254:9:2254:34 | ...::my_from2(...) | | file://:0:0:0:0 | () | +| main.rs:2254:23:2254:27 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2254:30:2254:33 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2255:9:2255:33 | ...::my_from2(...) | | file://:0:0:0:0 | () | +| main.rs:2255:23:2255:26 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2255:29:2255:32 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2256:9:2256:38 | ...::my_from2(...) | | file://:0:0:0:0 | () | +| main.rs:2256:27:2256:31 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2256:34:2256:37 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2258:9:2258:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2258:17:2258:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2259:9:2259:22 | ...::f2(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2259:17:2259:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2260:9:2260:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2260:18:2260:21 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2261:9:2261:22 | ...::f2(...) | | {EXTERNAL LOCATION} | bool | +| main.rs:2261:18:2261:21 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2262:9:2262:30 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2262:25:2262:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2263:9:2263:30 | ...::f2(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2263:25:2263:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2264:9:2264:29 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2264:25:2264:28 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2265:9:2265:29 | ...::f2(...) | | {EXTERNAL LOCATION} | bool | +| main.rs:2265:25:2265:28 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2273:26:2275:9 | { ... } | | main.rs:2270:5:2270:24 | MyCallable | +| main.rs:2274:13:2274:25 | MyCallable {...} | | main.rs:2270:5:2270:24 | MyCallable | +| main.rs:2277:17:2277:21 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2277:17:2277:21 | SelfParam | &T | main.rs:2270:5:2270:24 | MyCallable | +| main.rs:2277:31:2279:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2278:13:2278:13 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2278:13:2278:13 | 1 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2285:13:2285:13 | i | | {EXTERNAL LOCATION} | i32 | +| main.rs:2285:18:2285:26 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2285:18:2285:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2285:19:2285:19 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2285:22:2285:22 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2285:25:2285:25 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2286:18:2286:26 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2286:18:2286:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2286:18:2286:41 | ... .map(...) | | file://:0:0:0:0 | [] | +| main.rs:2286:19:2286:19 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2286:22:2286:22 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2286:25:2286:25 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2286:32:2286:40 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | +| main.rs:2286:32:2286:40 | \|...\| ... | dyn(Args) | file://:0:0:0:0 | (T_1) | +| main.rs:2286:40:2286:40 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2287:13:2287:13 | i | | {EXTERNAL LOCATION} | Item | +| main.rs:2287:13:2287:13 | i | | {EXTERNAL LOCATION} | i32 | +| main.rs:2287:18:2287:26 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2287:18:2287:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2287:18:2287:38 | ... .into_iter() | | {EXTERNAL LOCATION} | IntoIter | +| main.rs:2287:18:2287:38 | ... .into_iter() | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2287:19:2287:19 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2287:22:2287:22 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2287:25:2287:25 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2289:13:2289:17 | vals1 | | file://:0:0:0:0 | [] | +| main.rs:2289:13:2289:17 | vals1 | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2289:13:2289:17 | vals1 | [T;...] | {EXTERNAL LOCATION} | u8 | +| main.rs:2289:21:2289:31 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2289:21:2289:31 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2289:21:2289:31 | [...] | [T;...] | {EXTERNAL LOCATION} | u8 | +| main.rs:2289:22:2289:24 | 1u8 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2289:27:2289:27 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2289:27:2289:27 | 2 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2289:30:2289:30 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2289:30:2289:30 | 3 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2290:13:2290:13 | u | | {EXTERNAL LOCATION} | i32 | +| main.rs:2290:13:2290:13 | u | | {EXTERNAL LOCATION} | u8 | +| main.rs:2290:18:2290:22 | vals1 | | file://:0:0:0:0 | [] | +| main.rs:2290:18:2290:22 | vals1 | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2290:18:2290:22 | vals1 | [T;...] | {EXTERNAL LOCATION} | u8 | +| main.rs:2292:13:2292:17 | vals2 | | file://:0:0:0:0 | [] | +| main.rs:2292:13:2292:17 | vals2 | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2292:21:2292:29 | [1u16; 3] | | file://:0:0:0:0 | [] | +| main.rs:2292:21:2292:29 | [1u16; 3] | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2292:22:2292:25 | 1u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2292:28:2292:28 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2293:13:2293:13 | u | | {EXTERNAL LOCATION} | u16 | +| main.rs:2293:18:2293:22 | vals2 | | file://:0:0:0:0 | [] | +| main.rs:2293:18:2293:22 | vals2 | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2295:13:2295:17 | vals3 | | file://:0:0:0:0 | [] | +| main.rs:2295:13:2295:17 | vals3 | [T;...] | {EXTERNAL LOCATION} | u32 | +| main.rs:2295:26:2295:26 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2295:31:2295:39 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2295:31:2295:39 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2295:31:2295:39 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | +| main.rs:2295:32:2295:32 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2295:32:2295:32 | 1 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2295:35:2295:35 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2295:35:2295:35 | 2 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2295:38:2295:38 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2295:38:2295:38 | 3 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2296:13:2296:13 | u | | {EXTERNAL LOCATION} | u32 | +| main.rs:2296:18:2296:22 | vals3 | | file://:0:0:0:0 | [] | +| main.rs:2296:18:2296:22 | vals3 | [T;...] | {EXTERNAL LOCATION} | u32 | +| main.rs:2298:13:2298:17 | vals4 | | file://:0:0:0:0 | [] | +| main.rs:2298:13:2298:17 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | +| main.rs:2298:26:2298:26 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2298:31:2298:36 | [1; 3] | | file://:0:0:0:0 | [] | +| main.rs:2298:31:2298:36 | [1; 3] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2298:31:2298:36 | [1; 3] | [T;...] | {EXTERNAL LOCATION} | u64 | +| main.rs:2298:32:2298:32 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2298:32:2298:32 | 1 | | {EXTERNAL LOCATION} | u64 | +| main.rs:2298:35:2298:35 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2299:13:2299:13 | u | | {EXTERNAL LOCATION} | u64 | +| main.rs:2299:18:2299:22 | vals4 | | file://:0:0:0:0 | [] | +| main.rs:2299:18:2299:22 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | +| main.rs:2301:17:2301:24 | strings1 | | file://:0:0:0:0 | [] | +| main.rs:2301:17:2301:24 | strings1 | [T;...] | file://:0:0:0:0 | & | +| main.rs:2301:17:2301:24 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2301:28:2301:48 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2301:28:2301:48 | [...] | [T;...] | file://:0:0:0:0 | & | +| main.rs:2301:28:2301:48 | [...] | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2301:29:2301:33 | "foo" | | file://:0:0:0:0 | & | +| main.rs:2301:29:2301:33 | "foo" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2301:36:2301:40 | "bar" | | file://:0:0:0:0 | & | +| main.rs:2301:36:2301:40 | "bar" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2301:43:2301:47 | "baz" | | file://:0:0:0:0 | & | +| main.rs:2301:43:2301:47 | "baz" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2302:13:2302:13 | s | | {EXTERNAL LOCATION} | Item | +| main.rs:2302:13:2302:13 | s | | file://:0:0:0:0 | & | +| main.rs:2302:13:2302:13 | s | &T | file://:0:0:0:0 | & | +| main.rs:2302:13:2302:13 | s | &T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2302:18:2302:26 | &strings1 | | file://:0:0:0:0 | & | +| main.rs:2302:18:2302:26 | &strings1 | &T | file://:0:0:0:0 | [] | +| main.rs:2302:18:2302:26 | &strings1 | &T.[T;...] | file://:0:0:0:0 | & | +| main.rs:2302:18:2302:26 | &strings1 | &T.[T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2302:19:2302:26 | strings1 | | file://:0:0:0:0 | [] | +| main.rs:2302:19:2302:26 | strings1 | [T;...] | file://:0:0:0:0 | & | +| main.rs:2302:19:2302:26 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2303:13:2303:13 | s | | {EXTERNAL LOCATION} | Item | +| main.rs:2303:13:2303:13 | s | | file://:0:0:0:0 | & | +| main.rs:2303:13:2303:13 | s | &T | file://:0:0:0:0 | & | +| main.rs:2303:13:2303:13 | s | &T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2303:18:2303:30 | &mut strings1 | | file://:0:0:0:0 | & | +| main.rs:2303:18:2303:30 | &mut strings1 | &T | file://:0:0:0:0 | [] | +| main.rs:2303:18:2303:30 | &mut strings1 | &T.[T;...] | file://:0:0:0:0 | & | +| main.rs:2303:18:2303:30 | &mut strings1 | &T.[T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2303:23:2303:30 | strings1 | | file://:0:0:0:0 | [] | +| main.rs:2303:23:2303:30 | strings1 | [T;...] | file://:0:0:0:0 | & | +| main.rs:2303:23:2303:30 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2304:13:2304:13 | s | | file://:0:0:0:0 | & | +| main.rs:2304:13:2304:13 | s | &T | {EXTERNAL LOCATION} | str | +| main.rs:2304:18:2304:25 | strings1 | | file://:0:0:0:0 | [] | +| main.rs:2304:18:2304:25 | strings1 | [T;...] | file://:0:0:0:0 | & | +| main.rs:2304:18:2304:25 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2306:13:2306:20 | strings2 | | file://:0:0:0:0 | [] | +| main.rs:2306:13:2306:20 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2307:9:2311:9 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2307:9:2311:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2308:13:2308:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2308:26:2308:30 | "foo" | | file://:0:0:0:0 | & | +| main.rs:2308:26:2308:30 | "foo" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2309:13:2309:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2309:26:2309:30 | "bar" | | file://:0:0:0:0 | & | +| main.rs:2309:26:2309:30 | "bar" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2310:13:2310:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2310:26:2310:30 | "baz" | | file://:0:0:0:0 | & | +| main.rs:2310:26:2310:30 | "baz" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2312:13:2312:13 | s | | {EXTERNAL LOCATION} | String | +| main.rs:2312:18:2312:25 | strings2 | | file://:0:0:0:0 | [] | +| main.rs:2312:18:2312:25 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2314:13:2314:20 | strings3 | | file://:0:0:0:0 | & | +| main.rs:2314:13:2314:20 | strings3 | &T | file://:0:0:0:0 | [] | +| main.rs:2314:13:2314:20 | strings3 | &T.[T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2315:9:2319:9 | &... | | file://:0:0:0:0 | & | +| main.rs:2315:9:2319:9 | &... | &T | file://:0:0:0:0 | [] | +| main.rs:2315:9:2319:9 | &... | &T.[T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2315:10:2319:9 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2315:10:2319:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2316:13:2316:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2316:26:2316:30 | "foo" | | file://:0:0:0:0 | & | +| main.rs:2316:26:2316:30 | "foo" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2317:13:2317:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2317:26:2317:30 | "bar" | | file://:0:0:0:0 | & | +| main.rs:2317:26:2317:30 | "bar" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2318:13:2318:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2318:26:2318:30 | "baz" | | file://:0:0:0:0 | & | +| main.rs:2318:26:2318:30 | "baz" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2320:13:2320:13 | s | | {EXTERNAL LOCATION} | Item | +| main.rs:2320:13:2320:13 | s | | file://:0:0:0:0 | & | +| main.rs:2320:13:2320:13 | s | &T | {EXTERNAL LOCATION} | String | +| main.rs:2320:18:2320:25 | strings3 | | file://:0:0:0:0 | & | +| main.rs:2320:18:2320:25 | strings3 | &T | file://:0:0:0:0 | [] | +| main.rs:2320:18:2320:25 | strings3 | &T.[T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2322:13:2322:21 | callables | | file://:0:0:0:0 | [] | +| main.rs:2322:13:2322:21 | callables | [T;...] | main.rs:2270:5:2270:24 | MyCallable | +| main.rs:2322:25:2322:81 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2322:25:2322:81 | [...] | [T;...] | main.rs:2270:5:2270:24 | MyCallable | +| main.rs:2322:26:2322:42 | ...::new(...) | | main.rs:2270:5:2270:24 | MyCallable | +| main.rs:2322:45:2322:61 | ...::new(...) | | main.rs:2270:5:2270:24 | MyCallable | +| main.rs:2322:64:2322:80 | ...::new(...) | | main.rs:2270:5:2270:24 | MyCallable | +| main.rs:2323:13:2323:13 | c | | main.rs:2270:5:2270:24 | MyCallable | +| main.rs:2324:12:2324:20 | callables | | file://:0:0:0:0 | [] | +| main.rs:2324:12:2324:20 | callables | [T;...] | main.rs:2270:5:2270:24 | MyCallable | +| main.rs:2326:17:2326:22 | result | | {EXTERNAL LOCATION} | i64 | +| main.rs:2326:26:2326:26 | c | | main.rs:2270:5:2270:24 | MyCallable | +| main.rs:2326:26:2326:33 | c.call() | | {EXTERNAL LOCATION} | i64 | +| main.rs:2331:13:2331:13 | i | | {EXTERNAL LOCATION} | Item | +| main.rs:2331:13:2331:13 | i | | {EXTERNAL LOCATION} | i32 | +| main.rs:2331:18:2331:18 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2331:18:2331:22 | 0..10 | | {EXTERNAL LOCATION} | Range | +| main.rs:2331:18:2331:22 | 0..10 | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2331:21:2331:22 | 10 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2332:13:2332:13 | u | | {EXTERNAL LOCATION} | Range | +| main.rs:2332:13:2332:13 | u | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2332:13:2332:13 | u | Idx | {EXTERNAL LOCATION} | u8 | +| main.rs:2332:18:2332:26 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2332:18:2332:26 | [...] | [T;...] | {EXTERNAL LOCATION} | Range | +| main.rs:2332:18:2332:26 | [...] | [T;...].Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2332:18:2332:26 | [...] | [T;...].Idx | {EXTERNAL LOCATION} | u8 | +| main.rs:2332:19:2332:21 | 0u8 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2332:19:2332:25 | 0u8..10 | | {EXTERNAL LOCATION} | Range | +| main.rs:2332:19:2332:25 | 0u8..10 | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2332:19:2332:25 | 0u8..10 | Idx | {EXTERNAL LOCATION} | u8 | +| main.rs:2332:24:2332:25 | 10 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2332:24:2332:25 | 10 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2333:13:2333:17 | range | | {EXTERNAL LOCATION} | Range | +| main.rs:2333:13:2333:17 | range | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2333:21:2333:21 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2333:21:2333:25 | 0..10 | | {EXTERNAL LOCATION} | Range | +| main.rs:2333:21:2333:25 | 0..10 | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2333:24:2333:25 | 10 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2334:13:2334:13 | i | | {EXTERNAL LOCATION} | Item | +| main.rs:2334:13:2334:13 | i | | {EXTERNAL LOCATION} | i32 | +| main.rs:2334:18:2334:22 | range | | {EXTERNAL LOCATION} | Range | +| main.rs:2334:18:2334:22 | range | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2336:13:2336:18 | range1 | | {EXTERNAL LOCATION} | Range | +| main.rs:2336:13:2336:18 | range1 | Idx | {EXTERNAL LOCATION} | u16 | +| main.rs:2337:9:2340:9 | ...::Range {...} | | {EXTERNAL LOCATION} | Range | +| main.rs:2337:9:2340:9 | ...::Range {...} | Idx | {EXTERNAL LOCATION} | u16 | +| main.rs:2338:20:2338:23 | 0u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2339:18:2339:22 | 10u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2341:13:2341:13 | u | | {EXTERNAL LOCATION} | Item | +| main.rs:2341:13:2341:13 | u | | {EXTERNAL LOCATION} | u16 | +| main.rs:2341:18:2341:23 | range1 | | {EXTERNAL LOCATION} | Range | +| main.rs:2341:18:2341:23 | range1 | Idx | {EXTERNAL LOCATION} | u16 | +| main.rs:2345:26:2345:26 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2345:29:2345:29 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2345:32:2345:32 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2348:13:2348:18 | vals4a | | {EXTERNAL LOCATION} | Vec | +| main.rs:2348:13:2348:18 | vals4a | A | {EXTERNAL LOCATION} | Global | +| main.rs:2348:13:2348:18 | vals4a | T | {EXTERNAL LOCATION} | u16 | +| main.rs:2348:32:2348:43 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2348:32:2348:43 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2348:32:2348:43 | [...] | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2348:32:2348:52 | ... .to_vec() | | {EXTERNAL LOCATION} | Vec | +| main.rs:2348:32:2348:52 | ... .to_vec() | A | {EXTERNAL LOCATION} | Global | +| main.rs:2348:32:2348:52 | ... .to_vec() | T | {EXTERNAL LOCATION} | u16 | +| main.rs:2348:33:2348:36 | 1u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2348:39:2348:39 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2348:39:2348:39 | 2 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2348:42:2348:42 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2348:42:2348:42 | 3 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2349:13:2349:13 | u | | {EXTERNAL LOCATION} | u16 | +| main.rs:2349:13:2349:13 | u | | file://:0:0:0:0 | & | +| main.rs:2349:18:2349:23 | vals4a | | {EXTERNAL LOCATION} | Vec | +| main.rs:2349:18:2349:23 | vals4a | A | {EXTERNAL LOCATION} | Global | +| main.rs:2349:18:2349:23 | vals4a | T | {EXTERNAL LOCATION} | u16 | +| main.rs:2351:22:2351:33 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2351:22:2351:33 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2351:22:2351:33 | [...] | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2351:23:2351:26 | 1u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2351:29:2351:29 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2351:29:2351:29 | 2 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2351:32:2351:32 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2351:32:2351:32 | 3 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2354:13:2354:17 | vals5 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2354:13:2354:17 | vals5 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2354:13:2354:17 | vals5 | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2354:13:2354:17 | vals5 | T | {EXTERNAL LOCATION} | u32 | +| main.rs:2354:21:2354:43 | ...::from(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2354:21:2354:43 | ...::from(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2354:21:2354:43 | ...::from(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2354:21:2354:43 | ...::from(...) | T | {EXTERNAL LOCATION} | u32 | +| main.rs:2354:31:2354:42 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2354:31:2354:42 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2354:31:2354:42 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | +| main.rs:2354:32:2354:35 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2354:38:2354:38 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2354:38:2354:38 | 2 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2354:41:2354:41 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2354:41:2354:41 | 3 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2355:13:2355:13 | u | | {EXTERNAL LOCATION} | i32 | +| main.rs:2355:13:2355:13 | u | | {EXTERNAL LOCATION} | u32 | +| main.rs:2355:13:2355:13 | u | | file://:0:0:0:0 | & | +| main.rs:2355:18:2355:22 | vals5 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2355:18:2355:22 | vals5 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2355:18:2355:22 | vals5 | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2355:18:2355:22 | vals5 | T | {EXTERNAL LOCATION} | u32 | +| main.rs:2357:13:2357:17 | vals6 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2357:13:2357:17 | vals6 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2357:13:2357:17 | vals6 | T | file://:0:0:0:0 | & | +| main.rs:2357:13:2357:17 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 | +| main.rs:2357:32:2357:43 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2357:32:2357:43 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2357:32:2357:43 | [...] | [T;...] | {EXTERNAL LOCATION} | u64 | +| main.rs:2357:32:2357:60 | ... .collect() | | {EXTERNAL LOCATION} | Vec | +| main.rs:2357:32:2357:60 | ... .collect() | A | {EXTERNAL LOCATION} | Global | +| main.rs:2357:32:2357:60 | ... .collect() | T | file://:0:0:0:0 | & | +| main.rs:2357:32:2357:60 | ... .collect() | T.&T | {EXTERNAL LOCATION} | u64 | +| main.rs:2357:33:2357:36 | 1u64 | | {EXTERNAL LOCATION} | u64 | +| main.rs:2357:39:2357:39 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2357:39:2357:39 | 2 | | {EXTERNAL LOCATION} | u64 | +| main.rs:2357:42:2357:42 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2357:42:2357:42 | 3 | | {EXTERNAL LOCATION} | u64 | +| main.rs:2358:13:2358:13 | u | | file://:0:0:0:0 | & | +| main.rs:2358:13:2358:13 | u | &T | {EXTERNAL LOCATION} | u64 | +| main.rs:2358:18:2358:22 | vals6 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2358:18:2358:22 | vals6 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2358:18:2358:22 | vals6 | T | file://:0:0:0:0 | & | +| main.rs:2358:18:2358:22 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 | +| main.rs:2360:17:2360:21 | vals7 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2360:17:2360:21 | vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2360:17:2360:21 | vals7 | T | {EXTERNAL LOCATION} | u8 | +| main.rs:2360:25:2360:34 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2360:25:2360:34 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2360:25:2360:34 | ...::new(...) | T | {EXTERNAL LOCATION} | u8 | +| main.rs:2361:9:2361:13 | vals7 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2361:9:2361:13 | vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2361:9:2361:13 | vals7 | T | {EXTERNAL LOCATION} | u8 | +| main.rs:2361:20:2361:22 | 1u8 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2362:13:2362:13 | u | | {EXTERNAL LOCATION} | u8 | +| main.rs:2362:13:2362:13 | u | | file://:0:0:0:0 | & | +| main.rs:2362:18:2362:22 | vals7 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2362:18:2362:22 | vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2362:18:2362:22 | vals7 | T | {EXTERNAL LOCATION} | u8 | +| main.rs:2364:33:2364:33 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2364:36:2364:36 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2364:45:2364:45 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2364:48:2364:48 | 4 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2371:17:2371:20 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2371:17:2371:20 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2371:17:2371:20 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2371:17:2371:20 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2371:17:2371:20 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2371:17:2371:20 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2371:17:2371:20 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2371:24:2371:55 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2371:24:2371:55 | ...::new(...) | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2371:24:2371:55 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2371:24:2371:55 | ...::new(...) | V | {EXTERNAL LOCATION} | Box | +| main.rs:2371:24:2371:55 | ...::new(...) | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2371:24:2371:55 | ...::new(...) | V.T | file://:0:0:0:0 | & | +| main.rs:2371:24:2371:55 | ...::new(...) | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2372:9:2372:12 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2372:9:2372:12 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2372:9:2372:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2372:9:2372:12 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2372:9:2372:12 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2372:9:2372:12 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2372:9:2372:12 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2372:9:2372:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2372:9:2372:39 | map1.insert(...) | T | {EXTERNAL LOCATION} | Box | +| main.rs:2372:9:2372:39 | map1.insert(...) | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2372:9:2372:39 | map1.insert(...) | T.T | file://:0:0:0:0 | & | +| main.rs:2372:9:2372:39 | map1.insert(...) | T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2372:21:2372:21 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2372:24:2372:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2372:24:2372:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2372:24:2372:38 | ...::new(...) | T | file://:0:0:0:0 | & | +| main.rs:2372:24:2372:38 | ...::new(...) | T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2372:33:2372:37 | "one" | | file://:0:0:0:0 | & | +| main.rs:2372:33:2372:37 | "one" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2373:9:2373:12 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2373:9:2373:12 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2373:9:2373:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2373:9:2373:12 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2373:9:2373:12 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2373:9:2373:12 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2373:9:2373:12 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2373:9:2373:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2373:9:2373:39 | map1.insert(...) | T | {EXTERNAL LOCATION} | Box | +| main.rs:2373:9:2373:39 | map1.insert(...) | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2373:9:2373:39 | map1.insert(...) | T.T | file://:0:0:0:0 | & | +| main.rs:2373:9:2373:39 | map1.insert(...) | T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2373:21:2373:21 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2373:24:2373:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2373:24:2373:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2373:24:2373:38 | ...::new(...) | T | file://:0:0:0:0 | & | +| main.rs:2373:24:2373:38 | ...::new(...) | T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2373:33:2373:37 | "two" | | file://:0:0:0:0 | & | +| main.rs:2373:33:2373:37 | "two" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2374:13:2374:15 | key | | {EXTERNAL LOCATION} | Item | +| main.rs:2374:13:2374:15 | key | | file://:0:0:0:0 | & | +| main.rs:2374:13:2374:15 | key | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:2374:20:2374:23 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2374:20:2374:23 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2374:20:2374:23 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2374:20:2374:23 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2374:20:2374:23 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2374:20:2374:23 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2374:20:2374:23 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2374:20:2374:30 | map1.keys() | | {EXTERNAL LOCATION} | Keys | +| main.rs:2374:20:2374:30 | map1.keys() | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2374:20:2374:30 | map1.keys() | V | {EXTERNAL LOCATION} | Box | +| main.rs:2374:20:2374:30 | map1.keys() | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2374:20:2374:30 | map1.keys() | V.T | file://:0:0:0:0 | & | +| main.rs:2374:20:2374:30 | map1.keys() | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2375:13:2375:17 | value | | {EXTERNAL LOCATION} | Item | +| main.rs:2375:13:2375:17 | value | | file://:0:0:0:0 | & | +| main.rs:2375:13:2375:17 | value | &T | {EXTERNAL LOCATION} | Box | +| main.rs:2375:13:2375:17 | value | &T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2375:13:2375:17 | value | &T.T | file://:0:0:0:0 | & | +| main.rs:2375:13:2375:17 | value | &T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2375:22:2375:25 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2375:22:2375:25 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2375:22:2375:25 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2375:22:2375:25 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2375:22:2375:25 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2375:22:2375:25 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2375:22:2375:25 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2375:22:2375:34 | map1.values() | | {EXTERNAL LOCATION} | Values | +| main.rs:2375:22:2375:34 | map1.values() | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2375:22:2375:34 | map1.values() | V | {EXTERNAL LOCATION} | Box | +| main.rs:2375:22:2375:34 | map1.values() | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2375:22:2375:34 | map1.values() | V.T | file://:0:0:0:0 | & | +| main.rs:2375:22:2375:34 | map1.values() | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2376:13:2376:24 | TuplePat | | {EXTERNAL LOCATION} | Item | +| main.rs:2376:13:2376:24 | TuplePat | | file://:0:0:0:0 | (T_2) | +| main.rs:2376:13:2376:24 | TuplePat | 0(2) | file://:0:0:0:0 | & | +| main.rs:2376:13:2376:24 | TuplePat | 0(2).&T | {EXTERNAL LOCATION} | i32 | +| main.rs:2376:13:2376:24 | TuplePat | 1(2) | file://:0:0:0:0 | & | +| main.rs:2376:13:2376:24 | TuplePat | 1(2).&T | {EXTERNAL LOCATION} | Box | +| main.rs:2376:13:2376:24 | TuplePat | 1(2).&T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2376:13:2376:24 | TuplePat | 1(2).&T.T | file://:0:0:0:0 | & | +| main.rs:2376:13:2376:24 | TuplePat | 1(2).&T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2376:14:2376:16 | key | | file://:0:0:0:0 | & | +| main.rs:2376:14:2376:16 | key | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:2376:19:2376:23 | value | | file://:0:0:0:0 | & | +| main.rs:2376:19:2376:23 | value | &T | {EXTERNAL LOCATION} | Box | +| main.rs:2376:19:2376:23 | value | &T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2376:19:2376:23 | value | &T.T | file://:0:0:0:0 | & | +| main.rs:2376:19:2376:23 | value | &T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2376:29:2376:32 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2376:29:2376:32 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2376:29:2376:32 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2376:29:2376:32 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2376:29:2376:32 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2376:29:2376:32 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2376:29:2376:32 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2376:29:2376:39 | map1.iter() | | {EXTERNAL LOCATION} | Iter | +| main.rs:2376:29:2376:39 | map1.iter() | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2376:29:2376:39 | map1.iter() | V | {EXTERNAL LOCATION} | Box | +| main.rs:2376:29:2376:39 | map1.iter() | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2376:29:2376:39 | map1.iter() | V.T | file://:0:0:0:0 | & | +| main.rs:2376:29:2376:39 | map1.iter() | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2377:13:2377:24 | TuplePat | | {EXTERNAL LOCATION} | Item | +| main.rs:2377:13:2377:24 | TuplePat | | file://:0:0:0:0 | (T_2) | +| main.rs:2377:13:2377:24 | TuplePat | 0(2) | file://:0:0:0:0 | & | +| main.rs:2377:13:2377:24 | TuplePat | 0(2).&T | {EXTERNAL LOCATION} | i32 | +| main.rs:2377:13:2377:24 | TuplePat | 1(2) | file://:0:0:0:0 | & | +| main.rs:2377:13:2377:24 | TuplePat | 1(2).&T | {EXTERNAL LOCATION} | Box | +| main.rs:2377:13:2377:24 | TuplePat | 1(2).&T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2377:13:2377:24 | TuplePat | 1(2).&T.T | file://:0:0:0:0 | & | +| main.rs:2377:13:2377:24 | TuplePat | 1(2).&T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2377:14:2377:16 | key | | file://:0:0:0:0 | & | +| main.rs:2377:14:2377:16 | key | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:2377:19:2377:23 | value | | file://:0:0:0:0 | & | +| main.rs:2377:19:2377:23 | value | &T | {EXTERNAL LOCATION} | Box | +| main.rs:2377:19:2377:23 | value | &T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2377:19:2377:23 | value | &T.T | file://:0:0:0:0 | & | +| main.rs:2377:19:2377:23 | value | &T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2377:29:2377:33 | &map1 | | file://:0:0:0:0 | & | +| main.rs:2377:29:2377:33 | &map1 | &T | {EXTERNAL LOCATION} | HashMap | +| main.rs:2377:29:2377:33 | &map1 | &T.K | {EXTERNAL LOCATION} | i32 | +| main.rs:2377:29:2377:33 | &map1 | &T.S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2377:29:2377:33 | &map1 | &T.V | {EXTERNAL LOCATION} | Box | +| main.rs:2377:29:2377:33 | &map1 | &T.V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2377:29:2377:33 | &map1 | &T.V.T | file://:0:0:0:0 | & | +| main.rs:2377:29:2377:33 | &map1 | &T.V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2377:30:2377:33 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2377:30:2377:33 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2377:30:2377:33 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2377:30:2377:33 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2377:30:2377:33 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2377:30:2377:33 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2377:30:2377:33 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2381:17:2381:17 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2381:26:2381:26 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2381:26:2381:26 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2383:23:2383:23 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2383:23:2383:28 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2383:27:2383:28 | 10 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2383:27:2383:28 | 10 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2385:13:2385:13 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2385:13:2385:18 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:2385:18:2385:18 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2397:40:2399:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| main.rs:2397:40:2399:9 | { ... } | T | main.rs:2391:5:2391:20 | S1 | +| main.rs:2397:40:2399:9 | { ... } | T.T | main.rs:2396:10:2396:19 | T | +| main.rs:2398:13:2398:16 | None | | {EXTERNAL LOCATION} | Option | +| main.rs:2398:13:2398:16 | None | T | main.rs:2391:5:2391:20 | S1 | +| main.rs:2398:13:2398:16 | None | T.T | main.rs:2396:10:2396:19 | T | +| main.rs:2401:30:2403:9 | { ... } | | main.rs:2391:5:2391:20 | S1 | +| main.rs:2401:30:2403:9 | { ... } | T | main.rs:2396:10:2396:19 | T | +| main.rs:2402:13:2402:28 | S1(...) | | main.rs:2391:5:2391:20 | S1 | +| main.rs:2402:13:2402:28 | S1(...) | T | main.rs:2396:10:2396:19 | T | +| main.rs:2402:16:2402:27 | ...::default(...) | | main.rs:2396:10:2396:19 | T | +| main.rs:2405:19:2405:22 | SelfParam | | main.rs:2391:5:2391:20 | S1 | +| main.rs:2405:19:2405:22 | SelfParam | T | main.rs:2396:10:2396:19 | T | +| main.rs:2405:33:2407:9 | { ... } | | main.rs:2391:5:2391:20 | S1 | +| main.rs:2405:33:2407:9 | { ... } | T | main.rs:2396:10:2396:19 | T | +| main.rs:2406:13:2406:16 | self | | main.rs:2391:5:2391:20 | S1 | +| main.rs:2406:13:2406:16 | self | T | main.rs:2396:10:2396:19 | T | +| main.rs:2418:15:2418:15 | x | | main.rs:2418:12:2418:12 | T | +| main.rs:2418:26:2420:5 | { ... } | | main.rs:2418:12:2418:12 | T | +| main.rs:2419:9:2419:9 | x | | main.rs:2418:12:2418:12 | T | +| main.rs:2423:13:2423:14 | x1 | | {EXTERNAL LOCATION} | Option | +| main.rs:2423:13:2423:14 | x1 | T | main.rs:2391:5:2391:20 | S1 | +| main.rs:2423:13:2423:14 | x1 | T.T | main.rs:2393:5:2394:14 | S2 | +| main.rs:2423:34:2423:48 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2423:34:2423:48 | ...::assoc_fun(...) | T | main.rs:2391:5:2391:20 | S1 | +| main.rs:2423:34:2423:48 | ...::assoc_fun(...) | T.T | main.rs:2393:5:2394:14 | S2 | +| main.rs:2424:13:2424:14 | x2 | | {EXTERNAL LOCATION} | Option | +| main.rs:2424:13:2424:14 | x2 | T | main.rs:2391:5:2391:20 | S1 | +| main.rs:2424:13:2424:14 | x2 | T.T | main.rs:2393:5:2394:14 | S2 | +| main.rs:2424:18:2424:38 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2424:18:2424:38 | ...::assoc_fun(...) | T | main.rs:2391:5:2391:20 | S1 | +| main.rs:2424:18:2424:38 | ...::assoc_fun(...) | T.T | main.rs:2393:5:2394:14 | S2 | +| main.rs:2425:13:2425:14 | x3 | | {EXTERNAL LOCATION} | Option | +| main.rs:2425:13:2425:14 | x3 | T | main.rs:2391:5:2391:20 | S1 | +| main.rs:2425:13:2425:14 | x3 | T.T | main.rs:2393:5:2394:14 | S2 | +| main.rs:2425:18:2425:32 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2425:18:2425:32 | ...::assoc_fun(...) | T | main.rs:2391:5:2391:20 | S1 | +| main.rs:2425:18:2425:32 | ...::assoc_fun(...) | T.T | main.rs:2393:5:2394:14 | S2 | +| main.rs:2426:13:2426:14 | x4 | | main.rs:2391:5:2391:20 | S1 | +| main.rs:2426:13:2426:14 | x4 | T | main.rs:2393:5:2394:14 | S2 | +| main.rs:2426:18:2426:48 | ...::method(...) | | main.rs:2391:5:2391:20 | S1 | +| main.rs:2426:18:2426:48 | ...::method(...) | T | main.rs:2393:5:2394:14 | S2 | +| main.rs:2426:35:2426:47 | ...::default(...) | | main.rs:2391:5:2391:20 | S1 | +| main.rs:2426:35:2426:47 | ...::default(...) | T | main.rs:2393:5:2394:14 | S2 | +| main.rs:2427:13:2427:14 | x5 | | main.rs:2391:5:2391:20 | S1 | +| main.rs:2427:13:2427:14 | x5 | T | main.rs:2393:5:2394:14 | S2 | +| main.rs:2427:18:2427:42 | ...::method(...) | | main.rs:2391:5:2391:20 | S1 | +| main.rs:2427:18:2427:42 | ...::method(...) | T | main.rs:2393:5:2394:14 | S2 | +| main.rs:2427:29:2427:41 | ...::default(...) | | main.rs:2391:5:2391:20 | S1 | +| main.rs:2427:29:2427:41 | ...::default(...) | T | main.rs:2393:5:2394:14 | S2 | +| main.rs:2428:13:2428:14 | x6 | | main.rs:2412:5:2412:27 | S4 | +| main.rs:2428:13:2428:14 | x6 | T4 | main.rs:2393:5:2394:14 | S2 | +| main.rs:2428:18:2428:45 | S4::<...>(...) | | main.rs:2412:5:2412:27 | S4 | +| main.rs:2428:18:2428:45 | S4::<...>(...) | T4 | main.rs:2393:5:2394:14 | S2 | +| main.rs:2428:27:2428:44 | ...::default(...) | | main.rs:2393:5:2394:14 | S2 | +| main.rs:2429:13:2429:14 | x7 | | main.rs:2412:5:2412:27 | S4 | +| main.rs:2429:13:2429:14 | x7 | T4 | main.rs:2393:5:2394:14 | S2 | +| main.rs:2429:18:2429:23 | S4(...) | | main.rs:2412:5:2412:27 | S4 | +| main.rs:2429:18:2429:23 | S4(...) | T4 | main.rs:2393:5:2394:14 | S2 | +| main.rs:2429:21:2429:22 | S2 | | main.rs:2393:5:2394:14 | S2 | +| main.rs:2430:13:2430:14 | x8 | | main.rs:2412:5:2412:27 | S4 | +| main.rs:2430:13:2430:14 | x8 | T4 | {EXTERNAL LOCATION} | i32 | +| main.rs:2430:18:2430:22 | S4(...) | | main.rs:2412:5:2412:27 | S4 | +| main.rs:2430:18:2430:22 | S4(...) | T4 | {EXTERNAL LOCATION} | i32 | +| main.rs:2430:21:2430:21 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2431:13:2431:14 | x9 | | main.rs:2412:5:2412:27 | S4 | +| main.rs:2431:13:2431:14 | x9 | T4 | main.rs:2393:5:2394:14 | S2 | +| main.rs:2431:18:2431:34 | S4(...) | | main.rs:2412:5:2412:27 | S4 | +| main.rs:2431:18:2431:34 | S4(...) | T4 | main.rs:2393:5:2394:14 | S2 | +| main.rs:2431:21:2431:33 | ...::default(...) | | main.rs:2393:5:2394:14 | S2 | +| main.rs:2432:13:2432:15 | x10 | | main.rs:2414:5:2416:5 | S5 | +| main.rs:2432:13:2432:15 | x10 | T5 | main.rs:2393:5:2394:14 | S2 | +| main.rs:2432:19:2435:9 | S5::<...> {...} | | main.rs:2414:5:2416:5 | S5 | +| main.rs:2432:19:2435:9 | S5::<...> {...} | T5 | main.rs:2393:5:2394:14 | S2 | +| main.rs:2434:20:2434:37 | ...::default(...) | | main.rs:2393:5:2394:14 | S2 | +| main.rs:2436:13:2436:15 | x11 | | main.rs:2414:5:2416:5 | S5 | +| main.rs:2436:13:2436:15 | x11 | T5 | main.rs:2393:5:2394:14 | S2 | +| main.rs:2436:19:2436:34 | S5 {...} | | main.rs:2414:5:2416:5 | S5 | +| main.rs:2436:19:2436:34 | S5 {...} | T5 | main.rs:2393:5:2394:14 | S2 | +| main.rs:2436:31:2436:32 | S2 | | main.rs:2393:5:2394:14 | S2 | +| main.rs:2437:13:2437:15 | x12 | | main.rs:2414:5:2416:5 | S5 | +| main.rs:2437:13:2437:15 | x12 | T5 | {EXTERNAL LOCATION} | i32 | +| main.rs:2437:19:2437:33 | S5 {...} | | main.rs:2414:5:2416:5 | S5 | +| main.rs:2437:19:2437:33 | S5 {...} | T5 | {EXTERNAL LOCATION} | i32 | +| main.rs:2437:31:2437:31 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2438:13:2438:15 | x13 | | main.rs:2414:5:2416:5 | S5 | +| main.rs:2438:13:2438:15 | x13 | T5 | main.rs:2393:5:2394:14 | S2 | +| main.rs:2438:19:2441:9 | S5 {...} | | main.rs:2414:5:2416:5 | S5 | +| main.rs:2438:19:2441:9 | S5 {...} | T5 | main.rs:2393:5:2394:14 | S2 | +| main.rs:2440:20:2440:32 | ...::default(...) | | main.rs:2393:5:2394:14 | S2 | +| main.rs:2442:13:2442:15 | x14 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2442:19:2442:48 | foo::<...>(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:2442:30:2442:47 | ...::default(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:2450:35:2452:9 | { ... } | | file://:0:0:0:0 | (T_2) | +| main.rs:2450:35:2452:9 | { ... } | 0(2) | main.rs:2447:5:2447:16 | S1 | +| main.rs:2450:35:2452:9 | { ... } | 1(2) | main.rs:2447:5:2447:16 | S1 | +| main.rs:2451:13:2451:26 | TupleExpr | | file://:0:0:0:0 | (T_2) | +| main.rs:2451:13:2451:26 | TupleExpr | 0(2) | main.rs:2447:5:2447:16 | S1 | +| main.rs:2451:13:2451:26 | TupleExpr | 1(2) | main.rs:2447:5:2447:16 | S1 | +| main.rs:2451:14:2451:18 | S1 {...} | | main.rs:2447:5:2447:16 | S1 | +| main.rs:2451:21:2451:25 | S1 {...} | | main.rs:2447:5:2447:16 | S1 | +| main.rs:2453:16:2453:19 | SelfParam | | main.rs:2447:5:2447:16 | S1 | +| main.rs:2457:13:2457:13 | a | | file://:0:0:0:0 | (T_2) | +| main.rs:2457:13:2457:13 | a | 0(2) | main.rs:2447:5:2447:16 | S1 | +| main.rs:2457:13:2457:13 | a | 1(2) | main.rs:2447:5:2447:16 | S1 | +| main.rs:2457:17:2457:30 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2457:17:2457:30 | ...::get_pair(...) | 0(2) | main.rs:2447:5:2447:16 | S1 | +| main.rs:2457:17:2457:30 | ...::get_pair(...) | 1(2) | main.rs:2447:5:2447:16 | S1 | +| main.rs:2458:17:2458:17 | b | | file://:0:0:0:0 | (T_2) | +| main.rs:2458:17:2458:17 | b | 0(2) | main.rs:2447:5:2447:16 | S1 | +| main.rs:2458:17:2458:17 | b | 1(2) | main.rs:2447:5:2447:16 | S1 | +| main.rs:2458:21:2458:34 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2458:21:2458:34 | ...::get_pair(...) | 0(2) | main.rs:2447:5:2447:16 | S1 | +| main.rs:2458:21:2458:34 | ...::get_pair(...) | 1(2) | main.rs:2447:5:2447:16 | S1 | +| main.rs:2459:13:2459:18 | TuplePat | | file://:0:0:0:0 | (T_2) | +| main.rs:2459:13:2459:18 | TuplePat | 0(2) | main.rs:2447:5:2447:16 | S1 | +| main.rs:2459:13:2459:18 | TuplePat | 1(2) | main.rs:2447:5:2447:16 | S1 | +| main.rs:2459:14:2459:14 | c | | main.rs:2447:5:2447:16 | S1 | +| main.rs:2459:17:2459:17 | d | | main.rs:2447:5:2447:16 | S1 | +| main.rs:2459:22:2459:35 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2459:22:2459:35 | ...::get_pair(...) | 0(2) | main.rs:2447:5:2447:16 | S1 | +| main.rs:2459:22:2459:35 | ...::get_pair(...) | 1(2) | main.rs:2447:5:2447:16 | S1 | +| main.rs:2460:13:2460:22 | TuplePat | | file://:0:0:0:0 | (T_2) | +| main.rs:2460:13:2460:22 | TuplePat | 0(2) | main.rs:2447:5:2447:16 | S1 | +| main.rs:2460:13:2460:22 | TuplePat | 1(2) | main.rs:2447:5:2447:16 | S1 | +| main.rs:2460:18:2460:18 | e | | main.rs:2447:5:2447:16 | S1 | +| main.rs:2460:21:2460:21 | f | | main.rs:2447:5:2447:16 | S1 | +| main.rs:2460:26:2460:39 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2460:26:2460:39 | ...::get_pair(...) | 0(2) | main.rs:2447:5:2447:16 | S1 | +| main.rs:2460:26:2460:39 | ...::get_pair(...) | 1(2) | main.rs:2447:5:2447:16 | S1 | +| main.rs:2461:13:2461:26 | TuplePat | | file://:0:0:0:0 | (T_2) | +| main.rs:2461:13:2461:26 | TuplePat | 0(2) | main.rs:2447:5:2447:16 | S1 | +| main.rs:2461:13:2461:26 | TuplePat | 1(2) | main.rs:2447:5:2447:16 | S1 | +| main.rs:2461:18:2461:18 | g | | main.rs:2447:5:2447:16 | S1 | +| main.rs:2461:25:2461:25 | h | | main.rs:2447:5:2447:16 | S1 | +| main.rs:2461:30:2461:43 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2461:30:2461:43 | ...::get_pair(...) | 0(2) | main.rs:2447:5:2447:16 | S1 | +| main.rs:2461:30:2461:43 | ...::get_pair(...) | 1(2) | main.rs:2447:5:2447:16 | S1 | +| main.rs:2463:9:2463:9 | a | | file://:0:0:0:0 | (T_2) | +| main.rs:2463:9:2463:9 | a | 0(2) | main.rs:2447:5:2447:16 | S1 | +| main.rs:2463:9:2463:9 | a | 1(2) | main.rs:2447:5:2447:16 | S1 | +| main.rs:2463:9:2463:11 | a.0 | | main.rs:2447:5:2447:16 | S1 | +| main.rs:2464:9:2464:9 | b | | file://:0:0:0:0 | (T_2) | +| main.rs:2464:9:2464:9 | b | 0(2) | main.rs:2447:5:2447:16 | S1 | +| main.rs:2464:9:2464:9 | b | 1(2) | main.rs:2447:5:2447:16 | S1 | +| main.rs:2464:9:2464:11 | b.1 | | main.rs:2447:5:2447:16 | S1 | +| main.rs:2465:9:2465:9 | c | | main.rs:2447:5:2447:16 | S1 | +| main.rs:2466:9:2466:9 | d | | main.rs:2447:5:2447:16 | S1 | +| main.rs:2467:9:2467:9 | e | | main.rs:2447:5:2447:16 | S1 | +| main.rs:2468:9:2468:9 | f | | main.rs:2447:5:2447:16 | S1 | +| main.rs:2469:9:2469:9 | g | | main.rs:2447:5:2447:16 | S1 | +| main.rs:2470:9:2470:9 | h | | main.rs:2447:5:2447:16 | S1 | +| main.rs:2475:13:2475:13 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2475:17:2475:34 | ...::default(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2476:13:2476:13 | b | | {EXTERNAL LOCATION} | bool | +| main.rs:2476:17:2476:34 | ...::default(...) | | {EXTERNAL LOCATION} | bool | +| main.rs:2477:13:2477:16 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2477:13:2477:16 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | +| main.rs:2477:13:2477:16 | pair | 1(2) | {EXTERNAL LOCATION} | bool | +| main.rs:2477:20:2477:25 | TupleExpr | | file://:0:0:0:0 | (T_2) | +| main.rs:2477:20:2477:25 | TupleExpr | 0(2) | {EXTERNAL LOCATION} | i64 | +| main.rs:2477:20:2477:25 | TupleExpr | 1(2) | {EXTERNAL LOCATION} | bool | +| main.rs:2477:21:2477:21 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2477:24:2477:24 | b | | {EXTERNAL LOCATION} | bool | +| main.rs:2478:13:2478:13 | i | | {EXTERNAL LOCATION} | i64 | +| main.rs:2478:22:2478:25 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2478:22:2478:25 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | +| main.rs:2478:22:2478:25 | pair | 1(2) | {EXTERNAL LOCATION} | bool | +| main.rs:2478:22:2478:27 | pair.0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2479:13:2479:13 | j | | {EXTERNAL LOCATION} | bool | +| main.rs:2479:23:2479:26 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2479:23:2479:26 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | +| main.rs:2479:23:2479:26 | pair | 1(2) | {EXTERNAL LOCATION} | bool | +| main.rs:2479:23:2479:28 | pair.1 | | {EXTERNAL LOCATION} | bool | +| main.rs:2481:13:2481:16 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2481:13:2481:16 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2481:13:2481:16 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2481:20:2481:25 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2481:20:2481:25 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2481:20:2481:32 | ... .into() | | file://:0:0:0:0 | (T_2) | +| main.rs:2481:20:2481:32 | ... .into() | 0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2481:20:2481:32 | ... .into() | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2481:21:2481:21 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2481:24:2481:24 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2482:15:2482:18 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2482:15:2482:18 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2482:15:2482:18 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2483:13:2483:18 | TuplePat | | file://:0:0:0:0 | (T_2) | +| main.rs:2483:13:2483:18 | TuplePat | 0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2483:13:2483:18 | TuplePat | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2483:14:2483:14 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2483:17:2483:17 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2483:30:2483:41 | "unexpected" | | file://:0:0:0:0 | & | +| main.rs:2483:30:2483:41 | "unexpected" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2483:30:2483:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2483:30:2483:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2484:13:2484:13 | _ | | file://:0:0:0:0 | (T_2) | +| main.rs:2484:13:2484:13 | _ | 0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2484:13:2484:13 | _ | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2484:25:2484:34 | "expected" | | file://:0:0:0:0 | & | +| main.rs:2484:25:2484:34 | "expected" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2484:25:2484:34 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2484:25:2484:34 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2486:13:2486:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2486:17:2486:20 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2486:17:2486:20 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2486:17:2486:20 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2486:17:2486:22 | pair.0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2493:13:2493:23 | boxed_value | | {EXTERNAL LOCATION} | Box | +| main.rs:2493:13:2493:23 | boxed_value | A | {EXTERNAL LOCATION} | Global | +| main.rs:2493:13:2493:23 | boxed_value | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2493:27:2493:42 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2493:27:2493:42 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2493:27:2493:42 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2493:36:2493:41 | 100i32 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2496:15:2496:25 | boxed_value | | {EXTERNAL LOCATION} | Box | +| main.rs:2496:15:2496:25 | boxed_value | A | {EXTERNAL LOCATION} | Global | +| main.rs:2496:15:2496:25 | boxed_value | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2497:13:2497:19 | box 100 | | {EXTERNAL LOCATION} | Box | +| main.rs:2497:13:2497:19 | box 100 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2497:13:2497:19 | box 100 | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2497:17:2497:19 | 100 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2498:26:2498:36 | "Boxed 100\\n" | | file://:0:0:0:0 | & | +| main.rs:2498:26:2498:36 | "Boxed 100\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2498:26:2498:36 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2498:26:2498:36 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2500:13:2500:17 | box ... | | {EXTERNAL LOCATION} | Box | +| main.rs:2500:13:2500:17 | box ... | A | {EXTERNAL LOCATION} | Global | +| main.rs:2500:13:2500:17 | box ... | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2502:26:2502:42 | "Boxed value: {}\\n" | | file://:0:0:0:0 | & | +| main.rs:2502:26:2502:42 | "Boxed value: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2502:26:2502:51 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2502:26:2502:51 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2507:13:2507:22 | nested_box | | {EXTERNAL LOCATION} | Box | +| main.rs:2507:13:2507:22 | nested_box | A | {EXTERNAL LOCATION} | Global | +| main.rs:2507:13:2507:22 | nested_box | T | {EXTERNAL LOCATION} | Box | +| main.rs:2507:13:2507:22 | nested_box | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2507:13:2507:22 | nested_box | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2507:26:2507:50 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2507:26:2507:50 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2507:26:2507:50 | ...::new(...) | T | {EXTERNAL LOCATION} | Box | +| main.rs:2507:26:2507:50 | ...::new(...) | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2507:26:2507:50 | ...::new(...) | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2507:35:2507:49 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2507:35:2507:49 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2507:35:2507:49 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2507:44:2507:48 | 42i32 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2508:15:2508:24 | nested_box | | {EXTERNAL LOCATION} | Box | +| main.rs:2508:15:2508:24 | nested_box | A | {EXTERNAL LOCATION} | Global | +| main.rs:2508:15:2508:24 | nested_box | T | {EXTERNAL LOCATION} | Box | +| main.rs:2508:15:2508:24 | nested_box | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2508:15:2508:24 | nested_box | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2509:13:2509:21 | box ... | | {EXTERNAL LOCATION} | Box | +| main.rs:2509:13:2509:21 | box ... | A | {EXTERNAL LOCATION} | Global | +| main.rs:2509:13:2509:21 | box ... | T | {EXTERNAL LOCATION} | Box | +| main.rs:2509:13:2509:21 | box ... | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2509:13:2509:21 | box ... | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2511:26:2511:43 | "Nested boxed: {}\\n" | | file://:0:0:0:0 | & | +| main.rs:2511:26:2511:43 | "Nested boxed: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2511:26:2511:59 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2511:26:2511:59 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2523:21:2523:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2523:21:2523:25 | SelfParam | &T | main.rs:2522:5:2525:5 | Self [trait Executor] | +| main.rs:2524:24:2524:28 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2524:24:2524:28 | SelfParam | &T | main.rs:2522:5:2525:5 | Self [trait Executor] | +| main.rs:2524:31:2524:35 | query | | main.rs:2524:21:2524:21 | E | +| main.rs:2528:21:2528:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2528:21:2528:25 | SelfParam | &T | main.rs:2527:10:2527:22 | T | +| main.rs:2529:22:2529:41 | "Executor::execute1\\n" | | file://:0:0:0:0 | & | +| main.rs:2529:22:2529:41 | "Executor::execute1\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2529:22:2529:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2529:22:2529:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2532:24:2532:28 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2532:24:2532:28 | SelfParam | &T | main.rs:2527:10:2527:22 | T | +| main.rs:2532:31:2532:36 | _query | | main.rs:2532:21:2532:21 | E | +| main.rs:2533:22:2533:41 | "Executor::execute2\\n" | | file://:0:0:0:0 | & | +| main.rs:2533:22:2533:41 | "Executor::execute2\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2533:22:2533:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2533:22:2533:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2542:13:2542:13 | c | | main.rs:2537:5:2537:29 | MySqlConnection | +| main.rs:2542:17:2542:34 | MySqlConnection {...} | | main.rs:2537:5:2537:29 | MySqlConnection | +| main.rs:2544:9:2544:9 | c | | main.rs:2537:5:2537:29 | MySqlConnection | +| main.rs:2545:35:2545:36 | &c | | file://:0:0:0:0 | & | +| main.rs:2545:35:2545:36 | &c | &T | main.rs:2537:5:2537:29 | MySqlConnection | +| main.rs:2545:36:2545:36 | c | | main.rs:2537:5:2537:29 | MySqlConnection | +| main.rs:2547:9:2547:9 | c | | main.rs:2537:5:2537:29 | MySqlConnection | +| main.rs:2547:20:2547:40 | "SELECT * FROM users" | | file://:0:0:0:0 | & | +| main.rs:2547:20:2547:40 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2548:9:2548:9 | c | | main.rs:2537:5:2537:29 | MySqlConnection | +| main.rs:2548:28:2548:48 | "SELECT * FROM users" | | file://:0:0:0:0 | & | +| main.rs:2548:28:2548:48 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2549:35:2549:36 | &c | | file://:0:0:0:0 | & | +| main.rs:2549:35:2549:36 | &c | &T | main.rs:2537:5:2537:29 | MySqlConnection | +| main.rs:2549:36:2549:36 | c | | main.rs:2537:5:2537:29 | MySqlConnection | +| main.rs:2549:39:2549:59 | "SELECT * FROM users" | | file://:0:0:0:0 | & | +| main.rs:2549:39:2549:59 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2550:43:2550:44 | &c | | file://:0:0:0:0 | & | +| main.rs:2550:43:2550:44 | &c | &T | main.rs:2537:5:2537:29 | MySqlConnection | +| main.rs:2550:44:2550:44 | c | | main.rs:2537:5:2537:29 | MySqlConnection | +| main.rs:2550:47:2550:67 | "SELECT * FROM users" | | file://:0:0:0:0 | & | +| main.rs:2550:47:2550:67 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2560:5:2560:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2561:5:2561:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2561:20:2561:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2561:41:2561:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2577:5:2577:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future | | pattern_matching.rs:13:26:133:1 | { ... } | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:13:26:133:1 | { ... } | T | file://:0:0:0:0 | () | | pattern_matching.rs:14:9:14:13 | value | | {EXTERNAL LOCATION} | Option | @@ -5668,10 +5722,8 @@ inferType | 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:18:444:21 | 1i32 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:444:24:444:27 | 2i64 | | {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:444:30:444:35 | 3.0f32 | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:447:11:447:15 | tuple | | file://:0:0:0:0 | (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 | @@ -5826,8 +5878,6 @@ inferType | pattern_matching.rs:504:65:504:71 | paren_y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:510:9:510:13 | slice | | file://:0:0:0:0 | & | | pattern_matching.rs:510:9:510:13 | slice | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:510:9:510:13 | slice | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:510:9:510:13 | slice | &T.[T;...] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:510:9:510:13 | slice | &T.[T] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:510:25:510:40 | &... | | file://:0:0:0:0 | & | | pattern_matching.rs:510:25:510:40 | &... | &T | file://:0:0:0:0 | [] | @@ -5845,23 +5895,15 @@ inferType | pattern_matching.rs:510:39:510:39 | 5 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:513:11:513:15 | slice | | file://:0:0:0:0 | & | | pattern_matching.rs:513:11:513:15 | slice | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:513:11:513:15 | slice | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:513:11:513:15 | slice | &T.[T;...] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:513:11:513:15 | slice | &T.[T] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:514:9:514:10 | SlicePat | | file://:0:0:0:0 | & | | pattern_matching.rs:514:9:514:10 | SlicePat | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:514:9:514:10 | SlicePat | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:514:9:514:10 | SlicePat | &T.[T;...] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:514:9:514:10 | SlicePat | &T.[T] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:515:17:515:27 | empty_slice | | file://:0:0:0:0 | & | | pattern_matching.rs:515:17:515:27 | empty_slice | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:515:17:515:27 | empty_slice | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:515:17:515:27 | empty_slice | &T.[T;...] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:515:17:515:27 | empty_slice | &T.[T] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:515:31:515:35 | slice | | file://:0:0:0:0 | & | | pattern_matching.rs:515:31:515:35 | slice | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:515:31:515:35 | slice | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:515:31:515:35 | slice | &T.[T;...] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:515:31:515:35 | slice | &T.[T] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:516:22:516:40 | "Empty slice: {:?}\\n" | | file://:0:0:0:0 | & | | pattern_matching.rs:516:22:516:40 | "Empty slice: {:?}\\n" | &T | {EXTERNAL LOCATION} | str | @@ -5869,13 +5911,9 @@ inferType | pattern_matching.rs:516:22:516:53 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | pattern_matching.rs:516:43:516:53 | empty_slice | | file://:0:0:0:0 | & | | pattern_matching.rs:516:43:516:53 | empty_slice | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:516:43:516:53 | empty_slice | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:516:43:516:53 | empty_slice | &T.[T;...] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:516:43:516:53 | empty_slice | &T.[T] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:518:9:518:11 | SlicePat | | file://:0:0:0:0 | & | | pattern_matching.rs:518:9:518:11 | SlicePat | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:518:9:518:11 | SlicePat | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:518:9:518:11 | SlicePat | &T.[T;...] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:518:9:518:11 | SlicePat | &T.[T] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:520:22:520:41 | "Single element: {}\\n" | | file://:0:0:0:0 | & | | pattern_matching.rs:520:22:520:41 | "Single element: {}\\n" | &T | {EXTERNAL LOCATION} | str | @@ -5883,8 +5921,6 @@ inferType | pattern_matching.rs:520:22:520:54 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | pattern_matching.rs:522:9:522:23 | SlicePat | | file://:0:0:0:0 | & | | pattern_matching.rs:522:9:522:23 | SlicePat | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:522:9:522:23 | SlicePat | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:522:9:522:23 | SlicePat | &T.[T;...] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:522:9:522:23 | SlicePat | &T.[T] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:525:22:525:43 | "Two elements: {}, {}\\n" | | file://:0:0:0:0 | & | | pattern_matching.rs:525:22:525:43 | "Two elements: {}, {}\\n" | &T | {EXTERNAL LOCATION} | str | @@ -5892,8 +5928,6 @@ inferType | pattern_matching.rs:525:22:525:70 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | pattern_matching.rs:527:9:527:34 | SlicePat | | file://:0:0:0:0 | & | | pattern_matching.rs:527:9:527:34 | SlicePat | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:527:9:527:34 | SlicePat | &T | file://:0:0:0:0 | [] | -| pattern_matching.rs:527:9:527:34 | SlicePat | &T.[T;...] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:527:9:527:34 | SlicePat | &T.[T] | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:532:17:532:53 | "First: {}, last: {}, middle l... | | file://:0:0:0:0 | & | | pattern_matching.rs:532:17:532:53 | "First: {}, last: {}, middle l... | &T | {EXTERNAL LOCATION} | str | diff --git a/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/PathResolutionConsistency.expected index d8fcd1ec9f0..b5d4fea346d 100644 --- a/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/PathResolutionConsistency.expected @@ -6,7 +6,7 @@ multipleCallTargets | sqlx.rs:51:24:51:77 | ...::from(...) | | sqlx.rs:55:26:55:79 | ...::from(...) | | sqlx.rs:61:28:61:81 | ...::from(...) | -| sqlx.rs:64:26:64:46 | safe_query_1.as_str() | +| sqlx.rs:64:57:64:77 | safe_query_1.as_str() | | sqlx.rs:65:26:65:46 | safe_query_2.as_str() | | sqlx.rs:66:26:66:46 | safe_query_3.as_str() | | sqlx.rs:67:26:67:48 | unsafe_query_1.as_str() | diff --git a/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/TypeInferenceConsistency.expected b/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/TypeInferenceConsistency.expected new file mode 100644 index 00000000000..6a60922b6f0 --- /dev/null +++ b/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/TypeInferenceConsistency.expected @@ -0,0 +1,3 @@ +nonUniqueCertainType +| sqlx.rs:158:13:158:81 | { ... } | E | +| sqlx.rs:160:17:160:86 | { ... } | E | diff --git a/rust/ql/test/query-tests/security/CWE-089/SqlInjection.expected b/rust/ql/test/query-tests/security/CWE-089/SqlInjection.expected index 97f5e996bb2..cc00a44d9fc 100644 --- a/rust/ql/test/query-tests/security/CWE-089/SqlInjection.expected +++ b/rust/ql/test/query-tests/security/CWE-089/SqlInjection.expected @@ -1,75 +1,64 @@ #select -| sqlx.rs:66:26:66:46 | safe_query_3.as_str() | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:66:26:66:46 | safe_query_3.as_str() | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | -| sqlx.rs:67:26:67:48 | unsafe_query_1.as_str() | sqlx.rs:47:22:47:35 | ...::args | sqlx.rs:67:26:67:48 | unsafe_query_1.as_str() | This query depends on a $@. | sqlx.rs:47:22:47:35 | ...::args | user-provided value | -| sqlx.rs:69:30:69:52 | unsafe_query_2.as_str() | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:69:30:69:52 | unsafe_query_2.as_str() | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | -| sqlx.rs:77:25:77:45 | safe_query_3.as_str() | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:77:25:77:45 | safe_query_3.as_str() | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | -| sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() | sqlx.rs:47:22:47:35 | ...::args | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() | This query depends on a $@. | sqlx.rs:47:22:47:35 | ...::args | user-provided value | -| sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | +| sqlx.rs:77:13:77:23 | ...::query | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:77:13:77:23 | ...::query | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | +| sqlx.rs:78:13:78:23 | ...::query | sqlx.rs:47:22:47:35 | ...::args | sqlx.rs:78:13:78:23 | ...::query | This query depends on a $@. | sqlx.rs:47:22:47:35 | ...::args | user-provided value | +| sqlx.rs:80:17:80:27 | ...::query | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:80:17:80:27 | ...::query | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | edges | sqlx.rs:47:9:47:18 | arg_string | sqlx.rs:53:27:53:36 | arg_string | provenance | | -| sqlx.rs:47:22:47:35 | ...::args | sqlx.rs:47:22:47:37 | ...::args(...) [element] | provenance | Src:MaD:2 | -| sqlx.rs:47:22:47:37 | ...::args(...) [element] | sqlx.rs:47:22:47:44 | ... .nth(...) [Some] | provenance | MaD:3 | -| sqlx.rs:47:22:47:44 | ... .nth(...) [Some] | sqlx.rs:47:22:47:77 | ... .unwrap_or(...) | provenance | MaD:5 | +| sqlx.rs:47:22:47:35 | ...::args | sqlx.rs:47:22:47:37 | ...::args(...) [element] | provenance | Src:MaD:3 | +| sqlx.rs:47:22:47:37 | ...::args(...) [element] | sqlx.rs:47:22:47:44 | ... .nth(...) [Some] | provenance | MaD:4 | +| sqlx.rs:47:22:47:44 | ... .nth(...) [Some] | sqlx.rs:47:22:47:77 | ... .unwrap_or(...) | provenance | MaD:6 | | sqlx.rs:47:22:47:77 | ... .unwrap_or(...) | sqlx.rs:47:9:47:18 | arg_string | provenance | | -| sqlx.rs:48:9:48:21 | remote_string | sqlx.rs:49:25:49:52 | remote_string.parse() [Ok] | provenance | MaD:9 | -| sqlx.rs:48:9:48:21 | remote_string | sqlx.rs:49:25:49:52 | remote_string.parse() [Ok] | provenance | MaD:9 | +| sqlx.rs:48:9:48:21 | remote_string | sqlx.rs:49:25:49:52 | remote_string.parse() [Ok] | provenance | MaD:10 | +| sqlx.rs:48:9:48:21 | remote_string | sqlx.rs:49:25:49:52 | remote_string.parse() [Ok] | provenance | MaD:10 | | sqlx.rs:48:9:48:21 | remote_string | sqlx.rs:54:27:54:39 | remote_string | provenance | | -| sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:48:25:48:69 | ...::get(...) [Ok] | provenance | Src:MaD:1 | -| sqlx.rs:48:25:48:69 | ...::get(...) [Ok] | sqlx.rs:48:25:48:78 | ... .unwrap() | provenance | MaD:6 | -| sqlx.rs:48:25:48:78 | ... .unwrap() | sqlx.rs:48:25:48:85 | ... .text() [Ok] | provenance | MaD:10 | -| sqlx.rs:48:25:48:85 | ... .text() [Ok] | sqlx.rs:48:25:48:118 | ... .unwrap_or(...) | provenance | MaD:7 | +| sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:48:25:48:69 | ...::get(...) [Ok] | provenance | Src:MaD:2 | +| sqlx.rs:48:25:48:69 | ...::get(...) [Ok] | sqlx.rs:48:25:48:78 | ... .unwrap() | provenance | MaD:7 | +| sqlx.rs:48:25:48:78 | ... .unwrap() | sqlx.rs:48:25:48:85 | ... .text() [Ok] | provenance | MaD:11 | +| sqlx.rs:48:25:48:85 | ... .text() [Ok] | sqlx.rs:48:25:48:118 | ... .unwrap_or(...) | provenance | MaD:8 | | sqlx.rs:48:25:48:118 | ... .unwrap_or(...) | sqlx.rs:48:9:48:21 | remote_string | provenance | | | sqlx.rs:49:9:49:21 | remote_number | sqlx.rs:52:32:52:87 | MacroExpr | provenance | | -| sqlx.rs:49:25:49:52 | remote_string.parse() [Ok] | sqlx.rs:49:25:49:65 | ... .unwrap_or(...) | provenance | MaD:7 | +| sqlx.rs:49:25:49:52 | remote_string.parse() [Ok] | sqlx.rs:49:25:49:65 | ... .unwrap_or(...) | provenance | MaD:8 | | sqlx.rs:49:25:49:65 | ... .unwrap_or(...) | sqlx.rs:49:9:49:21 | remote_number | provenance | | -| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:66:26:66:37 | safe_query_3 | provenance | | -| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:66:26:66:46 | safe_query_3.as_str() | provenance | MaD:8 | -| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:66:26:66:46 | safe_query_3.as_str() | provenance | MaD:4 | -| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:66:26:66:46 | safe_query_3.as_str() | provenance | MaD:8 | | sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:77:25:77:36 | safe_query_3 | provenance | | -| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:77:25:77:45 | safe_query_3.as_str() | provenance | MaD:8 | -| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:77:25:77:45 | safe_query_3.as_str() | provenance | MaD:4 | -| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:77:25:77:45 | safe_query_3.as_str() | provenance | MaD:8 | +| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:77:25:77:45 | safe_query_3.as_str() | provenance | MaD:9 | +| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:77:25:77:45 | safe_query_3.as_str() | provenance | MaD:5 | +| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:77:25:77:45 | safe_query_3.as_str() | provenance | MaD:9 | | sqlx.rs:52:24:52:88 | res | sqlx.rs:52:32:52:87 | { ... } | provenance | | | sqlx.rs:52:32:52:87 | ...::format(...) | sqlx.rs:52:24:52:88 | res | provenance | | | sqlx.rs:52:32:52:87 | ...::must_use(...) | sqlx.rs:52:9:52:20 | safe_query_3 | provenance | | -| sqlx.rs:52:32:52:87 | MacroExpr | sqlx.rs:52:32:52:87 | ...::format(...) | provenance | MaD:11 | -| sqlx.rs:52:32:52:87 | { ... } | sqlx.rs:52:32:52:87 | ...::must_use(...) | provenance | MaD:12 | -| sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | sqlx.rs:67:26:67:48 | unsafe_query_1.as_str() | provenance | MaD:8 | -| sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | sqlx.rs:67:26:67:48 | unsafe_query_1.as_str() | provenance | MaD:4 | -| sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | sqlx.rs:67:26:67:48 | unsafe_query_1.as_str() | provenance | MaD:8 | -| sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() | provenance | MaD:8 | -| sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() | provenance | MaD:4 | -| sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() | provenance | MaD:8 | +| sqlx.rs:52:32:52:87 | MacroExpr | sqlx.rs:52:32:52:87 | ...::format(...) | provenance | MaD:12 | +| sqlx.rs:52:32:52:87 | { ... } | sqlx.rs:52:32:52:87 | ...::must_use(...) | provenance | MaD:13 | +| sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() [&ref] | provenance | MaD:9 | +| sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() [&ref] | provenance | MaD:5 | +| sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() [&ref] | provenance | MaD:9 | | sqlx.rs:53:26:53:36 | &arg_string [&ref] | sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | provenance | | | sqlx.rs:53:27:53:36 | arg_string | sqlx.rs:53:26:53:36 | &arg_string [&ref] | provenance | | -| sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | sqlx.rs:69:30:69:52 | unsafe_query_2.as_str() | provenance | MaD:8 | -| sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | sqlx.rs:69:30:69:52 | unsafe_query_2.as_str() | provenance | MaD:4 | -| sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | sqlx.rs:69:30:69:52 | unsafe_query_2.as_str() | provenance | MaD:8 | -| sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() | provenance | MaD:8 | -| sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() | provenance | MaD:4 | -| sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() | provenance | MaD:8 | +| sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() [&ref] | provenance | MaD:9 | +| sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() [&ref] | provenance | MaD:5 | +| sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() [&ref] | provenance | MaD:9 | | sqlx.rs:54:26:54:39 | &remote_string [&ref] | sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | provenance | | | sqlx.rs:54:27:54:39 | remote_string | sqlx.rs:54:26:54:39 | &remote_string [&ref] | provenance | | -| sqlx.rs:66:26:66:37 | safe_query_3 | sqlx.rs:66:26:66:46 | safe_query_3.as_str() | provenance | MaD:8 | -| sqlx.rs:66:26:66:37 | safe_query_3 | sqlx.rs:66:26:66:46 | safe_query_3.as_str() | provenance | MaD:4 | -| sqlx.rs:66:26:66:37 | safe_query_3 | sqlx.rs:66:26:66:46 | safe_query_3.as_str() | provenance | MaD:8 | -| sqlx.rs:77:25:77:36 | safe_query_3 | sqlx.rs:77:25:77:45 | safe_query_3.as_str() | provenance | MaD:8 | -| sqlx.rs:77:25:77:36 | safe_query_3 | sqlx.rs:77:25:77:45 | safe_query_3.as_str() | provenance | MaD:4 | -| sqlx.rs:77:25:77:36 | safe_query_3 | sqlx.rs:77:25:77:45 | safe_query_3.as_str() | provenance | MaD:8 | +| sqlx.rs:77:25:77:36 | safe_query_3 | sqlx.rs:77:25:77:45 | safe_query_3.as_str() [&ref] | provenance | MaD:9 | +| sqlx.rs:77:25:77:36 | safe_query_3 | sqlx.rs:77:25:77:45 | safe_query_3.as_str() [&ref] | provenance | MaD:5 | +| sqlx.rs:77:25:77:36 | safe_query_3 | sqlx.rs:77:25:77:45 | safe_query_3.as_str() [&ref] | provenance | MaD:9 | +| sqlx.rs:77:25:77:45 | safe_query_3.as_str() | sqlx.rs:77:13:77:23 | ...::query | provenance | MaD:1 Sink:MaD:1 | +| sqlx.rs:77:25:77:45 | safe_query_3.as_str() [&ref] | sqlx.rs:77:13:77:23 | ...::query | provenance | MaD:1 Sink:MaD:1 | +| sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() [&ref] | sqlx.rs:78:13:78:23 | ...::query | provenance | MaD:1 Sink:MaD:1 | +| sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() [&ref] | sqlx.rs:80:17:80:27 | ...::query | provenance | MaD:1 Sink:MaD:1 | models -| 1 | Source: reqwest::blocking::get; ReturnValue.Field[core::result::Result::Ok(0)]; remote | -| 2 | Source: std::env::args; ReturnValue.Element; commandargs | -| 3 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value | -| 4 | Summary: ::as_str; Argument[self]; ReturnValue; value | -| 5 | Summary: ::unwrap_or; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 6 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 7 | Summary: ::unwrap_or; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 8 | Summary: ::as_str; Argument[self]; ReturnValue; value | -| 9 | Summary: ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 10 | Summary: ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 11 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint | -| 12 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | +| 1 | Sink: sqlx_core::query::query; Argument[0]; sql-injection | +| 2 | Source: reqwest::blocking::get; ReturnValue.Field[core::result::Result::Ok(0)]; remote | +| 3 | Source: std::env::args; ReturnValue.Element; commandargs | +| 4 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value | +| 5 | Summary: ::as_str; Argument[self]; ReturnValue; value | +| 6 | Summary: ::unwrap_or; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 7 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 8 | Summary: ::unwrap_or; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 9 | Summary: ::as_str; Argument[self]; ReturnValue; value | +| 10 | Summary: ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 11 | Summary: ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 12 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint | +| 13 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | nodes | sqlx.rs:47:9:47:18 | arg_string | semmle.label | arg_string | | sqlx.rs:47:22:47:35 | ...::args | semmle.label | ...::args | @@ -97,12 +86,12 @@ nodes | sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | semmle.label | unsafe_query_2 [&ref] | | sqlx.rs:54:26:54:39 | &remote_string [&ref] | semmle.label | &remote_string [&ref] | | sqlx.rs:54:27:54:39 | remote_string | semmle.label | remote_string | -| sqlx.rs:66:26:66:37 | safe_query_3 | semmle.label | safe_query_3 | -| sqlx.rs:66:26:66:46 | safe_query_3.as_str() | semmle.label | safe_query_3.as_str() | -| sqlx.rs:67:26:67:48 | unsafe_query_1.as_str() | semmle.label | unsafe_query_1.as_str() | -| sqlx.rs:69:30:69:52 | unsafe_query_2.as_str() | semmle.label | unsafe_query_2.as_str() | +| sqlx.rs:77:13:77:23 | ...::query | semmle.label | ...::query | | sqlx.rs:77:25:77:36 | safe_query_3 | semmle.label | safe_query_3 | | sqlx.rs:77:25:77:45 | safe_query_3.as_str() | semmle.label | safe_query_3.as_str() | -| sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() | semmle.label | unsafe_query_1.as_str() | -| sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() | semmle.label | unsafe_query_2.as_str() | +| sqlx.rs:77:25:77:45 | safe_query_3.as_str() [&ref] | semmle.label | safe_query_3.as_str() [&ref] | +| sqlx.rs:78:13:78:23 | ...::query | semmle.label | ...::query | +| sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() [&ref] | semmle.label | unsafe_query_1.as_str() [&ref] | +| sqlx.rs:80:17:80:27 | ...::query | semmle.label | ...::query | +| sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() [&ref] | semmle.label | unsafe_query_2.as_str() [&ref] | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-089/sqlx.rs b/rust/ql/test/query-tests/security/CWE-089/sqlx.rs index fd1153cffd3..8e1afa9f0e8 100644 --- a/rust/ql/test/query-tests/security/CWE-089/sqlx.rs +++ b/rust/ql/test/query-tests/security/CWE-089/sqlx.rs @@ -39,8 +39,8 @@ use sqlx::Executor; async fn test_sqlx_mysql(url: &str, enable_remote: bool) -> Result<(), sqlx::Error> { // connect through a MySQL connection pool - let pool = sqlx::mysql::MySqlPool::connect(url).await?; - let mut conn = pool.acquire().await?; + let pool: sqlx::Pool = sqlx::mysql::MySqlPool::connect(url).await?; + let mut conn: sqlx::pool::PoolConnection = pool.acquire().await?; // construct queries (with extra variants) let const_string = String::from("Alice"); @@ -61,14 +61,14 @@ async fn test_sqlx_mysql(url: &str, enable_remote: bool) -> Result<(), sqlx::Err let prepared_query_1 = String::from("SELECT * FROM people WHERE firstname=?"); // (prepared arguments are safe) // direct execution - let _ = conn.execute(safe_query_1.as_str()).await?; // $ sql-sink - let _ = conn.execute(safe_query_2.as_str()).await?; // $ sql-sink - let _ = conn.execute(safe_query_3.as_str()).await?; // $ sql-sink $ SPURIOUS: Alert[rust/sql-injection]=remote1 - let _ = conn.execute(unsafe_query_1.as_str()).await?; // $ sql-sink Alert[rust/sql-injection]=args1 + let _: sqlx::mysql::MySqlQueryResult = conn.execute(safe_query_1.as_str()).await?; // $ MISSING: sql-sink + let _ = conn.execute(safe_query_2.as_str()).await?; // $ MISSING: sql-sink + let _ = conn.execute(safe_query_3.as_str()).await?; // $ MISSING: sql-sink + let _ = conn.execute(unsafe_query_1.as_str()).await?; // $ MISSING: sql-sink Alert[rust/sql-injection]=args1 if enable_remote { - let _ = conn.execute(unsafe_query_2.as_str()).await?; // $ sql-sink Alert[rust/sql-injection]=remote1 - let _ = conn.execute(unsafe_query_3.as_str()).await?; // $ sql-sink MISSING: Alert[rust/sql-injection]=remote1 - let _ = conn.execute(unsafe_query_4.as_str()).await?; // $ sql-sink MISSING: Alert[rust/sql-injection]=remote1 + let _ = conn.execute(unsafe_query_2.as_str()).await?; // $ MISSING: sql-sink Alert[rust/sql-injection]=remote1 + let _ = conn.execute(unsafe_query_3.as_str()).await?; // $ MISSING: sql-sink Alert[rust/sql-injection]=remote1 + let _ = conn.execute(unsafe_query_4.as_str()).await?; // $ MISSING: sql-sink Alert[rust/sql-injection]=remote1 } // prepared queries @@ -103,9 +103,9 @@ async fn test_sqlx_sqlite(url: &str, enable_remote: bool) -> Result<(), sqlx::Er let prepared_query_1 = String::from("SELECT * FROM people WHERE firstname=?"); // (prepared arguments are safe) // direct execution (with extra variants) - let _ = conn.execute(safe_query_1.as_str()).await?; // $ sql-sink + let _ = conn.execute(safe_query_1.as_str()).await?; // $ MISSING: sql-sink if enable_remote { - let _ = conn.execute(unsafe_query_1.as_str()).await?; // $ sql-sink MISSING: Alert[rust/sql-injection]=remote2 + let _ = conn.execute(unsafe_query_1.as_str()).await?; // $ MISSING: sql-sink Alert[rust/sql-injection]=remote2 } // ... let _ = sqlx::raw_sql(safe_query_1.as_str()).execute(&mut conn).await?; // $ sql-sink @@ -176,9 +176,9 @@ async fn test_sqlx_postgres(url: &str, enable_remote: bool) -> Result<(), sqlx:: let prepared_query_1 = String::from("SELECT * FROM people WHERE firstname=$1"); // (prepared arguments are safe) // direct execution - let _ = conn.execute(safe_query_1.as_str()).await?; // $ sql-sink + let _ = conn.execute(safe_query_1.as_str()).await?; // $ MISSING: sql-sink if enable_remote { - let _ = conn.execute(unsafe_query_1.as_str()).await?; // $ sql-sink MISSING: Alert[rust/sql-injection]=remote3 + let _ = conn.execute(unsafe_query_1.as_str()).await?; // $ MISSING: sql-sink Alert[rust/sql-injection]=remote3 } // prepared queries diff --git a/rust/ql/test/query-tests/security/CWE-311/CleartextTransmission.expected b/rust/ql/test/query-tests/security/CWE-311/CleartextTransmission.expected index 5f5ddd261b6..0a229c72d75 100644 --- a/rust/ql/test/query-tests/security/CWE-311/CleartextTransmission.expected +++ b/rust/ql/test/query-tests/security/CWE-311/CleartextTransmission.expected @@ -1,9 +1,9 @@ #select -| main.rs:7:5:7:26 | ...::get | main.rs:6:50:6:57 | password | main.rs:7:5:7:26 | ...::get | The operation '...::get', transmits data which may contain unencrypted sensitive data from $@. | main.rs:6:50:6:57 | password | password | -| main.rs:14:5:14:26 | ...::get | main.rs:12:50:12:57 | password | main.rs:14:5:14:26 | ...::get | The operation '...::get', transmits data which may contain unencrypted sensitive data from $@. | main.rs:12:50:12:57 | password | password | -| main.rs:21:12:21:15 | post | main.rs:19:50:19:57 | password | main.rs:21:12:21:15 | post | The operation 'post', transmits data which may contain unencrypted sensitive data from $@. | main.rs:19:50:19:57 | password | password | -| main.rs:28:12:28:18 | request | main.rs:26:50:26:57 | password | main.rs:28:12:28:18 | request | The operation 'request', transmits data which may contain unencrypted sensitive data from $@. | main.rs:26:50:26:57 | password | password | -| main.rs:35:12:35:18 | request | main.rs:33:50:33:57 | password | main.rs:35:12:35:18 | request | The operation 'request', transmits data which may contain unencrypted sensitive data from $@. | main.rs:33:50:33:57 | password | password | +| main.rs:7:5:7:26 | ...::get | main.rs:6:50:6:57 | password | main.rs:7:5:7:26 | ...::get | This '...::get' operation transmits data which may contain unencrypted sensitive data from $@. | main.rs:6:50:6:57 | password | password | +| main.rs:14:5:14:26 | ...::get | main.rs:12:50:12:57 | password | main.rs:14:5:14:26 | ...::get | This '...::get' operation transmits data which may contain unencrypted sensitive data from $@. | main.rs:12:50:12:57 | password | password | +| main.rs:21:12:21:15 | post | main.rs:19:50:19:57 | password | main.rs:21:12:21:15 | post | This 'post' operation transmits data which may contain unencrypted sensitive data from $@. | main.rs:19:50:19:57 | password | password | +| main.rs:28:12:28:18 | request | main.rs:26:50:26:57 | password | main.rs:28:12:28:18 | request | This 'request' operation transmits data which may contain unencrypted sensitive data from $@. | main.rs:26:50:26:57 | password | password | +| main.rs:35:12:35:18 | request | main.rs:33:50:33:57 | password | main.rs:35:12:35:18 | request | This 'request' operation transmits data which may contain unencrypted sensitive data from $@. | main.rs:33:50:33:57 | password | password | edges | main.rs:6:9:6:11 | url | main.rs:7:28:7:30 | url | provenance | | | main.rs:6:15:6:58 | res | main.rs:6:23:6:57 | { ... } | provenance | | diff --git a/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected index c5b470fa9c3..e569aca9804 100644 --- a/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected @@ -1,10 +1,143 @@ multipleCallTargets +| test_logging.rs:42:5:42:36 | ...::max_level(...) | +| test_logging.rs:43:5:43:36 | ...::max_level(...) | +| test_logging.rs:44:5:44:35 | ...::max_level(...) | +| test_logging.rs:45:5:45:36 | ...::max_level(...) | +| test_logging.rs:46:5:46:35 | ...::max_level(...) | +| test_logging.rs:47:5:47:48 | ...::max_level(...) | +| test_logging.rs:50:5:50:21 | ...::max_level(...) | +| test_logging.rs:51:5:51:36 | ...::max_level(...) | +| test_logging.rs:52:5:52:36 | ...::max_level(...) | +| test_logging.rs:53:5:53:46 | ...::max_level(...) | +| test_logging.rs:54:5:54:49 | ...::max_level(...) | +| test_logging.rs:55:5:55:34 | ...::max_level(...) | +| test_logging.rs:56:5:56:47 | ...::max_level(...) | +| test_logging.rs:57:5:57:34 | ...::max_level(...) | +| test_logging.rs:58:5:58:36 | ...::max_level(...) | +| test_logging.rs:59:5:59:54 | ...::max_level(...) | +| test_logging.rs:60:5:60:54 | ...::max_level(...) | +| test_logging.rs:61:5:61:55 | ...::max_level(...) | +| test_logging.rs:64:5:64:48 | ...::max_level(...) | +| test_logging.rs:65:5:65:48 | ...::max_level(...) | +| test_logging.rs:66:5:66:66 | ...::max_level(...) | +| test_logging.rs:67:5:67:66 | ...::max_level(...) | +| test_logging.rs:68:5:68:67 | ...::max_level(...) | +| test_logging.rs:71:5:71:47 | ...::max_level(...) | +| test_logging.rs:72:5:72:47 | ...::max_level(...) | +| test_logging.rs:73:5:73:50 | ...::max_level(...) | +| test_logging.rs:74:5:74:65 | ...::max_level(...) | +| test_logging.rs:75:5:75:51 | ...::max_level(...) | +| test_logging.rs:76:5:76:47 | ...::max_level(...) | +| test_logging.rs:77:5:77:48 | ...::max_level(...) | | test_logging.rs:77:20:77:36 | password.as_str() | +| test_logging.rs:78:5:78:50 | ...::max_level(...) | | test_logging.rs:78:22:78:38 | password.as_str() | +| test_logging.rs:81:5:81:44 | ...::max_level(...) | +| test_logging.rs:82:5:82:44 | ...::max_level(...) | +| test_logging.rs:83:5:83:47 | ...::max_level(...) | +| test_logging.rs:84:5:84:62 | ...::max_level(...) | +| test_logging.rs:85:5:85:48 | ...::max_level(...) | +| test_logging.rs:86:5:86:44 | ...::max_level(...) | | test_logging.rs:88:18:88:34 | password.as_str() | +| test_logging.rs:89:5:89:29 | ...::max_level(...) | +| test_logging.rs:90:5:90:31 | ...::max_level(...) | +| test_logging.rs:94:5:94:29 | ...::max_level(...) | +| test_logging.rs:97:5:97:19 | ...::max_level(...) | +| test_logging.rs:100:5:100:19 | ...::max_level(...) | +| test_logging.rs:104:5:104:19 | ...::max_level(...) | +| test_logging.rs:108:5:108:19 | ...::max_level(...) | +| test_logging.rs:112:5:112:50 | ...::max_level(...) | +| test_logging.rs:114:9:114:55 | ...::max_level(...) | +| test_logging.rs:118:5:118:42 | ...::max_level(...) | +| test_logging.rs:121:5:121:33 | ...::max_level(...) | +| test_logging.rs:123:5:123:33 | ...::max_level(...) | +| test_logging.rs:126:5:126:33 | ...::max_level(...) | +| test_logging.rs:130:5:130:32 | ...::max_level(...) | +| test_logging.rs:131:5:131:32 | ...::max_level(...) | +| test_logging.rs:132:5:132:32 | ...::max_level(...) | +| test_logging.rs:133:5:133:33 | ...::max_level(...) | +| test_logging.rs:140:5:140:38 | ...::max_level(...) | +| test_logging.rs:141:5:141:38 | ...::max_level(...) | +| test_logging.rs:142:5:142:29 | ...::max_level(...) | +| test_logging.rs:143:5:143:31 | ...::max_level(...) | +| test_logging.rs:144:5:144:32 | ...::max_level(...) | +| test_logging.rs:150:5:150:38 | ...::max_level(...) | +| test_logging.rs:151:5:151:38 | ...::max_level(...) | +| test_logging.rs:152:5:152:29 | ...::max_level(...) | +| test_logging.rs:153:5:153:31 | ...::max_level(...) | +| test_logging.rs:154:5:154:32 | ...::max_level(...) | +| test_logging.rs:192:12:192:37 | ...::_print(...) | +| test_logging.rs:193:14:193:37 | ...::_print(...) | +| test_logging.rs:194:13:194:38 | ...::_eprint(...) | +| test_logging.rs:195:15:195:38 | ...::_eprint(...) | | test_logging.rs:229:30:229:71 | ... .as_str() | | test_logging.rs:242:16:242:61 | ... .as_bytes() | | test_logging.rs:243:5:245:66 | ... .write_all(...) | | test_logging.rs:245:20:245:65 | ... .as_bytes() | | test_logging.rs:248:15:248:60 | ... .as_bytes() | | test_logging.rs:251:15:251:60 | ... .as_bytes() | +| test_storage.rs:13:10:13:33 | ...::from(...) | +| test_storage.rs:17:10:17:35 | ...::from(...) | +| test_storage.rs:21:10:21:35 | ...::from(...) | +| test_storage.rs:25:10:25:32 | ...::from(...) | +| test_storage.rs:29:10:29:35 | ...::from(...) | +| test_storage.rs:36:45:36:57 | text.as_ref() | +| test_storage.rs:68:25:68:74 | ...::from(...) | +| test_storage.rs:69:25:69:76 | ...::from(...) | +| test_storage.rs:70:25:70:82 | ...::from(...) | +| test_storage.rs:71:25:71:79 | ...::from(...) | +| test_storage.rs:72:25:72:70 | ...::from(...) | +| test_storage.rs:73:25:73:67 | ...::from(...) | +| test_storage.rs:75:25:75:65 | ...::from(...) | +| test_storage.rs:76:25:76:65 | ...::from(...) | +| test_storage.rs:77:14:77:24 | s1.as_str() | +| test_storage.rs:78:25:78:65 | ...::from(...) | +| test_storage.rs:79:25:79:65 | ...::from(...) | +| test_storage.rs:80:25:80:70 | ...::from(...) | +| test_storage.rs:81:25:81:72 | ...::from(...) | +| test_storage.rs:82:26:82:77 | ...::from(...) | +| test_storage.rs:85:27:85:48 | select_query1.as_str() | +| test_storage.rs:86:27:86:48 | select_query2.as_str() | +| test_storage.rs:87:27:87:48 | insert_query1.as_str() | +| test_storage.rs:88:27:88:48 | insert_query2.as_str() | +| test_storage.rs:89:27:89:48 | update_query1.as_str() | +| test_storage.rs:90:27:90:48 | update_query2.as_str() | +| test_storage.rs:91:27:91:48 | update_query3.as_str() | +| test_storage.rs:92:27:92:48 | update_query4.as_str() | +| test_storage.rs:93:27:93:48 | update_query5.as_str() | +| test_storage.rs:94:27:94:48 | update_query6.as_str() | +| test_storage.rs:95:27:95:48 | delete_query1.as_str() | +| test_storage.rs:96:27:96:48 | delete_query2.as_str() | +| test_storage.rs:99:25:99:46 | insert_query1.as_str() | +| test_storage.rs:100:25:100:46 | insert_query2.as_str() | +| test_storage.rs:101:25:101:47 | prepared_query.as_str() | +| test_storage.rs:102:25:102:47 | prepared_query.as_str() | +| test_storage.rs:103:25:103:47 | prepared_query.as_str() | +| test_storage.rs:104:25:104:47 | prepared_query.as_str() | +| test_storage.rs:110:27:110:48 | insert_query1.as_str() | +| test_storage.rs:111:27:111:48 | insert_query2.as_str() | +| test_storage.rs:114:27:114:48 | insert_query1.as_str() | +| test_storage.rs:115:27:115:48 | insert_query2.as_str() | +| test_storage.rs:118:25:118:46 | insert_query1.as_str() | +| test_storage.rs:119:25:119:46 | insert_query2.as_str() | +| test_storage.rs:120:25:120:47 | prepared_query.as_str() | +| test_storage.rs:121:25:121:47 | prepared_query.as_str() | +| test_storage.rs:124:25:124:46 | insert_query1.as_str() | +| test_storage.rs:125:25:125:46 | insert_query2.as_str() | +| test_storage.rs:126:25:126:47 | prepared_query.as_str() | +| test_storage.rs:127:25:127:47 | prepared_query.as_str() | +| test_storage.rs:134:27:134:48 | insert_query1.as_str() | +| test_storage.rs:135:27:135:48 | insert_query2.as_str() | +| test_storage.rs:138:25:138:46 | insert_query1.as_str() | +| test_storage.rs:139:25:139:46 | insert_query2.as_str() | +| test_storage.rs:140:25:140:47 | prepared_query.as_str() | +| test_storage.rs:141:25:141:47 | prepared_query.as_str() | +| test_storage.rs:188:29:188:86 | ...::from(...) | +| test_storage.rs:189:28:189:82 | ...::from(...) | +| test_storage.rs:190:28:190:81 | ...::from(...) | +| test_storage.rs:217:14:217:47 | ...::_print(...) | +| test_storage.rs:219:27:219:41 | ...::_print(...) | +| test_storage.rs:220:28:220:43 | ...::_print(...) | +| test_storage.rs:223:14:223:51 | ...::_print(...) | +| test_storage.rs:225:27:225:41 | ...::_print(...) | +| test_storage.rs:226:28:226:43 | ...::_print(...) | diff --git a/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/TypeInferenceConsistency.expected b/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/TypeInferenceConsistency.expected new file mode 100644 index 00000000000..952a4afe86b --- /dev/null +++ b/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/TypeInferenceConsistency.expected @@ -0,0 +1,4 @@ +nonUniqueCertainType +| test_logging.rs:17:8:19:12 | { ... } | E | +| test_logging.rs:29:8:31:12 | { ... } | E | +| test_storage.rs:177:8:179:9 | { ... } | E | diff --git a/rust/ql/test/query-tests/security/CWE-312/Cargo.lock b/rust/ql/test/query-tests/security/CWE-312/Cargo.lock index 66f3d9acd92..d327342e765 100644 --- a/rust/ql/test/query-tests/security/CWE-312/Cargo.lock +++ b/rust/ql/test/query-tests/security/CWE-312/Cargo.lock @@ -2,6 +2,314 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common", + "generic-array", +] + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "aes-gcm" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "ghash", + "subtle", +] + +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand 2.3.0", + "futures-lite 2.6.0", + "pin-project-lite", + "slab", +] + +[[package]] +name = "async-global-executor" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" +dependencies = [ + "async-channel 2.5.0", + "async-executor", + "async-io 2.5.0", + "async-lock 3.4.0", + "blocking", + "futures-lite 2.6.0", + "once_cell", +] + +[[package]] +name = "async-io" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-lite 1.13.0", + "log", + "parking", + "polling 2.8.0", + "rustix 0.37.28", + "slab", + "socket2", + "waker-fn", +] + +[[package]] +name = "async-io" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19634d6336019ef220f09fd31168ce5c184b295cbf80345437cc36094ef223ca" +dependencies = [ + "async-lock 3.4.0", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite 2.6.0", + "parking", + "polling 3.9.0", + "rustix 1.0.8", + "slab", + "windows-sys 0.60.2", +] + +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener 2.5.3", +] + +[[package]] +name = "async-lock" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +dependencies = [ + "event-listener 5.4.0", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-std" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "730294c1c08c2e0f85759590518f6333f0d5a0a766a27d519c1b244c3dfd8a24" +dependencies = [ + "async-channel 1.9.0", + "async-global-executor", + "async-io 2.5.0", + "async-lock 3.4.0", + "crossbeam-utils", + "futures-channel", + "futures-core", + "futures-io", + "futures-lite 2.6.0", + "gloo-timers", + "kv-log-macro", + "log", + "memchr", + "once_cell", + "pin-project-lite", + "pin-utils", + "slab", + "wasm-bindgen-futures", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "atoi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64ct" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +dependencies = [ + "serde", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "blocking" +version = "1.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" +dependencies = [ + "async-channel 2.5.0", + "async-task", + "futures-io", + "futures-lite 2.6.0", + "piper", +] + +[[package]] +name = "bumpalo" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" + +[[package]] +name = "cc" +version = "1.2.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" +dependencies = [ + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + [[package]] name = "colored" version = "2.2.0" @@ -12,6 +320,107 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "rand_core", + "typenum", +] + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] + +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + [[package]] name = "deranged" version = "0.4.0" @@ -21,17 +430,617 @@ dependencies = [ "powerfmt", ] +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +dependencies = [ + "serde", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + +[[package]] +name = "etcetera" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" +dependencies = [ + "cfg-if", + "home", + "windows-sys 0.48.0", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "5.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener 5.4.0", + "pin-project-lite", +] + +[[package]] +name = "fallible-iterator" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" + +[[package]] +name = "fallible-streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "flume" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" +dependencies = [ + "futures-core", + "futures-sink", + "spin", +] + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-intrusive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" +dependencies = [ + "futures-core", + "lock_api", + "parking_lot", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-lite" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" +dependencies = [ + "fastrand 2.3.0", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", +] + +[[package]] +name = "ghash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" +dependencies = [ + "opaque-debug", + "polyval", +] + +[[package]] +name = "gloo-timers" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + +[[package]] +name = "hashlink" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" +dependencies = [ + "hashbrown 0.14.5", +] + +[[package]] +name = "hashlink" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" +dependencies = [ + "hashbrown 0.15.4", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hermit-abi" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "home" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "icu_collections" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" + +[[package]] +name = "icu_properties" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "potential_utf", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" + +[[package]] +name = "icu_provider" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +dependencies = [ + "displaydoc", + "icu_locale_core", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" +dependencies = [ + "equivalent", + "hashbrown 0.15.4", +] + +[[package]] +name = "inout" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +dependencies = [ + "generic-array", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.48.0", +] + [[package]] name = "itoa" version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +[[package]] +name = "js-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "kv-log-macro" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" +dependencies = [ + "log", +] + [[package]] name = "lazy_static" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin", +] [[package]] name = "libc" @@ -39,11 +1048,59 @@ version = "0.2.173" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8cfeafaffdbc32176b64fb251369d52ea9f0a8fbc6f8759edffef7b525d64bb" +[[package]] +name = "libm" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" + +[[package]] +name = "libsqlite3-sys" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "linux-raw-sys" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" + +[[package]] +name = "litemap" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" + +[[package]] +name = "lock_api" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +dependencies = [ + "autocfg", + "scopeguard", +] + [[package]] name = "log" version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +dependencies = [ + "value-bag", +] [[package]] name = "log_err" @@ -54,12 +1111,92 @@ dependencies = [ "log", ] +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest", +] + +[[package]] +name = "memchr" +version = "2.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" + +[[package]] +name = "native-tls" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "num-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand", + "smallvec", + "zeroize", +] + [[package]] name = "num-conv" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + [[package]] name = "num_threads" version = "0.1.7" @@ -69,12 +1206,222 @@ dependencies = [ "libc", ] +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "openssl" +version = "0.10.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" +dependencies = [ + "bitflags 2.9.1", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "openssl-sys" +version = "0.9.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.52.6", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand 2.3.0", + "futures-io", +] + +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der", + "pkcs8", + "spki", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite", + "windows-sys 0.48.0", +] + +[[package]] +name = "polling" +version = "3.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ee9b2fa7a4517d2c91ff5bc6c297a427a96749d15f98fcdbb22c05571a4d4b7" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi 0.5.2", + "pin-project-lite", + "rustix 1.0.8", + "windows-sys 0.60.2", +] + +[[package]] +name = "polyval" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +dependencies = [ + "cfg-if", + "cpufeatures", + "opaque-debug", + "universal-hash", +] + +[[package]] +name = "potential_utf" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +dependencies = [ + "zerovec", +] + [[package]] name = "powerfmt" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + [[package]] name = "proc-macro2" version = "1.0.95" @@ -93,6 +1440,162 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.16", +] + +[[package]] +name = "redox_syscall" +version = "0.5.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" +dependencies = [ + "bitflags 2.9.1", +] + +[[package]] +name = "rsa" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b" +dependencies = [ + "const-oid", + "digest", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1", + "pkcs8", + "rand_core", + "signature", + "spki", + "subtle", + "zeroize", +] + +[[package]] +name = "rusqlite" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7753b721174eb8ff87a9a0e799e2d7bc3749323e773db92e0984debb00019d6e" +dependencies = [ + "bitflags 2.9.1", + "fallible-iterator", + "fallible-streaming-iterator", + "hashlink 0.9.1", + "libsqlite3-sys", + "smallvec", +] + +[[package]] +name = "rustix" +version = "0.37.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "519165d378b97752ca44bbe15047d5d3409e875f39327546b42ac81d7e18c1b6" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustix" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" +dependencies = [ + "bitflags 2.9.1", + "errno", + "libc", + "linux-raw-sys 0.9.4", + "windows-sys 0.60.2", +] + +[[package]] +name = "rustversion" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "schannel" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.9.1", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "serde" version = "1.0.219" @@ -113,6 +1616,68 @@ dependencies = [ "syn", ] +[[package]] +name = "serde_json" +version = "1.0.141" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core", +] + [[package]] name = "simple_logger" version = "5.0.0" @@ -125,6 +1690,262 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "slab" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +dependencies = [ + "serde", +] + +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "sqlx" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc" +dependencies = [ + "sqlx-core", + "sqlx-macros", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", +] + +[[package]] +name = "sqlx-core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" +dependencies = [ + "async-io 1.13.0", + "async-std", + "base64", + "bytes", + "crc", + "crossbeam-queue", + "either", + "event-listener 5.4.0", + "futures-core", + "futures-intrusive", + "futures-io", + "futures-util", + "hashbrown 0.15.4", + "hashlink 0.10.0", + "indexmap", + "log", + "memchr", + "native-tls", + "once_cell", + "percent-encoding", + "serde", + "serde_json", + "sha2", + "smallvec", + "thiserror", + "tracing", + "url", +] + +[[package]] +name = "sqlx-macros" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d" +dependencies = [ + "proc-macro2", + "quote", + "sqlx-core", + "sqlx-macros-core", + "syn", +] + +[[package]] +name = "sqlx-macros-core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b" +dependencies = [ + "async-std", + "dotenvy", + "either", + "heck", + "hex", + "once_cell", + "proc-macro2", + "quote", + "serde", + "serde_json", + "sha2", + "sqlx-core", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", + "syn", + "url", +] + +[[package]] +name = "sqlx-mysql" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" +dependencies = [ + "atoi", + "base64", + "bitflags 2.9.1", + "byteorder", + "bytes", + "crc", + "digest", + "dotenvy", + "either", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "generic-array", + "hex", + "hkdf", + "hmac", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "percent-encoding", + "rand", + "rsa", + "serde", + "sha1", + "sha2", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-postgres" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" +dependencies = [ + "atoi", + "base64", + "bitflags 2.9.1", + "byteorder", + "crc", + "dotenvy", + "etcetera", + "futures-channel", + "futures-core", + "futures-util", + "hex", + "hkdf", + "hmac", + "home", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "rand", + "serde", + "serde_json", + "sha2", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-sqlite" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea" +dependencies = [ + "atoi", + "flume", + "futures-channel", + "futures-core", + "futures-executor", + "futures-intrusive", + "futures-util", + "libsqlite3-sys", + "log", + "percent-encoding", + "serde", + "serde_urlencoded", + "sqlx-core", + "thiserror", + "tracing", + "url", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "stringprep" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" +dependencies = [ + "unicode-bidi", + "unicode-normalization", + "unicode-properties", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + [[package]] name = "syn" version = "2.0.103" @@ -136,13 +1957,63 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tempfile" +version = "3.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" +dependencies = [ + "fastrand 2.3.0", + "getrandom 0.3.3", + "once_cell", + "rustix 1.0.8", + "windows-sys 0.59.0", +] + [[package]] name = "test" version = "0.0.1" dependencies = [ + "aes", + "aes-gcm", + "base64", + "futures", "log", "log_err", + "rusqlite", "simple_logger", + "sqlx", +] + +[[package]] +name = "thiserror" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +dependencies = [ + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -178,12 +2049,287 @@ dependencies = [ "time-core", ] +[[package]] +name = "tinystr" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +dependencies = [ + "once_cell", +] + +[[package]] +name = "typenum" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" + +[[package]] +name = "unicode-bidi" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" + [[package]] name = "unicode-ident" version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +[[package]] +name = "unicode-normalization" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-properties" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" + +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common", + "subtle", +] + +[[package]] +name = "url" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "value-bag" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "943ce29a8a743eb10d6082545d861b24f9d1b160b7d741e0f2cdf726bec909c5" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "waker-fn" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + +[[package]] +name = "wasite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" + +[[package]] +name = "wasm-bindgen" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "web-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "whoami" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6994d13118ab492c3c80c1f81928718159254c53c472bf9ce36f8dae4add02a7" +dependencies = [ + "redox_syscall", + "wasite", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + [[package]] name = "windows-sys" version = "0.48.0" @@ -202,6 +2348,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.3", +] + [[package]] name = "windows-targets" version = "0.48.5" @@ -226,13 +2381,30 @@ dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm", + "windows_i686_gnullvm 0.52.6", "windows_i686_msvc 0.52.6", "windows_x86_64_gnu 0.52.6", "windows_x86_64_gnullvm 0.52.6", "windows_x86_64_msvc 0.52.6", ] +[[package]] +name = "windows-targets" +version = "0.53.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -245,6 +2417,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" @@ -257,6 +2435,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" + [[package]] name = "windows_i686_gnu" version = "0.48.5" @@ -269,12 +2453,24 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +[[package]] +name = "windows_i686_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" + [[package]] name = "windows_i686_msvc" version = "0.48.5" @@ -287,6 +2483,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_i686_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" @@ -299,6 +2501,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" @@ -311,6 +2519,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" @@ -322,3 +2536,128 @@ name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" + +[[package]] +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags 2.9.1", +] + +[[package]] +name = "writeable" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" + +[[package]] +name = "yoke" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/rust/ql/test/query-tests/security/CWE-312/CleartextStorageDatabase.expected b/rust/ql/test/query-tests/security/CWE-312/CleartextStorageDatabase.expected new file mode 100644 index 00000000000..028b2d88ac3 --- /dev/null +++ b/rust/ql/test/query-tests/security/CWE-312/CleartextStorageDatabase.expected @@ -0,0 +1,146 @@ +#select +| test_storage.rs:100:13:100:23 | ...::query | test_storage.rs:71:97:71:114 | get_phone_number(...) | test_storage.rs:100:13:100:23 | ...::query | This database operation may read or write unencrypted sensitive data from $@. | test_storage.rs:71:97:71:114 | get_phone_number(...) | get_phone_number(...) | +| test_storage.rs:115:13:115:25 | ...::raw_sql | test_storage.rs:71:97:71:114 | get_phone_number(...) | test_storage.rs:115:13:115:25 | ...::raw_sql | This database operation may read or write unencrypted sensitive data from $@. | test_storage.rs:71:97:71:114 | get_phone_number(...) | get_phone_number(...) | +| test_storage.rs:119:13:119:23 | ...::query | test_storage.rs:71:97:71:114 | get_phone_number(...) | test_storage.rs:119:13:119:23 | ...::query | This database operation may read or write unencrypted sensitive data from $@. | test_storage.rs:71:97:71:114 | get_phone_number(...) | get_phone_number(...) | +| test_storage.rs:125:13:125:23 | ...::query | test_storage.rs:71:97:71:114 | get_phone_number(...) | test_storage.rs:125:13:125:23 | ...::query | This database operation may read or write unencrypted sensitive data from $@. | test_storage.rs:71:97:71:114 | get_phone_number(...) | get_phone_number(...) | +| test_storage.rs:139:13:139:23 | ...::query | test_storage.rs:71:97:71:114 | get_phone_number(...) | test_storage.rs:139:13:139:23 | ...::query | This database operation may read or write unencrypted sensitive data from $@. | test_storage.rs:71:97:71:114 | get_phone_number(...) | get_phone_number(...) | +| test_storage.rs:194:16:194:22 | execute | test_storage.rs:189:100:189:117 | get_phone_number(...) | test_storage.rs:194:16:194:22 | execute | This database operation may read or write unencrypted sensitive data from $@. | test_storage.rs:189:100:189:117 | get_phone_number(...) | get_phone_number(...) | +| test_storage.rs:196:24:196:32 | query_row | test_storage.rs:190:86:190:103 | get_phone_number(...) | test_storage.rs:196:24:196:32 | query_row | This database operation may read or write unencrypted sensitive data from $@. | test_storage.rs:190:86:190:103 | get_phone_number(...) | get_phone_number(...) | +| test_storage.rs:204:31:204:37 | prepare | test_storage.rs:190:86:190:103 | get_phone_number(...) | test_storage.rs:204:31:204:37 | prepare | This database operation may read or write unencrypted sensitive data from $@. | test_storage.rs:190:86:190:103 | get_phone_number(...) | get_phone_number(...) | +edges +| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:100:25:100:37 | insert_query2 | provenance | | +| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:100:25:100:46 | insert_query2.as_str() | provenance | MaD:8 | +| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:100:25:100:46 | insert_query2.as_str() | provenance | MaD:7 | +| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:100:25:100:46 | insert_query2.as_str() | provenance | MaD:8 | +| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:115:27:115:39 | insert_query2 | provenance | | +| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:115:27:115:48 | insert_query2.as_str() | provenance | MaD:8 | +| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:115:27:115:48 | insert_query2.as_str() | provenance | MaD:7 | +| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:115:27:115:48 | insert_query2.as_str() | provenance | MaD:8 | +| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:119:25:119:37 | insert_query2 | provenance | | +| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:119:25:119:46 | insert_query2.as_str() | provenance | MaD:8 | +| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:119:25:119:46 | insert_query2.as_str() | provenance | MaD:7 | +| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:119:25:119:46 | insert_query2.as_str() | provenance | MaD:8 | +| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:125:25:125:37 | insert_query2 | provenance | | +| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:125:25:125:46 | insert_query2.as_str() | provenance | MaD:8 | +| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:125:25:125:46 | insert_query2.as_str() | provenance | MaD:7 | +| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:125:25:125:46 | insert_query2.as_str() | provenance | MaD:8 | +| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:139:25:139:37 | insert_query2 | provenance | | +| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:139:25:139:46 | insert_query2.as_str() | provenance | MaD:8 | +| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:139:25:139:46 | insert_query2.as_str() | provenance | MaD:7 | +| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:139:25:139:46 | insert_query2.as_str() | provenance | MaD:8 | +| test_storage.rs:71:25:71:114 | ... + ... | test_storage.rs:71:9:71:21 | insert_query2 | provenance | | +| test_storage.rs:71:25:71:114 | ... + ... | test_storage.rs:71:25:71:121 | ... + ... | provenance | MaD:6 | +| test_storage.rs:71:25:71:121 | ... + ... | test_storage.rs:71:9:71:21 | insert_query2 | provenance | | +| test_storage.rs:71:96:71:114 | &... | test_storage.rs:71:9:71:21 | insert_query2 | provenance | | +| test_storage.rs:71:96:71:114 | &... | test_storage.rs:71:25:71:114 | ... + ... | provenance | | +| test_storage.rs:71:97:71:114 | get_phone_number(...) | test_storage.rs:71:96:71:114 | &... | provenance | Config | +| test_storage.rs:100:25:100:37 | insert_query2 | test_storage.rs:100:25:100:46 | insert_query2.as_str() [&ref] | provenance | MaD:8 | +| test_storage.rs:100:25:100:37 | insert_query2 | test_storage.rs:100:25:100:46 | insert_query2.as_str() [&ref] | provenance | MaD:7 | +| test_storage.rs:100:25:100:37 | insert_query2 | test_storage.rs:100:25:100:46 | insert_query2.as_str() [&ref] | provenance | MaD:8 | +| test_storage.rs:100:25:100:46 | insert_query2.as_str() | test_storage.rs:100:13:100:23 | ...::query | provenance | MaD:4 Sink:MaD:4 | +| test_storage.rs:100:25:100:46 | insert_query2.as_str() [&ref] | test_storage.rs:100:13:100:23 | ...::query | provenance | MaD:4 Sink:MaD:4 | +| test_storage.rs:115:27:115:39 | insert_query2 | test_storage.rs:115:27:115:48 | insert_query2.as_str() [&ref] | provenance | MaD:8 | +| test_storage.rs:115:27:115:39 | insert_query2 | test_storage.rs:115:27:115:48 | insert_query2.as_str() [&ref] | provenance | MaD:7 | +| test_storage.rs:115:27:115:39 | insert_query2 | test_storage.rs:115:27:115:48 | insert_query2.as_str() [&ref] | provenance | MaD:8 | +| test_storage.rs:115:27:115:48 | insert_query2.as_str() | test_storage.rs:115:13:115:25 | ...::raw_sql | provenance | MaD:5 Sink:MaD:5 | +| test_storage.rs:115:27:115:48 | insert_query2.as_str() [&ref] | test_storage.rs:115:13:115:25 | ...::raw_sql | provenance | MaD:5 Sink:MaD:5 | +| test_storage.rs:119:25:119:37 | insert_query2 | test_storage.rs:119:25:119:46 | insert_query2.as_str() [&ref] | provenance | MaD:8 | +| test_storage.rs:119:25:119:37 | insert_query2 | test_storage.rs:119:25:119:46 | insert_query2.as_str() [&ref] | provenance | MaD:7 | +| test_storage.rs:119:25:119:37 | insert_query2 | test_storage.rs:119:25:119:46 | insert_query2.as_str() [&ref] | provenance | MaD:8 | +| test_storage.rs:119:25:119:46 | insert_query2.as_str() | test_storage.rs:119:13:119:23 | ...::query | provenance | MaD:4 Sink:MaD:4 | +| test_storage.rs:119:25:119:46 | insert_query2.as_str() [&ref] | test_storage.rs:119:13:119:23 | ...::query | provenance | MaD:4 Sink:MaD:4 | +| test_storage.rs:125:25:125:37 | insert_query2 | test_storage.rs:125:25:125:46 | insert_query2.as_str() [&ref] | provenance | MaD:8 | +| test_storage.rs:125:25:125:37 | insert_query2 | test_storage.rs:125:25:125:46 | insert_query2.as_str() [&ref] | provenance | MaD:7 | +| test_storage.rs:125:25:125:37 | insert_query2 | test_storage.rs:125:25:125:46 | insert_query2.as_str() [&ref] | provenance | MaD:8 | +| test_storage.rs:125:25:125:46 | insert_query2.as_str() | test_storage.rs:125:13:125:23 | ...::query | provenance | MaD:4 Sink:MaD:4 | +| test_storage.rs:125:25:125:46 | insert_query2.as_str() [&ref] | test_storage.rs:125:13:125:23 | ...::query | provenance | MaD:4 Sink:MaD:4 | +| test_storage.rs:139:25:139:37 | insert_query2 | test_storage.rs:139:25:139:46 | insert_query2.as_str() [&ref] | provenance | MaD:8 | +| test_storage.rs:139:25:139:37 | insert_query2 | test_storage.rs:139:25:139:46 | insert_query2.as_str() [&ref] | provenance | MaD:7 | +| test_storage.rs:139:25:139:37 | insert_query2 | test_storage.rs:139:25:139:46 | insert_query2.as_str() [&ref] | provenance | MaD:8 | +| test_storage.rs:139:25:139:46 | insert_query2.as_str() | test_storage.rs:139:13:139:23 | ...::query | provenance | MaD:4 Sink:MaD:4 | +| test_storage.rs:139:25:139:46 | insert_query2.as_str() [&ref] | test_storage.rs:139:13:139:23 | ...::query | provenance | MaD:4 Sink:MaD:4 | +| test_storage.rs:189:9:189:24 | insert_query_bad | test_storage.rs:194:25:194:40 | insert_query_bad | provenance | | +| test_storage.rs:189:28:189:117 | ... + ... | test_storage.rs:189:9:189:24 | insert_query_bad | provenance | | +| test_storage.rs:189:28:189:117 | ... + ... | test_storage.rs:189:28:189:124 | ... + ... | provenance | MaD:6 | +| test_storage.rs:189:28:189:124 | ... + ... | test_storage.rs:189:9:189:24 | insert_query_bad | provenance | | +| test_storage.rs:189:99:189:117 | &... | test_storage.rs:189:9:189:24 | insert_query_bad | provenance | | +| test_storage.rs:189:99:189:117 | &... | test_storage.rs:189:28:189:117 | ... + ... | provenance | | +| test_storage.rs:189:100:189:117 | get_phone_number(...) | test_storage.rs:189:99:189:117 | &... | provenance | Config | +| test_storage.rs:190:9:190:24 | select_query_bad | test_storage.rs:196:35:196:50 | select_query_bad | provenance | | +| test_storage.rs:190:28:190:103 | ... + ... | test_storage.rs:190:9:190:24 | select_query_bad | provenance | | +| test_storage.rs:190:28:190:103 | ... + ... | test_storage.rs:190:28:190:109 | ... + ... | provenance | MaD:6 | +| test_storage.rs:190:28:190:109 | ... + ... | test_storage.rs:190:9:190:24 | select_query_bad | provenance | | +| test_storage.rs:190:85:190:103 | &... | test_storage.rs:190:9:190:24 | select_query_bad | provenance | | +| test_storage.rs:190:85:190:103 | &... | test_storage.rs:190:28:190:103 | ... + ... | provenance | | +| test_storage.rs:190:86:190:103 | get_phone_number(...) | test_storage.rs:190:85:190:103 | &... | provenance | Config | +| test_storage.rs:194:24:194:40 | &insert_query_bad | test_storage.rs:194:16:194:22 | execute | provenance | MaD:1 Sink:MaD:1 | +| test_storage.rs:194:24:194:40 | &insert_query_bad [&ref] | test_storage.rs:194:16:194:22 | execute | provenance | MaD:1 Sink:MaD:1 | +| test_storage.rs:194:25:194:40 | insert_query_bad | test_storage.rs:194:24:194:40 | &insert_query_bad | provenance | Config | +| test_storage.rs:194:25:194:40 | insert_query_bad | test_storage.rs:194:24:194:40 | &insert_query_bad [&ref] | provenance | | +| test_storage.rs:196:34:196:50 | &select_query_bad | test_storage.rs:196:24:196:32 | query_row | provenance | MaD:3 Sink:MaD:3 | +| test_storage.rs:196:34:196:50 | &select_query_bad [&ref] | test_storage.rs:196:24:196:32 | query_row | provenance | MaD:3 Sink:MaD:3 | +| test_storage.rs:196:35:196:50 | select_query_bad | test_storage.rs:196:34:196:50 | &select_query_bad | provenance | Config | +| test_storage.rs:196:35:196:50 | select_query_bad | test_storage.rs:196:34:196:50 | &select_query_bad [&ref] | provenance | | +| test_storage.rs:196:35:196:50 | select_query_bad | test_storage.rs:204:40:204:55 | select_query_bad | provenance | | +| test_storage.rs:204:39:204:55 | &select_query_bad | test_storage.rs:204:31:204:37 | prepare | provenance | MaD:2 Sink:MaD:2 | +| test_storage.rs:204:39:204:55 | &select_query_bad [&ref] | test_storage.rs:204:31:204:37 | prepare | provenance | MaD:2 Sink:MaD:2 | +| test_storage.rs:204:40:204:55 | select_query_bad | test_storage.rs:204:39:204:55 | &select_query_bad | provenance | Config | +| test_storage.rs:204:40:204:55 | select_query_bad | test_storage.rs:204:39:204:55 | &select_query_bad [&ref] | provenance | | +models +| 1 | Sink: ::execute; Argument[0]; sql-injection | +| 2 | Sink: ::prepare; Argument[0]; sql-injection | +| 3 | Sink: ::query_row; Argument[0]; sql-injection | +| 4 | Sink: sqlx_core::query::query; Argument[0]; sql-injection | +| 5 | Sink: sqlx_core::raw_sql::raw_sql; Argument[0]; sql-injection | +| 6 | Summary: ::add; Argument[self]; ReturnValue; value | +| 7 | Summary: ::as_str; Argument[self]; ReturnValue; value | +| 8 | Summary: ::as_str; Argument[self]; ReturnValue; value | +nodes +| test_storage.rs:71:9:71:21 | insert_query2 | semmle.label | insert_query2 | +| test_storage.rs:71:25:71:114 | ... + ... | semmle.label | ... + ... | +| test_storage.rs:71:25:71:121 | ... + ... | semmle.label | ... + ... | +| test_storage.rs:71:96:71:114 | &... | semmle.label | &... | +| test_storage.rs:71:97:71:114 | get_phone_number(...) | semmle.label | get_phone_number(...) | +| test_storage.rs:100:13:100:23 | ...::query | semmle.label | ...::query | +| test_storage.rs:100:25:100:37 | insert_query2 | semmle.label | insert_query2 | +| test_storage.rs:100:25:100:46 | insert_query2.as_str() | semmle.label | insert_query2.as_str() | +| test_storage.rs:100:25:100:46 | insert_query2.as_str() [&ref] | semmle.label | insert_query2.as_str() [&ref] | +| test_storage.rs:115:13:115:25 | ...::raw_sql | semmle.label | ...::raw_sql | +| test_storage.rs:115:27:115:39 | insert_query2 | semmle.label | insert_query2 | +| test_storage.rs:115:27:115:48 | insert_query2.as_str() | semmle.label | insert_query2.as_str() | +| test_storage.rs:115:27:115:48 | insert_query2.as_str() [&ref] | semmle.label | insert_query2.as_str() [&ref] | +| test_storage.rs:119:13:119:23 | ...::query | semmle.label | ...::query | +| test_storage.rs:119:25:119:37 | insert_query2 | semmle.label | insert_query2 | +| test_storage.rs:119:25:119:46 | insert_query2.as_str() | semmle.label | insert_query2.as_str() | +| test_storage.rs:119:25:119:46 | insert_query2.as_str() [&ref] | semmle.label | insert_query2.as_str() [&ref] | +| test_storage.rs:125:13:125:23 | ...::query | semmle.label | ...::query | +| test_storage.rs:125:25:125:37 | insert_query2 | semmle.label | insert_query2 | +| test_storage.rs:125:25:125:46 | insert_query2.as_str() | semmle.label | insert_query2.as_str() | +| test_storage.rs:125:25:125:46 | insert_query2.as_str() [&ref] | semmle.label | insert_query2.as_str() [&ref] | +| test_storage.rs:139:13:139:23 | ...::query | semmle.label | ...::query | +| test_storage.rs:139:25:139:37 | insert_query2 | semmle.label | insert_query2 | +| test_storage.rs:139:25:139:46 | insert_query2.as_str() | semmle.label | insert_query2.as_str() | +| test_storage.rs:139:25:139:46 | insert_query2.as_str() [&ref] | semmle.label | insert_query2.as_str() [&ref] | +| test_storage.rs:189:9:189:24 | insert_query_bad | semmle.label | insert_query_bad | +| test_storage.rs:189:28:189:117 | ... + ... | semmle.label | ... + ... | +| test_storage.rs:189:28:189:124 | ... + ... | semmle.label | ... + ... | +| test_storage.rs:189:99:189:117 | &... | semmle.label | &... | +| test_storage.rs:189:100:189:117 | get_phone_number(...) | semmle.label | get_phone_number(...) | +| test_storage.rs:190:9:190:24 | select_query_bad | semmle.label | select_query_bad | +| test_storage.rs:190:28:190:103 | ... + ... | semmle.label | ... + ... | +| test_storage.rs:190:28:190:109 | ... + ... | semmle.label | ... + ... | +| test_storage.rs:190:85:190:103 | &... | semmle.label | &... | +| test_storage.rs:190:86:190:103 | get_phone_number(...) | semmle.label | get_phone_number(...) | +| test_storage.rs:194:16:194:22 | execute | semmle.label | execute | +| test_storage.rs:194:24:194:40 | &insert_query_bad | semmle.label | &insert_query_bad | +| test_storage.rs:194:24:194:40 | &insert_query_bad [&ref] | semmle.label | &insert_query_bad [&ref] | +| test_storage.rs:194:25:194:40 | insert_query_bad | semmle.label | insert_query_bad | +| test_storage.rs:196:24:196:32 | query_row | semmle.label | query_row | +| test_storage.rs:196:34:196:50 | &select_query_bad | semmle.label | &select_query_bad | +| test_storage.rs:196:34:196:50 | &select_query_bad [&ref] | semmle.label | &select_query_bad [&ref] | +| test_storage.rs:196:35:196:50 | select_query_bad | semmle.label | select_query_bad | +| test_storage.rs:204:31:204:37 | prepare | semmle.label | prepare | +| test_storage.rs:204:39:204:55 | &select_query_bad | semmle.label | &select_query_bad | +| test_storage.rs:204:39:204:55 | &select_query_bad [&ref] | semmle.label | &select_query_bad [&ref] | +| test_storage.rs:204:40:204:55 | select_query_bad | semmle.label | select_query_bad | +subpaths diff --git a/rust/ql/test/query-tests/security/CWE-312/CleartextStorageDatabase.qlref b/rust/ql/test/query-tests/security/CWE-312/CleartextStorageDatabase.qlref new file mode 100644 index 00000000000..54f4c6b10e2 --- /dev/null +++ b/rust/ql/test/query-tests/security/CWE-312/CleartextStorageDatabase.qlref @@ -0,0 +1,4 @@ +query: queries/security/CWE-312/CleartextStorageDatabase.ql +postprocess: + - utils/test/InlineExpectationsTestQuery.ql + - utils/test/PrettyPrintModels.ql diff --git a/rust/ql/test/query-tests/security/CWE-312/options.yml b/rust/ql/test/query-tests/security/CWE-312/options.yml index e2329156d6f..ad0f41ebef4 100644 --- a/rust/ql/test/query-tests/security/CWE-312/options.yml +++ b/rust/ql/test/query-tests/security/CWE-312/options.yml @@ -3,3 +3,9 @@ qltest_dependencies: - log = { version = "0.4.25", features = ["kv"] } - simple_logger = { version = "5.0.0" } - log_err = { version = "1.1.1" } + - sqlx = { version = "0.8.6", features = ["mysql", "sqlite", "postgres", "runtime-async-std", "tls-native-tls"] } + - futures = { version = "0.3" } + - aes = { version = "0.8.4" } + - aes-gcm = { version = "0.10.3" } + - base64 = { version = "0.22.1" } + - rusqlite = { version = "0.32" } diff --git a/rust/ql/test/query-tests/security/CWE-312/test_logging.rs b/rust/ql/test/query-tests/security/CWE-312/test_logging.rs index 4b12005a6cb..02451c92d91 100644 --- a/rust/ql/test/query-tests/security/CWE-312/test_logging.rs +++ b/rust/ql/test/query-tests/security/CWE-312/test_logging.rs @@ -90,13 +90,13 @@ fn test_log(harmless: String, password: String, encrypted_password: String) { error!(value2:?; "message"); // $ MISSING: Alert[rust/cleartext-logging] // pre-formatted - let m1 = &password; // $ Source=m1 + let m1 = &password; // $ Source[rust/cleartext-logging]=m1 info!("message = {}", m1); // $ Alert[rust/cleartext-logging]=m1 - let m2 = "message = ".to_string() + &password; // $ Source=m2 + let m2 = "message = ".to_string() + &password; // $ Source[rust/cleartext-logging]=m2 info!("{}", m2); // $ Alert[rust/cleartext-logging]=m2 - let m3 = format!("message = {}", password); // $ Source=m3 + let m3 = format!("message = {}", password); // $ Source[rust/cleartext-logging]=m3 info!("{}", m3); // $ Alert[rust/cleartext-logging]=m3 let mut m4 = String::new(); @@ -126,7 +126,7 @@ fn test_log(harmless: String, password: String, encrypted_password: String) { trace!("message = {}", &str2); // logging from a tuple - let t1 = (harmless, password); // $ Source=t1 + let t1 = (harmless, password); // $ Source[rust/cleartext-logging]=t1 trace!("message = {}", t1.0); trace!("message = {}", t1.1); // $ Alert[rust/cleartext-logging]=t1 trace!("message = {:?}", t1); // $ MISSING: Alert[rust/cleartext-logging]=t1 @@ -180,11 +180,11 @@ fn test_log(harmless: String, password: String, encrypted_password: String) { let _ = err_result.log_expect(&format!("Failed with password: {}", password2)); // $ Alert[rust/cleartext-logging] // test `log_expect` with sensitive `Result.Err` - let err_result2: Result = Err(password2.clone()); // $ Source=s3 + let err_result2: Result = Err(password2.clone()); // $ Source[rust/cleartext-logging]=s3 let _ = err_result2.log_expect(""); // $ Alert[rust/cleartext-logging]=s3 // test `log_unwrap` with sensitive `Result.Err` - let err_result3: Result = Err(password2); // $ Source=err_result3 + let err_result3: Result = Err(password2); // $ Source[rust/cleartext-logging]=err_result3 let _ = err_result3.log_unwrap(); // $ Alert[rust/cleartext-logging]=err_result3 } diff --git a/rust/ql/test/query-tests/security/CWE-312/test_storage.rs b/rust/ql/test/query-tests/security/CWE-312/test_storage.rs new file mode 100644 index 00000000000..1d23a22bd6e --- /dev/null +++ b/rust/ql/test/query-tests/security/CWE-312/test_storage.rs @@ -0,0 +1,228 @@ + +use aes_gcm::aead::{Aead, AeadCore, OsRng}; +use aes_gcm::aes::cipher::Unsigned; +use aes_gcm::{Aes256Gcm, KeyInit}; +use base64::prelude::*; + +use sqlx::Connection; +use sqlx::Executor; + +// --- tests --- + +fn get_harmless() -> String { + return String::from("harmless"); +} + +fn get_social_security_number() -> String { + return String::from("1234567890"); +} + +fn get_phone_number() -> String { + return String::from("1234567890"); +} + +fn get_email() -> String { + return String::from("a@b.com"); +} + +fn get_ccn() -> String { + return String::from("1234567890"); +} + +fn encrypt(text: String, encryption_key: &aes_gcm::Key) -> String { + // encrypt text -> ciphertext + let cipher = Aes256Gcm::new(&encryption_key); + let nonce = Aes256Gcm::generate_nonce(&mut OsRng); + let ciphertext = cipher.encrypt(&nonce, text.as_ref()).unwrap(); + + // append (nonce, ciphertext) + let mut combined = nonce.to_vec(); + combined.extend(ciphertext); + + // encode to base64 string + BASE64_STANDARD.encode(combined) +} + +fn decrypt(data: String, encryption_key: &aes_gcm::Key) -> String { + let cipher = Aes256Gcm::new(&encryption_key); + + // decode base64 string + let decoded = BASE64_STANDARD.decode(data).unwrap(); + + // split into (nonce, ciphertext) + let nonce_size = ::NonceSize::to_usize(); + let (nonce, ciphertext) = decoded.split_at(nonce_size); + + // decrypt ciphertext -> plaintext + let plaintext = cipher.decrypt(nonce.into(), ciphertext).unwrap(); + String::from_utf8(plaintext).unwrap() +} + +async fn test_storage_sqlx_sql_command(url: &str) -> Result<(), sqlx::Error> { + // connect through a MySQL connection pool + let pool1 = sqlx::mysql::MySqlPool::connect(url).await?; + let mut conn1 = pool1.acquire().await?; + + // construct queries + let id = "123"; + let select_query1 = String::from("SELECT * FROM CONTACTS WHERE ID = ") + id; + let select_query2 = String::from("SELECT * FROM CONTACTS WHERE SSN = '") + &get_social_security_number() + "'"; + let insert_query1 = String::from("INSERT INTO CONTACTS(ID, HARMLESS) VALUES(") + id + ", '" + &get_harmless() + "')"; + let insert_query2 = String::from("INSERT INTO CONTACTS(ID, PHONE) VALUES(") + id + ", '" + &get_phone_number() + "')"; // $ Source[rust/cleartext-storage-database] + let update_query1 = String::from("UPDATE CONTACTS SET HARMLESS='") + &get_harmless() + "' WHERE ID=" + id; + let update_query2 = String::from("UPDATE CONTACTS SET EMAIL='") + &get_email() + "' WHERE ID=" + id; + let s1 = &get_social_security_number(); + let update_query3 = String::from("UPDATE CONTACTS SET SSN='") + s1 + "' WHERE ID=" + id; + let update_query4 = String::from("UPDATE CONTACTS SET SSN='") + &s1 + "' WHERE ID=" + id; + let s2 = s1.as_str(); + let update_query5 = String::from("UPDATE CONTACTS SET SSN='") + s2 + "' WHERE ID=" + id; + let update_query6 = String::from("UPDATE CONTACTS SET SSN='") + &s2 + "' WHERE ID=" + id; + let delete_query1 = String::from("DELETE FROM CONTACTS WHERE ID=") + id; + let delete_query2 = String::from("DELETE FROM CONTACTS WHERE SSN='") + &get_social_security_number() + "'"; + let prepared_query = String::from("UPDATE CONTACTS SET SSN=? WHERE ID=?"); + + // execute queries - MySQL, direct + let _ = conn1.execute(select_query1.as_str()).await?; + let _ = conn1.execute(select_query2.as_str()).await?; // $ MISSING: Alert[rust/cleartext-storage-database] + let _ = conn1.execute(insert_query1.as_str()).await?; + let _ = conn1.execute(insert_query2.as_str()).await?; // $ MISSING: Alert[rust/cleartext-storage-database] + let _ = conn1.execute(update_query1.as_str()).await?; + let _ = conn1.execute(update_query2.as_str()).await?; // $ MISSING: Alert[rust/cleartext-storage-database] + let _ = conn1.execute(update_query3.as_str()).await?; // $ MISSING: Alert[rust/cleartext-storage-database] + let _ = conn1.execute(update_query4.as_str()).await?; // $ MISSING: Alert[rust/cleartext-storage-database] + let _ = conn1.execute(update_query5.as_str()).await?; // $ MISSING: Alert[rust/cleartext-storage-database] + let _ = conn1.execute(update_query6.as_str()).await?; // $ MISSING: Alert[rust/cleartext-storage-database] + let _ = conn1.execute(delete_query1.as_str()).await?; + let _ = conn1.execute(delete_query2.as_str()).await?; // $ MISSING: Alert[rust/cleartext-storage-database] + + // execute queries - MySQL, prepared query + let _ = sqlx::query(insert_query1.as_str()).execute(&pool1).await?; + let _ = sqlx::query(insert_query2.as_str()).execute(&pool1).await?; // $ Alert[rust/cleartext-storage-database] + let _ = sqlx::query(prepared_query.as_str()).bind(get_harmless()).execute(&pool1).await?; + let _ = sqlx::query(prepared_query.as_str()).bind(get_social_security_number()).execute(&pool1).await?; // $ MISSING: Alert[rust/cleartext-storage-database] + let _ = sqlx::query(prepared_query.as_str()).bind(&s1).execute(&pool1).await?; // $ MISSING: Alert[rust/cleartext-storage-database] + let _ = sqlx::query(prepared_query.as_str()).bind(&s2).execute(&pool1).await?; // $ MISSING: Alert[rust/cleartext-storage-database] + + // connect through SQLite, no connection pool + let mut conn2 = sqlx::sqlite::SqliteConnection::connect(url).await?; + + // execute queries - SQLite, direct + let _ = conn2.execute(insert_query1.as_str()).await?; + let _ = conn2.execute(insert_query2.as_str()).await?; // $ MISSING: Alert[rust/cleartext-storage-database] + + // execute queries - SQLite, direct variant + let _ = sqlx::raw_sql(insert_query1.as_str()).execute(&mut conn2).await?; + let _ = sqlx::raw_sql(insert_query2.as_str()).execute(&mut conn2).await?; // $ Alert[rust/cleartext-storage-database] + + // execute queries - SQLite, prepared query + let _ = sqlx::query(insert_query1.as_str()).execute(&mut conn2).await?; + let _ = sqlx::query(insert_query2.as_str()).execute(&mut conn2).await?; // $ Alert[rust/cleartext-storage-database] + let _ = sqlx::query(prepared_query.as_str()).bind(get_harmless()).bind(id).execute(&mut conn2).await?; + let _ = sqlx::query(prepared_query.as_str()).bind(get_social_security_number()).bind(id).execute(&mut conn2).await?; // $ MISSING: Alert[rust/cleartext-storage-database] + + // execute queries - SQLite, prepared query variant + let _ = sqlx::query(insert_query1.as_str()).fetch(&mut conn2); + let _ = sqlx::query(insert_query2.as_str()).fetch(&mut conn2); // $ Alert[rust/cleartext-storage-database] + let _ = sqlx::query(prepared_query.as_str()).bind(get_harmless()).bind(id).fetch(&mut conn2); + let _ = sqlx::query(prepared_query.as_str()).bind(get_social_security_number()).bind(id).fetch(&mut conn2); // $ MISSING: Alert[rust/cleartext-storage-database] + + // connect through a PostgreSQL connection pool + let pool3 = sqlx::postgres::PgPool::connect(url).await?; + let mut conn3 = pool3.acquire().await?; + + // execute queries - PostgreSQL, direct + let _ = conn3.execute(insert_query1.as_str()).await?; + let _ = conn3.execute(insert_query2.as_str()).await?; // $ MISSING: Alert[rust/cleartext-storage-database] + + // execute queries - PostgreSQL, prepared query + let _ = sqlx::query(insert_query1.as_str()).execute(&pool3).await?; + let _ = sqlx::query(insert_query2.as_str()).execute(&pool3).await?; // $ Alert[rust/cleartext-storage-database] + let _ = sqlx::query(prepared_query.as_str()).bind(get_harmless()).bind(id).execute(&pool3).await?; + let _ = sqlx::query(prepared_query.as_str()).bind(get_social_security_number()).bind(id).execute(&pool3).await?; // $ MISSING: Alert[rust/cleartext-storage-database] + + // "bad" example + { + let pool = &pool1; + let credit_card_number = get_ccn(); + + let query = "INSERT INTO PAYMENTDETAILS(ID, CARDNUM) VALUES(?, ?)"; + let result = sqlx::query(query) + .bind(id) + .bind(credit_card_number) // $ MISSING: Alert[rust/cleartext-storage-database] + .execute(pool) + .await?; + } + + // "good" example + { + let pool = &pool1; + let credit_card_number = get_ccn(); + + let encryption_key = Aes256Gcm::generate_key(OsRng); + + // ... + + let query = "INSERT INTO PAYMENTDETAILS(ID, CARDNUM) VALUES(?, ?)"; + let result = sqlx::query(query) + .bind(id) + .bind(encrypt(credit_card_number, &encryption_key)) + .execute(pool) + .await?; + } + + Ok(()) +} + +#[derive(Debug)] +struct Contact { + id: i32, + phone: String, +} + +async fn test_storage_rusqlite_sql_command(url: &str) -> Result<(), Box> { + // connect with rusqlite + let connection = rusqlite::Connection::open_in_memory()?; + + // construct queries + let id = "123"; + let insert_query_good = String::from("INSERT INTO CONTACTS(ID, HARMLESS) VALUES(") + id + ", '" + &get_harmless() + "')"; + let insert_query_bad = String::from("INSERT INTO CONTACTS(ID, PHONE) VALUES(") + id + ", '" + &get_phone_number() + "')"; // $ Source[rust/cleartext-storage-database] + let select_query_bad = String::from("SELECT * FROM CONTACTS WHERE PHONE = '") + &get_phone_number() + "'"; // $ Source[rust/cleartext-storage-database] + + // execute queries - rusqlite + connection.execute(&insert_query_good, ())?; + connection.execute(&insert_query_bad, ())?; // $ Alert[rust/cleartext-storage-database] + + let _ = connection.query_row(&select_query_bad, (), |row| { // $ Alert[rust/cleartext-storage-database] + let row: &rusqlite::Row<'_> = row; + Ok(Contact { + id: row.get(0)?, + phone: row.get(1)?, + }) + })?; + + let mut stmt = connection.prepare(&select_query_bad)?; // $ Alert[rust/cleartext-storage-database] + let people = stmt.query_map([], |row| { + let row: &rusqlite::Row<'_> = row; + Ok(Contact { + id: row.get_unwrap(0), + phone: row.get_unwrap(1), + }) + })?; + + Ok(()) +} + +fn main() { + println!("test_storage_sqlx_sql_command..."); + match futures::executor::block_on(test_storage_sqlx_sql_command("")) { + Ok(_) => println!(" successful!"), + Err(e) => println!(" error: {}", e), + } + + println!("test_storage_rusqlite_sql_command..."); + match futures::executor::block_on(test_storage_rusqlite_sql_command("")) { + Ok(_) => println!(" successful!"), + Err(e) => println!(" error: {}", e), + } +} diff --git a/rust/ql/test/query-tests/security/CWE-328/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-328/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index cb8b7cc4d6c..00000000000 --- a/rust/ql/test/query-tests/security/CWE-328/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,3 +0,0 @@ -multipleCallTargets -| test.rs:82:26:82:44 | harmless.as_bytes() | -| test.rs:83:26:83:44 | password.as_bytes() | diff --git a/rust/ql/test/rust-toolchain.toml b/rust/ql/test/rust-toolchain.toml new file mode 100644 index 00000000000..254f87e09e6 --- /dev/null +++ b/rust/ql/test/rust-toolchain.toml @@ -0,0 +1,7 @@ +# This file specifies the Rust version used to test the rust extractor. +# IMPORTANT: this can also have an impact on QL test results + +[toolchain] +channel = "1.86" +profile = "minimal" +components = [ "rust-src" ] diff --git a/rust/rust-toolchain.toml b/rust/rust-toolchain.toml deleted file mode 100644 index 680f37655d6..00000000000 --- a/rust/rust-toolchain.toml +++ /dev/null @@ -1,8 +0,0 @@ -# This file specifies the Rust version used to develop and test the rust -# extractor. It is set to the lowest version of Rust we want to support. -# IMPORTANT: this can also have an impact on QL test results - -[toolchain] -channel = "1.86" -profile = "minimal" -components = [ "clippy", "rustfmt", "rust-src" ] diff --git a/shared/concepts/codeql/concepts/ConceptsShared.qll b/shared/concepts/codeql/concepts/ConceptsShared.qll index 2202110be05..c2d9b03f8f7 100644 --- a/shared/concepts/codeql/concepts/ConceptsShared.qll +++ b/shared/concepts/codeql/concepts/ConceptsShared.qll @@ -46,27 +46,7 @@ module ConceptsMake DataFlowLang> { * Extend this class to refine existing API models. If you want to model new APIs, * extend `CryptographicOperation::Range` instead. */ - class CryptographicOperation extends DataFlowNode instanceof CryptographicOperation::Range { - /** Gets the algorithm used, if it matches a known `CryptographicAlgorithm`. */ - CryptographicAlgorithm getAlgorithm() { result = super.getAlgorithm() } - - /** Gets the data flow node where the cryptographic algorithm used in this operation is configured. */ - DataFlowNode getInitialization() { result = super.getInitialization() } - - /** Gets an input the algorithm is used on, for example the plain text input to be encrypted. */ - DataFlowNode getAnInput() { result = super.getAnInput() } - - /** - * Gets the block mode used to perform this cryptographic operation. - * - * This predicate is only expected to have a result if two conditions hold: - * 1. The operation is an encryption operation, i.e. the algorithm used is an `EncryptionAlgorithm`, and - * 2. The algorithm used is a block cipher (not a stream cipher). - * - * If either of these conditions do not hold, then this predicate should have no result. - */ - BlockMode getBlockMode() { result = super.getBlockMode() } - } + final class CryptographicOperation = CryptographicOperation::Range; /** Provides classes for modeling new applications of a cryptographic algorithms. */ module CryptographicOperation { @@ -133,29 +113,7 @@ module ConceptsMake DataFlowLang> { * Extend this class to refine existing API models. If you want to model new APIs, * extend `Http::Client::Request::Range` instead. */ - class Request extends DataFlowNode instanceof Request::Range { - /** - * Gets a data flow node that contributes to the URL of the request. - * Depending on the framework, a request may have multiple nodes which contribute to the URL. - */ - DataFlowNode getAUrlPart() { result = super.getAUrlPart() } - - /** Gets a string that identifies the framework used for this request. */ - string getFramework() { result = super.getFramework() } - - /** - * Holds if this request is made using a mode that disables SSL/TLS - * certificate validation, where `disablingNode` represents the point at - * which the validation was disabled, and `argumentOrigin` represents the origin - * of the argument that disabled the validation (which could be the same node as - * `disablingNode`). - */ - predicate disablesCertificateValidation( - DataFlowNode disablingNode, DataFlowNode argumentOrigin - ) { - super.disablesCertificateValidation(disablingNode, argumentOrigin) - } - } + final class Request = Request::Range; /** Provides a class for modeling new HTTP requests. */ module Request { diff --git a/shared/controlflow/codeql/controlflow/Guards.qll b/shared/controlflow/codeql/controlflow/Guards.qll index d78d6ec8e8a..34f42036292 100644 --- a/shared/controlflow/codeql/controlflow/Guards.qll +++ b/shared/controlflow/codeql/controlflow/Guards.qll @@ -52,6 +52,7 @@ module; private import codeql.util.Boolean private import codeql.util.Location +private import codeql.util.Unit signature module InputSig { class SuccessorType { @@ -79,6 +80,9 @@ signature module InputSig { Location getLocation(); } + /** A control flow node indicating normal termination of a callable. */ + class NormalExitNode extends ControlFlowNode; + /** * A basic block, that is, a maximal straight-line sequence of control flow nodes * without branches or joins. @@ -207,6 +211,46 @@ signature module InputSig { /** Gets the false branch of this expression. */ Expr getElse(); } + + class Parameter { + /** Gets a textual representation of this parameter. */ + string toString(); + + /** Gets the location of this parameter. */ + Location getLocation(); + } + + class ParameterPosition { + /** Gets a textual representation of this element. */ + bindingset[this] + string toString(); + } + + class ArgumentPosition { + /** Gets a textual representation of this element. */ + bindingset[this] + string toString(); + } + + /** + * Holds if the parameter position `ppos` matches the argument position + * `apos`. + */ + predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos); + + /** A non-overridable method. */ + class NonOverridableMethod { + Parameter getParameter(ParameterPosition ppos); + + /** Gets an expression being returned by this method. */ + Expr getAReturnExpr(); + } + + class NonOverridableMethodCall extends Expr { + NonOverridableMethod getMethod(); + + Expr getArgument(ArgumentPosition apos); + } } /** Provides guards-related predicates and classes. */ @@ -480,6 +524,8 @@ module Make Input> { ) } + private predicate normalExitBlock(BasicBlock bb) { bb.getNode(_) instanceof NormalExitNode } + signature module LogicInputSig { class SsaDefinition { /** Gets the basic block to which this SSA definition belongs. */ @@ -503,6 +549,8 @@ module Make Input> { predicate hasInputFromBlock(SsaDefinition inp, BasicBlock bb); } + predicate parameterDefinition(Parameter p, SsaDefinition def); + /** * Holds if `guard` evaluating to `val` ensures that: * `e <= k` when `upper = true` @@ -525,8 +573,6 @@ module Make Input> { * Holds if the assumption that `g1` has been evaluated to `v1` implies that * `g2` has been evaluated to `v2`, that is, the evaluation of `g2` to `v2` * dominates the evaluation of `g1` to `v1`. - * - * This predicate can be instantiated with `CustomGuard<..>::additionalImpliesStep`. */ default predicate additionalImpliesStep(PreGuard g1, GuardValue v1, PreGuard g2, GuardValue v2) { none() @@ -859,6 +905,11 @@ module Make Input> { impliesStepSsaGuard(def0, v0, guard, v) ) or + exists(Guard g0, GuardValue v0 | + guardControls(g0, v0, tgtGuard, tgtVal) and + WrapperGuard::wrapperImpliesStep(g0, v0, guard, v) + ) + or exists(Guard g0, GuardValue v0 | guardControls(g0, v0, tgtGuard, tgtVal) and additionalImpliesStep(g0, v0, guard, v) @@ -902,6 +953,7 @@ module Make Input> { */ predicate nullGuard(Guard guard, GuardValue v, Expr e, boolean isNull) { impliesStep2(guard, v, e, any(GuardValue gv | gv.isNullness(isNull))) or + WrapperGuard::wrapperImpliesStep(guard, v, e, any(GuardValue gv | gv.isNullness(isNull))) or additionalImpliesStep(guard, v, e, any(GuardValue gv | gv.isNullness(isNull))) } @@ -944,61 +996,45 @@ module Make Input> { ) } - signature module CustomGuardInputSig { - class ParameterPosition { - /** Gets a textual representation of this element. */ - bindingset[this] - string toString(); - } - - class ArgumentPosition { - /** Gets a textual representation of this element. */ - bindingset[this] - string toString(); - } - - /** - * Holds if the parameter position `ppos` matches the argument position - * `apos`. - */ - predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos); - - /** A non-overridable method with a boolean return value. */ - class BooleanMethod { - SsaDefinition getParameter(ParameterPosition ppos); - - Expr getAReturnExpr(); - } - - class BooleanMethodCall extends Expr { - BooleanMethod getMethod(); - - Expr getArgument(ArgumentPosition apos); - } - } - /** - * Provides an implementation of guard implication logic for custom - * wrappers. This can be used to instantiate the `additionalImpliesStep` - * predicate. + * Provides an implementation of guard implication logic for guard + * wrappers. */ - module CustomGuard { - private import CustomGuardInput - + private module WrapperGuard { final private class FinalExpr = Expr; - private class ReturnExpr extends FinalExpr { - ReturnExpr() { any(BooleanMethod m).getAReturnExpr() = this } + class ReturnExpr extends FinalExpr { + ReturnExpr() { any(NonOverridableMethod m).getAReturnExpr() = this } + + NonOverridableMethod getMethod() { result.getAReturnExpr() = this } pragma[nomagic] BasicBlock getBasicBlock() { result = super.getBasicBlock() } } - private predicate booleanReturnGuard(Guard guard, GuardValue val) { - guard instanceof ReturnExpr and exists(val.asBooleanValue()) + private predicate relevantCallValue(NonOverridableMethodCall call, GuardValue val) { + BranchImplies::guardControls(call, val, _, _) or + ReturnImplies::guardControls(call, val, _, _) } - private module ReturnImplies = ImpliesTC; + predicate relevantReturnValue(NonOverridableMethod m, GuardValue val) { + exists(NonOverridableMethodCall call | + relevantCallValue(call, val) and + call.getMethod() = m and + not val instanceof TException + ) + } + + private predicate returnGuard(Guard guard, GuardValue val) { + relevantReturnValue(guard.(ReturnExpr).getMethod(), val) + } + + module ReturnImplies = ImpliesTC; + + pragma[nomagic] + private predicate directlyControlsReturn(Guard guard, GuardValue val, ReturnExpr ret) { + guard.directlyValueControls(ret.getBasicBlock(), val) + } /** * Holds if `ret` is a return expression in a non-overridable method that @@ -1006,35 +1042,53 @@ module Make Input> { * parameter has the value `val`. */ private predicate validReturnInCustomGuard( - ReturnExpr ret, ParameterPosition ppos, boolean retval, GuardValue val + ReturnExpr ret, ParameterPosition ppos, GuardValue retval, GuardValue val ) { - exists(BooleanMethod m, SsaDefinition param | + exists(NonOverridableMethod m, SsaDefinition param | m.getAReturnExpr() = ret and - m.getParameter(ppos) = param + parameterDefinition(m.getParameter(ppos), param) | exists(Guard g0, GuardValue v0 | - g0.directlyValueControls(ret.getBasicBlock(), v0) and + directlyControlsReturn(g0, v0, ret) and BranchImplies::ssaControls(param, val, g0, v0) and - retval = [true, false] + relevantReturnValue(m, retval) ) or - ReturnImplies::ssaControls(param, val, ret, - any(GuardValue r | r.asBooleanValue() = retval)) + ReturnImplies::ssaControls(param, val, ret, retval) + ) + } + + private predicate guardDirectlyControlsExit(Guard guard, GuardValue val) { + exists(BasicBlock bb | + guard.directlyValueControls(bb, val) and + normalExitBlock(bb) ) } /** - * Gets a non-overridable method with a boolean return value that performs a check - * on the `ppos`th parameter. A return value equal to `retval` allows us to conclude + * Gets a non-overridable method that performs a check on the `ppos`th + * parameter. A return value equal to `retval` allows us to conclude * that the argument has the value `val`. */ - private BooleanMethod customGuard(ParameterPosition ppos, boolean retval, GuardValue val) { + private NonOverridableMethod wrapperGuard( + ParameterPosition ppos, GuardValue retval, GuardValue val + ) { forex(ReturnExpr ret | result.getAReturnExpr() = ret and - not ret.(ConstantExpr).asBooleanValue() = retval.booleanNot() + not exists(GuardValue notRetval | + exprHasValue(ret, notRetval) and + disjointValues(notRetval, retval) + ) | validReturnInCustomGuard(ret, ppos, retval, val) ) + or + exists(SsaDefinition param, Guard g0, GuardValue v0 | + parameterDefinition(result.getParameter(ppos), param) and + guardDirectlyControlsExit(g0, v0) and + retval = TException(false) and + BranchImplies::ssaControls(param, val, g0, v0) + ) } /** @@ -1043,13 +1097,111 @@ module Make Input> { * dominates the evaluation of `g1` to `v1`. * * This predicate covers the implication steps that arise from calls to - * custom guard wrappers. + * guard wrappers. */ - predicate additionalImpliesStep(PreGuard g1, GuardValue v1, PreGuard g2, GuardValue v2) { - exists(BooleanMethodCall call, ParameterPosition ppos, ArgumentPosition apos | + predicate wrapperImpliesStep(PreGuard g1, GuardValue v1, PreGuard g2, GuardValue v2) { + exists(NonOverridableMethodCall call, ParameterPosition ppos, ArgumentPosition apos | g1 = call and - call.getMethod() = customGuard(ppos, v1.asBooleanValue(), v2) and + call.getMethod() = wrapperGuard(ppos, v1, v2) and call.getArgument(apos) = g2 and + parameterMatch(pragma[only_bind_out](ppos), pragma[only_bind_out](apos)) and + not exprHasValue(g2, v2) // disregard trivial guard + ) + } + } + + signature predicate guardChecksSig(Guard g, Expr e, boolean branch); + + bindingset[this] + signature class StateSig; + + private module WithState { + signature predicate guardChecksSig(Guard g, Expr e, boolean branch, State state); + } + + /** + * Extends a `BarrierGuard` input predicate with wrapped invocations. + */ + module ValidationWrapper { + private predicate guardChecksWithState(Guard g, Expr e, boolean branch, Unit state) { + guardChecks0(g, e, branch) and exists(state) + } + + private module StatefulWrapper = ValidationWrapperWithState; + + /** + * Holds if the guard `g` validates the expression `e` upon evaluating to `val`. + */ + predicate guardChecks(Guard g, Expr e, GuardValue val) { + StatefulWrapper::guardChecks(g, e, val, _) + } + } + + /** + * Extends a `BarrierGuard` input predicate with wrapped invocations. + */ + module ValidationWrapperWithState< + StateSig State, WithState::guardChecksSig/4 guardChecks0> + { + private import WrapperGuard + + /** + * Holds if `ret` is a return expression in a non-overridable method that + * on a return value of `retval` allows the conclusion that the `ppos`th + * parameter has been validated by the given guard. + */ + private predicate validReturnInValidationWrapper( + ReturnExpr ret, ParameterPosition ppos, GuardValue retval, State state + ) { + exists(NonOverridableMethod m, SsaDefinition param, Guard guard, GuardValue val | + m.getAReturnExpr() = ret and + parameterDefinition(m.getParameter(ppos), param) and + guardChecks(guard, param.getARead(), val, state) + | + guard.valueControls(ret.getBasicBlock(), val) and + relevantReturnValue(m, retval) + or + ReturnImplies::guardControls(guard, val, ret, retval) + ) + } + + /** + * Gets a non-overridable method that performs a check on the `ppos`th + * parameter. A return value equal to `retval` allows us to conclude + * that the argument has been validated by the given guard. + */ + private NonOverridableMethod validationWrapper( + ParameterPosition ppos, GuardValue retval, State state + ) { + forex(ReturnExpr ret | + result.getAReturnExpr() = ret and + not exists(GuardValue notRetval | + exprHasValue(ret, notRetval) and + disjointValues(notRetval, retval) + ) + | + validReturnInValidationWrapper(ret, ppos, retval, state) + ) + or + exists(SsaDefinition param, BasicBlock bb, Guard guard, GuardValue val | + parameterDefinition(result.getParameter(ppos), param) and + guardChecks(guard, param.getARead(), val, state) and + guard.valueControls(bb, val) and + normalExitBlock(bb) and + retval = TException(false) + ) + } + + /** + * Holds if the guard `g` validates the expression `e` upon evaluating to `val`. + */ + predicate guardChecks(Guard g, Expr e, GuardValue val, State state) { + guardChecks0(g, e, val.asBooleanValue(), state) + or + exists(NonOverridableMethodCall call, ParameterPosition ppos, ArgumentPosition apos | + g = call and + call.getMethod() = validationWrapper(ppos, val, state) and + call.getArgument(apos) = e and parameterMatch(pragma[only_bind_out](ppos), pragma[only_bind_out](apos)) ) } diff --git a/shared/tree-sitter-extractor/src/autobuilder.rs b/shared/tree-sitter-extractor/src/autobuilder.rs index 57f9e177783..f43ead71a76 100644 --- a/shared/tree-sitter-extractor/src/autobuilder.rs +++ b/shared/tree-sitter-extractor/src/autobuilder.rs @@ -57,23 +57,23 @@ impl Autobuilder { let verbosity = env::var("CODEQL_VERBOSITY"); if let Ok(verbosity) = verbosity { - cmd.arg(format!("--verbosity={}", verbosity)); + cmd.arg(format!("--verbosity={verbosity}")); } for ext in &self.include_extensions { - cmd.arg(format!("--include-extension={}", ext)); + cmd.arg(format!("--include-extension={ext}")); } for glob in &self.include_globs { - cmd.arg(format!("--include={}", glob)); + cmd.arg(format!("--include={glob}")); } for glob in &self.exclude_globs { - cmd.arg(format!("--exclude={}", glob)); + cmd.arg(format!("--exclude={glob}")); } if let Some(limit) = &self.size_limit { - cmd.arg(format!("--size-limit={}", limit)); + cmd.arg(format!("--size-limit={limit}")); } cmd.arg(format!("--language={}", &self.language)); diff --git a/shared/tree-sitter-extractor/src/diagnostics.rs b/shared/tree-sitter-extractor/src/diagnostics.rs index 3c41b85425e..cd6f685e639 100644 --- a/shared/tree-sitter-extractor/src/diagnostics.rs +++ b/shared/tree-sitter-extractor/src/diagnostics.rs @@ -194,7 +194,7 @@ impl DiagnosticLoggers { path: self .root .as_ref() - .map(|root| root.to_owned().join(format!("extractor_{}.jsonl", n))), + .map(|root| root.to_owned().join(format!("extractor_{n}.jsonl"))), }) } } diff --git a/shared/tree-sitter-extractor/src/extractor/mod.rs b/shared/tree-sitter-extractor/src/extractor/mod.rs index 0bc489cd559..0ace3831881 100644 --- a/shared/tree-sitter-extractor/src/extractor/mod.rs +++ b/shared/tree-sitter-extractor/src/extractor/mod.rs @@ -230,7 +230,7 @@ pub fn extract( parser.set_language(language).unwrap(); parser.set_included_ranges(ranges).unwrap(); let tree = parser.parse(source, None).expect("Failed to parse file"); - trap_writer.comment(format!("Auto-generated TRAP file for {}", path_str)); + trap_writer.comment(format!("Auto-generated TRAP file for {path_str}")); let file_label = populate_file(trap_writer, path, transformer); let mut visitor = Visitor::new( source, @@ -298,9 +298,9 @@ impl<'a> Visitor<'a> { source, diagnostics_writer, trap_writer, - ast_node_location_table_name: format!("{}_ast_node_location", language_prefix), - ast_node_parent_table_name: format!("{}_ast_node_parent", language_prefix), - tokeninfo_table_name: format!("{}_tokeninfo", language_prefix), + ast_node_location_table_name: format!("{language_prefix}_ast_node_location"), + ast_node_parent_table_name: format!("{language_prefix}_ast_node_parent"), + tokeninfo_table_name: format!("{language_prefix}_tokeninfo"), schema, stack: Vec::new(), } diff --git a/shared/tree-sitter-extractor/src/extractor/simple.rs b/shared/tree-sitter-extractor/src/extractor/simple.rs index 10414a7665b..b8446d02f89 100644 --- a/shared/tree-sitter-extractor/src/extractor/simple.rs +++ b/shared/tree-sitter-extractor/src/extractor/simple.rs @@ -80,7 +80,7 @@ impl Extractor { .iter() .map(|file_list| { File::open(file_list) - .unwrap_or_else(|_| panic!("Unable to open file list at {:?}", file_list)) + .unwrap_or_else(|_| panic!("Unable to open file list at {file_list:?}")) }) .collect(); diff --git a/shared/tree-sitter-extractor/src/generator/dbscheme.rs b/shared/tree-sitter-extractor/src/generator/dbscheme.rs index fd690f57a72..87a15cfbeb2 100644 --- a/shared/tree-sitter-extractor/src/generator/dbscheme.rs +++ b/shared/tree-sitter-extractor/src/generator/dbscheme.rs @@ -53,7 +53,7 @@ impl fmt::Display for Case<'_> { writeln!(f, "case @{}.{} of", &self.name, &self.column)?; let mut sep = " "; for (c, tp) in &self.branches { - writeln!(f, "{} {} = @{}", sep, c, tp)?; + writeln!(f, "{sep} {c} = @{tp}")?; sep = "|"; } writeln!(f, ";") @@ -68,7 +68,7 @@ impl fmt::Display for Table<'_> { if key_index > 0 { write!(f, ", ")?; } - write!(f, "{}", key)?; + write!(f, "{key}")?; } writeln!(f, "]")?; } @@ -112,7 +112,7 @@ impl fmt::Display for Union<'_> { } else { write!(f, " | ")?; } - write!(f, "@{}", member)?; + write!(f, "@{member}")?; } Ok(()) } @@ -122,9 +122,9 @@ impl fmt::Display for Union<'_> { pub fn write(file: &mut dyn std::io::Write, entries: &[Entry]) -> std::io::Result<()> { for entry in entries { match entry { - Entry::Case(case) => write!(file, "{}\n\n", case)?, - Entry::Table(table) => write!(file, "{}\n\n", table)?, - Entry::Union(union) => write!(file, "{}\n\n", union)?, + Entry::Case(case) => write!(file, "{case}\n\n")?, + Entry::Table(table) => write!(file, "{table}\n\n")?, + Entry::Union(union) => write!(file, "{union}\n\n")?, } } diff --git a/shared/tree-sitter-extractor/src/generator/mod.rs b/shared/tree-sitter-extractor/src/generator/mod.rs index 5e58611092b..c886ec98eeb 100644 --- a/shared/tree-sitter-extractor/src/generator/mod.rs +++ b/shared/tree-sitter-extractor/src/generator/mod.rs @@ -259,8 +259,8 @@ fn add_field_for_column_storage<'a>( /// values are their integer representations. fn convert_nodes( nodes: &node_types::NodeTypeMap, -) -> (Vec, Set<&str>, Map<&str, usize>) { - let mut entries: Vec = Vec::new(); +) -> (Vec>, Set<&str>, Map<&str, usize>) { + let mut entries = Vec::new(); let mut ast_node_members: Set<&str> = Set::new(); let token_kinds: Map<&str, usize> = nodes .iter() diff --git a/shared/tree-sitter-extractor/src/generator/ql.rs b/shared/tree-sitter-extractor/src/generator/ql.rs index b1e319afb1e..cdfe5d8c639 100644 --- a/shared/tree-sitter-extractor/src/generator/ql.rs +++ b/shared/tree-sitter-extractor/src/generator/ql.rs @@ -12,10 +12,10 @@ pub enum TopLevel<'a> { impl fmt::Display for TopLevel<'_> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match self { - TopLevel::Import(imp) => write!(f, "{}", imp), - TopLevel::Class(cls) => write!(f, "{}", cls), - TopLevel::Module(m) => write!(f, "{}", m), - TopLevel::Predicate(pred) => write!(f, "{}", pred), + TopLevel::Import(imp) => write!(f, "{imp}"), + TopLevel::Class(cls) => write!(f, "{cls}"), + TopLevel::Module(m) => write!(f, "{m}"), + TopLevel::Predicate(pred) => write!(f, "{pred}"), } } } @@ -30,7 +30,7 @@ impl fmt::Display for Import<'_> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "import {}", &self.module)?; if let Some(name) = &self.alias { - write!(f, " as {}", name)?; + write!(f, " as {name}")?; } Ok(()) } @@ -48,7 +48,7 @@ pub struct Class<'a> { impl fmt::Display for Class<'_> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { if let Some(qldoc) = &self.qldoc { - write!(f, "/** {} */", qldoc)?; + write!(f, "/** {qldoc} */")?; } if self.is_abstract { write!(f, "abstract ")?; @@ -58,7 +58,7 @@ impl fmt::Display for Class<'_> { if index > 0 { write!(f, ", ")?; } - write!(f, "{}", supertype)?; + write!(f, "{supertype}")?; } writeln!(f, " {{ ")?; @@ -81,7 +81,7 @@ impl fmt::Display for Class<'_> { } for predicate in &self.predicates { - writeln!(f, " {}", predicate)?; + writeln!(f, " {predicate}")?; } write!(f, "}}")?; @@ -101,7 +101,7 @@ pub struct Module<'a> { impl fmt::Display for Module<'_> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { if let Some(qldoc) = &self.qldoc { - write!(f, "/** {} */", qldoc)?; + write!(f, "/** {qldoc} */")?; } if let Some(overlay_annotation) = &self.overlay { write!(f, "overlay[")?; @@ -113,7 +113,7 @@ impl fmt::Display for Module<'_> { } writeln!(f, "module {} {{ ", self.name)?; for decl in &self.body { - writeln!(f, " {}", decl)?; + writeln!(f, " {decl}")?; } write!(f, "}}")?; Ok(()) @@ -140,8 +140,8 @@ impl fmt::Display for Type<'_> { match self { Type::Int => write!(f, "int"), Type::String => write!(f, "string"), - Type::Normal(name) => write!(f, "{}", name), - Type::At(name) => write!(f, "@{}", name), + Type::Normal(name) => write!(f, "{name}"), + Type::At(name) => write!(f, "@{name}"), } } } @@ -169,16 +169,16 @@ pub enum Expression<'a> { impl fmt::Display for Expression<'_> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match self { - Expression::Var(x) => write!(f, "{}", x), - Expression::String(s) => write!(f, "\"{}\"", s), - Expression::Integer(n) => write!(f, "{}", n), + Expression::Var(x) => write!(f, "{x}"), + Expression::String(s) => write!(f, "\"{s}\""), + Expression::Integer(n) => write!(f, "{n}"), Expression::Pred(n, args) => { - write!(f, "{}(", n)?; + write!(f, "{n}(")?; for (index, arg) in args.iter().enumerate() { if index > 0 { write!(f, ", ")?; } - write!(f, "{}", arg)?; + write!(f, "{arg}")?; } write!(f, ")") } @@ -190,7 +190,7 @@ impl fmt::Display for Expression<'_> { if index > 0 { write!(f, " and ")?; } - write!(f, "({})", conjunct)?; + write!(f, "({conjunct})")?; } Ok(()) } @@ -203,19 +203,19 @@ impl fmt::Display for Expression<'_> { if index > 0 { write!(f, " or ")?; } - write!(f, "({})", disjunct)?; + write!(f, "({disjunct})")?; } Ok(()) } } - Expression::Equals(a, b) => write!(f, "{} = {}", a, b), + Expression::Equals(a, b) => write!(f, "{a} = {b}"), Expression::Dot(x, member_pred, args) => { - write!(f, "{}.{}(", x, member_pred)?; + write!(f, "{x}.{member_pred}(")?; for (index, arg) in args.iter().enumerate() { if index > 0 { write!(f, ", ")?; } - write!(f, "{}", arg)?; + write!(f, "{arg}")?; } write!(f, ")") } @@ -226,26 +226,26 @@ impl fmt::Display for Expression<'_> { expr, second_expr, } => { - write!(f, "{}(", name)?; + write!(f, "{name}(")?; if !vars.is_empty() { for (index, var) in vars.iter().enumerate() { if index > 0 { write!(f, ", ")?; } - write!(f, "{}", var)?; + write!(f, "{var}")?; } write!(f, " | ")?; } if let Some(range) = range { - write!(f, "{} | ", range)?; + write!(f, "{range} | ")?; } - write!(f, "{}", expr)?; + write!(f, "{expr}")?; if let Some(second_expr) = second_expr { - write!(f, ", {}", second_expr)?; + write!(f, ", {second_expr}")?; } write!(f, ")") } - Expression::Negation(e) => write!(f, "not ({})", e), + Expression::Negation(e) => write!(f, "not ({e})"), } } } @@ -272,7 +272,7 @@ pub struct Predicate<'a> { impl fmt::Display for Predicate<'_> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { if let Some(qldoc) = &self.qldoc { - write!(f, "/** {} */", qldoc)?; + write!(f, "/** {qldoc} */")?; } if let Some(overlay_annotation) = &self.overlay { write!(f, "overlay[")?; @@ -293,14 +293,14 @@ impl fmt::Display for Predicate<'_> { } match &self.return_type { None => write!(f, "predicate ")?, - Some(return_type) => write!(f, "{} ", return_type)?, + Some(return_type) => write!(f, "{return_type} ")?, } write!(f, "{}(", self.name)?; for (index, param) in self.formal_parameters.iter().enumerate() { if index > 0 { write!(f, ", ")?; } - write!(f, "{}", param)?; + write!(f, "{param}")?; } write!(f, ") {{ {} }}", self.body)?; diff --git a/shared/tree-sitter-extractor/src/generator/ql_gen.rs b/shared/tree-sitter-extractor/src/generator/ql_gen.rs index 2cfaf5715ca..bb990beacc8 100644 --- a/shared/tree-sitter-extractor/src/generator/ql_gen.rs +++ b/shared/tree-sitter-extractor/src/generator/ql_gen.rs @@ -200,7 +200,7 @@ pub fn create_token_class<'a>(token_type: &'a str, tokeninfo: &'a str) -> ql::Cl } // Creates the `ReservedWord` class. -pub fn create_reserved_word_class(db_name: &str) -> ql::Class { +pub fn create_reserved_word_class(db_name: &str) -> ql::Class<'_> { let class_name = "ReservedWord"; let get_a_primary_ql_class = create_get_a_primary_ql_class(class_name, true); ql::Class { @@ -237,7 +237,7 @@ fn create_none_predicate<'a>( /// Creates an overridden `getAPrimaryQlClass` predicate that returns the given /// name. -fn create_get_a_primary_ql_class(class_name: &str, is_final: bool) -> ql::Predicate { +fn create_get_a_primary_ql_class(class_name: &str, is_final: bool) -> ql::Predicate<'_> { ql::Predicate { qldoc: Some(String::from( "Gets the name of the primary QL class for this element.", @@ -318,7 +318,7 @@ pub fn create_get_node_file_predicate<'a>( } } -pub fn create_discardable_ast_node_predicate(ast_node_name: &str) -> ql::Predicate { +pub fn create_discardable_ast_node_predicate(ast_node_name: &str) -> ql::Predicate<'_> { ql::Predicate { name: "discardableAstNode", qldoc: Some(String::from( @@ -352,7 +352,7 @@ pub fn create_discardable_ast_node_predicate(ast_node_name: &str) -> ql::Predica } } -pub fn create_discard_ast_node_predicate(ast_node_name: &str) -> ql::Predicate { +pub fn create_discard_ast_node_predicate(ast_node_name: &str) -> ql::Predicate<'_> { ql::Predicate { name: "discardAstNode", qldoc: Some(String::from( @@ -666,7 +666,7 @@ fn create_field_getters<'a>( } }; let qldoc = match &field.name { - Some(name) => format!("Gets the node corresponding to the field `{}`.", name), + Some(name) => format!("Gets the node corresponding to the field `{name}`."), None => { if formal_parameters.is_empty() { "Gets the child of this node.".to_owned() @@ -692,8 +692,8 @@ fn create_field_getters<'a>( } /// Converts the given node types into CodeQL classes wrapping the dbscheme. -pub fn convert_nodes(nodes: &node_types::NodeTypeMap) -> Vec { - let mut classes: Vec = Vec::new(); +pub fn convert_nodes(nodes: &node_types::NodeTypeMap) -> Vec> { + let mut classes = Vec::new(); let mut token_kinds = BTreeSet::new(); for (type_name, node) in nodes { if let node_types::EntryKind::Token { .. } = &node.kind { diff --git a/shared/tree-sitter-extractor/src/node_types.rs b/shared/tree-sitter-extractor/src/node_types.rs index 05c69f45210..7a457fa73f0 100644 --- a/shared/tree-sitter-extractor/src/node_types.rs +++ b/shared/tree-sitter-extractor/src/node_types.rs @@ -326,7 +326,7 @@ fn node_type_name(kind: &str, named: bool) -> String { if named { kind.to_string() } else { - format!("{}_unnamed", kind) + format!("{kind}_unnamed") } } diff --git a/shared/tree-sitter-extractor/src/trap.rs b/shared/tree-sitter-extractor/src/trap.rs index a636dc88551..85b2cc9adda 100644 --- a/shared/tree-sitter-extractor/src/trap.rs +++ b/shared/tree-sitter-extractor/src/trap.rs @@ -112,7 +112,7 @@ impl Writer { fn write_trap_entries(&self, file: &mut W) -> std::io::Result<()> { for trap_entry in &self.trap_output { - writeln!(file, "{}", trap_entry)?; + writeln!(file, "{trap_entry}")?; } Ok(()) } @@ -131,21 +131,21 @@ pub enum Entry { impl fmt::Display for Entry { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match self { - Entry::FreshId(label) => write!(f, "{}=*", label), + Entry::FreshId(label) => write!(f, "{label}=*"), Entry::MapLabelToKey(label, key) => { write!(f, "{}=@\"{}\"", label, key.replace('"', "\"\"")) } Entry::GenericTuple(name, args) => { - write!(f, "{}(", name)?; + write!(f, "{name}(")?; for (index, arg) in args.iter().enumerate() { if index > 0 { write!(f, ",")?; } - write!(f, "{}", arg)?; + write!(f, "{arg}")?; } write!(f, ")") } - Entry::Comment(line) => write!(f, "// {}", line), + Entry::Comment(line) => write!(f, "// {line}"), } } } @@ -179,8 +179,8 @@ const MAX_STRLEN: usize = 1048576; impl fmt::Display for Arg { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match self { - Arg::Label(x) => write!(f, "{}", x), - Arg::Int(x) => write!(f, "{}", x), + Arg::Label(x) => write!(f, "{x}"), + Arg::Int(x) => write!(f, "{x}"), Arg::String(x) => write!( f, "\"{}\"", @@ -220,9 +220,9 @@ impl fmt::Display for Program { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { let mut text = String::new(); for trap_entry in &self.0 { - text.push_str(&format!("{}\n", trap_entry)); + text.push_str(&format!("{trap_entry}\n")); } - write!(f, "{}", text) + write!(f, "{text}") } } diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index 1eaf6ef8e84..c42a424f3e3 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -334,7 +334,19 @@ module Make1 Input1> { /** Holds if this path starts with `tp`, followed by `suffix`. */ bindingset[this] predicate isCons(TypeParameter tp, TypePath suffix) { - suffix = this.stripPrefix(TypePath::singleton(tp)) + exists(string regexp | regexp = "([0-9]+)\\.(.*)" | + tp = TypeParameter::decode(this.regexpCapture(regexp, 1)) and + suffix = this.regexpCapture(regexp, 2) + ) + } + + /** Holds if this path starts with `prefix`, followed by `tp`. */ + bindingset[this] + predicate isSnoc(TypePath prefix, TypeParameter tp) { + exists(string regexp | regexp = "(|.+\\.)([0-9]+)\\." | + prefix = this.regexpCapture(regexp, 1) and + tp = TypeParameter::decode(this.regexpCapture(regexp, 2)) + ) } /** Gets the head of this path, if any. */