diff --git a/rust/ql/lib/change-notes/2025-07-10-assoc-func-disambiguation.md b/rust/ql/lib/change-notes/2025-07-10-assoc-func-disambiguation.md new file mode 100644 index 000000000000..af3587612e8c --- /dev/null +++ b/rust/ql/lib/change-notes/2025-07-10-assoc-func-disambiguation.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Call resolution for calls to associated functions has been improved, so it now disambiguates the targets based on type information at the call sites (either type information about the arguments or about the expected return types). \ No newline at end of file diff --git a/rust/ql/lib/codeql/rust/elements/internal/CallExprBaseImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CallExprBaseImpl.qll index b78720b08fa3..cdccc3f31d99 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/CallExprBaseImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/CallExprBaseImpl.qll @@ -13,6 +13,7 @@ private import codeql.rust.elements.Resolvable */ module Impl { private import rust + private import codeql.rust.internal.TypeInference as TypeInference pragma[nomagic] Resolvable getCallResolvable(CallExprBase call) { @@ -27,7 +28,7 @@ module Impl { */ class CallExprBase extends Generated::CallExprBase { /** Gets the static target of this call, if any. */ - Callable getStaticTarget() { none() } // overridden by subclasses, but cannot be made abstract + final Function getStaticTarget() { result = TypeInference::resolveCallTarget(this) } override Expr getArg(int index) { result = this.getArgList().getArg(index) } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/CallExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CallExprImpl.qll index e5262014ab49..5723e1fdbb52 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/CallExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/CallExprImpl.qll @@ -14,7 +14,6 @@ private import codeql.rust.elements.PathExpr module Impl { private import rust private import codeql.rust.internal.PathResolution as PathResolution - private import codeql.rust.internal.TypeInference as TypeInference pragma[nomagic] Path getFunctionPath(CallExpr ce) { result = ce.getFunction().(PathExpr).getPath() } @@ -37,15 +36,6 @@ module Impl { class CallExpr extends Generated::CallExpr { override string toStringImpl() { result = this.getFunction().toAbbreviatedString() + "(...)" } - override Callable getStaticTarget() { - // If this call is to a trait method, e.g., `Trait::foo(bar)`, then check - // if type inference can resolve it to the correct trait implementation. - result = TypeInference::resolveMethodCallTarget(this) - or - not exists(TypeInference::resolveMethodCallTarget(this)) and - result = getResolvedFunction(this) - } - /** Gets the struct that this call resolves to, if any. */ Struct getStruct() { result = getResolvedFunction(this) } diff --git a/rust/ql/lib/codeql/rust/elements/internal/CallImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CallImpl.qll index 955e230dd764..ac6e08bb9cf7 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/CallImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/CallImpl.qll @@ -40,6 +40,9 @@ module Impl { /** Gets the trait targeted by this call, if any. */ abstract Trait getTrait(); + /** Holds if this call targets a trait. */ + predicate hasTrait() { exists(this.getTrait()) } + /** Gets the name of the method called if this call is a method call. */ abstract string getMethodName(); @@ -59,12 +62,7 @@ module Impl { Expr getReceiver() { result = this.getArgument(TSelfArgumentPosition()) } /** Gets the static target of this call, if any. */ - Function getStaticTarget() { - result = TypeInference::resolveMethodCallTarget(this) - or - not exists(TypeInference::resolveMethodCallTarget(this)) and - result = this.(CallExpr).getStaticTarget() - } + Function getStaticTarget() { result = TypeInference::resolveCallTarget(this) } /** Gets a runtime target of this call, if any. */ pragma[nomagic] @@ -78,23 +76,44 @@ module Impl { } } + private predicate callHasQualifier(CallExpr call, Path path, Path qualifier) { + path = call.getFunction().(PathExpr).getPath() and + qualifier = path.getQualifier() + } + + private predicate callHasTraitQualifier(CallExpr call, Trait qualifier) { + exists(RelevantPath qualifierPath | + callHasQualifier(call, _, qualifierPath) and + qualifier = resolvePath(qualifierPath) and + // When the qualifier is `Self` and resolves to a trait, it's inside a + // trait method's default implementation. This is not a dispatch whose + // target is inferred from the type of the receiver, but should always + // resolve to the function in the trait block as path resolution does. + not qualifierPath.isUnqualified("Self") + ) + } + /** Holds if the call expression dispatches to a method. */ - private predicate callIsMethodCall(CallExpr call, Path qualifier, string methodName) { + private predicate callIsMethodCall( + CallExpr call, Path qualifier, string methodName, boolean selfIsRef + ) { exists(Path path, Function f | - path = call.getFunction().(PathExpr).getPath() and + callHasQualifier(call, path, qualifier) and f = resolvePath(path) and - f.getParamList().hasSelfParam() and - qualifier = path.getQualifier() and - path.getSegment().getIdentifier().getText() = methodName + path.getSegment().getIdentifier().getText() = methodName and + exists(SelfParam self | + self = f.getParamList().getSelfParam() and + if self.isRef() then selfIsRef = true else selfIsRef = false + ) ) } - private class CallExprCall extends Call instanceof CallExpr { - CallExprCall() { not callIsMethodCall(this, _, _) } + class CallExprCall extends Call instanceof CallExpr { + CallExprCall() { not callIsMethodCall(this, _, _, _) } override string getMethodName() { none() } - override Trait getTrait() { none() } + override Trait getTrait() { callHasTraitQualifier(this, result) } override predicate implicitBorrowAt(ArgumentPosition pos, boolean certain) { none() } @@ -103,22 +122,23 @@ module Impl { } } - private class CallExprMethodCall extends Call instanceof CallExpr { + class CallExprMethodCall extends Call instanceof CallExpr { Path qualifier; string methodName; + boolean selfIsRef; + + CallExprMethodCall() { callIsMethodCall(this, qualifier, methodName, selfIsRef) } - CallExprMethodCall() { callIsMethodCall(this, qualifier, methodName) } + /** + * Holds if this call must have an explicit borrow for the `self` argument, + * because the corresponding parameter is `&self`. Explicit borrows are not + * needed when using method call syntax. + */ + predicate hasExplicitSelfBorrow() { selfIsRef = true } override string getMethodName() { result = methodName } - override Trait getTrait() { - result = resolvePath(qualifier) and - // When the qualifier is `Self` and resolves to a trait, it's inside a - // trait method's default implementation. This is not a dispatch whose - // target is inferred from the type of the receiver, but should always - // resolve to the function in the trait block as path resolution does. - qualifier.toString() != "Self" - } + override Trait getTrait() { callHasTraitQualifier(this, result) } override predicate implicitBorrowAt(ArgumentPosition pos, boolean certain) { none() } diff --git a/rust/ql/lib/codeql/rust/elements/internal/MethodCallExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MethodCallExprImpl.qll index 1141ade4bd67..ac8d9b210e9a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MethodCallExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MethodCallExprImpl.qll @@ -6,8 +6,6 @@ private import rust private import codeql.rust.elements.internal.generated.MethodCallExpr -private import codeql.rust.internal.PathResolution -private import codeql.rust.internal.TypeInference /** * INTERNAL: This module contains the customizable definition of `MethodCallExpr` and should not @@ -23,8 +21,6 @@ module Impl { * ``` */ class MethodCallExpr extends Generated::MethodCallExpr { - override Function getStaticTarget() { result = resolveMethodCallTarget(this) } - private string toStringPart(int index) { index = 0 and result = this.getReceiver().toAbbreviatedString() diff --git a/rust/ql/lib/codeql/rust/internal/Type.qll b/rust/ql/lib/codeql/rust/internal/Type.qll index 497639b95c06..77337138a84f 100644 --- a/rust/ql/lib/codeql/rust/internal/Type.qll +++ b/rust/ql/lib/codeql/rust/internal/Type.qll @@ -425,6 +425,8 @@ final class TraitTypeAbstraction extends TypeAbstraction, Trait { result.(TypeParamTypeParameter).getTypeParam() = this.getGenericParamList().getATypeParam() or result.(AssociatedTypeTypeParameter).getTrait() = this + or + result.(SelfTypeParameter).getTrait() = this } } diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index abed5eb5672e..a08cc8137beb 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -11,6 +11,7 @@ private import codeql.rust.frameworks.stdlib.Stdlib private import codeql.rust.frameworks.stdlib.Builtins as Builtins private import codeql.rust.elements.Call private import codeql.rust.elements.internal.CallImpl::Impl as CallImpl +private import codeql.rust.elements.internal.CallExprImpl::Impl as CallExprImpl class Type = T::Type; @@ -522,6 +523,15 @@ private Type inferPathExprType(PathExpr pe, TypePath path) { ) } +/** Gets the explicit type qualifier of the call `ce`, if any. */ +private Type getTypeQualifier(CallExpr ce, TypePath path) { + exists(PathExpr pe, TypeMention tm | + pe = ce.getFunction() and + tm = pe.getPath().getQualifier() and + result = tm.resolveTypeAt(path) + ) +} + /** * A matching configuration for resolving types of call expressions * like `foo::bar(baz)` and `foo.bar(baz)`. @@ -724,8 +734,6 @@ private module CallExprBaseMatchingInput implements MatchingInputSig { } } - private import codeql.rust.elements.internal.CallExprImpl::Impl as CallExprImpl - final class Access extends Call { pragma[nomagic] Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { @@ -761,17 +769,13 @@ private module CallExprBaseMatchingInput implements MatchingInputSig { or // The `Self` type is supplied explicitly as a type qualifier, e.g. `Foo::::baz()` apos = TArgumentAccessPosition(CallImpl::TSelfArgumentPosition(), false, false) and - exists(PathExpr pe, TypeMention tm | - pe = this.(CallExpr).getFunction() and - tm = pe.getPath().getQualifier() and - result = tm.resolveTypeAt(path) - ) + result = getTypeQualifier(this, path) } Declaration getTarget() { result = resolveMethodCallTarget(this) // mutual recursion; resolving method calls requires resolving types and vice versa or - result = CallExprImpl::getResolvedFunction(this) + result = resolveFunctionCallTarget(this) // potential mutual recursion; resolving some associated function calls requires resolving types } } @@ -1220,15 +1224,28 @@ private Type inferForLoopExprType(AstNode n, TypePath path) { ) } +pragma[nomagic] +private Type inferCastExprType(CastExpr ce, TypePath path) { + result = ce.getTypeRepr().(TypeMention).resolveTypeAt(path) +} + final class MethodCall extends Call { MethodCall() { exists(this.getReceiver()) } + private Type getReceiverTypeAt(TypePath path) { + result = inferType(super.getReceiver(), path) + or + result = getTypeQualifier(this, path) + } + /** Gets the type of the receiver of the method call at `path`. */ Type getTypeAt(TypePath path) { - if this.receiverImplicitlyBorrowed() + if + this.receiverImplicitlyBorrowed() or + this.(CallImpl::CallExprMethodCall).hasExplicitSelfBorrow() then exists(TypePath path0, Type t0 | - t0 = inferType(super.getReceiver(), path0) and + t0 = this.getReceiverTypeAt(path0) and ( path0.isCons(TRefTypeParameter(), path) or @@ -1256,7 +1273,7 @@ final class MethodCall extends Call { t0.(StructType).asItemNode() instanceof StringStruct and result.(StructType).asItemNode() instanceof Builtins::Str ) - else result = inferType(super.getReceiver(), path) + else result = this.getReceiverTypeAt(path) } } @@ -1349,8 +1366,6 @@ private predicate implSiblingCandidate( // contains the same `impl` block so considering both would give spurious // siblings). not exists(impl.getAttributeMacroExpansion()) and - // We use this for resolving methods, so exclude traits that do not have methods. - exists(Function f | f = trait.getASuccessor(_) and f.getParamList().hasSelfParam()) and selfTy = impl.getSelfTy() and rootType = selfTy.resolveType() } @@ -1385,42 +1400,49 @@ private predicate implSiblings(TraitItemNode trait, Impl impl1, Impl impl2) { pragma[nomagic] private predicate implHasSibling(Impl impl, Trait trait) { implSiblings(trait, impl, _) } +pragma[nomagic] +private predicate functionTypeAtPath(Function f, int pos, TypePath path, Type type) { + exists(TypeMention tm | type = tm.resolveTypeAt(path) | + tm = f.getParam(pos).getTypeRepr() + or + pos = -1 and + tm = f.getRetType().getTypeRepr() + ) +} + /** - * Holds if a type parameter of `trait` occurs in the method with the name - * `methodName` at the `pos`th parameter at `path`. + * Holds if type parameter `tp` of `trait` occurs in the function with the name + * `functionName` at the `pos`th parameter at `path`. + * + * The special position `-1` refers to the return type of the function, which + * is sometimes needed to disambiguate associated function calls like + * `Default::default()` (in this case, `tp` is the special `Self` type parameter). */ bindingset[trait] pragma[inline_late] private predicate traitTypeParameterOccurrence( - TraitItemNode trait, string methodName, int pos, TypePath path + TraitItemNode trait, Function f, string functionName, int pos, TypePath path, TypeParameter tp ) { - exists(Function f | f = trait.getASuccessor(methodName) | - f.getParam(pos).getTypeRepr().(TypeMention).resolveTypeAt(path) = - trait.(TraitTypeAbstraction).getATypeParameter() - ) -} - -bindingset[f, pos, path] -pragma[inline_late] -private predicate methodTypeAtPath(Function f, int pos, TypePath path, Type type) { - f.getParam(pos).getTypeRepr().(TypeMention).resolveTypeAt(path) = type + f = trait.getAssocItem(functionName) and + functionTypeAtPath(f, pos, path, tp) and + tp = trait.(TraitTypeAbstraction).getATypeParameter() } /** - * Holds if resolving the method `f` in `impl` with the name `methodName` + * Holds if resolving the function `f` in `impl` with the name `functionName` * requires inspecting the types of applied _arguments_ in order to determine * whether it is the correct resolution. */ pragma[nomagic] -private predicate methodResolutionDependsOnArgument( - Impl impl, string methodName, Function f, int pos, TypePath path, Type type +private predicate functionResolutionDependsOnArgument( + ImplItemNode impl, string functionName, Function f, int pos, TypePath path, Type type ) { /* * As seen in the example below, when an implementation has a sibling for a - * trait we find occurrences of a type parameter of the trait in a method + * trait we find occurrences of a type parameter of the trait in a function * signature in the trait. We then find the type given in the implementation * at the same position, which is a position that might disambiguate the - * method from its siblings. + * function from its siblings. * * ```rust * trait MyTrait { @@ -1442,9 +1464,10 @@ private predicate methodResolutionDependsOnArgument( exists(TraitItemNode trait | implHasSibling(impl, trait) and - traitTypeParameterOccurrence(trait, methodName, pos, path) and - methodTypeAtPath(getMethodSuccessor(impl, methodName), pos, path, type) and - f = getMethodSuccessor(impl, methodName) + traitTypeParameterOccurrence(trait, _, functionName, pos, path, _) and + functionTypeAtPath(f, pos, path, type) and + f = impl.getAssocItem(functionName) and + pos >= 0 ) } @@ -1484,11 +1507,12 @@ private Function getMethodFromImpl(MethodCall mc) { name = mc.getMethodName() and result = getMethodSuccessor(impl, name) | - not methodResolutionDependsOnArgument(impl, _, _, _, _, _) + not functionResolutionDependsOnArgument(impl, name, _, _, _, _) or exists(int pos, TypePath path, Type type | - methodResolutionDependsOnArgument(impl, name, result, pos, path, type) and - inferType(mc.getPositionalArgument(pos), path) = type + functionResolutionDependsOnArgument(impl, name, result, pos, pragma[only_bind_into](path), + type) and + inferType(mc.getPositionalArgument(pos), pragma[only_bind_into](path)) = type ) ) } @@ -1499,6 +1523,162 @@ private Function getTraitMethod(ImplTraitReturnType trait, string name) { result = getMethodSuccessor(trait.getImplTraitTypeRepr(), name) } +pragma[nomagic] +private Function resolveMethodCallTarget(MethodCall mc) { + // The method comes from an `impl` block targeting the type of the receiver. + result = getMethodFromImpl(mc) + or + // The type of the receiver is a type parameter and the method comes from a + // trait bound on the type parameter. + result = getTypeParameterMethod(mc.getTypeAt(TypePath::nil()), mc.getMethodName()) + or + // The type of the receiver is an `impl Trait` type. + result = getTraitMethod(mc.getTypeAt(TypePath::nil()), mc.getMethodName()) +} + +pragma[nomagic] +private predicate assocFuncResolutionDependsOnArgument(Function f, Impl impl, int pos) { + functionResolutionDependsOnArgument(impl, _, f, pos, _, _) and + not f.getParamList().hasSelfParam() +} + +private class FunctionCallExpr extends CallImpl::CallExprCall { + ItemNode getResolvedFunction() { result = CallExprImpl::getResolvedFunction(this) } + + /** + * Holds if the target of this call is ambigous, and type information is required + * to disambiguate. + */ + predicate isAmbigous() { + this.hasTrait() + or + assocFuncResolutionDependsOnArgument(this.getResolvedFunction(), _, _) + } + + /** + * Gets a target candidate of this ambigous call, which belongs to `impl`. + * + * In order for the candidate to be a match, the argument type at `pos` must be + * checked against the type of the function at the same position. + * + * `resolved` is the corresponding function resolved through path resolution. + */ + pragma[nomagic] + Function getAnAmbigousCandidate(ImplItemNode impl, int pos, Function resolved) { + resolved = this.getResolvedFunction() and + ( + exists(TraitItemNode trait | + trait = this.getTrait() and + result.implements(resolved) and + result = impl.getAnAssocItem() + | + assocFuncResolutionDependsOnArgument(result, impl, pos) + or + exists(TypeParameter tp | traitTypeParameterOccurrence(trait, resolved, _, pos, _, tp) | + pos >= 0 + or + // We only check that the context of the call provides relevant type information + // when no argument can + not traitTypeParameterOccurrence(trait, resolved, _, any(int pos0 | pos0 >= 0), _, tp) + ) + ) + or + result = resolved and + assocFuncResolutionDependsOnArgument(result, impl, pos) + ) + } + + /** + * Same as `getAnAmbigousCandidate`, ranks the positions to be checked. + */ + Function getAnAmbigousCandidateRanked(ImplItemNode impl, int pos, Function f, int rnk) { + pos = rank[rnk + 1](int pos0 | result = this.getAnAmbigousCandidate(impl, pos0, f) | pos0) + } +} + +private newtype TAmbigousAssocFunctionCallExpr = + MkAmbigousAssocFunctionCallExpr(FunctionCallExpr call, Function resolved, int pos) { + exists(call.getAnAmbigousCandidate(_, pos, resolved)) + } + +private class AmbigousAssocFunctionCallExpr extends MkAmbigousAssocFunctionCallExpr { + FunctionCallExpr call; + Function resolved; + int pos; + + AmbigousAssocFunctionCallExpr() { this = MkAmbigousAssocFunctionCallExpr(call, resolved, pos) } + + pragma[nomagic] + Type getTypeAt(TypePath path) { + result = inferType(call.(CallExpr).getArg(pos), path) + or + pos = -1 and + result = inferType(call, path) + } + + string toString() { result = call.toString() } + + Location getLocation() { result = call.getLocation() } +} + +private module AmbigousAssocFuncIsInstantiationOfInput implements + IsInstantiationOfInputSig +{ + pragma[nomagic] + predicate potentialInstantiationOf( + AmbigousAssocFunctionCallExpr ce, TypeAbstraction impl, TypeMention constraint + ) { + exists(FunctionCallExpr call, Function resolved, Function cand, int pos | + ce = MkAmbigousAssocFunctionCallExpr(call, resolved, pos) and + cand = call.getAnAmbigousCandidate(impl, pos, resolved) + | + constraint = cand.getParam(pos).getTypeRepr() + or + pos = -1 and + constraint = cand.getRetType().getTypeRepr() + ) + } +} + +/** + * Gets the target of `call`, where resolution does not rely on type inference. + */ +pragma[nomagic] +private ItemNode resolveUnambigousFunctionCallTarget(FunctionCallExpr call) { + result = call.getResolvedFunction() and + not call.isAmbigous() +} + +pragma[nomagic] +private Function resolveAmbigousFunctionCallTargetFromIndex(FunctionCallExpr call, int index) { + exists(Impl impl, int pos, Function resolved | + IsInstantiationOf::isInstantiationOf(MkAmbigousAssocFunctionCallExpr(call, + resolved, pos), impl, _) and + result = call.getAnAmbigousCandidateRanked(impl, pos, resolved, index) + | + index = 0 + or + result = resolveAmbigousFunctionCallTargetFromIndex(call, index - 1) + ) +} + +/** + * Gets the target of `call`, where resolution relies on type inference. + */ +pragma[nomagic] +private Function resolveAmbigousFunctionCallTarget(FunctionCallExpr call) { + result = + resolveAmbigousFunctionCallTargetFromIndex(call, + max(int index | result = call.getAnAmbigousCandidateRanked(_, _, _, index))) +} + +pragma[inline] +private ItemNode resolveFunctionCallTarget(FunctionCallExpr call) { + result = resolveUnambigousFunctionCallTarget(call) + or + result = resolveAmbigousFunctionCallTarget(call) +} + cached private module Cached { private import codeql.rust.internal.CachedStages @@ -1527,18 +1707,12 @@ private module Cached { ) } - /** Gets a method that the method call `mc` resolves to, if any. */ + /** Gets a function that `call` resolves to, if any. */ cached - Function resolveMethodCallTarget(MethodCall mc) { - // The method comes from an `impl` block targeting the type of the receiver. - result = getMethodFromImpl(mc) + Function resolveCallTarget(Call call) { + result = resolveMethodCallTarget(call) or - // The type of the receiver is a type parameter and the method comes from a - // trait bound on the type parameter. - result = getTypeParameterMethod(mc.getTypeAt(TypePath::nil()), mc.getMethodName()) - or - // The type of the receiver is an `impl Trait` type. - result = getTraitMethod(mc.getTypeAt(TypePath::nil()), mc.getMethodName()) + result = resolveFunctionCallTarget(call) } pragma[inline] @@ -1660,6 +1834,8 @@ private module Cached { result = inferIndexExprType(n, path) or result = inferForLoopExprType(n, path) + or + result = inferCastExprType(n, path) } } @@ -1685,9 +1861,9 @@ private module Debug { result = inferType(n, path) } - Function debugResolveMethodCallTarget(Call mce) { - mce = getRelevantLocatable() and - result = resolveMethodCallTarget(mce) + Function debugResolveCallTarget(Call c) { + c = getRelevantLocatable() and + result = resolveCallTarget(c) } predicate debugInferImplicitSelfType(SelfParam self, TypePath path, Type t) { @@ -1705,6 +1881,11 @@ private module Debug { tm.resolveTypeAt(path) = type } + Type debugInferAnnotatedType(AstNode n, TypePath path) { + n = getRelevantLocatable() and + result = inferAnnotatedType(n, path) + } + pragma[nomagic] private int countTypesAtPath(AstNode n, TypePath path, Type t) { t = inferType(n, path) and diff --git a/rust/ql/test/extractor-tests/macro-expansion/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/extractor-tests/macro-expansion/CONSISTENCY/PathResolutionConsistency.expected index a94f2c9cef5a..675d607c9fde 100644 --- a/rust/ql/test/extractor-tests/macro-expansion/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/extractor-tests/macro-expansion/CONSISTENCY/PathResolutionConsistency.expected @@ -1,19 +1,10 @@ multipleCallTargets -| proc_macro.rs:6:18:6:61 | ...::from(...) | -| proc_macro.rs:7:15:7:58 | ...::from(...) | | proc_macro.rs:15:5:17:5 | ...::new(...) | -| proc_macro.rs:16:12:16:16 | ...::to_tokens(...) | -| proc_macro.rs:22:15:22:58 | ...::from(...) | | proc_macro.rs:25:5:28:5 | ...::new(...) | -| proc_macro.rs:26:10:26:12 | ...::to_tokens(...) | -| proc_macro.rs:27:10:27:16 | ...::to_tokens(...) | -| proc_macro.rs:38:15:38:64 | ...::from(...) | | proc_macro.rs:41:5:49:5 | ...::new(...) | | proc_macro.rs:41:5:49:5 | ...::new(...) | | proc_macro.rs:41:5:49:5 | ...::new(...) | | proc_macro.rs:41:5:49:5 | ...::new(...) | -| proc_macro.rs:42:16:42:26 | ...::to_tokens(...) | | proc_macro.rs:44:27:44:30 | ...::to_tokens(...) | -| proc_macro.rs:46:18:46:28 | ...::to_tokens(...) | multiplePathResolutions | macro_expansion.rs:1:5:1:14 | proc_macro | diff --git a/rust/ql/test/library-tests/dataflow/global/inline-flow.expected b/rust/ql/test/library-tests/dataflow/global/inline-flow.expected index da5840528f5c..221e55fc1371 100644 --- a/rust/ql/test/library-tests/dataflow/global/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/global/inline-flow.expected @@ -117,6 +117,11 @@ edges | main.rs:228:11:228:14 | [post] self [&ref, MyInt] | main.rs:227:19:227:27 | SelfParam [Return] [&ref, MyInt] | provenance | | | main.rs:228:25:228:27 | rhs [MyInt] | main.rs:228:25:228:33 | rhs.value | provenance | | | main.rs:228:25:228:33 | rhs.value | main.rs:228:10:228:14 | [post] * ... [MyInt] | provenance | | +| main.rs:235:14:235:18 | SelfParam [&ref, MyInt] | main.rs:236:12:236:15 | self [&ref, MyInt] | provenance | | +| main.rs:236:9:236:22 | &... [&ref] | main.rs:235:38:237:5 | { ... } [&ref] | provenance | | +| main.rs:236:10:236:22 | ... .value | main.rs:236:9:236:22 | &... [&ref] | provenance | | +| main.rs:236:11:236:15 | * ... [MyInt] | main.rs:236:10:236:22 | ... .value | provenance | | +| main.rs:236:12:236:15 | self [&ref, MyInt] | main.rs:236:11:236:15 | * ... [MyInt] | provenance | | | main.rs:242:9:242:9 | a [MyInt] | main.rs:244:13:244:13 | a [MyInt] | provenance | | | main.rs:242:13:242:38 | MyInt {...} [MyInt] | main.rs:242:9:242:9 | a [MyInt] | provenance | | | main.rs:242:28:242:36 | source(...) | main.rs:242:13:242:38 | MyInt {...} [MyInt] | provenance | | @@ -140,6 +145,15 @@ edges | main.rs:261:35:261:35 | b [MyInt] | main.rs:227:30:227:39 | ...: MyInt [MyInt] | provenance | | | main.rs:261:35:261:35 | b [MyInt] | main.rs:261:27:261:32 | [post] &mut a [&ref, MyInt] | provenance | | | main.rs:262:10:262:10 | a [MyInt] | main.rs:262:10:262:16 | a.value | provenance | | +| main.rs:270:9:270:9 | a [MyInt] | main.rs:272:28:272:28 | a [MyInt] | provenance | | +| main.rs:270:13:270:39 | MyInt {...} [MyInt] | main.rs:270:9:270:9 | a [MyInt] | provenance | | +| main.rs:270:28:270:37 | source(...) | main.rs:270:13:270:39 | MyInt {...} [MyInt] | provenance | | +| main.rs:272:9:272:9 | c | main.rs:273:10:273:10 | c | provenance | | +| main.rs:272:13:272:29 | * ... | main.rs:272:9:272:9 | c | provenance | | +| main.rs:272:14:272:29 | ...::deref(...) [&ref] | main.rs:272:13:272:29 | * ... | provenance | | +| main.rs:272:27:272:28 | &a [&ref, MyInt] | main.rs:235:14:235:18 | SelfParam [&ref, MyInt] | provenance | | +| main.rs:272:27:272:28 | &a [&ref, MyInt] | main.rs:272:14:272:29 | ...::deref(...) [&ref] | provenance | | +| main.rs:272:28:272:28 | a [MyInt] | main.rs:272:27:272:28 | &a [&ref, MyInt] | provenance | | | main.rs:289:18:289:21 | SelfParam [MyInt] | main.rs:289:48:291:5 | { ... } [MyInt] | provenance | | | main.rs:293:26:293:37 | ...: MyInt [MyInt] | main.rs:293:49:295:5 | { ... } [MyInt] | provenance | | | main.rs:299:9:299:9 | a [MyInt] | main.rs:301:50:301:50 | a [MyInt] | provenance | | @@ -297,6 +311,12 @@ nodes | main.rs:228:11:228:14 | [post] self [&ref, MyInt] | semmle.label | [post] self [&ref, MyInt] | | main.rs:228:25:228:27 | rhs [MyInt] | semmle.label | rhs [MyInt] | | main.rs:228:25:228:33 | rhs.value | semmle.label | rhs.value | +| main.rs:235:14:235:18 | SelfParam [&ref, MyInt] | semmle.label | SelfParam [&ref, MyInt] | +| main.rs:235:38:237:5 | { ... } [&ref] | semmle.label | { ... } [&ref] | +| main.rs:236:9:236:22 | &... [&ref] | semmle.label | &... [&ref] | +| main.rs:236:10:236:22 | ... .value | semmle.label | ... .value | +| main.rs:236:11:236:15 | * ... [MyInt] | semmle.label | * ... [MyInt] | +| main.rs:236:12:236:15 | self [&ref, MyInt] | semmle.label | self [&ref, MyInt] | | main.rs:242:9:242:9 | a [MyInt] | semmle.label | a [MyInt] | | main.rs:242:13:242:38 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | | main.rs:242:28:242:36 | source(...) | semmle.label | source(...) | @@ -320,6 +340,15 @@ nodes | main.rs:261:35:261:35 | b [MyInt] | semmle.label | b [MyInt] | | main.rs:262:10:262:10 | a [MyInt] | semmle.label | a [MyInt] | | main.rs:262:10:262:16 | a.value | semmle.label | a.value | +| main.rs:270:9:270:9 | a [MyInt] | semmle.label | a [MyInt] | +| main.rs:270:13:270:39 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | +| main.rs:270:28:270:37 | source(...) | semmle.label | source(...) | +| main.rs:272:9:272:9 | c | semmle.label | c | +| main.rs:272:13:272:29 | * ... | semmle.label | * ... | +| main.rs:272:14:272:29 | ...::deref(...) [&ref] | semmle.label | ...::deref(...) [&ref] | +| main.rs:272:27:272:28 | &a [&ref, MyInt] | semmle.label | &a [&ref, MyInt] | +| main.rs:272:28:272:28 | a [MyInt] | semmle.label | a [MyInt] | +| main.rs:273:10:273:10 | c | semmle.label | c | | main.rs:289:18:289:21 | SelfParam [MyInt] | semmle.label | SelfParam [MyInt] | | main.rs:289:48:291:5 | { ... } [MyInt] | semmle.label | { ... } [MyInt] | | main.rs:293:26:293:37 | ...: MyInt [MyInt] | semmle.label | ...: MyInt [MyInt] | @@ -367,6 +396,7 @@ subpaths | main.rs:244:13:244:13 | a [MyInt] | main.rs:220:12:220:15 | SelfParam [MyInt] | main.rs:220:42:223:5 | { ... } [MyInt] | main.rs:244:13:244:17 | ... + ... [MyInt] | | main.rs:252:9:252:9 | a [MyInt] | main.rs:220:12:220:15 | SelfParam [MyInt] | main.rs:220:42:223:5 | { ... } [MyInt] | main.rs:254:13:254:20 | a.add(...) [MyInt] | | main.rs:261:35:261:35 | b [MyInt] | main.rs:227:30:227:39 | ...: MyInt [MyInt] | main.rs:227:19:227:27 | SelfParam [Return] [&ref, MyInt] | main.rs:261:27:261:32 | [post] &mut a [&ref, MyInt] | +| main.rs:272:27:272:28 | &a [&ref, MyInt] | main.rs:235:14:235:18 | SelfParam [&ref, MyInt] | main.rs:235:38:237:5 | { ... } [&ref] | main.rs:272:14:272:29 | ...::deref(...) [&ref] | | main.rs:301:50:301:50 | a [MyInt] | main.rs:289:18:289:21 | SelfParam [MyInt] | main.rs:289:48:291:5 | { ... } [MyInt] | main.rs:301:30:301:54 | ...::take_self(...) [MyInt] | | main.rs:306:55:306:55 | b [MyInt] | main.rs:293:26:293:37 | ...: MyInt [MyInt] | main.rs:293:49:295:5 | { ... } [MyInt] | main.rs:306:30:306:56 | ...::take_second(...) [MyInt] | testFailures @@ -393,6 +423,7 @@ testFailures | main.rs:245:10:245:16 | c.value | main.rs:242:28:242:36 | source(...) | main.rs:245:10:245:16 | c.value | $@ | main.rs:242:28:242:36 | source(...) | source(...) | | main.rs:255:10:255:16 | d.value | main.rs:252:28:252:36 | source(...) | main.rs:255:10:255:16 | d.value | $@ | main.rs:252:28:252:36 | source(...) | source(...) | | main.rs:262:10:262:16 | a.value | main.rs:259:28:259:37 | source(...) | main.rs:262:10:262:16 | a.value | $@ | main.rs:259:28:259:37 | source(...) | source(...) | +| main.rs:273:10:273:10 | c | main.rs:270:28:270:37 | source(...) | main.rs:273:10:273:10 | c | $@ | main.rs:270:28:270:37 | source(...) | source(...) | | main.rs:302:10:302:10 | c | main.rs:299:28:299:36 | source(...) | main.rs:302:10:302:10 | c | $@ | main.rs:299:28:299:36 | source(...) | source(...) | | main.rs:307:10:307:10 | c | main.rs:305:28:305:37 | source(...) | main.rs:307:10:307:10 | c | $@ | main.rs:305:28:305:37 | source(...) | source(...) | | main.rs:317:10:317:10 | a | main.rs:316:13:316:21 | source(...) | main.rs:317:10:317:10 | a | $@ | main.rs:316:13:316:21 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/global/main.rs b/rust/ql/test/library-tests/dataflow/global/main.rs index b66ef27726bb..e378f16b4dea 100644 --- a/rust/ql/test/library-tests/dataflow/global/main.rs +++ b/rust/ql/test/library-tests/dataflow/global/main.rs @@ -270,7 +270,7 @@ fn test_operator_overloading() { let a = MyInt { value: source(27) }; // The line below is what the prefix `*` desugars to. let c = *Deref::deref(&a); - sink(c); // $ MISSING: hasValueFlow=27 + sink(c); // $ hasValueFlow=27 let a = MyInt { value: source(28) }; let c = *a; diff --git a/rust/ql/test/library-tests/dataflow/global/viableCallable.expected b/rust/ql/test/library-tests/dataflow/global/viableCallable.expected index 9c7a9e191416..aab630af29fc 100644 --- a/rust/ql/test/library-tests/dataflow/global/viableCallable.expected +++ b/rust/ql/test/library-tests/dataflow/global/viableCallable.expected @@ -77,6 +77,7 @@ | main.rs:266:5:266:10 | ... *= ... | main.rs:227:5:229:5 | fn mul_assign | | main.rs:267:5:267:17 | sink(...) | main.rs:5:1:7:1 | fn sink | | main.rs:270:28:270:37 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:272:14:272:29 | ...::deref(...) | main.rs:235:5:237:5 | fn deref | | main.rs:273:5:273:11 | sink(...) | main.rs:5:1:7:1 | fn sink | | main.rs:275:28:275:37 | source(...) | main.rs:1:1:3:1 | fn source | | main.rs:276:13:276:14 | * ... | main.rs:235:5:237:5 | fn deref | diff --git a/rust/ql/test/library-tests/dataflow/local/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/local/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index 330c8673560f..000000000000 --- a/rust/ql/test/library-tests/dataflow/local/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,3 +0,0 @@ -multipleCallTargets -| main.rs:532:10:532:21 | ...::from(...) | -| main.rs:538:10:538:21 | ...::from(...) | diff --git a/rust/ql/test/library-tests/dataflow/local/main.rs b/rust/ql/test/library-tests/dataflow/local/main.rs index 480154fd0a10..f7349eee6d82 100644 --- a/rust/ql/test/library-tests/dataflow/local/main.rs +++ b/rust/ql/test/library-tests/dataflow/local/main.rs @@ -529,7 +529,7 @@ fn conversions() { sink(a as i64); // $ hasTaintFlow=50 sink(a.into()); // $ MISSING: hasValueFlow=50 - sink(i64::from(a)); // $ hasTaintFlow=50 + sink(i64::from(a)); // $ MISSING: hasTaintFlow=50 -- we cannot resolve the `impl From for T` implementation let b: i32 = source(51) as i32; diff --git a/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected index adaeba79f61a..94ccc8ababc2 100644 --- a/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected @@ -32,7 +32,6 @@ multipleCallTargets | test.rs:737:30:737:43 | ...::_print(...) | | test.rs:752:14:752:43 | ...::_print(...) | | test.rs:766:14:766:34 | ...::_print(...) | -| test.rs:777:23:777:80 | ...::try_from(...) | | test.rs:806:50:806:66 | ...::from(...) | | test.rs:806:50:806:66 | ...::from(...) | | test.rs:808:14:808:31 | ...::_print(...) | @@ -74,14 +73,11 @@ multipleCallTargets | test.rs:883:14:883:29 | ...::_print(...) | | test.rs:885:27:885:36 | ...::_print(...) | | test.rs:886:28:886:41 | ...::_print(...) | -| test_futures_io.rs:25:23:25:80 | ...::try_from(...) | | test_futures_io.rs:35:26:35:63 | pinned.poll_read(...) | | test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) | | test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) | | test_futures_io.rs:93:26:93:63 | pinned.poll_read(...) | | test_futures_io.rs:116:22:116:50 | pinned.poll_fill_buf(...) | | test_futures_io.rs:145:26:145:49 | ...::with_capacity(...) | -| web_frameworks.rs:40:5:40:26 | ...::write_str(...) | -| web_frameworks.rs:40:5:40:26 | ...::write_str(...) | | web_frameworks.rs:101:14:101:23 | a.as_str() | | web_frameworks.rs:102:14:102:25 | a.as_bytes() | diff --git a/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs b/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs index 67dce4b21cc7..5139568fe519 100644 --- a/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs +++ b/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs @@ -42,8 +42,8 @@ async fn test_futures_rustls_futures_io() -> io::Result<()> { { // using the `AsyncReadExt::read` extension method (higher-level) let mut buffer1 = [0u8; 64]; - let bytes_read1 = futures::io::AsyncReadExt::read(&mut reader, &mut buffer1).await?; - sink(&buffer1[..bytes_read1]); // $ hasTaintFlow=url + let bytes_read1 = futures::io::AsyncReadExt::read(&mut reader, &mut buffer1).await?; // we cannot resolve the `read` call, which comes from `impl AsyncReadExt for R {}` in `async_read_ext.rs` + sink(&buffer1[..bytes_read1]); // $ MISSING: hasTaintFlow=url let mut buffer2 = [0u8; 64]; let bytes_read2 = reader.read(&mut buffer2).await?; // we cannot resolve the `read` call, which comes from `impl AsyncReadExt for R {}` in `async_read_ext.rs` @@ -100,8 +100,8 @@ async fn test_futures_rustls_futures_io() -> io::Result<()> { { // using the `AsyncReadExt::read` extension method (higher-level) let mut buffer1 = [0u8; 64]; - let bytes_read1 = futures::io::AsyncReadExt::read(&mut reader2, &mut buffer1).await?; - sink(&buffer1[..bytes_read1]); // $ hasTaintFlow=url + let bytes_read1 = futures::io::AsyncReadExt::read(&mut reader2, &mut buffer1).await?; // we cannot resolve the `read` call, which comes from `impl AsyncReadExt for R {}` in `async_read_ext.rs` + sink(&buffer1[..bytes_read1]); // $ MISSING: hasTaintFlow=url let mut buffer2 = [0u8; 64]; let bytes_read2 = reader2.read(&mut buffer2).await?; // we cannot resolve the `read` call, which comes from `impl AsyncReadExt for R {}` in `async_read_ext.rs` diff --git a/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected index 531fd2315075..48d54f1589b8 100644 --- a/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected @@ -1,9 +1,6 @@ multipleCallTargets | main.rs:118:9:118:11 | f(...) | -| proc_macro.rs:6:16:6:59 | ...::from(...) | -| proc_macro.rs:7:19:7:62 | ...::from(...) | | proc_macro.rs:9:5:11:5 | ...::new(...) | -| proc_macro.rs:10:10:10:12 | ...::to_tokens(...) | multiplePathResolutions | main.rs:626:3:626:12 | proc_macro | | main.rs:632:7:632:16 | proc_macro | 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 47ca3730f5b4..9ff363c2b5e8 100644 --- a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected @@ -1,9 +1,8 @@ multipleCallTargets | dereference.rs:61:15:61:24 | e1.deref() | -| main.rs:2096:13:2096:31 | ...::from(...) | -| main.rs:2097:13:2097:31 | ...::from(...) | -| main.rs:2098:13:2098:31 | ...::from(...) | -| main.rs:2104:13:2104:31 | ...::from(...) | -| main.rs:2105:13:2105:31 | ...::from(...) | -| main.rs:2106:13:2106:31 | ...::from(...) | -| main.rs:2142:21:2142:43 | ...::from(...) | +| main.rs:2186:13:2186:31 | ...::from(...) | +| main.rs:2187:13:2187:31 | ...::from(...) | +| main.rs:2188:13:2188:31 | ...::from(...) | +| main.rs:2194:13:2194:31 | ...::from(...) | +| main.rs:2195:13:2195:31 | ...::from(...) | +| main.rs:2196:13:2196:31 | ...::from(...) | diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index 81b9e5eb4b1a..dad278eaddc5 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -2042,6 +2042,80 @@ mod method_determined_by_argument_type { } } + trait MyFrom { + // MyFrom::my_from + fn my_from(value: T) -> Self; + } + + impl MyFrom for i64 { + // MyFrom::my_from + fn my_from(value: i64) -> Self { + value + } + } + + impl MyFrom for i64 { + // MyFrom::my_from + fn my_from(value: bool) -> Self { + if value { 1 } else { 0 } + } + } + + trait MyFrom2 { + // MyFrom2::my_from2 + fn my_from2(value: T, x: Self) -> (); + } + + impl MyFrom2 for i64 { + // MyFrom2::my_from2 + fn my_from2(value: i64, _: Self) -> () { + value; + } + } + + impl MyFrom2 for i64 { + // MyFrom2::my_from2 + fn my_from2(value: bool, _: Self) -> () { + if value { + 1 + } else { + 0 + }; + } + } + + trait MySelfTrait { + // MySelfTrait::f1 + fn f1(x: Self) -> i64; + + // MySelfTrait::f2 + fn f2(x: Self) -> Self; + } + + impl MySelfTrait for i64 { + // MySelfTrait::f1 + fn f1(x: Self) -> i64 { + x + 1 + } + + // MySelfTrait::f2 + fn f2(x: Self) -> Self { + x + 1 + } + } + + impl MySelfTrait for bool { + // MySelfTrait::f1 + fn f1(x: Self) -> i64 { + 0 + } + + // MySelfTrait::f2 + fn f2(x: Self) -> Self { + x + } + } + pub fn f() { let x: i64 = 73; x.my_add(5i64); // $ method=MyAdd::my_add @@ -2051,6 +2125,22 @@ mod method_determined_by_argument_type { S(1i64).my_add(S(2i64)); // $ method=S::my_add1 S(1i64).my_add(3i64); // $ MISSING: method=S::my_add2 S(1i64).my_add(&3i64); // $ method=S::my_add3 + + let x = i64::my_from(73i64); // $ method=MyFrom::my_from + let y = i64::my_from(true); // $ method=MyFrom::my_from + let z: i64 = MyFrom::my_from(73i64); // $ method=MyFrom::my_from + i64::my_from2(73i64, 0i64); // $ method=MyFrom2::my_from2 + i64::my_from2(true, 0i64); // $ method=MyFrom2::my_from2 + MyFrom2::my_from2(73i64, 0i64); // $ method=MyFrom2::my_from2 + + i64::f1(73i64); // $ method=MySelfTrait::f1 + i64::f2(73i64); // $ method=MySelfTrait::f2 + bool::f1(true); // $ method=MySelfTrait::f1 + bool::f2(true); // $ method=MySelfTrait::f2 + MySelfTrait::f1(73i64); // $ method=MySelfTrait::f1 + MySelfTrait::f2(73i64); // $ method=MySelfTrait::f2 + MySelfTrait::f1(true); // $ method=MySelfTrait::f1 + MySelfTrait::f2(true); // $ method=MySelfTrait::f2 } } 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 82b2668b5131..d1119f6e71fe 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -273,14 +273,11 @@ inferType | main.rs:117:17:117:17 | x | | main.rs:99:5:102:5 | MyThing | | main.rs:117:17:117:32 | x.trait_method() | | {EXTERNAL LOCATION} | bool | | main.rs:119:13:119:13 | y | | main.rs:99:5:102:5 | MyThing | -| main.rs:119:13:119:13 | y | | main.rs:104:5:106:5 | trait MyTrait | | main.rs:119:17:119:40 | MyThing {...} | | main.rs:99:5:102:5 | MyThing | -| main.rs:119:17:119:40 | MyThing {...} | | main.rs:104:5:106:5 | trait MyTrait | | main.rs:119:34:119:38 | false | | {EXTERNAL LOCATION} | bool | | main.rs:120:13:120:13 | b | | {EXTERNAL LOCATION} | bool | | main.rs:120:17:120:40 | ...::trait_method(...) | | {EXTERNAL LOCATION} | bool | | main.rs:120:39:120:39 | y | | main.rs:99:5:102:5 | MyThing | -| main.rs:120:39:120:39 | y | | main.rs:104:5:106:5 | trait MyTrait | | main.rs:137:15:137:18 | SelfParam | | main.rs:125:5:128:5 | MyThing | | main.rs:137:15:137:18 | SelfParam | A | main.rs:130:5:131:14 | S1 | | main.rs:137:27:139:9 | { ... } | | main.rs:130:5:131:14 | S1 | @@ -1988,18 +1985,13 @@ inferType | main.rs:1335:20:1335:24 | &true | | file://:0:0:0:0 | & | | main.rs:1335:20:1335:24 | &true | &T | {EXTERNAL LOCATION} | bool | | main.rs:1335:21:1335:24 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1339:13:1339:20 | mut flag | | {EXTERNAL LOCATION} | trait Default | | main.rs:1339:13:1339:20 | mut flag | | main.rs:1298:5:1301:5 | MyFlag | -| main.rs:1339:24:1339:41 | ...::default(...) | | {EXTERNAL LOCATION} | trait Default | | main.rs:1339:24:1339:41 | ...::default(...) | | main.rs:1298:5:1301:5 | MyFlag | | main.rs:1340:22:1340:30 | &mut flag | | file://:0:0:0:0 | & | -| main.rs:1340:22:1340:30 | &mut flag | &T | {EXTERNAL LOCATION} | trait Default | | main.rs:1340:22:1340:30 | &mut flag | &T | main.rs:1298:5:1301:5 | MyFlag | -| main.rs:1340:27:1340:30 | flag | | {EXTERNAL LOCATION} | trait Default | | main.rs:1340:27:1340:30 | flag | | main.rs:1298:5:1301:5 | MyFlag | | main.rs:1341:18:1341:23 | "{:?}\\n" | | file://:0:0:0:0 | & | | main.rs:1341:18:1341:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1341:26:1341:29 | flag | | {EXTERNAL LOCATION} | trait Default | | main.rs:1341:26:1341:29 | flag | | main.rs:1298:5:1301:5 | MyFlag | | main.rs:1356:43:1359:5 | { ... } | | {EXTERNAL LOCATION} | Result | | main.rs:1356:43:1359:5 | { ... } | E | main.rs:1348:5:1349:14 | S1 | @@ -2856,9 +2848,7 @@ inferType | main.rs:1799:13:1799:20 | vec2_not | | main.rs:1443:5:1448:5 | Vec2 | | main.rs:1799:24:1799:26 | ! ... | | main.rs:1443:5:1448:5 | Vec2 | | main.rs:1799:25:1799:26 | v1 | | main.rs:1443:5:1448:5 | Vec2 | -| main.rs:1802:13:1802:24 | default_vec2 | | {EXTERNAL LOCATION} | trait Default | | main.rs:1802:13:1802:24 | default_vec2 | | main.rs:1443:5:1448:5 | Vec2 | -| main.rs:1802:28:1802:45 | ...::default(...) | | {EXTERNAL LOCATION} | trait Default | | main.rs:1802:28:1802:45 | ...::default(...) | | main.rs:1443:5:1448:5 | Vec2 | | main.rs:1803:13:1803:26 | vec2_zero_plus | | main.rs:1443:5:1448:5 | Vec2 | | main.rs:1803:30:1803:48 | Vec2 {...} | | main.rs:1443:5:1448:5 | Vec2 | @@ -2867,11 +2857,8 @@ inferType | main.rs:1803:40:1803:40 | 0 | | {EXTERNAL LOCATION} | i64 | | main.rs:1803:46:1803:46 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:1803:46:1803:46 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1803:52:1803:63 | default_vec2 | | {EXTERNAL LOCATION} | trait Default | | main.rs:1803:52:1803:63 | default_vec2 | | main.rs:1443:5:1448:5 | Vec2 | -| main.rs:1807:13:1807:24 | default_vec2 | | {EXTERNAL LOCATION} | trait Default | | main.rs:1807:13:1807:24 | default_vec2 | | main.rs:1443:5:1448:5 | Vec2 | -| main.rs:1807:28:1807:45 | ...::default(...) | | {EXTERNAL LOCATION} | trait Default | | main.rs:1807:28:1807:45 | ...::default(...) | | main.rs:1443:5:1448:5 | Vec2 | | main.rs:1808:13:1808:26 | vec2_zero_plus | | {EXTERNAL LOCATION} | bool | | main.rs:1808:30:1808:48 | Vec2 {...} | | main.rs:1443:5:1448:5 | Vec2 | @@ -2880,7 +2867,6 @@ inferType | main.rs:1808:40:1808:40 | 0 | | {EXTERNAL LOCATION} | i64 | | main.rs:1808:46:1808:46 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:1808:46:1808:46 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1808:53:1808:64 | default_vec2 | | {EXTERNAL LOCATION} | trait Default | | main.rs:1808:53:1808:64 | default_vec2 | | main.rs:1443:5:1448:5 | Vec2 | | main.rs:1818:18:1818:21 | SelfParam | | main.rs:1815:5:1815:14 | S1 | | main.rs:1821:25:1823:5 | { ... } | | main.rs:1815:5:1815:14 | S1 | @@ -3140,539 +3126,612 @@ inferType | main.rs:2041:16:2041:21 | self.0 | | main.rs:2033:14:2033:14 | T | | main.rs:2041:31:2041:35 | other | | file://:0:0:0:0 | & | | main.rs:2041:31:2041:35 | other | &T | main.rs:2033:14:2033:14 | T | -| main.rs:2046:13:2046:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2046:13:2046:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2046:22:2046:23 | 73 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2046:22:2046:23 | 73 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2047:9:2047:9 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2047:9:2047:9 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2047:9:2047:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2047:18:2047:21 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2048:9:2048:9 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2048:9:2048:9 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2048:9:2048:23 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2048:18:2048:22 | &5i64 | | file://:0:0:0:0 | & | -| main.rs:2048:18:2048:22 | &5i64 | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:2048:19:2048:22 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2049:9:2049:9 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2049:9:2049:9 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2049:9:2049:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2049:18:2049:21 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2051:9:2051:15 | S(...) | | main.rs:2013:5:2013:19 | S | -| main.rs:2051:9:2051:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | -| main.rs:2051:9:2051:31 | ... .my_add(...) | | main.rs:2013:5:2013:19 | S | -| main.rs:2051:11:2051:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2051:24:2051:30 | S(...) | | main.rs:2013:5:2013:19 | S | -| main.rs:2051:24:2051:30 | S(...) | T | {EXTERNAL LOCATION} | i64 | -| main.rs:2051:26:2051:29 | 2i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2052:9:2052:15 | S(...) | | main.rs:2013:5:2013:19 | S | -| main.rs:2052:9:2052:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | -| main.rs:2052:11:2052:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2052:24:2052:27 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2053:9:2053:15 | S(...) | | main.rs:2013:5:2013:19 | S | -| main.rs:2053:9:2053:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | -| main.rs:2053:9:2053:29 | ... .my_add(...) | | main.rs:2013:5:2013:19 | S | -| main.rs:2053:11:2053:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2053:24:2053:28 | &3i64 | | file://:0:0:0:0 | & | -| main.rs:2053:24:2053:28 | &3i64 | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:2053:25:2053:28 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2061:26:2063:9 | { ... } | | main.rs:2058:5:2058:24 | MyCallable | -| main.rs:2062:13:2062:25 | MyCallable {...} | | main.rs:2058:5:2058:24 | MyCallable | -| main.rs:2065:17:2065:21 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2065:17:2065:21 | SelfParam | &T | main.rs:2058:5:2058:24 | MyCallable | -| main.rs:2065:31:2067:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2065:31:2067:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2066:13:2066:13 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2066:13:2066:13 | 1 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2073:13:2073:13 | i | | {EXTERNAL LOCATION} | i32 | -| main.rs:2073:18:2073:26 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2073:18:2073:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2073:19:2073:19 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2073:22:2073:22 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2073:25:2073:25 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2074:18:2074:26 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2074:18:2074:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2074:18:2074:41 | ... .map(...) | | file://:0:0:0:0 | [] | -| main.rs:2074:19:2074:19 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2074:22:2074:22 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2074:25:2074:25 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2074:40:2074:40 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2075:18:2075:26 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2075:18:2075:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2075:19:2075:19 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2075:22:2075:22 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2075:25:2075:25 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2077:13:2077:17 | vals1 | | file://:0:0:0:0 | [] | -| main.rs:2077:13:2077:17 | vals1 | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2077:13:2077:17 | vals1 | [T;...] | {EXTERNAL LOCATION} | u8 | -| main.rs:2077:21:2077:31 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2077:21:2077:31 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2077:21:2077:31 | [...] | [T;...] | {EXTERNAL LOCATION} | u8 | -| main.rs:2077:22:2077:24 | 1u8 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2077:22:2077:24 | 1u8 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2077:27:2077:27 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2077:27:2077:27 | 2 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2077:30:2077:30 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2077:30:2077:30 | 3 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2078:13:2078:13 | u | | {EXTERNAL LOCATION} | i32 | -| main.rs:2078:13:2078:13 | u | | {EXTERNAL LOCATION} | u8 | -| main.rs:2078:18:2078:22 | vals1 | | file://:0:0:0:0 | [] | -| main.rs:2078:18:2078:22 | vals1 | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2078:18:2078:22 | vals1 | [T;...] | {EXTERNAL LOCATION} | u8 | -| main.rs:2080:13:2080:17 | vals2 | | file://:0:0:0:0 | [] | -| main.rs:2080:13:2080:17 | vals2 | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2080:21:2080:29 | [1u16; 3] | | file://:0:0:0:0 | [] | -| main.rs:2080:21:2080:29 | [1u16; 3] | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2080:22:2080:25 | 1u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2080:28:2080:28 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2081:13:2081:13 | u | | {EXTERNAL LOCATION} | u16 | -| main.rs:2081:18:2081:22 | vals2 | | file://:0:0:0:0 | [] | -| main.rs:2081:18:2081:22 | vals2 | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2083:13:2083:17 | vals3 | | file://:0:0:0:0 | [] | -| main.rs:2083:13:2083:17 | vals3 | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2083:13:2083:17 | vals3 | [T;...] | {EXTERNAL LOCATION} | u32 | -| main.rs:2083:26:2083:26 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2083:31:2083:39 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2083:31:2083:39 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2083:31:2083:39 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | -| main.rs:2083:32:2083:32 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2083:32:2083:32 | 1 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2083:35:2083:35 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2083:35:2083:35 | 2 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2083:38:2083:38 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2083:38:2083:38 | 3 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2084:13:2084:13 | u | | {EXTERNAL LOCATION} | i32 | -| main.rs:2084:13:2084:13 | u | | {EXTERNAL LOCATION} | u32 | -| main.rs:2084:18:2084:22 | vals3 | | file://:0:0:0:0 | [] | -| main.rs:2084:18:2084:22 | vals3 | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2084:18:2084:22 | vals3 | [T;...] | {EXTERNAL LOCATION} | u32 | -| main.rs:2086:13:2086:17 | vals4 | | file://:0:0:0:0 | [] | -| main.rs:2086:13:2086:17 | vals4 | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2086:13:2086:17 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | -| main.rs:2086:26:2086:26 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2086:31:2086:36 | [1; 3] | | file://:0:0:0:0 | [] | -| main.rs:2086:31:2086:36 | [1; 3] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2086:31:2086:36 | [1; 3] | [T;...] | {EXTERNAL LOCATION} | u64 | -| main.rs:2086:32:2086:32 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2086:32:2086:32 | 1 | | {EXTERNAL LOCATION} | u64 | -| main.rs:2086:35:2086:35 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2087:13:2087:13 | u | | {EXTERNAL LOCATION} | i32 | -| main.rs:2087:13:2087:13 | u | | {EXTERNAL LOCATION} | u64 | -| main.rs:2087:18:2087:22 | vals4 | | file://:0:0:0:0 | [] | -| main.rs:2087:18:2087:22 | vals4 | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2087:18:2087:22 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | -| main.rs:2089:13:2089:24 | mut strings1 | | file://:0:0:0:0 | [] | -| main.rs:2089:13:2089:24 | mut strings1 | [T;...] | file://:0:0:0:0 | & | -| main.rs:2089:13:2089:24 | mut strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2089:28:2089:48 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2089:28:2089:48 | [...] | [T;...] | file://:0:0:0:0 | & | -| main.rs:2089:28:2089:48 | [...] | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2089:29:2089:33 | "foo" | | file://:0:0:0:0 | & | -| main.rs:2089:29:2089:33 | "foo" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2089:36:2089:40 | "bar" | | file://:0:0:0:0 | & | -| main.rs:2089:36:2089:40 | "bar" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2089:43:2089:47 | "baz" | | file://:0:0:0:0 | & | -| main.rs:2089:43:2089:47 | "baz" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2090:13:2090:13 | s | | {EXTERNAL LOCATION} | Item | -| main.rs:2090:13:2090:13 | s | | file://:0:0:0:0 | & | -| main.rs:2090:13:2090:13 | s | &T | file://:0:0:0:0 | & | -| main.rs:2090:13:2090:13 | s | &T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2090:18:2090:26 | &strings1 | | file://:0:0:0:0 | & | -| main.rs:2090:18:2090:26 | &strings1 | &T | file://:0:0:0:0 | [] | -| main.rs:2090:18:2090:26 | &strings1 | &T.[T;...] | file://:0:0:0:0 | & | -| main.rs:2090:18:2090:26 | &strings1 | &T.[T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2090:19:2090:26 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2090:19:2090:26 | strings1 | [T;...] | file://:0:0:0:0 | & | -| main.rs:2090:19:2090:26 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2091:13:2091:13 | s | | {EXTERNAL LOCATION} | Item | -| main.rs:2091:13:2091:13 | s | | file://:0:0:0:0 | & | -| main.rs:2091:13:2091:13 | s | &T | file://:0:0:0:0 | & | -| main.rs:2091:13:2091:13 | s | &T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2091:18:2091:30 | &mut strings1 | | file://:0:0:0:0 | & | -| main.rs:2091:18:2091:30 | &mut strings1 | &T | file://:0:0:0:0 | [] | -| main.rs:2091:18:2091:30 | &mut strings1 | &T.[T;...] | file://:0:0:0:0 | & | -| main.rs:2091:18:2091:30 | &mut strings1 | &T.[T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2091:23:2091:30 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2091:23:2091:30 | strings1 | [T;...] | file://:0:0:0:0 | & | -| main.rs:2091:23:2091:30 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2092:13:2092:13 | s | | file://:0:0:0:0 | & | -| main.rs:2092:13:2092:13 | s | &T | {EXTERNAL LOCATION} | str | -| main.rs:2092:18:2092:25 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2092:18:2092:25 | strings1 | [T;...] | file://:0:0:0:0 | & | -| main.rs:2092:18:2092:25 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2094:13:2094:20 | strings2 | | file://:0:0:0:0 | [] | -| main.rs:2094:13:2094:20 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2095:9:2099:9 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2095:9:2099:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2096:13:2096:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2096:26:2096:30 | "foo" | | file://:0:0:0:0 | & | -| main.rs:2096:26:2096:30 | "foo" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2097:13:2097:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2097:26:2097:30 | "bar" | | file://:0:0:0:0 | & | -| main.rs:2097:26:2097:30 | "bar" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2098:13:2098:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2098:26:2098:30 | "baz" | | file://:0:0:0:0 | & | -| main.rs:2098:26:2098:30 | "baz" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2100:13:2100:13 | s | | {EXTERNAL LOCATION} | String | -| main.rs:2100:18:2100:25 | strings2 | | file://:0:0:0:0 | [] | -| main.rs:2100:18:2100:25 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2102:13:2102:20 | strings3 | | file://:0:0:0:0 | & | -| main.rs:2102:13:2102:20 | strings3 | &T | file://:0:0:0:0 | [] | -| main.rs:2102:13:2102:20 | strings3 | &T.[T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2103:9:2107:9 | &... | | file://:0:0:0:0 | & | -| main.rs:2103:9:2107:9 | &... | &T | file://:0:0:0:0 | [] | -| main.rs:2103:9:2107:9 | &... | &T.[T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2103:10:2107:9 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2103:10:2107:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2104:13:2104:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2104:26:2104:30 | "foo" | | file://:0:0:0:0 | & | -| main.rs:2104:26:2104:30 | "foo" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2105:13:2105:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2105:26:2105:30 | "bar" | | file://:0:0:0:0 | & | -| main.rs:2105:26:2105:30 | "bar" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2106:13:2106:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2106:26:2106:30 | "baz" | | file://:0:0:0:0 | & | -| main.rs:2106:26:2106:30 | "baz" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2108:13:2108:13 | s | | {EXTERNAL LOCATION} | Item | -| main.rs:2108:13:2108:13 | s | | file://:0:0:0:0 | & | -| main.rs:2108:13:2108:13 | s | &T | {EXTERNAL LOCATION} | String | -| main.rs:2108:18:2108:25 | strings3 | | file://:0:0:0:0 | & | -| main.rs:2108:18:2108:25 | strings3 | &T | file://:0:0:0:0 | [] | -| main.rs:2108:18:2108:25 | strings3 | &T.[T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2110:13:2110:21 | callables | | file://:0:0:0:0 | [] | -| main.rs:2110:13:2110:21 | callables | [T;...] | main.rs:2058:5:2058:24 | MyCallable | -| main.rs:2110:25:2110:81 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2110:25:2110:81 | [...] | [T;...] | main.rs:2058:5:2058:24 | MyCallable | -| main.rs:2110:26:2110:42 | ...::new(...) | | main.rs:2058:5:2058:24 | MyCallable | -| main.rs:2110:45:2110:61 | ...::new(...) | | main.rs:2058:5:2058:24 | MyCallable | -| main.rs:2110:64:2110:80 | ...::new(...) | | main.rs:2058:5:2058:24 | MyCallable | -| main.rs:2111:13:2111:13 | c | | main.rs:2058:5:2058:24 | MyCallable | -| main.rs:2112:12:2112:20 | callables | | file://:0:0:0:0 | [] | -| main.rs:2112:12:2112:20 | callables | [T;...] | main.rs:2058:5:2058:24 | MyCallable | -| main.rs:2114:17:2114:22 | result | | {EXTERNAL LOCATION} | i64 | -| main.rs:2114:26:2114:26 | c | | main.rs:2058:5:2058:24 | MyCallable | -| main.rs:2114:26:2114:33 | c.call() | | {EXTERNAL LOCATION} | i64 | -| main.rs:2119:13:2119:13 | i | | {EXTERNAL LOCATION} | Item | -| main.rs:2119:13:2119:13 | i | | {EXTERNAL LOCATION} | i32 | -| main.rs:2119:18:2119:18 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2119:18:2119:22 | 0..10 | | {EXTERNAL LOCATION} | Range | -| main.rs:2119:18:2119:22 | 0..10 | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2119:21:2119:22 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2120:13:2120:13 | u | | {EXTERNAL LOCATION} | Range | -| main.rs:2120:13:2120:13 | u | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2120:13:2120:13 | u | Idx | {EXTERNAL LOCATION} | u8 | -| main.rs:2120:18:2120:26 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2120:18:2120:26 | [...] | [T;...] | {EXTERNAL LOCATION} | Range | -| main.rs:2120:18:2120:26 | [...] | [T;...].Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2120:18:2120:26 | [...] | [T;...].Idx | {EXTERNAL LOCATION} | u8 | -| main.rs:2120:19:2120:21 | 0u8 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2120:19:2120:21 | 0u8 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2120:19:2120:25 | 0u8..10 | | {EXTERNAL LOCATION} | Range | -| main.rs:2120:19:2120:25 | 0u8..10 | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2120:19:2120:25 | 0u8..10 | Idx | {EXTERNAL LOCATION} | u8 | -| main.rs:2120:24:2120:25 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2120:24:2120:25 | 10 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2121:13:2121:17 | range | | {EXTERNAL LOCATION} | Range | -| main.rs:2121:13:2121:17 | range | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2121:21:2121:21 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2121:21:2121:25 | 0..10 | | {EXTERNAL LOCATION} | Range | -| main.rs:2121:21:2121:25 | 0..10 | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2121:24:2121:25 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2122:13:2122:13 | i | | {EXTERNAL LOCATION} | Item | -| main.rs:2122:13:2122:13 | i | | {EXTERNAL LOCATION} | i32 | -| main.rs:2122:18:2122:22 | range | | {EXTERNAL LOCATION} | Range | -| main.rs:2122:18:2122:22 | range | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2124:13:2124:18 | range1 | | {EXTERNAL LOCATION} | Range | -| main.rs:2124:13:2124:18 | range1 | Idx | {EXTERNAL LOCATION} | u16 | -| main.rs:2125:9:2128:9 | ...::Range {...} | | {EXTERNAL LOCATION} | Range | -| main.rs:2125:9:2128:9 | ...::Range {...} | Idx | {EXTERNAL LOCATION} | u16 | -| main.rs:2126:20:2126:23 | 0u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2127:18:2127:22 | 10u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2129:13:2129:13 | u | | {EXTERNAL LOCATION} | Item | -| main.rs:2129:13:2129:13 | u | | {EXTERNAL LOCATION} | u16 | -| main.rs:2129:18:2129:23 | range1 | | {EXTERNAL LOCATION} | Range | -| main.rs:2129:18:2129:23 | range1 | Idx | {EXTERNAL LOCATION} | u16 | -| main.rs:2133:26:2133:26 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2133:29:2133:29 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2133:32:2133:32 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2136:13:2136:18 | vals4a | | {EXTERNAL LOCATION} | Vec | -| main.rs:2136:13:2136:18 | vals4a | A | {EXTERNAL LOCATION} | Global | -| main.rs:2136:13:2136:18 | vals4a | T | {EXTERNAL LOCATION} | u16 | -| main.rs:2136:32:2136:43 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2136:32:2136:43 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2136:32:2136:43 | [...] | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2136:32:2136:52 | ... .to_vec() | | {EXTERNAL LOCATION} | Vec | -| main.rs:2136:32:2136:52 | ... .to_vec() | A | {EXTERNAL LOCATION} | Global | -| main.rs:2136:32:2136:52 | ... .to_vec() | T | {EXTERNAL LOCATION} | u16 | -| main.rs:2136:33:2136:36 | 1u16 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2136:33:2136:36 | 1u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2136:39:2136:39 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2136:39:2136:39 | 2 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2136:42:2136:42 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2136:42:2136:42 | 3 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2137:13:2137:13 | u | | {EXTERNAL LOCATION} | Vec | -| main.rs:2137:13:2137:13 | u | | {EXTERNAL LOCATION} | u16 | -| main.rs:2137:13:2137:13 | u | | file://:0:0:0:0 | & | -| main.rs:2137:13:2137:13 | u | A | {EXTERNAL LOCATION} | Global | -| main.rs:2137:13:2137:13 | u | T | {EXTERNAL LOCATION} | u16 | -| main.rs:2137:18:2137:23 | vals4a | | {EXTERNAL LOCATION} | Vec | -| main.rs:2137:18:2137:23 | vals4a | A | {EXTERNAL LOCATION} | Global | -| main.rs:2137:18:2137:23 | vals4a | T | {EXTERNAL LOCATION} | u16 | -| main.rs:2139:22:2139:33 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2139:22:2139:33 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2139:22:2139:33 | [...] | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2139:23:2139:26 | 1u16 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2139:23:2139:26 | 1u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2139:29:2139:29 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2139:29:2139:29 | 2 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2139:32:2139:32 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2139:32:2139:32 | 3 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2142:13:2142:17 | vals5 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2142:13:2142:17 | vals5 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2142:13:2142:17 | vals5 | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2142:21:2142:43 | ...::from(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2142:21:2142:43 | ...::from(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2142:21:2142:43 | ...::from(...) | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2142:31:2142:42 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2142:31:2142:42 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2142:31:2142:42 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | -| main.rs:2142:32:2142:35 | 1u32 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2142:32:2142:35 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2142:38:2142:38 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2142:38:2142:38 | 2 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2142:41:2142:41 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2142:41:2142:41 | 3 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2143:13:2143:13 | u | | {EXTERNAL LOCATION} | Vec | -| main.rs:2143:13:2143:13 | u | | {EXTERNAL LOCATION} | u8 | -| main.rs:2143:13:2143:13 | u | | file://:0:0:0:0 | & | -| main.rs:2143:13:2143:13 | u | A | {EXTERNAL LOCATION} | Global | -| main.rs:2143:13:2143:13 | u | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2143:18:2143:22 | vals5 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2143:18:2143:22 | vals5 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2143:18:2143:22 | vals5 | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2145:13:2145:17 | vals6 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2145:13:2145:17 | vals6 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2145:13:2145:17 | vals6 | T | file://:0:0:0:0 | & | -| main.rs:2145:13:2145:17 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 | -| main.rs:2145:32:2145:43 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2145:32:2145:43 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2145:32:2145:43 | [...] | [T;...] | {EXTERNAL LOCATION} | u64 | -| main.rs:2145:32:2145:60 | ... .collect() | | {EXTERNAL LOCATION} | Vec | -| main.rs:2145:32:2145:60 | ... .collect() | A | {EXTERNAL LOCATION} | Global | -| main.rs:2145:32:2145:60 | ... .collect() | T | file://:0:0:0:0 | & | -| main.rs:2145:32:2145:60 | ... .collect() | T.&T | {EXTERNAL LOCATION} | u64 | -| main.rs:2145:33:2145:36 | 1u64 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2145:33:2145:36 | 1u64 | | {EXTERNAL LOCATION} | u64 | -| main.rs:2145:39:2145:39 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2145:39:2145:39 | 2 | | {EXTERNAL LOCATION} | u64 | -| main.rs:2145:42:2145:42 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2145:42:2145:42 | 3 | | {EXTERNAL LOCATION} | u64 | -| main.rs:2146:13:2146:13 | u | | {EXTERNAL LOCATION} | Vec | -| main.rs:2146:13:2146:13 | u | | file://:0:0:0:0 | & | -| main.rs:2146:13:2146:13 | u | &T | {EXTERNAL LOCATION} | u64 | -| main.rs:2146:13:2146:13 | u | A | {EXTERNAL LOCATION} | Global | -| main.rs:2146:13:2146:13 | u | T | file://:0:0:0:0 | & | -| main.rs:2146:13:2146:13 | u | T.&T | {EXTERNAL LOCATION} | u64 | -| main.rs:2146:18:2146:22 | vals6 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2146:18:2146:22 | vals6 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2146:18:2146:22 | vals6 | T | file://:0:0:0:0 | & | -| main.rs:2146:18:2146:22 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 | -| main.rs:2148:13:2148:21 | mut vals7 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2148:13:2148:21 | mut vals7 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2148:25:2148:34 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2148:25:2148:34 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2149:9:2149:13 | vals7 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2149:9:2149:13 | vals7 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2149:20:2149:22 | 1u8 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2150:13:2150:13 | u | | {EXTERNAL LOCATION} | Vec | -| main.rs:2150:13:2150:13 | u | | file://:0:0:0:0 | & | -| main.rs:2150:13:2150:13 | u | A | {EXTERNAL LOCATION} | Global | -| main.rs:2150:18:2150:22 | vals7 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2150:18:2150:22 | vals7 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2152:33:2152:33 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2152:36:2152:36 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2152:45:2152:45 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2152:48:2152:48 | 4 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2159:13:2159:20 | mut map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2159:13:2159:20 | mut map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2159:24:2159:55 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2159:24:2159:55 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2160:9:2160:12 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2160:9:2160:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2160:9:2160:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2160:21:2160:21 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2160:24:2160:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2160:24:2160:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2160:33:2160:37 | "one" | | file://:0:0:0:0 | & | -| main.rs:2160:33:2160:37 | "one" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2161:9:2161:12 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2161:9:2161:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2161:9:2161:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2161:21:2161:21 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2161:24:2161:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2161:24:2161:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2161:33:2161:37 | "two" | | file://:0:0:0:0 | & | -| main.rs:2161:33:2161:37 | "two" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2162:13:2162:15 | key | | {EXTERNAL LOCATION} | Item | -| main.rs:2162:13:2162:15 | key | | file://:0:0:0:0 | & | -| main.rs:2162:20:2162:23 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2162:20:2162:23 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2162:20:2162:30 | map1.keys() | | {EXTERNAL LOCATION} | Keys | -| main.rs:2163:13:2163:17 | value | | {EXTERNAL LOCATION} | Item | -| main.rs:2163:13:2163:17 | value | | file://:0:0:0:0 | & | -| main.rs:2163:22:2163:25 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2163:22:2163:25 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2163:22:2163:34 | map1.values() | | {EXTERNAL LOCATION} | Values | -| main.rs:2164:13:2164:24 | TuplePat | | {EXTERNAL LOCATION} | Item | -| main.rs:2164:29:2164:32 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2164:29:2164:32 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2164:29:2164:39 | map1.iter() | | {EXTERNAL LOCATION} | Iter | -| main.rs:2165:13:2165:24 | TuplePat | | {EXTERNAL LOCATION} | Item | -| main.rs:2165:29:2165:33 | &map1 | | file://:0:0:0:0 | & | -| main.rs:2165:29:2165:33 | &map1 | &T | {EXTERNAL LOCATION} | HashMap | -| main.rs:2165:29:2165:33 | &map1 | &T.S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2165:30:2165:33 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2165:30:2165:33 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2169:13:2169:17 | mut a | | {EXTERNAL LOCATION} | i32 | -| main.rs:2169:13:2169:17 | mut a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2169:26:2169:26 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2169:26:2169:26 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2171:23:2171:23 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:2171:23:2171:23 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2171:23:2171:28 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2171:27:2171:28 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2173:13:2173:13 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:2173:13:2173:13 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2173:13:2173:18 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:2173:18:2173:18 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2187:40:2189:9 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:2187:40:2189:9 | { ... } | T | main.rs:2181:5:2181:20 | S1 | -| main.rs:2187:40:2189:9 | { ... } | T.T | main.rs:2186:10:2186:19 | T | -| main.rs:2188:13:2188:16 | None | | {EXTERNAL LOCATION} | Option | -| main.rs:2188:13:2188:16 | None | T | main.rs:2181:5:2181:20 | S1 | -| main.rs:2188:13:2188:16 | None | T.T | main.rs:2186:10:2186:19 | T | -| main.rs:2191:30:2193:9 | { ... } | | main.rs:2181:5:2181:20 | S1 | -| main.rs:2191:30:2193:9 | { ... } | T | main.rs:2186:10:2186:19 | T | -| main.rs:2192:13:2192:28 | S1(...) | | main.rs:2181:5:2181:20 | S1 | -| main.rs:2192:13:2192:28 | S1(...) | T | main.rs:2186:10:2186:19 | T | -| main.rs:2192:16:2192:27 | ...::default(...) | | main.rs:2186:10:2186:19 | T | -| main.rs:2195:19:2195:22 | SelfParam | | main.rs:2181:5:2181:20 | S1 | -| main.rs:2195:19:2195:22 | SelfParam | T | main.rs:2186:10:2186:19 | T | -| main.rs:2195:33:2197:9 | { ... } | | main.rs:2181:5:2181:20 | S1 | -| main.rs:2195:33:2197:9 | { ... } | T | main.rs:2186:10:2186:19 | T | -| main.rs:2196:13:2196:16 | self | | main.rs:2181:5:2181:20 | S1 | -| main.rs:2196:13:2196:16 | self | T | main.rs:2186:10:2186:19 | T | -| main.rs:2209:13:2209:14 | x1 | | {EXTERNAL LOCATION} | Option | -| main.rs:2209:13:2209:14 | x1 | T | main.rs:2181:5:2181:20 | S1 | -| main.rs:2209:13:2209:14 | x1 | T.T | main.rs:2183:5:2184:14 | S2 | -| main.rs:2209:34:2209:48 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2209:34:2209:48 | ...::assoc_fun(...) | T | main.rs:2181:5:2181:20 | S1 | -| main.rs:2209:34:2209:48 | ...::assoc_fun(...) | T.T | main.rs:2183:5:2184:14 | S2 | -| main.rs:2210:13:2210:14 | x2 | | {EXTERNAL LOCATION} | Option | -| main.rs:2210:13:2210:14 | x2 | T | main.rs:2181:5:2181:20 | S1 | -| main.rs:2210:13:2210:14 | x2 | T.T | main.rs:2183:5:2184:14 | S2 | -| main.rs:2210:18:2210:38 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2210:18:2210:38 | ...::assoc_fun(...) | T | main.rs:2181:5:2181:20 | S1 | -| main.rs:2210:18:2210:38 | ...::assoc_fun(...) | T.T | main.rs:2183:5:2184:14 | S2 | -| main.rs:2211:13:2211:14 | x3 | | {EXTERNAL LOCATION} | Option | -| main.rs:2211:13:2211:14 | x3 | T | main.rs:2181:5:2181:20 | S1 | -| main.rs:2211:13:2211:14 | x3 | T.T | main.rs:2183:5:2184:14 | S2 | -| main.rs:2211:18:2211:32 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2211:18:2211:32 | ...::assoc_fun(...) | T | main.rs:2181:5:2181:20 | S1 | -| main.rs:2211:18:2211:32 | ...::assoc_fun(...) | T.T | main.rs:2183:5:2184:14 | S2 | -| main.rs:2212:13:2212:14 | x4 | | main.rs:2181:5:2181:20 | S1 | -| main.rs:2212:13:2212:14 | x4 | T | main.rs:2183:5:2184:14 | S2 | -| main.rs:2212:18:2212:48 | ...::method(...) | | main.rs:2181:5:2181:20 | S1 | -| main.rs:2212:18:2212:48 | ...::method(...) | T | main.rs:2183:5:2184:14 | S2 | -| main.rs:2212:35:2212:47 | ...::default(...) | | main.rs:2181:5:2181:20 | S1 | -| main.rs:2212:35:2212:47 | ...::default(...) | T | main.rs:2183:5:2184:14 | S2 | -| main.rs:2213:13:2213:14 | x5 | | main.rs:2181:5:2181:20 | S1 | -| main.rs:2213:13:2213:14 | x5 | T | main.rs:2183:5:2184:14 | S2 | -| main.rs:2213:18:2213:42 | ...::method(...) | | main.rs:2181:5:2181:20 | S1 | -| main.rs:2213:18:2213:42 | ...::method(...) | T | main.rs:2183:5:2184:14 | S2 | -| main.rs:2213:29:2213:41 | ...::default(...) | | main.rs:2181:5:2181:20 | S1 | -| main.rs:2213:29:2213:41 | ...::default(...) | T | main.rs:2183:5:2184:14 | S2 | -| main.rs:2214:13:2214:14 | x6 | | main.rs:2202:5:2202:27 | S4 | -| main.rs:2214:13:2214:14 | x6 | T4 | main.rs:2183:5:2184:14 | S2 | -| main.rs:2214:18:2214:45 | S4::<...>(...) | | main.rs:2202:5:2202:27 | S4 | -| main.rs:2214:18:2214:45 | S4::<...>(...) | T4 | main.rs:2183:5:2184:14 | S2 | -| main.rs:2214:27:2214:44 | ...::default(...) | | {EXTERNAL LOCATION} | trait Default | -| main.rs:2214:27:2214:44 | ...::default(...) | | main.rs:2183:5:2184:14 | S2 | -| main.rs:2215:13:2215:14 | x7 | | main.rs:2202:5:2202:27 | S4 | -| main.rs:2215:13:2215:14 | x7 | T4 | main.rs:2183:5:2184:14 | S2 | -| main.rs:2215:18:2215:23 | S4(...) | | main.rs:2202:5:2202:27 | S4 | -| main.rs:2215:18:2215:23 | S4(...) | T4 | main.rs:2183:5:2184:14 | S2 | -| main.rs:2215:21:2215:22 | S2 | | main.rs:2183:5:2184:14 | S2 | -| main.rs:2216:13:2216:14 | x8 | | main.rs:2202:5:2202:27 | S4 | -| main.rs:2216:13:2216:14 | x8 | T4 | {EXTERNAL LOCATION} | i32 | -| main.rs:2216:18:2216:22 | S4(...) | | main.rs:2202:5:2202:27 | S4 | -| main.rs:2216:18:2216:22 | S4(...) | T4 | {EXTERNAL LOCATION} | i32 | -| main.rs:2216:21:2216:21 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2217:13:2217:14 | x9 | | main.rs:2202:5:2202:27 | S4 | -| main.rs:2217:13:2217:14 | x9 | T4 | main.rs:2183:5:2184:14 | S2 | -| main.rs:2217:18:2217:34 | S4(...) | | main.rs:2202:5:2202:27 | S4 | -| main.rs:2217:18:2217:34 | S4(...) | T4 | main.rs:2183:5:2184:14 | S2 | -| main.rs:2217:21:2217:33 | ...::default(...) | | main.rs:2183:5:2184:14 | S2 | -| main.rs:2218:13:2218:15 | x10 | | main.rs:2204:5:2206:5 | S5 | -| main.rs:2218:13:2218:15 | x10 | T5 | {EXTERNAL LOCATION} | trait Default | -| main.rs:2218:13:2218:15 | x10 | T5 | main.rs:2183:5:2184:14 | S2 | -| main.rs:2218:19:2221:9 | S5::<...> {...} | | main.rs:2204:5:2206:5 | S5 | -| main.rs:2218:19:2221:9 | S5::<...> {...} | T5 | {EXTERNAL LOCATION} | trait Default | -| main.rs:2218:19:2221:9 | S5::<...> {...} | T5 | main.rs:2183:5:2184:14 | S2 | -| main.rs:2220:20:2220:37 | ...::default(...) | | {EXTERNAL LOCATION} | trait Default | -| main.rs:2220:20:2220:37 | ...::default(...) | | main.rs:2183:5:2184:14 | S2 | -| main.rs:2222:13:2222:15 | x11 | | main.rs:2204:5:2206:5 | S5 | -| main.rs:2222:13:2222:15 | x11 | T5 | main.rs:2183:5:2184:14 | S2 | -| main.rs:2222:19:2222:34 | S5 {...} | | main.rs:2204:5:2206:5 | S5 | -| main.rs:2222:19:2222:34 | S5 {...} | T5 | main.rs:2183:5:2184:14 | S2 | -| main.rs:2222:31:2222:32 | S2 | | main.rs:2183:5:2184:14 | S2 | -| main.rs:2223:13:2223:15 | x12 | | main.rs:2204:5:2206:5 | S5 | -| main.rs:2223:13:2223:15 | x12 | T5 | {EXTERNAL LOCATION} | i32 | -| main.rs:2223:19:2223:33 | S5 {...} | | main.rs:2204:5:2206:5 | S5 | -| main.rs:2223:19:2223:33 | S5 {...} | T5 | {EXTERNAL LOCATION} | i32 | -| main.rs:2223:31:2223:31 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2224:13:2224:15 | x13 | | main.rs:2204:5:2206:5 | S5 | -| main.rs:2224:13:2224:15 | x13 | T5 | main.rs:2183:5:2184:14 | S2 | -| main.rs:2224:19:2227:9 | S5 {...} | | main.rs:2204:5:2206:5 | S5 | -| main.rs:2224:19:2227:9 | S5 {...} | T5 | main.rs:2183:5:2184:14 | S2 | -| main.rs:2226:20:2226:32 | ...::default(...) | | main.rs:2183:5:2184:14 | S2 | -| main.rs:2236:14:2236:18 | S1 {...} | | main.rs:2232:5:2232:16 | S1 | -| main.rs:2236:21:2236:25 | S1 {...} | | main.rs:2232:5:2232:16 | S1 | -| main.rs:2238:16:2238:19 | SelfParam | | main.rs:2232:5:2232:16 | S1 | -| main.rs:2261:5:2261:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2262:5:2262:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2262:20:2262:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2262:41:2262:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2278:5:2278:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future | -| main.rs:2290:44:2309:5 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:2291:13:2291:17 | value | | {EXTERNAL LOCATION} | Option | -| main.rs:2291:13:2291:17 | value | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2291:21:2291:28 | Some(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2291:21:2291:28 | Some(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2291:26:2291:27 | 42 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2292:29:2292:33 | value | | {EXTERNAL LOCATION} | Option | -| main.rs:2292:29:2292:33 | value | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2294:22:2294:29 | "{mesg}\\n" | | file://:0:0:0:0 | & | -| main.rs:2294:22:2294:29 | "{mesg}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2296:15:2296:19 | value | | {EXTERNAL LOCATION} | Option | -| main.rs:2296:15:2296:19 | value | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2299:26:2299:33 | "{mesg}\\n" | | file://:0:0:0:0 | & | -| main.rs:2299:26:2299:33 | "{mesg}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2303:13:2303:16 | mesg | | {EXTERNAL LOCATION} | i32 | -| main.rs:2303:20:2303:24 | value | | {EXTERNAL LOCATION} | Option | -| main.rs:2303:20:2303:24 | value | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2303:20:2303:33 | value.unwrap() | | {EXTERNAL LOCATION} | i32 | -| main.rs:2304:13:2304:16 | mesg | | {EXTERNAL LOCATION} | i32 | -| main.rs:2304:20:2304:23 | mesg | | {EXTERNAL LOCATION} | i32 | -| main.rs:2305:18:2305:25 | "{mesg}\\n" | | file://:0:0:0:0 | & | -| main.rs:2305:18:2305:25 | "{mesg}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2305:20:2305:23 | mesg | | {EXTERNAL LOCATION} | i32 | -| main.rs:2306:13:2306:16 | mesg | | {EXTERNAL LOCATION} | i32 | -| main.rs:2306:20:2306:24 | value | | {EXTERNAL LOCATION} | Option | -| main.rs:2306:20:2306:24 | value | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2306:20:2306:25 | TryExpr | | {EXTERNAL LOCATION} | i32 | -| main.rs:2307:18:2307:25 | "{mesg}\\n" | | file://:0:0:0:0 | & | -| main.rs:2307:18:2307:25 | "{mesg}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2307:20:2307:23 | mesg | | {EXTERNAL LOCATION} | i32 | -| main.rs:2308:9:2308:12 | None | | {EXTERNAL LOCATION} | Option | +| main.rs:2047:20:2047:24 | value | | main.rs:2045:18:2045:18 | T | +| main.rs:2052:20:2052:24 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2052:40:2054:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2053:13:2053:17 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2059:20:2059:24 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2059:41:2061:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2059:41:2061:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2060:13:2060:37 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | +| main.rs:2060:13:2060:37 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | +| main.rs:2060:16:2060:20 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2060:22:2060:26 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2060:22:2060:26 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2060:24:2060:24 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2060:24:2060:24 | 1 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2060:33:2060:37 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2060:33:2060:37 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2060:35:2060:35 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2060:35:2060:35 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2066:21:2066:25 | value | | main.rs:2064:19:2064:19 | T | +| main.rs:2066:31:2066:31 | x | | main.rs:2064:5:2067:5 | Self [trait MyFrom2] | +| main.rs:2071:21:2071:25 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2071:33:2071:33 | _ | | {EXTERNAL LOCATION} | i64 | +| main.rs:2072:13:2072:17 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2078:21:2078:25 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2078:34:2078:34 | _ | | {EXTERNAL LOCATION} | i64 | +| main.rs:2079:13:2083:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | +| main.rs:2079:16:2079:20 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2079:22:2081:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2080:17:2080:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2081:20:2083:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2082:17:2082:17 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2089:15:2089:15 | x | | main.rs:2087:5:2093:5 | Self [trait MySelfTrait] | +| main.rs:2092:15:2092:15 | x | | main.rs:2087:5:2093:5 | Self [trait MySelfTrait] | +| main.rs:2097:15:2097:15 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2097:31:2099:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2098:13:2098:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2098:13:2098:17 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2098:17:2098:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2102:15:2102:15 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2102:32:2104:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2103:13:2103:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2103:13:2103:17 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2103:17:2103:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2109:15:2109:15 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:2109:31:2111:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2109:31:2111:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2110:13:2110:13 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2110:13:2110:13 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2114:15:2114:15 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:2114:32:2116:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:2115:13:2115:13 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:2120:13:2120:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2120:13:2120:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2120:22:2120:23 | 73 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2120:22:2120:23 | 73 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2121:9:2121:9 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2121:9:2121:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2121:9:2121:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2121:18:2121:21 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2122:9:2122:9 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2122:9:2122:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2122:9:2122:23 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2122:18:2122:22 | &5i64 | | file://:0:0:0:0 | & | +| main.rs:2122:18:2122:22 | &5i64 | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:2122:19:2122:22 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2123:9:2123:9 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2123:9:2123:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2123:9:2123:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2123:18:2123:21 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2125:9:2125:15 | S(...) | | main.rs:2013:5:2013:19 | S | +| main.rs:2125:9:2125:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | +| main.rs:2125:9:2125:31 | ... .my_add(...) | | main.rs:2013:5:2013:19 | S | +| main.rs:2125:11:2125:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2125:24:2125:30 | S(...) | | main.rs:2013:5:2013:19 | S | +| main.rs:2125:24:2125:30 | S(...) | T | {EXTERNAL LOCATION} | i64 | +| main.rs:2125:26:2125:29 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2126:9:2126:15 | S(...) | | main.rs:2013:5:2013:19 | S | +| main.rs:2126:9:2126:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | +| main.rs:2126:11:2126:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2126:24:2126:27 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2127:9:2127:15 | S(...) | | main.rs:2013:5:2013:19 | S | +| main.rs:2127:9:2127:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | +| main.rs:2127:9:2127:29 | ... .my_add(...) | | main.rs:2013:5:2013:19 | S | +| main.rs:2127:11:2127:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2127:24:2127:28 | &3i64 | | file://:0:0:0:0 | & | +| main.rs:2127:24:2127:28 | &3i64 | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:2127:25:2127:28 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2129:13:2129:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2129:17:2129:35 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2129:30:2129:34 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2130:13:2130:13 | y | | {EXTERNAL LOCATION} | i64 | +| main.rs:2130:17:2130:34 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2130:30:2130:33 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2131:13:2131:13 | z | | {EXTERNAL LOCATION} | i64 | +| main.rs:2131:22:2131:43 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2131:38:2131:42 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2132:23:2132:27 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2132:30:2132:33 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2133:23:2133:26 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2133:29:2133:32 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2134:27:2134:31 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2134:34:2134:37 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2136:9:2136:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2136:17:2136:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2137:9:2137:22 | ...::f2(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2137:17:2137:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2138:9:2138:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2138:18:2138:21 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2139:9:2139:22 | ...::f2(...) | | {EXTERNAL LOCATION} | bool | +| main.rs:2139:18:2139:21 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2140:9:2140:30 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2140:25:2140:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2141:9:2141:30 | ...::f2(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2141:25:2141:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2142:9:2142:29 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2142:25:2142:28 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2143:9:2143:29 | ...::f2(...) | | {EXTERNAL LOCATION} | bool | +| main.rs:2143:25:2143:28 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2151:26:2153:9 | { ... } | | main.rs:2148:5:2148:24 | MyCallable | +| main.rs:2152:13:2152:25 | MyCallable {...} | | main.rs:2148:5:2148:24 | MyCallable | +| main.rs:2155:17:2155:21 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2155:17:2155:21 | SelfParam | &T | main.rs:2148:5:2148:24 | MyCallable | +| main.rs:2155:31:2157:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2155:31:2157:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2156:13:2156:13 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2156:13:2156:13 | 1 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2163:13:2163:13 | i | | {EXTERNAL LOCATION} | i32 | +| main.rs:2163:18:2163:26 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2163:18:2163:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2163:19:2163:19 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2163:22:2163:22 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2163:25:2163:25 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2164:18:2164:26 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2164:18:2164:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2164:18:2164:41 | ... .map(...) | | file://:0:0:0:0 | [] | +| main.rs:2164:19:2164:19 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2164:22:2164:22 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2164:25:2164:25 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2164:40:2164:40 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2165:18:2165:26 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2165:18:2165:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2165:19:2165:19 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2165:22:2165:22 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2165:25:2165:25 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2167:13:2167:17 | vals1 | | file://:0:0:0:0 | [] | +| main.rs:2167:13:2167:17 | vals1 | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2167:13:2167:17 | vals1 | [T;...] | {EXTERNAL LOCATION} | u8 | +| main.rs:2167:21:2167:31 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2167:21:2167:31 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2167:21:2167:31 | [...] | [T;...] | {EXTERNAL LOCATION} | u8 | +| main.rs:2167:22:2167:24 | 1u8 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2167:22:2167:24 | 1u8 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2167:27:2167:27 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2167:27:2167:27 | 2 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2167:30:2167:30 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2167:30:2167:30 | 3 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2168:13:2168:13 | u | | {EXTERNAL LOCATION} | i32 | +| main.rs:2168:13:2168:13 | u | | {EXTERNAL LOCATION} | u8 | +| main.rs:2168:18:2168:22 | vals1 | | file://:0:0:0:0 | [] | +| main.rs:2168:18:2168:22 | vals1 | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2168:18:2168:22 | vals1 | [T;...] | {EXTERNAL LOCATION} | u8 | +| main.rs:2170:13:2170:17 | vals2 | | file://:0:0:0:0 | [] | +| main.rs:2170:13:2170:17 | vals2 | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2170:21:2170:29 | [1u16; 3] | | file://:0:0:0:0 | [] | +| main.rs:2170:21:2170:29 | [1u16; 3] | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2170:22:2170:25 | 1u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2170:28:2170:28 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2171:13:2171:13 | u | | {EXTERNAL LOCATION} | u16 | +| main.rs:2171:18:2171:22 | vals2 | | file://:0:0:0:0 | [] | +| main.rs:2171:18:2171:22 | vals2 | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2173:13:2173:17 | vals3 | | file://:0:0:0:0 | [] | +| main.rs:2173:13:2173:17 | vals3 | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2173:13:2173:17 | vals3 | [T;...] | {EXTERNAL LOCATION} | u32 | +| main.rs:2173:26:2173:26 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2173:31:2173:39 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2173:31:2173:39 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2173:31:2173:39 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | +| main.rs:2173:32:2173:32 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2173:32:2173:32 | 1 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2173:35:2173:35 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2173:35:2173:35 | 2 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2173:38:2173:38 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2173:38:2173:38 | 3 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2174:13:2174:13 | u | | {EXTERNAL LOCATION} | i32 | +| main.rs:2174:13:2174:13 | u | | {EXTERNAL LOCATION} | u32 | +| main.rs:2174:18:2174:22 | vals3 | | file://:0:0:0:0 | [] | +| main.rs:2174:18:2174:22 | vals3 | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2174:18:2174:22 | vals3 | [T;...] | {EXTERNAL LOCATION} | u32 | +| main.rs:2176:13:2176:17 | vals4 | | file://:0:0:0:0 | [] | +| main.rs:2176:13:2176:17 | vals4 | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2176:13:2176:17 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | +| main.rs:2176:26:2176:26 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2176:31:2176:36 | [1; 3] | | file://:0:0:0:0 | [] | +| main.rs:2176:31:2176:36 | [1; 3] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2176:31:2176:36 | [1; 3] | [T;...] | {EXTERNAL LOCATION} | u64 | +| main.rs:2176:32:2176:32 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2176:32:2176:32 | 1 | | {EXTERNAL LOCATION} | u64 | +| main.rs:2176:35:2176:35 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2177:13:2177:13 | u | | {EXTERNAL LOCATION} | i32 | +| main.rs:2177:13:2177:13 | u | | {EXTERNAL LOCATION} | u64 | +| main.rs:2177:18:2177:22 | vals4 | | file://:0:0:0:0 | [] | +| main.rs:2177:18:2177:22 | vals4 | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2177:18:2177:22 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | +| main.rs:2179:13:2179:24 | mut strings1 | | file://:0:0:0:0 | [] | +| main.rs:2179:13:2179:24 | mut strings1 | [T;...] | file://:0:0:0:0 | & | +| main.rs:2179:13:2179:24 | mut strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2179:28:2179:48 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2179:28:2179:48 | [...] | [T;...] | file://:0:0:0:0 | & | +| main.rs:2179:28:2179:48 | [...] | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2179:29:2179:33 | "foo" | | file://:0:0:0:0 | & | +| main.rs:2179:29:2179:33 | "foo" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2179:36:2179:40 | "bar" | | file://:0:0:0:0 | & | +| main.rs:2179:36:2179:40 | "bar" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2179:43:2179:47 | "baz" | | file://:0:0:0:0 | & | +| main.rs:2179:43:2179:47 | "baz" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2180:13:2180:13 | s | | {EXTERNAL LOCATION} | Item | +| main.rs:2180:13:2180:13 | s | | file://:0:0:0:0 | & | +| main.rs:2180:13:2180:13 | s | &T | file://:0:0:0:0 | & | +| main.rs:2180:13:2180:13 | s | &T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2180:18:2180:26 | &strings1 | | file://:0:0:0:0 | & | +| main.rs:2180:18:2180:26 | &strings1 | &T | file://:0:0:0:0 | [] | +| main.rs:2180:18:2180:26 | &strings1 | &T.[T;...] | file://:0:0:0:0 | & | +| main.rs:2180:18:2180:26 | &strings1 | &T.[T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2180:19:2180:26 | strings1 | | file://:0:0:0:0 | [] | +| main.rs:2180:19:2180:26 | strings1 | [T;...] | file://:0:0:0:0 | & | +| main.rs:2180:19:2180:26 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2181:13:2181:13 | s | | {EXTERNAL LOCATION} | Item | +| main.rs:2181:13:2181:13 | s | | file://:0:0:0:0 | & | +| main.rs:2181:13:2181:13 | s | &T | file://:0:0:0:0 | & | +| main.rs:2181:13:2181:13 | s | &T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2181:18:2181:30 | &mut strings1 | | file://:0:0:0:0 | & | +| main.rs:2181:18:2181:30 | &mut strings1 | &T | file://:0:0:0:0 | [] | +| main.rs:2181:18:2181:30 | &mut strings1 | &T.[T;...] | file://:0:0:0:0 | & | +| main.rs:2181:18:2181:30 | &mut strings1 | &T.[T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2181:23:2181:30 | strings1 | | file://:0:0:0:0 | [] | +| main.rs:2181:23:2181:30 | strings1 | [T;...] | file://:0:0:0:0 | & | +| main.rs:2181:23:2181:30 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2182:13:2182:13 | s | | file://:0:0:0:0 | & | +| main.rs:2182:13:2182:13 | s | &T | {EXTERNAL LOCATION} | str | +| main.rs:2182:18:2182:25 | strings1 | | file://:0:0:0:0 | [] | +| main.rs:2182:18:2182:25 | strings1 | [T;...] | file://:0:0:0:0 | & | +| main.rs:2182:18:2182:25 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2184:13:2184:20 | strings2 | | file://:0:0:0:0 | [] | +| main.rs:2184:13:2184:20 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2185:9:2189:9 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2185:9:2189:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2186:13:2186:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2186:26:2186:30 | "foo" | | file://:0:0:0:0 | & | +| main.rs:2186:26:2186:30 | "foo" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2187:13:2187:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2187:26:2187:30 | "bar" | | file://:0:0:0:0 | & | +| main.rs:2187:26:2187:30 | "bar" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2188:13:2188:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2188:26:2188:30 | "baz" | | file://:0:0:0:0 | & | +| main.rs:2188:26:2188:30 | "baz" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2190:13:2190:13 | s | | {EXTERNAL LOCATION} | String | +| main.rs:2190:18:2190:25 | strings2 | | file://:0:0:0:0 | [] | +| main.rs:2190:18:2190:25 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2192:13:2192:20 | strings3 | | file://:0:0:0:0 | & | +| main.rs:2192:13:2192:20 | strings3 | &T | file://:0:0:0:0 | [] | +| main.rs:2192:13:2192:20 | strings3 | &T.[T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2193:9:2197:9 | &... | | file://:0:0:0:0 | & | +| main.rs:2193:9:2197:9 | &... | &T | file://:0:0:0:0 | [] | +| main.rs:2193:9:2197:9 | &... | &T.[T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2193:10:2197:9 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2193:10:2197:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2194:13:2194:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2194:26:2194:30 | "foo" | | file://:0:0:0:0 | & | +| main.rs:2194:26:2194:30 | "foo" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2195:13:2195:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2195:26:2195:30 | "bar" | | file://:0:0:0:0 | & | +| main.rs:2195:26:2195:30 | "bar" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2196:13:2196:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2196:26:2196:30 | "baz" | | file://:0:0:0:0 | & | +| main.rs:2196:26:2196:30 | "baz" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2198:13:2198:13 | s | | {EXTERNAL LOCATION} | Item | +| main.rs:2198:13:2198:13 | s | | file://:0:0:0:0 | & | +| main.rs:2198:13:2198:13 | s | &T | {EXTERNAL LOCATION} | String | +| main.rs:2198:18:2198:25 | strings3 | | file://:0:0:0:0 | & | +| main.rs:2198:18:2198:25 | strings3 | &T | file://:0:0:0:0 | [] | +| main.rs:2198:18:2198:25 | strings3 | &T.[T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2200:13:2200:21 | callables | | file://:0:0:0:0 | [] | +| main.rs:2200:13:2200:21 | callables | [T;...] | main.rs:2148:5:2148:24 | MyCallable | +| main.rs:2200:25:2200:81 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2200:25:2200:81 | [...] | [T;...] | main.rs:2148:5:2148:24 | MyCallable | +| main.rs:2200:26:2200:42 | ...::new(...) | | main.rs:2148:5:2148:24 | MyCallable | +| main.rs:2200:45:2200:61 | ...::new(...) | | main.rs:2148:5:2148:24 | MyCallable | +| main.rs:2200:64:2200:80 | ...::new(...) | | main.rs:2148:5:2148:24 | MyCallable | +| main.rs:2201:13:2201:13 | c | | main.rs:2148:5:2148:24 | MyCallable | +| main.rs:2202:12:2202:20 | callables | | file://:0:0:0:0 | [] | +| main.rs:2202:12:2202:20 | callables | [T;...] | main.rs:2148:5:2148:24 | MyCallable | +| main.rs:2204:17:2204:22 | result | | {EXTERNAL LOCATION} | i64 | +| main.rs:2204:26:2204:26 | c | | main.rs:2148:5:2148:24 | MyCallable | +| main.rs:2204:26:2204:33 | c.call() | | {EXTERNAL LOCATION} | i64 | +| main.rs:2209:13:2209:13 | i | | {EXTERNAL LOCATION} | Item | +| main.rs:2209:13:2209:13 | i | | {EXTERNAL LOCATION} | i32 | +| main.rs:2209:18:2209:18 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2209:18:2209:22 | 0..10 | | {EXTERNAL LOCATION} | Range | +| main.rs:2209:18:2209:22 | 0..10 | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2209:21:2209:22 | 10 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2210:13:2210:13 | u | | {EXTERNAL LOCATION} | Range | +| main.rs:2210:13:2210:13 | u | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2210:13:2210:13 | u | Idx | {EXTERNAL LOCATION} | u8 | +| main.rs:2210:18:2210:26 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2210:18:2210:26 | [...] | [T;...] | {EXTERNAL LOCATION} | Range | +| main.rs:2210:18:2210:26 | [...] | [T;...].Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2210:18:2210:26 | [...] | [T;...].Idx | {EXTERNAL LOCATION} | u8 | +| main.rs:2210:19:2210:21 | 0u8 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2210:19:2210:21 | 0u8 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2210:19:2210:25 | 0u8..10 | | {EXTERNAL LOCATION} | Range | +| main.rs:2210:19:2210:25 | 0u8..10 | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2210:19:2210:25 | 0u8..10 | Idx | {EXTERNAL LOCATION} | u8 | +| main.rs:2210:24:2210:25 | 10 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2210:24:2210:25 | 10 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2211:13:2211:17 | range | | {EXTERNAL LOCATION} | Range | +| main.rs:2211:13:2211:17 | range | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2211:21:2211:21 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2211:21:2211:25 | 0..10 | | {EXTERNAL LOCATION} | Range | +| main.rs:2211:21:2211:25 | 0..10 | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2211:24:2211:25 | 10 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2212:13:2212:13 | i | | {EXTERNAL LOCATION} | Item | +| main.rs:2212:13:2212:13 | i | | {EXTERNAL LOCATION} | i32 | +| main.rs:2212:18:2212:22 | range | | {EXTERNAL LOCATION} | Range | +| main.rs:2212:18:2212:22 | range | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2214:13:2214:18 | range1 | | {EXTERNAL LOCATION} | Range | +| main.rs:2214:13:2214:18 | range1 | Idx | {EXTERNAL LOCATION} | u16 | +| main.rs:2215:9:2218:9 | ...::Range {...} | | {EXTERNAL LOCATION} | Range | +| main.rs:2215:9:2218:9 | ...::Range {...} | Idx | {EXTERNAL LOCATION} | u16 | +| main.rs:2216:20:2216:23 | 0u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2217:18:2217:22 | 10u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2219:13:2219:13 | u | | {EXTERNAL LOCATION} | Item | +| main.rs:2219:13:2219:13 | u | | {EXTERNAL LOCATION} | u16 | +| main.rs:2219:18:2219:23 | range1 | | {EXTERNAL LOCATION} | Range | +| main.rs:2219:18:2219:23 | range1 | Idx | {EXTERNAL LOCATION} | u16 | +| main.rs:2223:26:2223:26 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2223:29:2223:29 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2223:32:2223:32 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2226:13:2226:18 | vals4a | | {EXTERNAL LOCATION} | Vec | +| main.rs:2226:13:2226:18 | vals4a | A | {EXTERNAL LOCATION} | Global | +| main.rs:2226:13:2226:18 | vals4a | T | {EXTERNAL LOCATION} | u16 | +| main.rs:2226:32:2226:43 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2226:32:2226:43 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2226:32:2226:43 | [...] | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2226:32:2226:52 | ... .to_vec() | | {EXTERNAL LOCATION} | Vec | +| main.rs:2226:32:2226:52 | ... .to_vec() | A | {EXTERNAL LOCATION} | Global | +| main.rs:2226:32:2226:52 | ... .to_vec() | T | {EXTERNAL LOCATION} | u16 | +| main.rs:2226:33:2226:36 | 1u16 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2226:33:2226:36 | 1u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2226:39:2226:39 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2226:39:2226:39 | 2 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2226:42:2226:42 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2226:42:2226:42 | 3 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2227:13:2227:13 | u | | {EXTERNAL LOCATION} | Vec | +| main.rs:2227:13:2227:13 | u | | {EXTERNAL LOCATION} | u16 | +| main.rs:2227:13:2227:13 | u | | file://:0:0:0:0 | & | +| main.rs:2227:13:2227:13 | u | A | {EXTERNAL LOCATION} | Global | +| main.rs:2227:13:2227:13 | u | T | {EXTERNAL LOCATION} | u16 | +| main.rs:2227:18:2227:23 | vals4a | | {EXTERNAL LOCATION} | Vec | +| main.rs:2227:18:2227:23 | vals4a | A | {EXTERNAL LOCATION} | Global | +| main.rs:2227:18:2227:23 | vals4a | T | {EXTERNAL LOCATION} | u16 | +| main.rs:2229:22:2229:33 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2229:22:2229:33 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2229:22:2229:33 | [...] | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2229:23:2229:26 | 1u16 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2229:23:2229:26 | 1u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2229:29:2229:29 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2229:29:2229:29 | 2 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2229:32:2229:32 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2229:32:2229:32 | 3 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2232:13:2232:17 | vals5 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2232:13:2232:17 | vals5 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2232:21:2232:43 | ...::from(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2232:21:2232:43 | ...::from(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2232:31:2232:42 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2232:31:2232:42 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2232:31:2232:42 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | +| main.rs:2232:32:2232:35 | 1u32 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2232:32:2232:35 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2232:38:2232:38 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2232:38:2232:38 | 2 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2232:41:2232:41 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2232:41:2232:41 | 3 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2233:13:2233:13 | u | | {EXTERNAL LOCATION} | Vec | +| main.rs:2233:13:2233:13 | u | | file://:0:0:0:0 | & | +| main.rs:2233:13:2233:13 | u | A | {EXTERNAL LOCATION} | Global | +| main.rs:2233:18:2233:22 | vals5 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2233:18:2233:22 | vals5 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2235:13:2235:17 | vals6 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2235:13:2235:17 | vals6 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2235:13:2235:17 | vals6 | T | file://:0:0:0:0 | & | +| main.rs:2235:13:2235:17 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 | +| main.rs:2235:32:2235:43 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2235:32:2235:43 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2235:32:2235:43 | [...] | [T;...] | {EXTERNAL LOCATION} | u64 | +| main.rs:2235:32:2235:60 | ... .collect() | | {EXTERNAL LOCATION} | Vec | +| main.rs:2235:32:2235:60 | ... .collect() | A | {EXTERNAL LOCATION} | Global | +| main.rs:2235:32:2235:60 | ... .collect() | T | file://:0:0:0:0 | & | +| main.rs:2235:32:2235:60 | ... .collect() | T.&T | {EXTERNAL LOCATION} | u64 | +| main.rs:2235:33:2235:36 | 1u64 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2235:33:2235:36 | 1u64 | | {EXTERNAL LOCATION} | u64 | +| main.rs:2235:39:2235:39 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2235:39:2235:39 | 2 | | {EXTERNAL LOCATION} | u64 | +| main.rs:2235:42:2235:42 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2235:42:2235:42 | 3 | | {EXTERNAL LOCATION} | u64 | +| main.rs:2236:13:2236:13 | u | | {EXTERNAL LOCATION} | Vec | +| main.rs:2236:13:2236:13 | u | | file://:0:0:0:0 | & | +| main.rs:2236:13:2236:13 | u | &T | {EXTERNAL LOCATION} | u64 | +| main.rs:2236:13:2236:13 | u | A | {EXTERNAL LOCATION} | Global | +| main.rs:2236:13:2236:13 | u | T | file://:0:0:0:0 | & | +| main.rs:2236:13:2236:13 | u | T.&T | {EXTERNAL LOCATION} | u64 | +| main.rs:2236:18:2236:22 | vals6 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2236:18:2236:22 | vals6 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2236:18:2236:22 | vals6 | T | file://:0:0:0:0 | & | +| main.rs:2236:18:2236:22 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 | +| main.rs:2238:13:2238:21 | mut vals7 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2238:13:2238:21 | mut vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2238:25:2238:34 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2238:25:2238:34 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2239:9:2239:13 | vals7 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2239:9:2239:13 | vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2239:20:2239:22 | 1u8 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2240:13:2240:13 | u | | {EXTERNAL LOCATION} | Vec | +| main.rs:2240:13:2240:13 | u | | file://:0:0:0:0 | & | +| main.rs:2240:13:2240:13 | u | A | {EXTERNAL LOCATION} | Global | +| main.rs:2240:18:2240:22 | vals7 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2240:18:2240:22 | vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2242:33:2242:33 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2242:36:2242:36 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2242:45:2242:45 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2242:48:2242:48 | 4 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2249:13:2249:20 | mut map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2249:13:2249:20 | mut map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2249:24:2249:55 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2249:24:2249:55 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2250:9:2250:12 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2250:9:2250:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2250:9:2250:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2250:21:2250:21 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2250:24:2250:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2250:24:2250:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2250:33:2250:37 | "one" | | file://:0:0:0:0 | & | +| main.rs:2250:33:2250:37 | "one" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2251:9:2251:12 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2251:9:2251:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2251:9:2251:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2251:21:2251:21 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2251:24:2251:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2251:24:2251:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2251:33:2251:37 | "two" | | file://:0:0:0:0 | & | +| main.rs:2251:33:2251:37 | "two" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2252:13:2252:15 | key | | {EXTERNAL LOCATION} | Item | +| main.rs:2252:13:2252:15 | key | | file://:0:0:0:0 | & | +| main.rs:2252:20:2252:23 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2252:20:2252:23 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2252:20:2252:30 | map1.keys() | | {EXTERNAL LOCATION} | Keys | +| main.rs:2253:13:2253:17 | value | | {EXTERNAL LOCATION} | Item | +| main.rs:2253:13:2253:17 | value | | file://:0:0:0:0 | & | +| main.rs:2253:22:2253:25 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2253:22:2253:25 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2253:22:2253:34 | map1.values() | | {EXTERNAL LOCATION} | Values | +| main.rs:2254:13:2254:24 | TuplePat | | {EXTERNAL LOCATION} | Item | +| main.rs:2254:29:2254:32 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2254:29:2254:32 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2254:29:2254:39 | map1.iter() | | {EXTERNAL LOCATION} | Iter | +| main.rs:2255:13:2255:24 | TuplePat | | {EXTERNAL LOCATION} | Item | +| main.rs:2255:29:2255:33 | &map1 | | file://:0:0:0:0 | & | +| main.rs:2255:29:2255:33 | &map1 | &T | {EXTERNAL LOCATION} | HashMap | +| main.rs:2255:29:2255:33 | &map1 | &T.S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2255:30:2255:33 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2255:30:2255:33 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2259:13:2259:17 | mut a | | {EXTERNAL LOCATION} | i32 | +| main.rs:2259:13:2259:17 | mut a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2259:26:2259:26 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2259:26:2259:26 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2261:23:2261:23 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:2261:23:2261:23 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2261:23:2261:28 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2261:27:2261:28 | 10 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2263:13:2263:13 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:2263:13:2263:13 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2263:13:2263:18 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:2263:18:2263:18 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2277:40:2279:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| main.rs:2277:40:2279:9 | { ... } | T | main.rs:2271:5:2271:20 | S1 | +| main.rs:2277:40:2279:9 | { ... } | T.T | main.rs:2276:10:2276:19 | T | +| main.rs:2278:13:2278:16 | None | | {EXTERNAL LOCATION} | Option | +| main.rs:2278:13:2278:16 | None | T | main.rs:2271:5:2271:20 | S1 | +| main.rs:2278:13:2278:16 | None | T.T | main.rs:2276:10:2276:19 | T | +| main.rs:2281:30:2283:9 | { ... } | | main.rs:2271:5:2271:20 | S1 | +| main.rs:2281:30:2283:9 | { ... } | T | main.rs:2276:10:2276:19 | T | +| main.rs:2282:13:2282:28 | S1(...) | | main.rs:2271:5:2271:20 | S1 | +| main.rs:2282:13:2282:28 | S1(...) | T | main.rs:2276:10:2276:19 | T | +| main.rs:2282:16:2282:27 | ...::default(...) | | main.rs:2276:10:2276:19 | T | +| main.rs:2285:19:2285:22 | SelfParam | | main.rs:2271:5:2271:20 | S1 | +| main.rs:2285:19:2285:22 | SelfParam | T | main.rs:2276:10:2276:19 | T | +| main.rs:2285:33:2287:9 | { ... } | | main.rs:2271:5:2271:20 | S1 | +| main.rs:2285:33:2287:9 | { ... } | T | main.rs:2276:10:2276:19 | T | +| main.rs:2286:13:2286:16 | self | | main.rs:2271:5:2271:20 | S1 | +| main.rs:2286:13:2286:16 | self | T | main.rs:2276:10:2276:19 | T | +| main.rs:2299:13:2299:14 | x1 | | {EXTERNAL LOCATION} | Option | +| main.rs:2299:13:2299:14 | x1 | T | main.rs:2271:5:2271:20 | S1 | +| main.rs:2299:13:2299:14 | x1 | T.T | main.rs:2273:5:2274:14 | S2 | +| main.rs:2299:34:2299:48 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2299:34:2299:48 | ...::assoc_fun(...) | T | main.rs:2271:5:2271:20 | S1 | +| main.rs:2299:34:2299:48 | ...::assoc_fun(...) | T.T | main.rs:2273:5:2274:14 | S2 | +| main.rs:2300:13:2300:14 | x2 | | {EXTERNAL LOCATION} | Option | +| main.rs:2300:13:2300:14 | x2 | T | main.rs:2271:5:2271:20 | S1 | +| main.rs:2300:13:2300:14 | x2 | T.T | main.rs:2273:5:2274:14 | S2 | +| main.rs:2300:18:2300:38 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2300:18:2300:38 | ...::assoc_fun(...) | T | main.rs:2271:5:2271:20 | S1 | +| main.rs:2300:18:2300:38 | ...::assoc_fun(...) | T.T | main.rs:2273:5:2274:14 | S2 | +| main.rs:2301:13:2301:14 | x3 | | {EXTERNAL LOCATION} | Option | +| main.rs:2301:13:2301:14 | x3 | T | main.rs:2271:5:2271:20 | S1 | +| main.rs:2301:13:2301:14 | x3 | T.T | main.rs:2273:5:2274:14 | S2 | +| main.rs:2301:18:2301:32 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2301:18:2301:32 | ...::assoc_fun(...) | T | main.rs:2271:5:2271:20 | S1 | +| main.rs:2301:18:2301:32 | ...::assoc_fun(...) | T.T | main.rs:2273:5:2274:14 | S2 | +| main.rs:2302:13:2302:14 | x4 | | main.rs:2271:5:2271:20 | S1 | +| main.rs:2302:13:2302:14 | x4 | T | main.rs:2273:5:2274:14 | S2 | +| main.rs:2302:18:2302:48 | ...::method(...) | | main.rs:2271:5:2271:20 | S1 | +| main.rs:2302:18:2302:48 | ...::method(...) | T | main.rs:2273:5:2274:14 | S2 | +| main.rs:2302:35:2302:47 | ...::default(...) | | main.rs:2271:5:2271:20 | S1 | +| main.rs:2302:35:2302:47 | ...::default(...) | T | main.rs:2273:5:2274:14 | S2 | +| main.rs:2303:13:2303:14 | x5 | | main.rs:2271:5:2271:20 | S1 | +| main.rs:2303:13:2303:14 | x5 | T | main.rs:2273:5:2274:14 | S2 | +| main.rs:2303:18:2303:42 | ...::method(...) | | main.rs:2271:5:2271:20 | S1 | +| main.rs:2303:18:2303:42 | ...::method(...) | T | main.rs:2273:5:2274:14 | S2 | +| main.rs:2303:29:2303:41 | ...::default(...) | | main.rs:2271:5:2271:20 | S1 | +| main.rs:2303:29:2303:41 | ...::default(...) | T | main.rs:2273:5:2274:14 | S2 | +| main.rs:2304:13:2304:14 | x6 | | main.rs:2292:5:2292:27 | S4 | +| main.rs:2304:13:2304:14 | x6 | T4 | main.rs:2273:5:2274:14 | S2 | +| main.rs:2304:18:2304:45 | S4::<...>(...) | | main.rs:2292:5:2292:27 | S4 | +| main.rs:2304:18:2304:45 | S4::<...>(...) | T4 | main.rs:2273:5:2274:14 | S2 | +| main.rs:2304:27:2304:44 | ...::default(...) | | main.rs:2273:5:2274:14 | S2 | +| main.rs:2305:13:2305:14 | x7 | | main.rs:2292:5:2292:27 | S4 | +| main.rs:2305:13:2305:14 | x7 | T4 | main.rs:2273:5:2274:14 | S2 | +| main.rs:2305:18:2305:23 | S4(...) | | main.rs:2292:5:2292:27 | S4 | +| main.rs:2305:18:2305:23 | S4(...) | T4 | main.rs:2273:5:2274:14 | S2 | +| main.rs:2305:21:2305:22 | S2 | | main.rs:2273:5:2274:14 | S2 | +| main.rs:2306:13:2306:14 | x8 | | main.rs:2292:5:2292:27 | S4 | +| main.rs:2306:13:2306:14 | x8 | T4 | {EXTERNAL LOCATION} | i32 | +| main.rs:2306:18:2306:22 | S4(...) | | main.rs:2292:5:2292:27 | S4 | +| main.rs:2306:18:2306:22 | S4(...) | T4 | {EXTERNAL LOCATION} | i32 | +| main.rs:2306:21:2306:21 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2307:13:2307:14 | x9 | | main.rs:2292:5:2292:27 | S4 | +| main.rs:2307:13:2307:14 | x9 | T4 | main.rs:2273:5:2274:14 | S2 | +| main.rs:2307:18:2307:34 | S4(...) | | main.rs:2292:5:2292:27 | S4 | +| main.rs:2307:18:2307:34 | S4(...) | T4 | main.rs:2273:5:2274:14 | S2 | +| main.rs:2307:21:2307:33 | ...::default(...) | | main.rs:2273:5:2274:14 | S2 | +| main.rs:2308:13:2308:15 | x10 | | main.rs:2294:5:2296:5 | S5 | +| main.rs:2308:13:2308:15 | x10 | T5 | main.rs:2273:5:2274:14 | S2 | +| main.rs:2308:19:2311:9 | S5::<...> {...} | | main.rs:2294:5:2296:5 | S5 | +| main.rs:2308:19:2311:9 | S5::<...> {...} | T5 | main.rs:2273:5:2274:14 | S2 | +| main.rs:2310:20:2310:37 | ...::default(...) | | main.rs:2273:5:2274:14 | S2 | +| main.rs:2312:13:2312:15 | x11 | | main.rs:2294:5:2296:5 | S5 | +| main.rs:2312:13:2312:15 | x11 | T5 | main.rs:2273:5:2274:14 | S2 | +| main.rs:2312:19:2312:34 | S5 {...} | | main.rs:2294:5:2296:5 | S5 | +| main.rs:2312:19:2312:34 | S5 {...} | T5 | main.rs:2273:5:2274:14 | S2 | +| main.rs:2312:31:2312:32 | S2 | | main.rs:2273:5:2274:14 | S2 | +| main.rs:2313:13:2313:15 | x12 | | main.rs:2294:5:2296:5 | S5 | +| main.rs:2313:13:2313:15 | x12 | T5 | {EXTERNAL LOCATION} | i32 | +| main.rs:2313:19:2313:33 | S5 {...} | | main.rs:2294:5:2296:5 | S5 | +| main.rs:2313:19:2313:33 | S5 {...} | T5 | {EXTERNAL LOCATION} | i32 | +| main.rs:2313:31:2313:31 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2314:13:2314:15 | x13 | | main.rs:2294:5:2296:5 | S5 | +| main.rs:2314:13:2314:15 | x13 | T5 | main.rs:2273:5:2274:14 | S2 | +| main.rs:2314:19:2317:9 | S5 {...} | | main.rs:2294:5:2296:5 | S5 | +| main.rs:2314:19:2317:9 | S5 {...} | T5 | main.rs:2273:5:2274:14 | S2 | +| main.rs:2316:20:2316:32 | ...::default(...) | | main.rs:2273:5:2274:14 | S2 | +| main.rs:2326:14:2326:18 | S1 {...} | | main.rs:2322:5:2322:16 | S1 | +| main.rs:2326:21:2326:25 | S1 {...} | | main.rs:2322:5:2322:16 | S1 | +| main.rs:2328:16:2328:19 | SelfParam | | main.rs:2322:5:2322:16 | S1 | +| main.rs:2351:5:2351:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2352:5:2352:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2352:20:2352:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2352:41:2352:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2368:5:2368:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future | +| main.rs:2380:44:2399:5 | { ... } | | {EXTERNAL LOCATION} | Option | +| main.rs:2381:13:2381:17 | value | | {EXTERNAL LOCATION} | Option | +| main.rs:2381:13:2381:17 | value | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2381:21:2381:28 | Some(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2381:21:2381:28 | Some(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2381:26:2381:27 | 42 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2382:29:2382:33 | value | | {EXTERNAL LOCATION} | Option | +| main.rs:2382:29:2382:33 | value | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2384:22:2384:29 | "{mesg}\\n" | | file://:0:0:0:0 | & | +| main.rs:2384:22:2384:29 | "{mesg}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2386:15:2386:19 | value | | {EXTERNAL LOCATION} | Option | +| main.rs:2386:15:2386:19 | value | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2389:26:2389:33 | "{mesg}\\n" | | file://:0:0:0:0 | & | +| main.rs:2389:26:2389:33 | "{mesg}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2393:13:2393:16 | mesg | | {EXTERNAL LOCATION} | i32 | +| main.rs:2393:20:2393:24 | value | | {EXTERNAL LOCATION} | Option | +| main.rs:2393:20:2393:24 | value | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2393:20:2393:33 | value.unwrap() | | {EXTERNAL LOCATION} | i32 | +| main.rs:2394:13:2394:16 | mesg | | {EXTERNAL LOCATION} | i32 | +| main.rs:2394:20:2394:23 | mesg | | {EXTERNAL LOCATION} | i32 | +| main.rs:2395:18:2395:25 | "{mesg}\\n" | | file://:0:0:0:0 | & | +| main.rs:2395:18:2395:25 | "{mesg}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2395:20:2395:23 | mesg | | {EXTERNAL LOCATION} | i32 | +| main.rs:2396:13:2396:16 | mesg | | {EXTERNAL LOCATION} | i32 | +| main.rs:2396:20:2396:24 | value | | {EXTERNAL LOCATION} | Option | +| main.rs:2396:20:2396:24 | value | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2396:20:2396:25 | TryExpr | | {EXTERNAL LOCATION} | i32 | +| main.rs:2397:18:2397:25 | "{mesg}\\n" | | file://:0:0:0:0 | & | +| main.rs:2397:18:2397:25 | "{mesg}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2397:20:2397:23 | mesg | | {EXTERNAL LOCATION} | i32 | +| main.rs:2398:9:2398:12 | None | | {EXTERNAL LOCATION} | Option | testFailures diff --git a/rust/ql/test/query-tests/security/CWE-022/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-022/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index 6ad645852f2d..000000000000 --- a/rust/ql/test/query-tests/security/CWE-022/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,9 +0,0 @@ -multipleCallTargets -| src/main.rs:8:21:8:44 | ...::from(...) | -| src/main.rs:19:21:19:44 | ...::from(...) | -| src/main.rs:25:23:25:59 | ...::from(...) | -| src/main.rs:26:38:26:61 | ...::from(...) | -| src/main.rs:39:23:39:59 | ...::from(...) | -| src/main.rs:40:38:40:61 | ...::from(...) | -| src/main.rs:52:23:52:59 | ...::from(...) | -| src/main.rs:53:38:53:61 | ...::from(...) | diff --git a/rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected b/rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected index 60847b71b798..ecc607f7b3d9 100644 --- a/rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected +++ b/rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected @@ -1,11 +1,11 @@ #select | src/main.rs:10:5:10:22 | ...::read_to_string | src/main.rs:6:11:6:19 | file_name | src/main.rs:10:5:10:22 | ...::read_to_string | This path depends on a $@. | src/main.rs:6:11:6:19 | file_name | user-provided value | edges -| src/main.rs:6:11:6:19 | file_name | src/main.rs:8:35:8:43 | file_name | provenance | | +| src/main.rs:6:11:6:19 | file_name | src/main.rs:8:35:8:53 | file_name as String | provenance | | | src/main.rs:8:9:8:17 | file_path | src/main.rs:10:24:10:32 | file_path | provenance | | -| src/main.rs:8:21:8:44 | ...::from(...) | src/main.rs:8:9:8:17 | file_path | provenance | | -| src/main.rs:8:35:8:43 | file_name | src/main.rs:8:21:8:44 | ...::from(...) | provenance | MaD:2 | -| src/main.rs:8:35:8:43 | file_name | src/main.rs:8:21:8:44 | ...::from(...) | provenance | MaD:2 | +| src/main.rs:8:21:8:54 | ...::from(...) | src/main.rs:8:9:8:17 | file_path | provenance | | +| src/main.rs:8:35:8:53 | file_name as String | src/main.rs:8:21:8:54 | ...::from(...) | provenance | MaD:2 | +| src/main.rs:8:35:8:53 | file_name as String | src/main.rs:8:21:8:54 | ...::from(...) | provenance | MaD:2 | | src/main.rs:10:24:10:32 | file_path | src/main.rs:10:5:10:22 | ...::read_to_string | provenance | MaD:1 Sink:MaD:1 | models | 1 | Sink: std::fs::read_to_string; Argument[0]; path-injection | @@ -13,8 +13,8 @@ models nodes | src/main.rs:6:11:6:19 | file_name | semmle.label | file_name | | src/main.rs:8:9:8:17 | file_path | semmle.label | file_path | -| src/main.rs:8:21:8:44 | ...::from(...) | semmle.label | ...::from(...) | -| src/main.rs:8:35:8:43 | file_name | semmle.label | file_name | +| src/main.rs:8:21:8:54 | ...::from(...) | semmle.label | ...::from(...) | +| src/main.rs:8:35:8:53 | file_name as String | semmle.label | file_name as String | | src/main.rs:10:5:10:22 | ...::read_to_string | semmle.label | ...::read_to_string | | src/main.rs:10:24:10:32 | file_path | semmle.label | file_path | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-022/src/main.rs b/rust/ql/test/query-tests/security/CWE-022/src/main.rs index 972ac8e7b6a0..42ed08e30868 100644 --- a/rust/ql/test/query-tests/security/CWE-022/src/main.rs +++ b/rust/ql/test/query-tests/security/CWE-022/src/main.rs @@ -5,8 +5,8 @@ use std::{fs, path::Path, path::PathBuf}; fn tainted_path_handler_bad( Query(file_name): Query, // $ Source=remote1 ) -> Result { - let file_path = PathBuf::from(file_name); - // BAD: This could read any file on the filesystem. + let file_path = PathBuf::from(file_name as String); // TODO: Remove `as String` when type inference handles patterns + // BAD: This could read any file on the filesystem. fs::read_to_string(file_path).map_err(InternalServerError) // $ path-injection-sink Alert[rust/path-injection]=remote1 }