From 63376573dada0920c310b914526649cd8c94887f Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 5 May 2026 12:47:32 +0200 Subject: [PATCH 1/3] Rust: Move more type inference logic into shared library --- .../lib/codeql/rust/internal/CachedStages.qll | 4 +- .../internal/typeinference/TypeInference.qll | 1364 +++++++---------- .../PathResolutionConsistency.expected | 2 + .../type-inference/type-inference.expected | 24 - .../type-inference/type-inference.ql | 4 +- .../typeinference/internal/TypeInference.qll | 712 ++++++++- 6 files changed, 1273 insertions(+), 837 deletions(-) create mode 100644 rust/ql/test/library-tests/dataflow/models/CONSISTENCY/PathResolutionConsistency.expected diff --git a/rust/ql/lib/codeql/rust/internal/CachedStages.qll b/rust/ql/lib/codeql/rust/internal/CachedStages.qll index a92770ed2384..f76006ddcbc7 100644 --- a/rust/ql/lib/codeql/rust/internal/CachedStages.qll +++ b/rust/ql/lib/codeql/rust/internal/CachedStages.qll @@ -147,9 +147,9 @@ module Stages { predicate backref() { 1 = 1 or - exists(Type t) + (exists(Type t) implies any()) or - exists(inferType(_)) + (exists(inferType(_)) implies any()) } } diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll index b5ed2be06f97..7c02fe9726c4 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll @@ -10,11 +10,11 @@ private import TypeAbstraction as TA private import Type as T private import TypeMention private import codeql.rust.internal.typeinference.DerefChain +private import codeql.rust.internal.CachedStages private import FunctionType private import FunctionOverloading as FunctionOverloading private import BlanketImplementation as BlanketImplementation private import codeql.rust.elements.internal.VariableImpl::Impl as VariableImpl -private import codeql.rust.internal.CachedStages private import codeql.typeinference.internal.TypeInference private import codeql.rust.frameworks.stdlib.Stdlib private import codeql.rust.frameworks.stdlib.Builtins as Builtins @@ -37,10 +37,7 @@ private module Input1 implements InputSig1 { class Type = T::Type; - predicate isPseudoType(Type t) { - t instanceof UnknownType or - t instanceof NeverType - } + class UnknownType = T::UnknownType; class TypeParameter = T::TypeParameter; @@ -272,17 +269,409 @@ private module M2 = Make2; import M2 +private module Input3 implements InputSig3 { + private import rust as Rust + + predicate cachedStageRevRef() { + Stages::TypeInferenceStage::ref() + or + (implicitDerefChainBorrow(_, _, _) implies any()) + or + (exists(resolveCallTarget(_, _)) implies any()) + or + (exists(resolveStructFieldExpr(_, _)) implies any()) + or + (exists(resolveTupleFieldExpr(_, _)) implies any()) + } + + predicate inferType = M3::inferType/2; + + class BoolType extends DataType { + BoolType() { this.getTypeItem() instanceof Builtins::Bool } + } + + class AstNode = Rust::AstNode; + + TypeMention getTypeAnnotation(AstNode n) { + exists(LetStmt let | + n = let.getPat() and + result = let.getTypeRepr() + ) + or + result = n.(SelfParam).getTypeRepr() + or + exists(Param p | + n = p.getPat() and + result = p.getTypeRepr() + ) + or + result = n.(ShorthandSelfParameterMention) + } + + class Expr = Rust::Expr; + + class Switch extends Rust::MatchExpr { + Expr getExpr() { result = this.getScrutinee() } + + Case getCase(int index) { result = this.getArm(index) } + } + + class Case extends Rust::MatchArm { + AstNode getAPattern() { result = this.getPat() } + + AstNode getBody() { result = this.getExpr() } + } + + class ConditionalExpr extends IfExpr { + Expr getThen() { result = super.getThen() } + } + + class BinaryExpr extends Rust::BinaryExpr { + Expr getLeftOperand() { result = super.getLhs() } + + Expr getRightOperand() { result = super.getRhs() } + } + + class LogicalAndExpr extends BinaryExpr, Rust::LogicalAndExpr { } + + class LogicalOrExpr extends BinaryExpr, Rust::LogicalOrExpr { } + + abstract class Assignment extends BinaryExpr { } + + class AssignExpr extends Assignment, Rust::AssignmentExpr { } + + class ParenExpr = Rust::ParenExpr; + + class Variable extends Rust::Variable { + AstNode getDefiningNode() { + result = this.getPat().getName() or + result = this.getParameter().(SelfParam) + } + + Expr getAnAccess() { result = super.getAnAccess() } + } + + abstract class LetDeclaration extends AstNode { + abstract predicate isCoercionSite(); + + abstract AstNode getLeftOperand(); + + abstract AstNode getRightOperand(); + } + + private class LetExprLetDeclaration extends LetDeclaration, LetExpr { + override predicate isCoercionSite() { not this.getPat() instanceof IdentPat } + + override AstNode getLeftOperand() { result = this.getPat() } + + override AstNode getRightOperand() { result = this.getScrutinee() } + } + + private class LetStmtLetDeclaration extends LetDeclaration, LetStmt { + override predicate isCoercionSite() { + this.hasTypeRepr() or + not identLetStmt(this, _, _) + } + + override AstNode getLeftOperand() { result = this.getPat() } + + override AstNode getRightOperand() { result = this.getInitializer() } + } + + class CallResolutionContext = FunctionCallMatchingInput::AccessEnvironment; + + class TypePosition = FunctionPosition; + + class Callable extends FunctionCallMatchingInput::Declaration { + TypeMention getAdditionalTypeParameterConstraint(TypeParameter tp) { + result = + tp.(TypeParamTypeParameter) + .getTypeParam() + .getAdditionalTypeBound(this.getFunction(), _) + .getTypeRepr() + } + } + + class Call extends FunctionCallMatchingInput::Access { + /** Gets the target of this call. */ + Callable getTargetCertain() { + exists(ImplOrTraitItemNodeOption i, FunctionDeclaration f, Path p | + result.isFunction(i, f) and + p = CallExprImpl::getFunctionPath(this) and + f = resolvePath(p) and + f.isDirectlyFor(i) + ) + } + + Callable getTarget(string derefChainBorrow) { result = super.getTarget(derefChainBorrow) } + } + + bindingset[derefChainBorrow] + Type inferCallTypeBottomUp(Call call, string derefChainBorrow, FunctionPosition pos, TypePath path) { + result = call.(FunctionCallMatchingInput::Access).getInferredType(derefChainBorrow, pos, path) + } + + Type inferCallReturnType(AstNode n, TypePath path) { + exists(Call call, TypePath path0 | + result = M3::inferCallReturnType(call, _, n, path0) and + if + // index expression `x[i]` desugars to `*x.index(i)`, so we must account for + // the implicit deref + call instanceof IndexExpr + then path0.isCons(getRefTypeParameter(_), path) + else path = path0 + ) + } + + Type inferCallArgumentTypeTopDown(AstNode n, TypePath path) { + exists(FunctionCallMatchingInput::Access call, FunctionPosition pos | + result = inferCallArgumentTypeTopDown(call, pos, n, _, _, path) and + not call.(AssocFunctionResolution::AssocFunctionCall).hasReceiverAtPos(pos) + ) + or + exists(FunctionCallMatchingInput::Access a | + result = inferFunctionCallSelfArgumentTypeTopDown(a, n, DerefChain::nil(), path) and + if a.(AssocFunctionResolution::AssocFunctionCall).hasReceiver() + then not path.isEmpty() + else any() + ) + } + + predicate inferStepSymmetricCertain(AstNode n1, TypePath prefix1, AstNode n2, TypePath prefix2) { + n1 = + any(IdentPat ip | + n2 = ip.getName() and + prefix1.isEmpty() and + if ip.isRef() + then + exists(boolean isMutable | if ip.isMut() then isMutable = true else isMutable = false | + prefix2 = TypePath::singleton(getRefTypeParameter(isMutable)) + ) + else prefix2.isEmpty() + ) + or + exists(CallExprImpl::DynamicCallExpr dce, TupleType tt, int i | + n1 = dce.getArgList() and + tt.getArity() = dce.getNumberOfSyntacticArguments() and + n2 = dce.getSyntacticPositionalArgument(i) and + prefix1 = TypePath::singleton(tt.getPositionalTypeParameter(i)) and + prefix2.isEmpty() + ) + or + exists(ClosureExpr ce, int index | + n1 = ce and + n2 = ce.getParam(index).getPat() and + prefix1 = closureParameterPath(ce.getNumberOfParams(), index) and + prefix2.isEmpty() + ) + } + + Type inferTypeCertainSpecific(AstNode n, TypePath path) { + result = inferFunctionBodyType(n, path) + or + result = inferLiteralType(n, path, true) + or + result = inferRefPatType(n) and + path.isEmpty() + or + result = inferRefExprType(n) and + path.isEmpty() + or + result = inferCertainStructExprType(n, path) + or + result = inferCertainStructPatType(n, path) + or + result = inferRangeExprType(n) and + path.isEmpty() + or + result = inferTupleRootType(n) and + path.isEmpty() + or + result = inferBlockExprType(n, path) + or + result = inferArrayExprType(n) and + path.isEmpty() + or + result = inferCastExprType(n, path) + or + exprHasUnitType(n) and + path.isEmpty() and + result instanceof UnitType + or + isPanicMacroCall(n) and + path.isEmpty() and + result instanceof NeverType + or + n instanceof ClosureExpr and + path.isEmpty() and + result = closureRootType() + } + + predicate inferStepSymmetric(AstNode n1, TypePath prefix1, AstNode n2, TypePath prefix2) { + prefix1.isEmpty() and + prefix2.isEmpty() and + ( + n1 = n2.(OrPat).getAPat() + or + n1 = n2.(ParenPat).getPat() + or + n1 = n2.(LiteralPat).getLiteral() + or + exists(BreakExpr break | + break.getExpr() = n1 and + break.getTarget() = n2.(LoopExpr) + ) + or + n1 = n2.(MacroExpr).getMacroCall().getMacroCallExpansion() and + not isPanicMacroCall(n2) + or + n1 = n2.(MacroPat).getMacroCall().getMacroCallExpansion() + ) + or + n2 = + any(RefExpr re | + n1 = re.getExpr() and + prefix1.isEmpty() and + prefix2 = TypePath::singleton(inferRefExprType(re).getPositionalTypeParameter(0)) + ) + or + n2 = + any(RefPat rp | + n1 = rp.getPat() and + prefix1.isEmpty() and + exists(boolean isMutable | if rp.isMut() then isMutable = true else isMutable = false | + prefix2 = TypePath::singleton(getRefTypeParameter(isMutable)) + ) + ) + or + exists(int i, int arity | + prefix1.isEmpty() and + prefix2 = TypePath::singleton(getTupleTypeParameter(arity, i)) + | + arity = n2.(TupleExpr).getNumberOfFields() and + n1 = n2.(TupleExpr).getField(i) + or + arity = n2.(TuplePat).getTupleArity() and + n1 = n2.(TuplePat).getField(i) + ) + or + exists(BlockExpr be | + n1 = be and + n2 = be.getStmtList().getTailExpr() and + if be.isAsync() + then + prefix1 = TypePath::singleton(getDynFutureOutputTypeParameter()) and + prefix2.isEmpty() + else ( + prefix1.isEmpty() and + prefix2.isEmpty() + ) + ) + or + // an array repeat expression (`[1; 3]`) has the type of the repeat operand + n1.(ArrayRepeatExpr).getRepeatOperand() = n2 and + prefix1 = TypePath::singleton(getArrayTypeParameter()) and + prefix2.isEmpty() + } + + predicate inferStep(AstNode n1, TypePath prefix1, AstNode n2, TypePath prefix2) { + // When `n2` is `*n1` propagate type information from a raw pointer type + // parameter at `n1`. The other direction is handled in + // `inferDereferencedExprPtrType`. + n1 = n2.(DerefExpr).getExpr() and + prefix1 = TypePath::singleton(getPtrTypeParameter()) and + prefix2.isEmpty() + or + n2 = any(ClosureExpr ce | not ce.hasRetType() and ce.getClosureBody() = n1) and + prefix2 = closureReturnPath() and + prefix1.isEmpty() + } + + predicate inferLubStep(AstNode n1, TypePath path1, AstNode n2, TypePath path2) { + path1.isEmpty() and + ( + n1 = n2.(ArrayListExpr).getAnExpr() and + path2 = TypePath::singleton(getArrayTypeParameter()) + or + exists(ReturnExpr re, Rust::Callable c | + n1 = re.getExpr() and + c = re.getEnclosingCallable() and + n2 = c.getBody() and + path2.isEmpty() + ) + or + exists(Struct s | + n1 = [n2.(RangeExpr).getStart(), n2.(RangeExpr).getEnd()] and + path2 = + TypePath::singleton(TTypeParamTypeParameter(s.getGenericParamList().getATypeParam())) and + s = getRangeType(n2) + ) + ) + } + + Type inferTypeTopDown(AstNode n, TypePath path) { + result = inferTypeFromAnnotationTopDown(n, path) + or + result = inferClosureExprBodyTypeTopDown(n, path) + or + exists(FunctionPosition pos | not pos.isReturn() | + result = inferConstructionType(n, pos, path) + or + result = inferOperationType(n, pos, path) + ) + } + + Type inferTypeSpecific(AstNode n, TypePath path) { + result = inferAssignmentOperationType(n, path) + or + exists(FunctionPosition pos | pos.isReturn() | + result = inferConstructionType(n, pos, path) + or + result = inferOperationType(n, pos, path) + ) + or + result = inferFieldExprType(n, path) + or + result = inferTryExprType(n, path) + or + result = inferLiteralType(n, path, false) + or + result = inferAwaitExprType(n, path) + or + result = inferDereferencedExprPtrType(n, path) + or + result = inferForLoopExprType(n, path) + or + result = inferClosureExprType(n, path) + or + result = inferArgList(n, path) + or + result = inferDeconstructionPatType(n, path) + or + result = inferUnknownType(n, path) + } +} + +private module M3 = Make3; + +// import M3 +predicate inferType = M3::inferType/1; + +predicate inferType = M3::inferType/2; + +predicate inferTypeCertain = M3::inferTypeCertain/2; + module Consistency { import M2::Consistency - private Type inferCertainTypeAdj(AstNode n, TypePath path) { - result = CertainTypeInference::inferCertainType(n, path) and + private Type inferTypeCertainAdj(AstNode n, TypePath path) { + result = inferTypeCertain(n, path) and not result = TNeverType() } predicate nonUniqueCertainType(AstNode n, TypePath path, Type t) { - strictcount(inferCertainTypeAdj(n, path)) > 1 and - t = inferCertainTypeAdj(n, path) and + strictcount(inferTypeCertainAdj(n, path)) > 1 and + t = inferTypeCertainAdj(n, path) and // Suppress the inconsistency if `n` is a self parameter and the type // mention for the self type has multiple types for a path. not exists(ImplItemNode impl, TypePath selfTypePath | @@ -404,16 +793,38 @@ private class AssocFunctionDeclaration extends FunctionDeclaration { } pragma[nomagic] -private TypeMention getCallExprTypeMentionArgument(CallExpr ce, TypeArgumentPosition apos) { - exists(Path p, int i | p = CallExprImpl::getFunctionPath(ce) | - apos.asTypeParam() = resolvePath(p).getTypeParam(pragma[only_bind_into](i)) and - result = getPathTypeArgument(p, pragma[only_bind_into](i)) +private TypePath getPathToImplSelfTypeParam(TypeParam tp) { + exists(ImplItemNode impl | + tp = impl.getTypeParam(_) and + TTypeParamTypeParameter(tp) = impl.(Impl).getSelfTy().(TypeMention).getTypeAt(result) ) } pragma[nomagic] private Type getCallExprTypeArgument(CallExpr ce, TypeArgumentPosition apos, TypePath path) { - result = getCallExprTypeMentionArgument(ce, apos).getTypeAt(path) + exists(Path p, ItemNode resolved, TypeParam tp | + p = CallExprImpl::getFunctionPath(ce) and + resolved = resolvePath(p) and + apos.asTypeParam() = tp + | + // For type parameters of the function we must resolve their + // instantiation from the path. For instance, for `fn bar(a: A) -> A` + // and the path `bar`, we must resolve `A` to `i64`. + exists(int i | + tp = resolved.getTypeParam(pragma[only_bind_into](i)) and + result = getPathTypeArgument(p, pragma[only_bind_into](i)).getTypeAt(path) + ) + or + // For type parameters of the `impl` block we must resolve their + // instantiation from the path. For instance, for `impl for Foo` + // and the path `Foo::bar` we must resolve `A` to `i64`. + exists(ImplItemNode impl, TypePath pathToTp | + resolved = impl.getASuccessor(_) and + tp = impl.getTypeParam(_) and + pathToTp = getPathToImplSelfTypeParam(tp) and + result = p.getQualifier().(TypeMention).getTypeAt(pathToTp.appendInverse(path)) + ) + ) or // Handle constructions that use `Self(...)` syntax exists(Path p, TypePath path0 | @@ -423,29 +834,6 @@ private Type getCallExprTypeArgument(CallExpr ce, TypeArgumentPosition apos, Typ ) } -/** Gets the type annotation that applies to `n`, if any. */ -private TypeMention getTypeAnnotation(AstNode n) { - exists(LetStmt let | - n = let.getPat() and - result = let.getTypeRepr() - ) - or - result = n.(SelfParam).getTypeRepr() - or - exists(Param p | - n = p.getPat() and - result = p.getTypeRepr() - ) -} - -/** Gets the type of `n`, which has an explicit type annotation. */ -pragma[nomagic] -private Type inferAnnotatedType(AstNode n, TypePath path) { - result = getTypeAnnotation(n).getTypeAt(path) - or - result = n.(ShorthandSelfParameterMention).getTypeAt(path) -} - pragma[nomagic] private Type inferFunctionBodyType(AstNode n, TypePath path) { exists(Function f | @@ -503,242 +891,12 @@ private TypePath closureParameterPath(int arity, int index) { TypePath::singleton(getTupleTypeParameter(arity, index))) } -/** Module for inferring certain type information. */ -module CertainTypeInference { - pragma[nomagic] - private predicate callResolvesTo(CallExpr ce, Path p, Function f) { - p = CallExprImpl::getFunctionPath(ce) and - f = resolvePath(p) - } - - pragma[nomagic] - private Type getCallExprType(CallExpr ce, Path p, FunctionDeclaration f, TypePath path) { - exists(ImplOrTraitItemNodeOption i | - callResolvesTo(ce, p, f) and - result = f.getReturnType(i, path) and - f.isDirectlyFor(i) - ) - } - - pragma[nomagic] - private Type getCertainCallExprType(CallExpr ce, Path p, TypePath tp) { - forex(Function f | callResolvesTo(ce, p, f) | result = getCallExprType(ce, p, f, tp)) - } - - pragma[nomagic] - private TypePath getPathToImplSelfTypeParam(TypeParam tp) { - exists(ImplItemNode impl | - tp = impl.getTypeParam(_) and - TTypeParamTypeParameter(tp) = impl.(Impl).getSelfTy().(TypeMention).getTypeAt(result) - ) - } - - pragma[nomagic] - private Type inferCertainCallExprType(CallExpr ce, TypePath path) { - exists(Type ty, TypePath prefix, Path p | ty = getCertainCallExprType(ce, p, prefix) | - exists(TypePath suffix, TypeParam tp | - tp = ty.(TypeParamTypeParameter).getTypeParam() and - path = prefix.append(suffix) - | - // For type parameters of the `impl` block we must resolve their - // instantiation from the path. For instance, for `impl for Foo` - // and the path `Foo::bar` we must resolve `A` to `i64`. - exists(TypePath pathToTp | - pathToTp = getPathToImplSelfTypeParam(tp) and - result = p.getQualifier().(TypeMention).getTypeAt(pathToTp.appendInverse(suffix)) - ) - or - // For type parameters of the function we must resolve their - // instantiation from the path. For instance, for `fn bar(a: A) -> A` - // and the path `bar`, we must resolve `A` to `i64`. - result = getCallExprTypeArgument(ce, TTypeParamTypeArgumentPosition(tp), suffix) - ) - or - not ty instanceof TypeParameter and - result = ty and - path = prefix - ) - } - - private Type inferCertainStructExprType(StructExpr se, TypePath path) { - result = se.getPath().(TypeMention).getTypeAt(path) - } - - private Type inferCertainStructPatType(StructPat sp, TypePath path) { - result = sp.getPath().(TypeMention).getTypeAt(path) - } - - predicate certainTypeEquality(AstNode n1, TypePath prefix1, AstNode n2, TypePath prefix2) { - prefix1.isEmpty() and - prefix2.isEmpty() and - ( - exists(Variable v | n1 = v.getAnAccess() | - n2 = v.getPat().getName() or n2 = v.getParameter().(SelfParam) - ) - or - // A `let` statement with a type annotation is a coercion site and hence - // is not a certain type equality. - exists(LetStmt let | - not let.hasTypeRepr() and - identLetStmt(let, n1, n2) - ) - or - exists(LetExpr let | - // Similarly as for let statements, we need to rule out binding modes - // changing the type. - let.getPat().(IdentPat) = n1 and - let.getScrutinee() = n2 - ) - or - n1 = n2.(ParenExpr).getExpr() - ) - or - n1 = - any(IdentPat ip | - n2 = ip.getName() and - prefix1.isEmpty() and - if ip.isRef() - then - exists(boolean isMutable | if ip.isMut() then isMutable = true else isMutable = false | - prefix2 = TypePath::singleton(getRefTypeParameter(isMutable)) - ) - else prefix2.isEmpty() - ) - or - exists(CallExprImpl::DynamicCallExpr dce, TupleType tt, int i | - n1 = dce.getArgList() and - tt.getArity() = dce.getNumberOfSyntacticArguments() and - n2 = dce.getSyntacticPositionalArgument(i) and - prefix1 = TypePath::singleton(tt.getPositionalTypeParameter(i)) and - prefix2.isEmpty() - ) - or - exists(ClosureExpr ce, int index | - n1 = ce and - n2 = ce.getParam(index).getPat() and - prefix1 = closureParameterPath(ce.getNumberOfParams(), index) and - prefix2.isEmpty() - ) - } - - pragma[nomagic] - private Type inferCertainTypeEquality(AstNode n, TypePath path) { - exists(TypePath prefix1, AstNode n2, TypePath prefix2, TypePath suffix | - result = inferCertainType(n2, prefix2.appendInverse(suffix)) and - path = prefix1.append(suffix) - | - certainTypeEquality(n, prefix1, n2, prefix2) - or - certainTypeEquality(n2, prefix2, n, prefix1) - ) - } - - /** - * Holds if `n` has complete and certain type information and if `n` has the - * resulting type at `path`. - */ - cached - Type inferCertainType(AstNode n, TypePath path) { - result = inferAnnotatedType(n, path) and - Stages::TypeInferenceStage::ref() - or - result = inferFunctionBodyType(n, path) - or - result = inferCertainCallExprType(n, path) - or - result = inferCertainTypeEquality(n, path) - or - result = inferLiteralType(n, path, true) - or - result = inferRefPatType(n) and - path.isEmpty() - or - result = inferRefExprType(n) and - path.isEmpty() - or - result = inferLogicalOperationType(n, path) - or - result = inferCertainStructExprType(n, path) - or - result = inferCertainStructPatType(n, path) - or - result = inferRangeExprType(n) and - path.isEmpty() - or - result = inferTupleRootType(n) and - path.isEmpty() - or - result = inferBlockExprType(n, path) - or - result = inferArrayExprType(n) and - path.isEmpty() - or - result = inferCastExprType(n, path) - or - exprHasUnitType(n) and - path.isEmpty() and - result instanceof UnitType - or - isPanicMacroCall(n) and - path.isEmpty() and - result instanceof NeverType - or - n instanceof ClosureExpr and - path.isEmpty() and - result = closureRootType() - or - infersCertainTypeAt(n, path, result.getATypeParameter()) - } - - /** - * Holds if `n` has complete and certain type information at the type path - * `prefix.tp`. This entails that the type at `prefix` must be the type - * that declares `tp`. - */ - pragma[nomagic] - private predicate infersCertainTypeAt(AstNode n, TypePath prefix, TypeParameter tp) { - exists(TypePath path | - exists(inferCertainType(n, path)) and - path.isSnoc(prefix, tp) - ) - } - - /** - * Holds if `n` has complete and certain type information at `path`. - */ - pragma[nomagic] - predicate hasInferredCertainType(AstNode n, TypePath path) { exists(inferCertainType(n, path)) } - - /** - * Holds if `n` having type `t` at `path` conflicts with certain type information - * at `prefix`. - */ - bindingset[n, prefix, path, t] - pragma[inline_late] - predicate certainTypeConflict(AstNode n, TypePath prefix, TypePath path, Type t) { - inferCertainType(n, path) != t - or - // If we infer that `n` has _some_ type at `T1.T2....Tn`, and we also - // know that `n` certainly has type `certainType` at `T1.T2...Ti`, `0 <= i < n`, - // then it must be the case that `T(i+1)` is a type parameter of `certainType`, - // otherwise there is a conflict. - // - // Below, `prefix` is `T1.T2...Ti` and `tp` is `T(i+1)`. - exists(TypePath suffix, TypeParameter tp, Type certainType | - path = prefix.appendInverse(suffix) and - tp = suffix.getHead() and - inferCertainType(n, prefix) = certainType and - not certainType.getATypeParameter() = tp - ) - } +private Type inferCertainStructExprType(StructExpr se, TypePath path) { + result = se.getPath().(TypeMention).getTypeAt(path) } -private Type inferLogicalOperationType(AstNode n, TypePath path) { - exists(Builtins::Bool t, BinaryLogicalOperation be | - n = [be, be.getLhs(), be.getRhs()] and - path.isEmpty() and - result = TDataType(t) - ) +private Type inferCertainStructPatType(StructPat sp, TypePath path) { + result = sp.getPath().(TypeMention).getTypeAt(path) } private Type inferAssignmentOperationType(AstNode n, TypePath path) { @@ -768,171 +926,8 @@ private Struct getRangeType(RangeExpr re) { result instanceof RangeToInclusiveStruct } -private predicate bodyReturns(Expr body, Expr e) { - exists(ReturnExpr re, Callable c | - e = re.getExpr() and - c = re.getEnclosingCallable() and - body = c.getBody() - ) -} - -/** - * Holds if the type tree of `n1` at `prefix1` should be equal to the type tree - * of `n2` at `prefix2` and type information should propagate in both directions - * through the type equality. - */ -private predicate typeEquality(AstNode n1, TypePath prefix1, AstNode n2, TypePath prefix2) { - CertainTypeInference::certainTypeEquality(n1, prefix1, n2, prefix2) - or - prefix1.isEmpty() and - prefix2.isEmpty() and - ( - exists(LetStmt let | - let.getPat() = n1 and - let.getInitializer() = n2 - ) - or - n2 = - any(MatchExpr me | - n1 = me.getAnArm().getExpr() and - me.getNumberOfArms() = 1 - ) - or - exists(LetExpr let | - n1 = let.getScrutinee() and - n2 = let.getPat() - ) - or - exists(MatchExpr me | - n1 = me.getScrutinee() and - n2 = me.getAnArm().getPat() - ) - or - n1 = n2.(OrPat).getAPat() - or - n1 = n2.(ParenPat).getPat() - or - n1 = n2.(LiteralPat).getLiteral() - or - exists(BreakExpr break | - break.getExpr() = n1 and - break.getTarget() = n2.(LoopExpr) - ) - or - exists(AssignmentExpr be | - n1 = be.getLhs() and - n2 = be.getRhs() - ) - or - n1 = n2.(MacroExpr).getMacroCall().getMacroCallExpansion() and - not isPanicMacroCall(n2) - or - n1 = n2.(MacroPat).getMacroCall().getMacroCallExpansion() - or - bodyReturns(n1, n2) and - strictcount(Expr e | bodyReturns(n1, e)) = 1 - ) - or - n2 = - any(RefExpr re | - n1 = re.getExpr() and - prefix1.isEmpty() and - prefix2 = TypePath::singleton(inferRefExprType(re).getPositionalTypeParameter(0)) - ) - or - n2 = - any(RefPat rp | - n1 = rp.getPat() and - prefix1.isEmpty() and - exists(boolean isMutable | if rp.isMut() then isMutable = true else isMutable = false | - prefix2 = TypePath::singleton(getRefTypeParameter(isMutable)) - ) - ) - or - exists(int i, int arity | - prefix1.isEmpty() and - prefix2 = TypePath::singleton(getTupleTypeParameter(arity, i)) - | - arity = n2.(TupleExpr).getNumberOfFields() and - n1 = n2.(TupleExpr).getField(i) - or - arity = n2.(TuplePat).getTupleArity() and - n1 = n2.(TuplePat).getField(i) - ) - or - exists(BlockExpr be | - n1 = be and - n2 = be.getStmtList().getTailExpr() and - if be.isAsync() - then - prefix1 = TypePath::singleton(getDynFutureOutputTypeParameter()) and - prefix2.isEmpty() - else ( - prefix1.isEmpty() and - prefix2.isEmpty() - ) - ) - or - // an array list expression with only one element (such as `[1]`) has type from that element - n1 = - any(ArrayListExpr ale | - ale.getAnExpr() = n2 and - ale.getNumberOfExprs() = 1 - ) and - prefix1 = TypePath::singleton(getArrayTypeParameter()) and - prefix2.isEmpty() - or - // an array repeat expression (`[1; 3]`) has the type of the repeat operand - n1.(ArrayRepeatExpr).getRepeatOperand() = n2 and - prefix1 = TypePath::singleton(getArrayTypeParameter()) and - prefix2.isEmpty() -} - -/** - * Holds if `child` is a child of `parent`, and the Rust compiler applies [least - * upper bound (LUB) coercion][1] to infer the type of `parent` from the type of - * `child`. - * - * In this case, we want type information to only flow from `child` to `parent`, - * to avoid (a) either having to model LUB coercions, or (b) risk combinatorial - * explosion in inferred types. - * - * [1]: https://doc.rust-lang.org/reference/type-coercions.html#r-coerce.least-upper-bound - */ -private predicate lubCoercion(AstNode parent, AstNode child, TypePath prefix) { - child = parent.(IfExpr).getABranch() and - prefix.isEmpty() - or - parent = - any(MatchExpr me | - child = me.getAnArm().getExpr() and - me.getNumberOfArms() > 1 - ) and - prefix.isEmpty() - or - parent = - any(ArrayListExpr ale | - child = ale.getAnExpr() and - ale.getNumberOfExprs() > 1 - ) and - prefix = TypePath::singleton(getArrayTypeParameter()) - or - bodyReturns(parent, child) and - strictcount(Expr e | bodyReturns(parent, e)) > 1 and - prefix.isEmpty() - or - parent = any(ClosureExpr ce | not ce.hasRetType() and ce.getClosureBody() = child) and - prefix = closureReturnPath() - or - exists(Struct s | - child = [parent.(RangeExpr).getStart(), parent.(RangeExpr).getEnd()] and - prefix = TypePath::singleton(TTypeParamTypeParameter(s.getGenericParamList().getATypeParam())) and - s = getRangeType(parent) - ) -} - -private Type inferUnknownTypeFromAnnotation(AstNode n, TypePath path) { - inferType(n, path) = TUnknownType() and +pragma[nomagic] +private Type inferTypeFromAnnotationTopDown(AstNode n, TypePath path) { // Normally, these are coercion sites, but in case a type is unknown we // allow for type information to flow from the type annotation. exists(TypeMention tm | result = tm.getTypeAt(path) | @@ -944,46 +939,6 @@ private Type inferUnknownTypeFromAnnotation(AstNode n, TypePath path) { ) } -/** - * Holds if the type tree of `n1` at `prefix1` should be equal to the type tree - * of `n2` at `prefix2`, but type information should only propagate from `n1` to - * `n2`. - */ -private predicate typeEqualityAsymmetric(AstNode n1, TypePath prefix1, AstNode n2, TypePath prefix2) { - lubCoercion(n2, n1, prefix2) and - prefix1.isEmpty() - or - exists(AstNode mid, TypePath prefixMid, TypePath suffix | - typeEquality(n1, prefixMid, mid, prefix2) or - typeEquality(mid, prefix2, n1, prefixMid) - | - lubCoercion(mid, n2, suffix) and - not lubCoercion(mid, n1, _) and - prefix1 = prefixMid.append(suffix) - ) - or - // When `n2` is `*n1` propagate type information from a raw pointer type - // parameter at `n1`. The other direction is handled in - // `inferDereferencedExprPtrType`. - n1 = n2.(DerefExpr).getExpr() and - prefix1 = TypePath::singleton(getPtrTypeParameter()) and - prefix2.isEmpty() -} - -pragma[nomagic] -private Type inferTypeEquality(AstNode n, TypePath path) { - exists(TypePath prefix1, AstNode n2, TypePath prefix2, TypePath suffix | - result = inferType(n2, prefix2.appendInverse(suffix)) and - path = prefix1.append(suffix) - | - typeEquality(n, prefix1, n2, prefix2) - or - typeEquality(n2, prefix2, n, prefix1) - or - typeEqualityAsymmetric(n2, prefix2, n, prefix1) - ) -} - pragma[nomagic] private TupleType inferTupleRootType(AstNode n) { // `typeEquality` handles the non-root cases @@ -1128,7 +1083,7 @@ private module ContextTyping { * context in which the call appears, for example a call like * `Default::default()`. */ - abstract class ContextTypedCallCand extends AstNode { + abstract class ContextTypedCallCand extends Expr { abstract Type getTypeArgument(TypeArgumentPosition apos, TypePath path); predicate hasTypeArgument(TypeArgumentPosition apos) { exists(this.getTypeArgument(apos, _)) } @@ -1159,53 +1114,6 @@ private module ContextTyping { ) } } - - pragma[nomagic] - private predicate hasUnknownTypeAt(AstNode n, TypePath path) { - inferType(n, path) = TUnknownType() - } - - pragma[nomagic] - private predicate hasUnknownType(AstNode n) { hasUnknownTypeAt(n, _) } - - newtype FunctionPositionKind = - SelfKind() or - ReturnKind() or - PositionalKind() - - signature Type inferCallTypeSig(AstNode n, FunctionPositionKind kind, TypePath path); - - /** - * Given a predicate `inferCallType` for inferring the type of a call at a given - * position, this module exposes the predicate `check`, which wraps the input - * predicate and checks that types are only propagated into arguments when they - * are context-typed. - */ - module CheckContextTyping { - pragma[nomagic] - private Type inferCallNonReturnType( - AstNode n, FunctionPositionKind kind, TypePath prefix, TypePath path - ) { - result = inferCallType(n, kind, path) and - hasUnknownType(n) and - kind != ReturnKind() and - prefix = path.getAPrefix() - } - - pragma[nomagic] - Type check(AstNode n, TypePath path) { - result = inferCallType(n, ReturnKind(), path) - or - exists(FunctionPositionKind kind, TypePath prefix | - result = inferCallNonReturnType(n, kind, prefix, path) and - hasUnknownTypeAt(n, prefix) - | - // Never propagate type information directly into the receiver, since its type - // must already have been known in order to resolve the call - if kind = SelfKind() then not prefix.isEmpty() else any() - ) - } - } } /** @@ -2673,6 +2581,11 @@ private module FunctionCallMatchingInput implements MatchingWithEnvironmentInput FunctionDeclaration getFunction() { result = f } + predicate isFunction(ImplOrTraitItemNodeOption i_, Function f_) { + i_ = i and + f_ = f + } + predicate isAssocFunction(ImplOrTraitItemNode i_, Function f_) { i_ = i.asSome() and f_ = f @@ -2741,7 +2654,9 @@ private module FunctionCallMatchingInput implements MatchingWithEnvironmentInput ) } - abstract class Access extends ContextTyping::ContextTypedCallCand { + final class Access = AccessImpl; + + abstract private class AccessImpl extends ContextTyping::ContextTypedCallCand { abstract AstNode getNodeAt(FunctionPosition pos); bindingset[derefChainBorrow] @@ -2756,7 +2671,7 @@ private module FunctionCallMatchingInput implements MatchingWithEnvironmentInput abstract predicate hasUnknownTypeAt(string derefChainBorrow, FunctionPosition pos, TypePath path); } - private class AssocFunctionCallAccess extends Access instanceof AssocFunctionResolution::AssocFunctionCall + private class AssocFunctionCallAccess extends AccessImpl instanceof AssocFunctionResolution::AssocFunctionCall { AssocFunctionCallAccess() { // handled in the `OperationMatchingInput` module @@ -2843,7 +2758,7 @@ private module FunctionCallMatchingInput implements MatchingWithEnvironmentInput } } - private class NonAssocFunctionCallAccess extends Access instanceof NonAssocCallExpr, + private class NonAssocFunctionCallAccess extends AccessImpl instanceof NonAssocCallExpr, CallExprImpl::CallExprCall { pragma[nomagic] @@ -2896,39 +2811,14 @@ private module FunctionCallMatchingInput implements MatchingWithEnvironmentInput } } -private module FunctionCallMatching = MatchingWithEnvironment; - pragma[nomagic] -private Type inferFunctionCallType0( +private Type inferCallArgumentTypeTopDown( FunctionCallMatchingInput::Access call, FunctionPosition pos, AstNode n, DerefChain derefChain, BorrowKind borrow, TypePath path ) { - exists(TypePath path0 | - n = call.getNodeAt(pos) and - exists(string derefChainBorrow | - FunctionCallMatchingInput::decodeDerefChainBorrow(derefChainBorrow, derefChain, borrow) - | - result = FunctionCallMatching::inferAccessType(call, derefChainBorrow, pos, path0) - or - call.hasUnknownTypeAt(derefChainBorrow, pos, path0) and - result = TUnknownType() - ) - | - if - // index expression `x[i]` desugars to `*x.index(i)`, so we must account for - // the implicit deref - pos.isReturn() and - call instanceof IndexExpr - then path0.isCons(getRefTypeParameter(_), path) - else path = path0 - ) -} - -pragma[nomagic] -private Type inferFunctionCallTypeNonSelf(AstNode n, FunctionPosition pos, TypePath path) { - exists(FunctionCallMatchingInput::Access call | - result = inferFunctionCallType0(call, pos, n, _, _, path) and - not call.(AssocFunctionResolution::AssocFunctionCall).hasReceiverAtPos(pos) + exists(string derefChainBorrow | + FunctionCallMatchingInput::decodeDerefChainBorrow(derefChainBorrow, derefChain, borrow) and + result = M3::inferCallArgumentTypeTopDown(call, derefChainBorrow, pos, n, path) ) } @@ -2940,12 +2830,12 @@ private Type inferFunctionCallTypeNonSelf(AstNode n, FunctionPosition pos, TypeP * empty, at which point the inferred type can be applied back to `n`. */ pragma[nomagic] -private Type inferFunctionCallTypeSelf( +private Type inferFunctionCallSelfArgumentTypeTopDown( FunctionCallMatchingInput::Access call, AstNode n, DerefChain derefChain, TypePath path ) { exists(FunctionPosition pos, BorrowKind borrow, TypePath path0 | call.(AssocFunctionResolution::AssocFunctionCall).hasReceiverAtPos(pos) and - result = inferFunctionCallType0(call, pos, n, derefChain, borrow, path0) + result = inferCallArgumentTypeTopDown(call, pos, n, derefChain, borrow, path0) | borrow.isNoBorrow() and path = path0 @@ -2962,7 +2852,7 @@ private Type inferFunctionCallTypeSelf( DerefChain derefChain0, Type t0, TypePath path0, DerefImplItemNode impl, Type selfParamType, TypePath selfPath | - t0 = inferFunctionCallTypeSelf(call, n, derefChain0, path0) and + t0 = inferFunctionCallSelfArgumentTypeTopDown(call, n, derefChain0, path0) and derefChain0.isCons(impl, derefChain) and selfParamType = impl.resolveSelfTypeAt(selfPath) | @@ -2979,31 +2869,6 @@ private Type inferFunctionCallTypeSelf( ) } -private Type inferFunctionCallTypePreCheck( - AstNode n, ContextTyping::FunctionPositionKind kind, TypePath path -) { - exists(FunctionPosition pos | - result = inferFunctionCallTypeNonSelf(n, pos, path) and - if pos.isPosition() - then kind = ContextTyping::PositionalKind() - else kind = ContextTyping::ReturnKind() - ) - or - exists(FunctionCallMatchingInput::Access a | - result = inferFunctionCallTypeSelf(a, n, DerefChain::nil(), path) and - if a.(AssocFunctionResolution::AssocFunctionCall).hasReceiver() - then kind = ContextTyping::SelfKind() - else kind = ContextTyping::PositionalKind() - ) -} - -/** - * Gets the type of `n` at `path`, where `n` is either a function call or an - * argument/receiver of a function call. - */ -private predicate inferFunctionCallType = - ContextTyping::CheckContextTyping::check/2; - abstract private class Constructor extends Addressable { final TypeParameter getTypeParameter(TypeParameterPosition ppos) { typeParamMatchPosition(this.getTypeItem().getGenericParamList().getATypeParam(), result, ppos) @@ -3137,7 +3002,7 @@ private module ConstructionMatchingInput implements MatchingInputSig { or exists(TypePath suffix | suffix.isCons(TTypeParamTypeParameter(apos.asTypeParam()), path) and - result = CertainTypeInference::inferCertainType(this, suffix) + result = inferTypeCertain(this, suffix) ) } @@ -3162,24 +3027,34 @@ private module ConstructionMatchingInput implements MatchingInputSig { private module ConstructionMatching = Matching; pragma[nomagic] -private Type inferConstructionTypePreCheck( - AstNode n, ContextTyping::FunctionPositionKind kind, TypePath path -) { - exists(ConstructionMatchingInput::Access a, FunctionPosition pos | +private Type inferConstructionType(AstNode n, FunctionPosition pos, TypePath path) { + exists(ConstructionMatchingInput::Access a | n = a.getNodeAt(pos) and - if pos.isPosition() - then kind = ContextTyping::PositionalKind() - else kind = ContextTyping::ReturnKind() - | result = ConstructionMatching::inferAccessType(a, pos, path) - or - a.hasUnknownTypeAt(pos, path) and - result = TUnknownType() ) } -private predicate inferConstructionType = - ContextTyping::CheckContextTyping::check/2; +pragma[nomagic] +private Type inferUnknownType(AstNode n, TypePath path) { + result = TUnknownType() and + ( + exists(FunctionCallMatchingInput::Access call, FunctionPosition pos | + n = call.getNodeAt(pos) and + call.hasUnknownTypeAt(_, pos, path) + ) + or + exists(ConstructionMatchingInput::Access a, FunctionPosition pos | + n = a.getNodeAt(pos) and + a.hasUnknownTypeAt(pos, path) + ) + or + exists(Param p | + not p.hasTypeRepr() and + n = p.getPat() and + path.isEmpty() + ) + ) +} /** * A matching configuration for resolving types of operations like `a + b`. @@ -3244,24 +3119,14 @@ private module OperationMatchingInput implements MatchingInputSig { private module OperationMatching = Matching; pragma[nomagic] -private Type inferOperationTypePreCheck( - AstNode n, ContextTyping::FunctionPositionKind kind, TypePath path -) { - exists(OperationMatchingInput::Access a, FunctionPosition pos | +private Type inferOperationType(AstNode n, FunctionPosition pos, TypePath path) { + exists(OperationMatchingInput::Access a | n = a.getNodeAt(pos) and result = OperationMatching::inferAccessType(a, pos, path) and - if pos.asPosition() = 0 - then kind = ContextTyping::SelfKind() - else - if pos.isPosition() - then kind = ContextTyping::PositionalKind() - else kind = ContextTyping::ReturnKind() + if pos.asPosition() = 0 then not path.isEmpty() else any() ) } -private predicate inferOperationType = - ContextTyping::CheckContextTyping::check/2; - pragma[nomagic] private Type getFieldExprLookupType(FieldExpr fe, string name, DerefChain derefChain) { exists(TypePath path | @@ -3281,6 +3146,20 @@ private Type getFieldExprLookupType(FieldExpr fe, string name, DerefChain derefC ) } +/** + * Gets the struct field that the field expression `fe` resolves to, if any. + */ +cached +StructField resolveStructFieldExpr(FieldExpr fe, DerefChain derefChain) { + M3::CachedStage::ref() and + exists(string name, DataType ty | + ty = getFieldExprLookupType(fe, pragma[only_bind_into](name), derefChain) + | + result = ty.(StructType).getTypeItem().getStructField(pragma[only_bind_into](name)) or + result = ty.(UnionType).getTypeItem().getStructField(pragma[only_bind_into](name)) + ) +} + pragma[nomagic] private Type getTupleFieldExprLookupType(FieldExpr fe, int pos, DerefChain derefChain) { exists(string name | @@ -3289,6 +3168,21 @@ private Type getTupleFieldExprLookupType(FieldExpr fe, int pos, DerefChain deref ) } +/** + * Gets the tuple field that the field expression `fe` resolves to, if any. + */ +cached +TupleField resolveTupleFieldExpr(FieldExpr fe, DerefChain derefChain) { + M3::CachedStage::ref() and + exists(int i | + result = + getTupleFieldExprLookupType(fe, pragma[only_bind_into](i), derefChain) + .(StructType) + .getTypeItem() + .getTupleField(pragma[only_bind_into](i)) + ) +} + /** * A matching configuration for resolving types of field expressions like `x.field`. */ @@ -3735,26 +3629,21 @@ private Type inferForLoopExprType(AstNode n, TypePath path) { } pragma[nomagic] -private Type inferClosureExprType(AstNode n, TypePath path) { +private Type inferClosureExprBodyTypeTopDown(AstNode n, TypePath path) { exists(ClosureExpr ce | - n = ce and - ( - path = TypePath::singleton(TDynTraitTypeParameter(_, any(FnTrait t).getTypeParam())) and - result.(TupleType).getArity() = ce.getNumberOfParams() - or - exists(TypePath path0 | - result = ce.getRetType().getTypeRepr().(TypeMention).getTypeAt(path0) and - path = closureReturnPath().append(path0) - ) - ) - or - exists(Param p | - p = ce.getAParam() and - not p.hasTypeRepr() and - n = p.getPat() and - result = TUnknownType() and - path.isEmpty() - ) + n = ce.getClosureBody() and + result = inferType(ce, closureReturnPath().appendInverse(path)) + ) +} + +pragma[nomagic] +private Type inferClosureExprType(ClosureExpr ce, TypePath path) { + path = TypePath::singleton(TDynTraitTypeParameter(_, any(FnTrait t).getTypeParam())) and + result.(TupleType).getArity() = ce.getNumberOfParams() + or + exists(TypePath suffix | + result = ce.getRetType().getTypeRepr().(TypeMention).getTypeAt(suffix) and + path = closureReturnPath().append(suffix) ) } @@ -3772,170 +3661,50 @@ private Type inferCastExprType(CastExpr ce, TypePath path) { result = ce.getTypeRepr().(TypeMention).getTypeAt(path) } +/** Holds if `n` is implicitly dereferenced and/or borrowed. */ cached -private module Cached { - /** Holds if `n` is implicitly dereferenced and/or borrowed. */ - cached - predicate implicitDerefChainBorrow(Expr e, DerefChain derefChain, boolean borrow) { - exists(BorrowKind bk | - any(AssocFunctionResolution::AssocFunctionCall afc) - .argumentHasImplicitDerefChainBorrow(e, derefChain, bk) and - if bk.isNoBorrow() then borrow = false else borrow = true - ) - or - e = - any(FieldExpr fe | - exists(resolveStructFieldExpr(fe, derefChain)) - or - exists(resolveTupleFieldExpr(fe, derefChain)) - ).getContainer() and - not derefChain.isEmpty() and - borrow = false - } - - /** - * Gets an item (function or tuple struct/variant) that `call` resolves to, if - * any. - * - * The parameter `dispatch` is `true` if and only if the resolved target is a - * trait item because a precise target could not be determined from the - * types (for instance in the presence of generics or `dyn` types) - */ - cached - Addressable resolveCallTarget(InvocationExpr call, boolean dispatch) { - dispatch = false and - result = call.(NonAssocCallExpr).resolveCallTargetViaPathResolution() - or - exists(ImplOrTraitItemNode i | - i instanceof TraitItemNode and dispatch = true - or - i instanceof ImplItemNode and dispatch = false - | - result = call.(AssocFunctionResolution::AssocFunctionCall).resolveCallTarget(i, _, _, _) and - not call instanceof CallExprImpl::DynamicCallExpr and - not i instanceof Builtins::BuiltinImpl - ) - } - - /** - * Gets the struct field that the field expression `fe` resolves to, if any. - */ - cached - StructField resolveStructFieldExpr(FieldExpr fe, DerefChain derefChain) { - exists(string name, DataType ty | - ty = getFieldExprLookupType(fe, pragma[only_bind_into](name), derefChain) - | - result = ty.(StructType).getTypeItem().getStructField(pragma[only_bind_into](name)) or - result = ty.(UnionType).getTypeItem().getStructField(pragma[only_bind_into](name)) - ) - } - - /** - * Gets the tuple field that the field expression `fe` resolves to, if any. - */ - cached - TupleField resolveTupleFieldExpr(FieldExpr fe, DerefChain derefChain) { - exists(int i | - result = - getTupleFieldExprLookupType(fe, pragma[only_bind_into](i), derefChain) - .(StructType) - .getTypeItem() - .getTupleField(pragma[only_bind_into](i)) - ) - } - - /** - * Gets a type at `path` that `n` infers to, if any. - * - * The type inference implementation works by computing all possible types, so - * the result is not necessarily unique. For example, in - * - * ```rust - * trait MyTrait { - * fn foo(&self) -> &Self; - * - * fn bar(&self) -> &Self { - * self.foo() - * } - * } - * - * struct MyStruct; - * - * impl MyTrait for MyStruct { - * fn foo(&self) -> &MyStruct { - * self - * } - * } - * - * fn baz() { - * let x = MyStruct; - * x.bar(); - * } - * ``` - * - * the type inference engine will roughly make the following deductions: - * - * 1. `MyStruct` has type `MyStruct`. - * 2. `x` has type `MyStruct` (via 1.). - * 3. The return type of `bar` is `&Self`. - * 3. `x.bar()` has type `&MyStruct` (via 2 and 3, by matching the implicit `Self` - * type parameter with `MyStruct`.). - * 4. The return type of `bar` is `&MyTrait`. - * 5. `x.bar()` has type `&MyTrait` (via 2 and 4). - */ - cached - Type inferType(AstNode n, TypePath path) { - Stages::TypeInferenceStage::ref() and - result = CertainTypeInference::inferCertainType(n, path) - or - // Don't propagate type information into a node which conflicts with certain - // type information. - forall(TypePath prefix | - CertainTypeInference::hasInferredCertainType(n, prefix) and - prefix.isPrefixOf(path) - | - not CertainTypeInference::certainTypeConflict(n, prefix, path, result) - ) and - ( - result = inferAssignmentOperationType(n, path) - or - result = inferTypeEquality(n, path) - or - result = inferFunctionCallType(n, path) - or - result = inferConstructionType(n, path) - or - result = inferOperationType(n, path) - or - result = inferFieldExprType(n, path) - or - result = inferTryExprType(n, path) - or - result = inferLiteralType(n, path, false) - or - result = inferAwaitExprType(n, path) - or - result = inferDereferencedExprPtrType(n, path) - or - result = inferForLoopExprType(n, path) - or - result = inferClosureExprType(n, path) - or - result = inferArgList(n, path) - or - result = inferDeconstructionPatType(n, path) +predicate implicitDerefChainBorrow(Expr e, DerefChain derefChain, boolean borrow) { + M3::CachedStage::ref() and + exists(BorrowKind bk | + any(AssocFunctionResolution::AssocFunctionCall afc) + .argumentHasImplicitDerefChainBorrow(e, derefChain, bk) and + if bk.isNoBorrow() then borrow = false else borrow = true + ) + or + e = + any(FieldExpr fe | + exists(resolveStructFieldExpr(fe, derefChain)) or - result = inferUnknownTypeFromAnnotation(n, path) - ) - } + exists(resolveTupleFieldExpr(fe, derefChain)) + ).getContainer() and + not derefChain.isEmpty() and + borrow = false } -import Cached - /** - * Gets a type that `n` infers to, if any. + * Gets an item (function or tuple struct/variant) that `call` resolves to, if + * any. + * + * The parameter `dispatch` is `true` if and only if the resolved target is a + * trait item because a precise target could not be determined from the + * types (for instance in the presence of generics or `dyn` types) */ -Type inferType(AstNode n) { result = inferType(n, TypePath::nil()) } +cached +Addressable resolveCallTarget(InvocationExpr call, boolean dispatch) { + M3::CachedStage::ref() and + dispatch = false and + result = call.(NonAssocCallExpr).resolveCallTargetViaPathResolution() + or + exists(ImplOrTraitItemNode i | + i instanceof TraitItemNode and dispatch = true + or + i instanceof ImplItemNode and dispatch = false + | + result = call.(AssocFunctionResolution::AssocFunctionCall).resolveCallTarget(i, _, _, _) and + not call instanceof CallExprImpl::DynamicCallExpr and + not i instanceof Builtins::BuiltinImpl + ) +} /** Provides predicates for debugging the type inference implementation. */ private module Debug { @@ -3969,26 +3738,11 @@ private module Debug { t = self.getTypeAt(path) } - predicate debugInferFunctionCallType(AstNode n, TypePath path, Type t) { - n = getRelevantLocatable() and - t = inferFunctionCallType(n, path) - } - - predicate debugInferConstructionType(AstNode n, TypePath path, Type t) { - n = getRelevantLocatable() and - t = inferConstructionType(n, path) - } - predicate debugTypeMention(TypeMention tm, TypePath path, Type type) { tm = getRelevantLocatable() and tm.getTypeAt(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 @@ -4037,9 +3791,9 @@ private module Debug { c = max(countTypePaths(_, _, _)) } - Type debugInferCertainType(AstNode n, TypePath path) { + Type debugInferTypeCertain(AstNode n, TypePath path) { n = getRelevantLocatable() and - result = CertainTypeInference::inferCertainType(n, path) + result = inferTypeCertain(n, path) } Type debugInferCertainNonUniqueType(AstNode n, TypePath path) { diff --git a/rust/ql/test/library-tests/dataflow/models/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/models/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 000000000000..cfad81d2796a --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/models/CONSISTENCY/PathResolutionConsistency.expected @@ -0,0 +1,2 @@ +multipleResolvedTargets +| main.rs:218:20:218:25 | ... != ... | 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 3344fc45f74f..94b98d92f7da 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -8961,10 +8961,8 @@ inferType | main.rs:826:16:826:16 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:826:16:826:20 | ... > ... | | {EXTERNAL LOCATION} | bool | | main.rs:826:20:826:20 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:826:22:828:13 | { ... } | | main.rs:820:20:820:22 | Tr2 | | main.rs:827:17:827:20 | self | | {EXTERNAL LOCATION} | & | | main.rs:827:17:827:20 | self | TRef | main.rs:820:5:832:5 | Self [trait MyTrait2] | -| main.rs:827:17:827:25 | self.m1() | | main.rs:820:20:820:22 | Tr2 | | main.rs:828:20:830:13 | { ... } | | main.rs:820:20:820:22 | Tr2 | | main.rs:829:17:829:31 | ...::m1(...) | | main.rs:820:20:820:22 | Tr2 | | main.rs:829:26:829:30 | * ... | | main.rs:820:5:832:5 | Self [trait MyTrait2] | @@ -11481,13 +11479,9 @@ inferType | main.rs:2099:13:2103:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | | main.rs:2099:16:2099:20 | value | | {EXTERNAL LOCATION} | bool | | main.rs:2099:22:2101:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2099:22:2101:13 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:2100:17:2100:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2100:17:2100:17 | 1 | | {EXTERNAL LOCATION} | i64 | | main.rs:2101:20:2103:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2101:20:2103:13 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:2102:17:2102:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2102:17:2102:17 | 0 | | {EXTERNAL LOCATION} | i64 | | main.rs:2113:19:2113:22 | SelfParam | | main.rs:2107:5:2107:19 | S | | main.rs:2113:19:2113:22 | SelfParam | T | main.rs:2109:10:2109:17 | T | | main.rs:2113:25:2113:29 | other | | main.rs:2107:5:2107:19 | S | @@ -11542,13 +11536,9 @@ inferType | main.rs:2154:13:2158:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | | main.rs:2154:16:2154:20 | value | | {EXTERNAL LOCATION} | bool | | main.rs:2154:22:2156:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2154:22:2156:13 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:2155:17:2155:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2155:17:2155:17 | 1 | | {EXTERNAL LOCATION} | i64 | | main.rs:2156:20:2158:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2156:20:2158:13 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:2157:17:2157:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2157:17:2157:17 | 0 | | {EXTERNAL LOCATION} | i64 | | main.rs:2164:21:2164:25 | value | | main.rs:2162:19:2162:19 | T | | main.rs:2164:31:2164:31 | x | | main.rs:2162:5:2165:5 | Self [trait MyFrom2] | | main.rs:2169:21:2169:25 | value | | {EXTERNAL LOCATION} | i64 | @@ -11710,9 +11700,7 @@ inferType | main.rs:2265:21:2265:31 | [...] | TArray | {EXTERNAL LOCATION} | u8 | | main.rs:2265:22:2265:24 | 1u8 | | {EXTERNAL LOCATION} | u8 | | main.rs:2265:27:2265:27 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2265:27:2265:27 | 2 | | {EXTERNAL LOCATION} | u8 | | main.rs:2265:30:2265:30 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2265:30:2265:30 | 3 | | {EXTERNAL LOCATION} | u8 | | main.rs:2266:9:2266:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2266:13:2266:13 | u | | {EXTERNAL LOCATION} | i32 | | main.rs:2266:13:2266:13 | u | | {EXTERNAL LOCATION} | u8 | @@ -11738,11 +11726,8 @@ inferType | main.rs:2271:31:2271:39 | [...] | TArray | {EXTERNAL LOCATION} | i32 | | main.rs:2271:31:2271:39 | [...] | TArray | {EXTERNAL LOCATION} | u32 | | main.rs:2271:32:2271:32 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2271:32:2271:32 | 1 | | {EXTERNAL LOCATION} | u32 | | main.rs:2271:35:2271:35 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2271:35:2271:35 | 2 | | {EXTERNAL LOCATION} | u32 | | main.rs:2271:38:2271:38 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2271:38:2271:38 | 3 | | {EXTERNAL LOCATION} | u32 | | main.rs:2272:9:2272:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2272:13:2272:13 | u | | {EXTERNAL LOCATION} | u32 | | main.rs:2272:18:2272:22 | vals3 | | {EXTERNAL LOCATION} | [;] | @@ -11883,7 +11868,6 @@ inferType | main.rs:2308:19:2308:25 | 0u8..10 | Idx | {EXTERNAL LOCATION} | i32 | | main.rs:2308:19:2308:25 | 0u8..10 | Idx | {EXTERNAL LOCATION} | u8 | | main.rs:2308:24:2308:25 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2308:24:2308:25 | 10 | | {EXTERNAL LOCATION} | u8 | | main.rs:2308:28:2308:29 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2309:13:2309:17 | range | | {EXTERNAL LOCATION} | Range | | main.rs:2309:13:2309:17 | range | Idx | {EXTERNAL LOCATION} | i32 | @@ -12636,11 +12620,9 @@ inferType | main.rs:2583:12:2583:12 | b | | {EXTERNAL LOCATION} | bool | | main.rs:2583:14:2586:9 | { ... } | | {EXTERNAL LOCATION} | Box | | main.rs:2583:14:2586:9 | { ... } | A | {EXTERNAL LOCATION} | Global | -| main.rs:2583:14:2586:9 | { ... } | T | main.rs:2547:5:2549:5 | dyn MyTrait | | main.rs:2583:14:2586:9 | { ... } | T | main.rs:2551:5:2552:19 | S | | main.rs:2583:14:2586:9 | { ... } | T.T | main.rs:2551:5:2552:19 | S | | main.rs:2583:14:2586:9 | { ... } | T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2583:14:2586:9 | { ... } | T.dyn(T) | {EXTERNAL LOCATION} | i32 | | main.rs:2584:17:2584:17 | x | | main.rs:2551:5:2552:19 | S | | main.rs:2584:17:2584:17 | x | T | main.rs:2551:5:2552:19 | S | | main.rs:2584:17:2584:17 | x | T.T | {EXTERNAL LOCATION} | i32 | @@ -12651,26 +12633,20 @@ inferType | main.rs:2584:21:2584:26 | x.m2() | T.T | {EXTERNAL LOCATION} | i32 | | main.rs:2585:13:2585:23 | ...::new(...) | | {EXTERNAL LOCATION} | Box | | main.rs:2585:13:2585:23 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2585:13:2585:23 | ...::new(...) | T | main.rs:2547:5:2549:5 | dyn MyTrait | | main.rs:2585:13:2585:23 | ...::new(...) | T | main.rs:2551:5:2552:19 | S | | main.rs:2585:13:2585:23 | ...::new(...) | T.T | main.rs:2551:5:2552:19 | S | | main.rs:2585:13:2585:23 | ...::new(...) | T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2585:13:2585:23 | ...::new(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | | main.rs:2585:22:2585:22 | x | | main.rs:2551:5:2552:19 | S | | main.rs:2585:22:2585:22 | x | T | main.rs:2551:5:2552:19 | S | | main.rs:2585:22:2585:22 | x | T.T | {EXTERNAL LOCATION} | i32 | | main.rs:2586:16:2588:9 | { ... } | | {EXTERNAL LOCATION} | Box | | main.rs:2586:16:2588:9 | { ... } | A | {EXTERNAL LOCATION} | Global | -| main.rs:2586:16:2588:9 | { ... } | T | main.rs:2547:5:2549:5 | dyn MyTrait | | main.rs:2586:16:2588:9 | { ... } | T | main.rs:2551:5:2552:19 | S | | main.rs:2586:16:2588:9 | { ... } | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2586:16:2588:9 | { ... } | T.dyn(T) | {EXTERNAL LOCATION} | i32 | | main.rs:2587:13:2587:23 | ...::new(...) | | {EXTERNAL LOCATION} | Box | | main.rs:2587:13:2587:23 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2587:13:2587:23 | ...::new(...) | T | main.rs:2547:5:2549:5 | dyn MyTrait | | main.rs:2587:13:2587:23 | ...::new(...) | T | main.rs:2551:5:2552:19 | S | | main.rs:2587:13:2587:23 | ...::new(...) | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2587:13:2587:23 | ...::new(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | | main.rs:2587:22:2587:22 | x | | main.rs:2551:5:2552:19 | S | | main.rs:2587:22:2587:22 | x | T | {EXTERNAL LOCATION} | i32 | | main.rs:2593:22:2597:5 | { ... } | | {EXTERNAL LOCATION} | () | diff --git a/rust/ql/test/library-tests/type-inference/type-inference.ql b/rust/ql/test/library-tests/type-inference/type-inference.ql index 8dcc34ad8001..374884ec4574 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.ql +++ b/rust/ql/test/library-tests/type-inference/type-inference.ql @@ -12,7 +12,7 @@ private predicate relevantNode(AstNode n) { } query predicate inferCertainType(AstNode n, TypePath path, Type t) { - t = TypeInference::CertainTypeInference::inferCertainType(n, path) and + t = TypeInference::inferTypeCertain(n, path) and t != TUnknownType() and relevantNode(n) } @@ -70,7 +70,7 @@ module TypeTest implements TestSig { ( tag = "type" or - t = TypeInference::CertainTypeInference::inferCertainType(n, path) and + t = TypeInference::inferTypeCertain(n, path) and tag = "certainType" ) and location = n.getLocation() and diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index 24a6392c6be1..0b5dc0787fe2 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -146,15 +146,25 @@ signature module InputSig1 { } /** - * Holds if `t` is a pseudo type. Pseudo types are skipped when checking for - * non-instantiations in `isNotInstantiationOf`. + * A special pseudo type used to represent cases where the actual type needs + * to be inferred from the context in a top-down manner. For example, in + * + * ```rust + * let x = Vec::new(); + * x.push(42); + * ``` + * + * the element type of `x` is assigned an unknown type, which allows for type + * information to flow into `x` from the call to `push`. */ - predicate isPseudoType(Type t); + class UnknownType extends Type; /** A type parameter. */ class TypeParameter extends Type; /** + * A type abstraction. I.e., a place in the program where type variables may + * be introduced. * A type abstraction. I.e., a place in the program where type variables may * be introduced. * @@ -647,7 +657,8 @@ module Make1 Input1> { } private Type getNonPseudoTypeAt(App app, TypePath path) { - result = app.getTypeAt(path) and not isPseudoType(result) + result = app.getTypeAt(path) and + not result instanceof UnknownType } pragma[nomagic] @@ -2003,5 +2014,698 @@ module Make1 Input1> { not exists(tm.getTypeAt(TypePath::nil())) and exists(tm.getLocation()) } } + + /** + * Provides the input to `Make3`. + * + * TODO: Eventually align the AST signature with that of the shared CFG library. + */ + signature module InputSig3 { + /** + * A predicate used to reference cached predicates that should be included to the + * cached stage of type inference. Such predicates should themselves reference + * `CachedStage::ref`. + */ + default predicate cachedStageRevRef() { none() } + + /** + * Point this predicate to the `inferType` predicate from the output of this module. + * + * Needed to be able to refer to `inferType` in default signature implementations. + */ + Type inferType(AstNode n, TypePath path); + + /** A boolean type. */ + class BoolType extends Type; + + /** An AST node. */ + class AstNode { + /** Gets a textual representation of this AST node. */ + string toString(); + + /** Gets the location of this AST node. */ + Location getLocation(); + } + + /** Gets the type annotation that applies to `n`, if any. */ + TypeMention getTypeAnnotation(AstNode n); + + /** An expression. */ + class Expr extends AstNode; + + /** + * A switch. + */ + class Switch extends AstNode { + /** + * Gets the expression being switched on. + */ + Expr getExpr(); + + /** Gets the case at the specified (zero-based) `index`. */ + Case getCase(int index); + } + + /** A case in a switch. */ + class Case extends AstNode { + /** Gets a pattern being matched by this case. */ + AstNode getAPattern(); + + /** Gets the body of this case. */ + AstNode getBody(); + } + + /** A ternary conditional expression. */ + class ConditionalExpr extends Expr { + /** Gets the condition of this expression. */ + Expr getCondition(); + + /** Gets the true branch of this expression. */ + Expr getThen(); + + /** Gets the false branch of this expression. */ + Expr getElse(); + } + + /** A binary expression. */ + class BinaryExpr extends Expr { + /** Gets the left operand of this binary expression. */ + Expr getLeftOperand(); + + /** Gets the right operand of this binary expression. */ + Expr getRightOperand(); + } + + /** A short-circuiting logical AND expression. */ + class LogicalAndExpr extends BinaryExpr; + + /** A short-circuiting logical OR expression. */ + class LogicalOrExpr extends BinaryExpr; + + /** + * An assignment expression, either compound or simple. + * + * Examples: + * + * ``` + * x = y + * sum += element + * ``` + */ + class Assignment extends BinaryExpr; + + /** A simple assignment expression, for example `x = y`. */ + class AssignExpr extends Assignment; + + /** A parenthesized expression. */ + class ParenExpr extends Expr { + Expr getExpr(); + } + + /** A variable, for example a local variable or a field. */ + class Variable { + /** Gets the AST node that defines this variable. */ + AstNode getDefiningNode(); + + /** Gets an access to this variable. */ + Expr getAnAccess(); + + /** Gets a textual representation of this element. */ + string toString(); + + /** Gets the location of this element. */ + Location getLocation(); + } + + /** + * A `let` declaration, for example a local variable declaration. + */ + class LetDeclaration extends AstNode { + /** + * Holds if this declaration is a coercion site, meaning that the type of the right + * operand may have to be coerced to the type of the left operand. + */ + predicate isCoercionSite(); + + /** Gets the left operand of this declaration. */ + AstNode getLeftOperand(); + + /** Gets the right operand of this declaration. */ + AstNode getRightOperand(); + } + + /** + * A position where a callable can have a declared type and a call can have + * an inferred type. + */ + class TypePosition { + /** Holds if this position represents the return type of a callable. */ + predicate isReturn(); + + /** Gets a textual representation of this position. */ + string toString(); + } + + /** + * A context needed to resolve calls. + * + * For example, in Rust, we need an additional context to represent the + * candidate receiver type when resolving method calls. + * + * When not used, simply instantiate this class with `Unit`. + */ + bindingset[this] + class CallResolutionContext { + /** Gets a textual representation of this context. */ + bindingset[this] + string toString(); + } + + /** A callable. */ + class Callable { + /** Gets the type parameter at position `ppos` of this callable, if any. */ + TypeParameter getTypeParameter(TypeParameterPosition ppos); + + /** + * Gets an additional type parameter constraint for the given type parameter, + * which applies to this callable. For example, in Rust, a function can apply + * additional constraints on type parameters belonging to the `impl` block + * that the function is defined in. + */ + TypeMention getAdditionalTypeParameterConstraint(TypeParameter tp); + + /** Gets the declared type of this callable at `path` for position `pos`. */ + Type getDeclaredType(TypePosition pos, TypePath path); + + /** Gets a textual representation of this callable. */ + string toString(); + + /** Gets the location of this callable. */ + Location getLocation(); + } + + /** A call expression. */ + class Call extends Expr { + /** Gets the explicit type argument at position `apos` and `path` for this call, if any. */ + Type getTypeArgument(TypeArgumentPosition apos, TypePath path); + + /** Gets the AST node corresponding to the position `pos` of this call. */ + AstNode getNodeAt(TypePosition pos); + + /** + * Gets the target of this call, to be used when inferring certain types. + */ + Callable getTargetCertain(); + + /** Gets the target of this call in the given context. */ + Callable getTarget(CallResolutionContext ctx); + } + + /** + * Gets the inferred type of `call` at `path` and position `pos` in context `ctx`. + * + * By default, this is the inferred type of the node at the given position, but + * in for example Rust, the inferred type of the receiver of a method call needs + * to take the call context into account, in order to use the correct candidate + * receiver type. + * + * The type information provided by this predicate is used to derive type information + * about the call via the call target, such as the return type. + */ + bindingset[ctx] + default Type inferCallTypeBottomUp( + Call call, CallResolutionContext ctx, TypePosition pos, TypePath path + ) { + result = inferType(call.getNodeAt(pos), path) and + exists(ctx) + } + + /** + * Gets the inferred return type of `call` at `path`. + * + * When no post-processing is needed, simply implement this predicate as + * `result = inferCallReturnType(_, _, n, path)`. + */ + Type inferCallReturnType(AstNode n, TypePath path); + + /** + * Gets the top-down inferred type of `call` at `path` and argument position + * `pos`. + * + * This predicate is used to propagate type information from the call target + * into call arguments, for example when an implicitly typed lambda is passed + * as an argument. + * + * Type information is only propagated into arguments with an explicitly unknown + * type. + * + * When no call-context based post-processing is needed, simply implement this + * predicate as `result = inferCallArgumentTypeTopDown(_, _, _, n, path)`. + */ + Type inferCallArgumentTypeTopDown(AstNode n, TypePath path); + + /** + * Holds if `n1` having certain type `t` at `path1` implies that `n2` has + * certain type `t` at `path2`, but not necessarily the other way around. + */ + default predicate inferStepCertain(AstNode n1, TypePath path1, AstNode n2, TypePath path2) { + none() + } + + /** + * Holds if `n1` having certain type `t` at `path1` implies that `n2` has + * certain type `t` at `path2`, and vice versa. + */ + default predicate inferStepSymmetricCertain( + AstNode n1, TypePath path1, AstNode n2, TypePath path2 + ) { + none() + } + + /** + * Gets the inferred certain type of `n` at `path`. + * + * This predicate will be included directly in the exposed `inferTypeCertain` predicate. + */ + default Type inferTypeCertainSpecific(AstNode n, TypePath path) { none() } + + /** + * Holds if `n1` having type `t` at `path1` implies that `n2` has type `t` at `path2`, + * but not necessarily the other way around. + */ + predicate inferStep(AstNode n1, TypePath path1, AstNode n2, TypePath path2); + + /** + * Holds if `n1` having type `t` at `path1` implies that `n2` has type `t` at `path2`, + * and vice versa. + */ + predicate inferStepSymmetric(AstNode n1, TypePath path1, AstNode n2, TypePath path2); + + /** + * Holds if `n1` having type `t` at `path1` implies that `n2` has a type `lub` at + * `path2`, where `lub` is a least-upper-bound of the types of all the nodes that + * have lub steps into `n2`. + * + * For example, for a ternary conditional expression, there are lub steps from each + * of the branches into the conditional expression itself. + * + * We don't actually model the least-upper-bound computation, instead we interpret + * `inferLubStep(n1, path1, n2, path2)` as + * + * - `inferStep(n1, path1, n2, path2)`, that is type information flows directly into + * the lub, and + * - `inferStep(n2, path2, n1, path1)`, provided that `n1` is unique, that is, type + * type information flows from the lub back into the unique input `n1`, and + * - type information is allowed to flow from the lub into any of its inputs, provided + * that they have an explicitly unknown type. + */ + default predicate inferLubStep(AstNode n1, TypePath path1, AstNode n2, TypePath path2) { + none() + } + + /** + * Gets the top-down inferred type of `n` at `path`. + * + * Type information is only propagated into nodes with an explicitly unknown + * type. + */ + default Type inferTypeTopDown(AstNode n, TypePath path) { none() } + + /** + * Gets the inferred type of `n` at `path`. + * + * This predicate will be included directly in the exposed `inferType` predicate. + */ + Type inferTypeSpecific(AstNode n, TypePath path); + } + + module Make3 { + private import Input3 + + /** Provides logic for inferring certain type information. */ + private module Certain { + /** Gets the type of `n`, which has an explicit type annotation. */ + pragma[nomagic] + Type inferAnnotatedType(AstNode n, TypePath path) { + result = getTypeAnnotation(n).getTypeAt(path) + } + + private predicate stepSymmetricCertain( + AstNode n1, TypePath path1, AstNode n2, TypePath path2 + ) { + path1.isEmpty() and + path2.isEmpty() and + ( + exists(Variable v | n1 = v.getAnAccess() and n2 = v.getDefiningNode()) + or + exists(LetDeclaration let | + not let.isCoercionSite() and + n1 = let.getLeftOperand() and + n2 = let.getRightOperand() + ) + or + n1 = n2.(ParenExpr).getExpr() + ) + or + inferStepSymmetricCertain(n1, path1, n2, path2) + } + + predicate stepCertain(AstNode n1, TypePath path1, AstNode n2, TypePath path2) { + stepSymmetricCertain(n1, path1, n2, path2) + or + stepSymmetricCertain(n2, path2, n1, path1) + or + inferStepCertain(n1, path1, n2, path2) + } + + pragma[nomagic] + private Type inferTypeFromStepCertain(AstNode n, TypePath path) { + exists(TypePath prefix1, AstNode n2, TypePath prefix2, TypePath suffix | + result = inferTypeCertain(n2, prefix2.appendInverse(suffix)) and + path = prefix1.append(suffix) and + stepCertain(n2, prefix2, n, prefix1) + ) + } + + private Type inferLogicalOperationType(AstNode n, TypePath path) { + ( + exists(LogicalAndExpr lae | n = [lae, lae.getLeftOperand(), lae.getRightOperand()]) or + exists(LogicalOrExpr loe | n = [loe, loe.getLeftOperand(), loe.getRightOperand()]) + ) and + result instanceof BoolType and + path.isEmpty() + } + + pragma[nomagic] + private Type getCertainCallExprReturnType(Call call, TypePath path) { + exists(TypePosition ret | + ret.isReturn() and + forex(Callable target | target = call.getTargetCertain() | + result = target.getDeclaredType(ret, path) + ) + ) + } + + pragma[nomagic] + private Type inferCertainCallExprReturnType(Call call, TypePath path) { + exists(Type ty, TypePath prefix | ty = getCertainCallExprReturnType(call, prefix) | + exists( + Callable target, TypePath suffix, TypeParameterPosition tppos, + TypeArgumentPosition tapos + | + ty = target.getTypeParameter(tppos) and + path = prefix.append(suffix) and + result = call.getTypeArgument(tapos, suffix) and + typeArgumentParameterPositionMatch(tapos, tppos) + ) + or + not ty instanceof TypeParameter and + result = ty and + path = prefix + ) + } + + /** Gets the inferred certain type of `n` at `path`. */ + cached + Type inferTypeCertain(AstNode n, TypePath path) { + CachedStage::ref() and + result = inferAnnotatedType(n, path) + or + result = inferTypeFromStepCertain(n, path) + or + result = inferTypeCertainSpecific(n, path) + or + result = inferLogicalOperationType(n, path) + or + result = inferCertainCallExprReturnType(n, path) + or + infersCertainTypeAt(n, path, result.getATypeParameter()) + } + + /** + * Holds if `n` has complete and certain type information at the type path + * `prefix.tp`. This entails that the type at `prefix` must be the type + * that declares `tp`. + */ + pragma[nomagic] + private predicate infersCertainTypeAt(AstNode n, TypePath prefix, TypeParameter tp) { + exists(TypePath path | + exists(inferTypeCertain(n, path)) and + path.isSnoc(prefix, tp) + ) + } + + /** + * Holds if `n` has complete and certain type information at `path`. + */ + pragma[nomagic] + predicate hasInferredCertainType(AstNode n, TypePath path) { + exists(inferTypeCertain(n, path)) + } + + /** + * Holds if `n` having type `t` at `path` conflicts with certain type information + * at `prefix`. + */ + bindingset[n, prefix, path, t] + pragma[inline_late] + predicate certainTypeConflict(AstNode n, TypePath prefix, TypePath path, Type t) { + inferTypeCertain(n, path) != t + or + // If we infer that `n` has _some_ type at `T1.T2....Tn`, and we also + // know that `n` certainly has type `certainType` at `T1.T2...Ti`, `0 <= i < n`, + // then it must be the case that `T(i+1)` is a type parameter of `certainType`, + // otherwise there is a conflict. + // + // Below, `prefix` is `T1.T2...Ti` and `tp` is `T(i+1)`. + exists(TypePath suffix, TypeParameter tp, Type certainType | + path = prefix.appendInverse(suffix) and + tp = suffix.getHead() and + inferTypeCertain(n, prefix) = certainType and + not certainType.getATypeParameter() = tp + ) + } + } + + predicate inferTypeCertain = Certain::inferTypeCertain/2; + + private predicate lubStep(AstNode n1, TypePath path1, AstNode n2, TypePath path2) { + path1.isEmpty() and + path2.isEmpty() and + ( + n1 = n2.(Switch).getCase(_).getBody() + or + n2 = any(ConditionalExpr ce | n1 = [ce.getThen(), ce.getElse()]) + ) + or + inferLubStep(n1, path1, n2, path2) + } + + private predicate stepSymmetric(AstNode n1, TypePath path1, AstNode n2, TypePath path2) { + path1.isEmpty() and + path2.isEmpty() and + ( + exists(AssignExpr ae | + ae.getLeftOperand() = n1 and + ae.getRightOperand() = n2 + ) + or + exists(LetDeclaration let | + let.getLeftOperand() = n1 and + let.getRightOperand() = n2 + ) + or + exists(Switch switch | + n1 = switch.getExpr() and + n2 = switch.getCase(_).getAPattern() + ) + ) + or + inferStepSymmetric(n1, path1, n2, path2) + } + + private predicate step(AstNode n1, TypePath path1, AstNode n2, TypePath path2) { + inferStep(n1, path1, n2, path2) + or + stepSymmetric(n1, path1, n2, path2) + or + stepSymmetric(n2, path2, n1, path1) + or + Certain::stepCertain(n1, path1, n2, path2) + or + lubStep(n1, path1, n2, path2) + or + n2 = unique(AstNode n | lubStep(n, _, n1, _) | n) and + lubStep(n2, path2, n1, path1) + } + + pragma[nomagic] + private Type inferTypeFromStep(AstNode n, TypePath path) { + exists(TypePath prefix1, AstNode n2, TypePath prefix2, TypePath suffix | + result = inferType(n2, prefix2.appendInverse(suffix)) and + path = prefix1.append(suffix) and + step(n2, prefix2, n, prefix1) + ) + } + + pragma[nomagic] + private Type inferTypeFromLubStepTopDown(AstNode n, TypePath path) { + exists(TypePath prefix1, AstNode n2, TypePath prefix2, TypePath suffix | + result = inferType(n2, prefix2.appendInverse(suffix)) and + path = prefix1.append(suffix) and + lubStep(n, prefix1, n2, prefix2) + ) + } + + /** + * Gets the inferred type of `n` at `path`. + */ + cached + Type inferType(AstNode n, TypePath path) { + CachedStage::ref() and + result = inferTypeCertain(n, path) + or + // Don't propagate type information into a node which conflicts with certain + // type information. + forall(TypePath prefix | + Certain::hasInferredCertainType(n, prefix) and + prefix.isPrefixOf(path) + | + not Certain::certainTypeConflict(n, prefix, path, result) + ) and + ( + result = inferTypeFromStep(n, path) + or + result = TopDownTyping::inferType(n, path) + or + result = inferCallReturnType(n, path) + or + result = TopDownTyping::inferType(n, path) + or + result = TopDownTyping::inferType(n, path) + or + result = inferTypeSpecific(n, path) + ) + } + + private module TypePositionMatchingInput { + class DeclarationPosition = TypePosition; + + class AccessPosition = DeclarationPosition; + + predicate accessDeclarationPositionMatch(AccessPosition apos, DeclarationPosition dpos) { + apos = dpos + } + } + + /** + * A matching configuration for resolving types of calls. + */ + private module CallMatchingInput implements MatchingWithEnvironmentInputSig { + import TypePositionMatchingInput + + class Declaration = Callable; + + bindingset[decl] + TypeMention getATypeParameterConstraint(TypeParameter tp, Declaration decl) { + result = Input2::getATypeParameterConstraint(tp) and + exists(decl) + or + result = decl.getAdditionalTypeParameterConstraint(tp) + } + + class AccessEnvironment = CallResolutionContext; + + final private class CallFinal = Call; + + class Access extends CallFinal { + bindingset[e] + Type getInferredType(AccessEnvironment e, AccessPosition apos, TypePath path) { + result = inferCallTypeBottomUp(this, e, apos, path) + } + } + } + + private module CallMatching = MatchingWithEnvironment; + + private Type inferCallType( + Call call, CallResolutionContext ctx, TypePosition pos, AstNode n, TypePath path + ) { + n = call.getNodeAt(pos) and + result = CallMatching::inferAccessType(call, ctx, pos, path) + } + + Type inferCallReturnType(Call call, CallResolutionContext ctx, AstNode n, TypePath path) { + exists(TypePosition pos | + result = inferCallType(call, ctx, pos, n, path) and + pos.isReturn() + ) + } + + Type inferCallArgumentTypeTopDown( + Call call, CallResolutionContext ctx, TypePosition pos, AstNode n, TypePath path + ) { + result = inferCallType(call, ctx, pos, n, path) and + not pos.isReturn() and + hasUnknownType(n) + } + + pragma[nomagic] + private predicate hasUnknownTypeAt(AstNode n, TypePath path) { + inferType(n, path) instanceof UnknownType + } + + pragma[nomagic] + private predicate hasUnknownType(AstNode n) { hasUnknownTypeAt(n, _) } + + private signature Type inferTypeTopDownSig(AstNode n, TypePath path); + + /** + * Given a predicate `infer` for inferring the type of an AST node `n` + * top-down from a context, this module exposes the predicate `inferType`, which + * restricts type information to only flow top-down into `n` when `n` has an + * explicit unknown type. + */ + private module TopDownTyping { + pragma[nomagic] + private Type inferTypeTopDown(AstNode n, TypePath prefix, TypePath path) { + result = infer(n, path) and + hasUnknownType(n) and + prefix = path.getAPrefix() + } + + pragma[nomagic] + Type inferType(AstNode n, TypePath path) { + exists(TypePath prefix | + result = inferTypeTopDown(n, prefix, path) and + hasUnknownTypeAt(n, prefix) + ) + } + } + + /** + * Gets the inferred root type of `n`, if any. + */ + Type inferType(AstNode n) { result = inferType(n, TypePath::nil()) } + + // todo: consistency checks + /** The cached stage of type inference. */ + cached + module CachedStage { + /** Reference to the cached stage of type inference. */ + cached + predicate ref() { any() } + + /** Reverse references to the predicates that reference `ref()`. */ + cached + predicate revRef() { + (exists(inferTypeCertain(_, _)) implies any()) + or + (exists(inferType(_, _)) implies any()) + or + cachedStageRevRef() + } + } + } } } From 1d071ac6ad405f5f63afec5158729def1cbf97cd Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 29 May 2026 14:24:56 +0200 Subject: [PATCH 2/3] wip --- .../typeinference/BlanketImplementation.qll | 1 - .../internal/typeinference/FunctionType.qll | 1 - .../rust/internal/typeinference/Type.qll | 9 - .../internal/typeinference/TypeInference.qll | 103 +- .../internal/typeinference/TypeMention.qll | 2 +- .../TypeInferenceConsistency.expected | 4 - .../PathResolutionConsistency.expected | 1 - .../type-inference/type-inference.expected | 1318 +---------------- .../typeinference/internal/TypeInference.qll | 30 +- 9 files changed, 165 insertions(+), 1304 deletions(-) delete mode 100644 rust/ql/test/library-tests/dataflow/sources/web_frameworks/CONSISTENCY/TypeInferenceConsistency.expected diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/BlanketImplementation.qll b/rust/ql/lib/codeql/rust/internal/typeinference/BlanketImplementation.qll index 7c56300f3581..afbfb5e4c053 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/BlanketImplementation.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/BlanketImplementation.qll @@ -96,7 +96,6 @@ module SatisfiesBlanketConstraint< Type getTypeAt(TypePath path) { result = at.getTypeAt(blanketPath.appendInverse(path)) and - not result = TNeverType() and not result = TUnknownType() } diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll index d128875eda7e..819ac0d3bd5a 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll @@ -329,7 +329,6 @@ module ArgIsInstantiationOf; * the receiver of field expression call. */ pragma[nomagic] -private Type inferFieldExprType(AstNode n, TypePath path) { +private Type inferFieldExprType(AstNode n, TypePath path, boolean topDown) { exists( FieldExprMatchingInput::Access a, FieldExprMatchingInput::AccessPosition apos, TypePath path0 | @@ -3322,6 +3362,7 @@ private Type inferFieldExprType(AstNode n, TypePath path) { | if apos.isSelf() then + topDown = true and exists(Type receiverType | receiverType = inferType(n) | if receiverType instanceof RefType then @@ -3331,7 +3372,9 @@ private Type inferFieldExprType(AstNode n, TypePath path) { path = TypePath::cons(getRefTypeParameter(_), path0) else path = path0 ) - else path = path0 + else ( + topDown = false and path = path0 + ) ) } @@ -3437,7 +3480,7 @@ private DynTraitTypeParameter getDynFutureOutputTypeParameter() { pragma[nomagic] predicate isUnitBlockExpr(BlockExpr be) { not be.getStmtList().hasTailExpr() and - not be = any(Callable c).getBody() and + // not be = any(Callable c).getBody() and not be.hasLabel() } diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeMention.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeMention.qll index c4650f97c34b..71a09f0f1788 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/TypeMention.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeMention.qll @@ -676,7 +676,7 @@ private module MkTypeMention {...} | A | main.rs:3:5:4:13 | S | | main.rs:38:18:38:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:38:18:38:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:38:18:38:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:38:18:38:28 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:38:26:38:26 | x | | main.rs:16:5:19:5 | GenericThing | | main.rs:38:26:38:26 | x | A | main.rs:3:5:4:13 | S | @@ -1303,7 +1074,6 @@ inferCertainType | main.rs:41:17:41:37 | GenericThing {...} | | main.rs:16:5:19:5 | GenericThing | | main.rs:42:18:42:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:42:18:42:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:42:18:42:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:42:18:42:28 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:42:26:42:26 | x | | main.rs:16:5:19:5 | GenericThing | | main.rs:42:26:42:26 | x | A | main.rs:3:5:4:13 | S | @@ -1311,7 +1081,6 @@ inferCertainType | main.rs:46:17:48:9 | OptionS {...} | | main.rs:21:5:23:5 | OptionS | | main.rs:49:18:49:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:49:18:49:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:49:18:49:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:49:18:49:28 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:49:26:49:26 | x | | main.rs:21:5:23:5 | OptionS | | main.rs:52:13:52:13 | x | | main.rs:16:5:19:5 | GenericThing | @@ -1322,7 +1091,6 @@ inferCertainType | main.rs:52:17:54:9 | GenericThing::<...> {...} | A.T | main.rs:3:5:4:13 | S | | main.rs:55:18:55:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:55:18:55:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:55:18:55:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:55:18:55:28 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:55:26:55:26 | x | | main.rs:16:5:19:5 | GenericThing | | main.rs:55:26:55:26 | x | A | main.rs:10:5:14:5 | MyOption | @@ -1334,23 +1102,16 @@ inferCertainType | main.rs:61:30:61:30 | x | | main.rs:16:5:19:5 | GenericThing | | main.rs:62:18:62:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:62:18:62:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:62:18:62:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:62:18:62:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:62:26:62:26 | a | | main.rs:10:5:14:5 | MyOption | | main.rs:62:26:62:26 | a | T | main.rs:3:5:4:13 | S | | main.rs:65:16:68:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:66:9:66:29 | simple_field_access(...) | | {EXTERNAL LOCATION} | () | -| main.rs:67:9:67:30 | generic_field_access(...) | | {EXTERNAL LOCATION} | () | | main.rs:75:19:75:22 | SelfParam | | main.rs:72:5:72:21 | Foo | -| main.rs:75:33:77:9 | { ... } | | main.rs:72:5:72:21 | Foo | | main.rs:76:13:76:16 | self | | main.rs:72:5:72:21 | Foo | | main.rs:79:19:79:22 | SelfParam | | main.rs:72:5:72:21 | Foo | -| main.rs:79:32:81:9 | { ... } | | main.rs:72:5:72:21 | Foo | | main.rs:80:13:80:16 | self | | main.rs:72:5:72:21 | Foo | -| main.rs:84:23:89:5 | { ... } | | main.rs:72:5:72:21 | Foo | | main.rs:85:18:85:33 | "main.rs::m1::f\\n" | | {EXTERNAL LOCATION} | & | | main.rs:85:18:85:33 | "main.rs::m1::f\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:85:18:85:33 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:85:18:85:33 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:86:13:86:13 | x | | main.rs:72:5:72:21 | Foo | | main.rs:86:17:86:22 | Foo {...} | | main.rs:72:5:72:21 | Foo | @@ -1358,17 +1119,13 @@ inferCertainType | main.rs:88:9:88:9 | x | | main.rs:72:5:72:21 | Foo | | main.rs:91:14:91:14 | x | | main.rs:72:5:72:21 | Foo | | main.rs:91:22:91:22 | y | | main.rs:72:5:72:21 | Foo | -| main.rs:91:37:95:5 | { ... } | | main.rs:72:5:72:21 | Foo | | main.rs:92:18:92:33 | "main.rs::m1::g\\n" | | {EXTERNAL LOCATION} | & | | main.rs:92:18:92:33 | "main.rs::m1::g\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:92:18:92:33 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:92:18:92:33 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:93:9:93:9 | x | | main.rs:72:5:72:21 | Foo | | main.rs:94:9:94:9 | y | | main.rs:72:5:72:21 | Foo | -| main.rs:102:30:105:9 | { ... } | | main.rs:99:5:99:29 | ATupleStruct | | main.rs:116:25:116:28 | SelfParam | | main.rs:115:5:117:5 | Self [trait MyTrait] | | main.rs:121:25:121:28 | SelfParam | | main.rs:110:5:113:5 | MyThing | -| main.rs:121:39:123:9 | { ... } | | {EXTERNAL LOCATION} | bool | | main.rs:122:13:122:16 | self | | main.rs:110:5:113:5 | MyThing | | main.rs:126:16:135:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:127:13:127:13 | x | | main.rs:110:5:113:5 | MyThing | @@ -1388,40 +1145,31 @@ inferCertainType | main.rs:144:32:146:13 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:145:26:145:31 | "foo!\\n" | | {EXTERNAL LOCATION} | & | | main.rs:145:26:145:31 | "foo!\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:145:26:145:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:145:26:145:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:151:25:151:29 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:151:25:151:29 | SelfParam | TRef | main.rs:149:9:154:9 | Self [trait Bar] | | main.rs:151:32:153:13 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:152:26:152:31 | "bar!\\n" | | {EXTERNAL LOCATION} | & | | main.rs:152:26:152:31 | "bar!\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:152:26:152:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:152:26:152:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:163:15:184:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:165:9:168:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:169:9:172:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:173:9:176:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:177:9:183:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:181:13:181:29 | ...::a_method(...) | | {EXTERNAL LOCATION} | () | | main.rs:181:27:181:28 | &x | | {EXTERNAL LOCATION} | & | -| main.rs:182:13:182:29 | ...::a_method(...) | | {EXTERNAL LOCATION} | () | | main.rs:182:27:182:28 | &x | | {EXTERNAL LOCATION} | & | | main.rs:200:15:200:18 | SelfParam | | main.rs:188:5:191:5 | MyThing | | main.rs:200:15:200:18 | SelfParam | A | main.rs:193:5:194:14 | S1 | -| main.rs:200:27:202:9 | { ... } | | main.rs:193:5:194:14 | S1 | | main.rs:201:13:201:16 | self | | main.rs:188:5:191:5 | MyThing | | main.rs:201:13:201:16 | self | A | main.rs:193:5:194:14 | S1 | | main.rs:207:15:207:18 | SelfParam | | main.rs:188:5:191:5 | MyThing | | main.rs:207:15:207:18 | SelfParam | A | main.rs:195:5:196:14 | S2 | -| main.rs:207:29:209:9 | { ... } | | main.rs:188:5:191:5 | MyThing | -| main.rs:207:29:209:9 | { ... } | A | main.rs:195:5:196:14 | S2 | | main.rs:208:13:208:30 | Self {...} | | main.rs:188:5:191:5 | MyThing | | main.rs:208:13:208:30 | Self {...} | A | main.rs:195:5:196:14 | S2 | | main.rs:208:23:208:26 | self | | main.rs:188:5:191:5 | MyThing | | main.rs:208:23:208:26 | self | A | main.rs:195:5:196:14 | S2 | | main.rs:213:15:213:18 | SelfParam | | main.rs:188:5:191:5 | MyThing | | main.rs:213:15:213:18 | SelfParam | A | main.rs:212:10:212:10 | T | -| main.rs:213:26:215:9 | { ... } | | main.rs:212:10:212:10 | T | | main.rs:214:13:214:16 | self | | main.rs:188:5:191:5 | MyThing | | main.rs:214:13:214:16 | self | A | main.rs:212:10:212:10 | T | | main.rs:218:16:234:5 | { ... } | | {EXTERNAL LOCATION} | () | @@ -1431,22 +1179,18 @@ inferCertainType | main.rs:220:17:220:33 | MyThing {...} | | main.rs:188:5:191:5 | MyThing | | main.rs:223:18:223:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:223:18:223:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:223:18:223:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:223:18:223:28 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:223:26:223:26 | x | | main.rs:188:5:191:5 | MyThing | | main.rs:224:18:224:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:224:18:224:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:224:18:224:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:224:18:224:28 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:224:26:224:26 | y | | main.rs:188:5:191:5 | MyThing | | main.rs:226:18:226:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:226:18:226:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:226:18:226:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:226:18:226:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:226:26:226:26 | x | | main.rs:188:5:191:5 | MyThing | | main.rs:227:18:227:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:227:18:227:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:227:18:227:33 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:227:18:227:33 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:227:26:227:26 | y | | main.rs:188:5:191:5 | MyThing | | main.rs:229:13:229:13 | x | | main.rs:188:5:191:5 | MyThing | @@ -1455,55 +1199,44 @@ inferCertainType | main.rs:230:17:230:33 | MyThing {...} | | main.rs:188:5:191:5 | MyThing | | main.rs:232:18:232:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:232:18:232:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:232:18:232:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:232:18:232:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:232:26:232:26 | x | | main.rs:188:5:191:5 | MyThing | | main.rs:233:18:233:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:233:18:233:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:233:18:233:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:233:18:233:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:233:26:233:26 | y | | main.rs:188:5:191:5 | MyThing | | main.rs:257:15:257:18 | SelfParam | | main.rs:256:5:265:5 | Self [trait MyTrait] | | main.rs:259:15:259:18 | SelfParam | | main.rs:256:5:265:5 | Self [trait MyTrait] | -| main.rs:262:9:264:9 | { ... } | | main.rs:256:5:265:5 | Self [trait MyTrait] | | main.rs:263:13:263:16 | self | | main.rs:256:5:265:5 | Self [trait MyTrait] | | main.rs:269:16:269:19 | SelfParam | | main.rs:267:5:272:5 | Self [trait MyProduct] | | main.rs:271:16:271:19 | SelfParam | | main.rs:267:5:272:5 | Self [trait MyProduct] | | main.rs:274:43:274:43 | x | | main.rs:274:26:274:40 | T2 | -| main.rs:274:56:276:5 | { ... } | | main.rs:274:22:274:23 | T1 | | main.rs:275:9:275:9 | x | | main.rs:274:26:274:40 | T2 | | main.rs:280:15:280:18 | SelfParam | | main.rs:238:5:241:5 | MyThing | | main.rs:280:15:280:18 | SelfParam | A | main.rs:249:5:250:14 | S1 | -| main.rs:280:27:282:9 | { ... } | | main.rs:249:5:250:14 | S1 | | main.rs:281:13:281:16 | self | | main.rs:238:5:241:5 | MyThing | | main.rs:281:13:281:16 | self | A | main.rs:249:5:250:14 | S1 | | main.rs:287:15:287:18 | SelfParam | | main.rs:238:5:241:5 | MyThing | | main.rs:287:15:287:18 | SelfParam | A | main.rs:251:5:252:14 | S2 | -| main.rs:287:29:289:9 | { ... } | | main.rs:238:5:241:5 | MyThing | -| main.rs:287:29:289:9 | { ... } | A | main.rs:251:5:252:14 | S2 | | main.rs:288:13:288:30 | Self {...} | | main.rs:238:5:241:5 | MyThing | | main.rs:288:13:288:30 | Self {...} | A | main.rs:251:5:252:14 | S2 | | main.rs:288:23:288:26 | self | | main.rs:238:5:241:5 | MyThing | | main.rs:288:23:288:26 | self | A | main.rs:251:5:252:14 | S2 | | main.rs:299:15:299:18 | SelfParam | | main.rs:238:5:241:5 | MyThing | | main.rs:299:15:299:18 | SelfParam | A | main.rs:253:5:254:14 | S3 | -| main.rs:299:27:301:9 | { ... } | | main.rs:294:10:294:11 | TD | | main.rs:306:15:306:18 | SelfParam | | main.rs:243:5:247:5 | MyPair | | main.rs:306:15:306:18 | SelfParam | P1 | main.rs:304:10:304:10 | I | | main.rs:306:15:306:18 | SelfParam | P2 | main.rs:249:5:250:14 | S1 | -| main.rs:306:26:308:9 | { ... } | | main.rs:304:10:304:10 | I | | main.rs:307:13:307:16 | self | | main.rs:243:5:247:5 | MyPair | | main.rs:307:13:307:16 | self | P1 | main.rs:304:10:304:10 | I | | main.rs:307:13:307:16 | self | P2 | main.rs:249:5:250:14 | S1 | | main.rs:313:15:313:18 | SelfParam | | main.rs:243:5:247:5 | MyPair | | main.rs:313:15:313:18 | SelfParam | P1 | main.rs:249:5:250:14 | S1 | | main.rs:313:15:313:18 | SelfParam | P2 | main.rs:251:5:252:14 | S2 | -| main.rs:313:27:315:9 | { ... } | | main.rs:253:5:254:14 | S3 | | main.rs:320:15:320:18 | SelfParam | | main.rs:243:5:247:5 | MyPair | | main.rs:320:15:320:18 | SelfParam | P1 | main.rs:238:5:241:5 | MyThing | | main.rs:320:15:320:18 | SelfParam | P1.A | main.rs:318:10:318:11 | TT | | main.rs:320:15:320:18 | SelfParam | P2 | main.rs:253:5:254:14 | S3 | -| main.rs:320:27:323:9 | { ... } | | main.rs:318:10:318:11 | TT | | main.rs:321:25:321:28 | self | | main.rs:243:5:247:5 | MyPair | | main.rs:321:25:321:28 | self | P1 | main.rs:238:5:241:5 | MyThing | | main.rs:321:25:321:28 | self | P1.A | main.rs:318:10:318:11 | TT | @@ -1511,53 +1244,43 @@ inferCertainType | main.rs:329:16:329:19 | SelfParam | | main.rs:243:5:247:5 | MyPair | | main.rs:329:16:329:19 | SelfParam | P1 | main.rs:327:10:327:10 | A | | main.rs:329:16:329:19 | SelfParam | P2 | main.rs:327:10:327:10 | A | -| main.rs:329:27:331:9 | { ... } | | main.rs:327:10:327:10 | A | | main.rs:330:13:330:16 | self | | main.rs:243:5:247:5 | MyPair | | main.rs:330:13:330:16 | self | P1 | main.rs:327:10:327:10 | A | | main.rs:330:13:330:16 | self | P2 | main.rs:327:10:327:10 | A | | main.rs:334:16:334:19 | SelfParam | | main.rs:243:5:247:5 | MyPair | | main.rs:334:16:334:19 | SelfParam | P1 | main.rs:327:10:327:10 | A | | main.rs:334:16:334:19 | SelfParam | P2 | main.rs:327:10:327:10 | A | -| main.rs:334:27:336:9 | { ... } | | main.rs:327:10:327:10 | A | | main.rs:335:13:335:16 | self | | main.rs:243:5:247:5 | MyPair | | main.rs:335:13:335:16 | self | P1 | main.rs:327:10:327:10 | A | | main.rs:335:13:335:16 | self | P2 | main.rs:327:10:327:10 | A | | main.rs:342:16:342:19 | SelfParam | | main.rs:243:5:247:5 | MyPair | | main.rs:342:16:342:19 | SelfParam | P1 | main.rs:251:5:252:14 | S2 | | main.rs:342:16:342:19 | SelfParam | P2 | main.rs:249:5:250:14 | S1 | -| main.rs:342:28:344:9 | { ... } | | main.rs:249:5:250:14 | S1 | | main.rs:343:13:343:16 | self | | main.rs:243:5:247:5 | MyPair | | main.rs:343:13:343:16 | self | P1 | main.rs:251:5:252:14 | S2 | | main.rs:343:13:343:16 | self | P2 | main.rs:249:5:250:14 | S1 | | main.rs:347:16:347:19 | SelfParam | | main.rs:243:5:247:5 | MyPair | | main.rs:347:16:347:19 | SelfParam | P1 | main.rs:251:5:252:14 | S2 | | main.rs:347:16:347:19 | SelfParam | P2 | main.rs:249:5:250:14 | S1 | -| main.rs:347:28:349:9 | { ... } | | main.rs:251:5:252:14 | S2 | | main.rs:348:13:348:16 | self | | main.rs:243:5:247:5 | MyPair | | main.rs:348:13:348:16 | self | P1 | main.rs:251:5:252:14 | S2 | | main.rs:348:13:348:16 | self | P2 | main.rs:249:5:250:14 | S1 | | main.rs:352:46:352:46 | p | | main.rs:352:24:352:43 | P | -| main.rs:352:58:354:5 | { ... } | | main.rs:352:16:352:17 | V1 | | main.rs:353:9:353:9 | p | | main.rs:352:24:352:43 | P | | main.rs:356:46:356:46 | p | | main.rs:356:24:356:43 | P | -| main.rs:356:58:358:5 | { ... } | | main.rs:356:20:356:21 | V2 | | main.rs:357:9:357:9 | p | | main.rs:356:24:356:43 | P | | main.rs:360:54:360:54 | p | | main.rs:243:5:247:5 | MyPair | | main.rs:360:54:360:54 | p | P1 | main.rs:360:20:360:21 | V0 | | main.rs:360:54:360:54 | p | P2 | main.rs:360:32:360:51 | P | -| main.rs:360:78:362:5 | { ... } | | main.rs:360:24:360:25 | V1 | | main.rs:361:9:361:9 | p | | main.rs:243:5:247:5 | MyPair | | main.rs:361:9:361:9 | p | P1 | main.rs:360:20:360:21 | V0 | | main.rs:361:9:361:9 | p | P2 | main.rs:360:32:360:51 | P | | main.rs:366:23:366:26 | SelfParam | | main.rs:364:5:367:5 | Self [trait ConvertTo] | | main.rs:371:23:371:26 | SelfParam | | main.rs:369:10:369:23 | T | -| main.rs:371:35:373:9 | { ... } | | main.rs:249:5:250:14 | S1 | | main.rs:372:13:372:16 | self | | main.rs:369:10:369:23 | T | | main.rs:376:41:376:45 | thing | | main.rs:376:23:376:38 | T | -| main.rs:376:57:378:5 | { ... } | | main.rs:376:19:376:20 | TS | | main.rs:377:9:377:13 | thing | | main.rs:376:23:376:38 | T | | main.rs:380:56:380:60 | thing | | main.rs:380:39:380:53 | TP | -| main.rs:380:73:383:5 | { ... } | | main.rs:249:5:250:14 | S1 | | main.rs:382:9:382:13 | thing | | main.rs:380:39:380:53 | TP | | main.rs:385:16:456:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:386:13:386:20 | thing_s1 | | main.rs:238:5:241:5 | MyThing | @@ -1568,33 +1291,28 @@ inferCertainType | main.rs:388:24:388:40 | MyThing {...} | | main.rs:238:5:241:5 | MyThing | | main.rs:392:18:392:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:392:18:392:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:392:18:392:38 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:392:18:392:38 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:392:26:392:33 | thing_s1 | | main.rs:238:5:241:5 | MyThing | | main.rs:393:18:393:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:393:18:393:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:393:18:393:40 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:393:18:393:40 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:393:26:393:33 | thing_s2 | | main.rs:238:5:241:5 | MyThing | | main.rs:394:13:394:14 | s3 | | main.rs:253:5:254:14 | S3 | | main.rs:394:22:394:29 | thing_s3 | | main.rs:238:5:241:5 | MyThing | | main.rs:395:18:395:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:395:18:395:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:395:18:395:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:395:18:395:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:395:26:395:27 | s3 | | main.rs:253:5:254:14 | S3 | | main.rs:397:13:397:14 | p1 | | main.rs:243:5:247:5 | MyPair | | main.rs:397:18:397:42 | MyPair {...} | | main.rs:243:5:247:5 | MyPair | | main.rs:398:18:398:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:398:18:398:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:398:18:398:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:398:18:398:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:398:26:398:27 | p1 | | main.rs:243:5:247:5 | MyPair | | main.rs:400:13:400:14 | p2 | | main.rs:243:5:247:5 | MyPair | | main.rs:400:18:400:42 | MyPair {...} | | main.rs:243:5:247:5 | MyPair | | main.rs:401:18:401:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:401:18:401:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:401:18:401:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:401:18:401:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:401:26:401:27 | p2 | | main.rs:243:5:247:5 | MyPair | | main.rs:403:13:403:14 | p3 | | main.rs:243:5:247:5 | MyPair | @@ -1602,7 +1320,6 @@ inferCertainType | main.rs:404:17:404:33 | MyThing {...} | | main.rs:238:5:241:5 | MyThing | | main.rs:407:18:407:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:407:18:407:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:407:18:407:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:407:18:407:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:407:26:407:27 | p3 | | main.rs:243:5:247:5 | MyPair | | main.rs:410:13:410:13 | a | | main.rs:243:5:247:5 | MyPair | @@ -1610,58 +1327,48 @@ inferCertainType | main.rs:411:17:411:17 | a | | main.rs:243:5:247:5 | MyPair | | main.rs:412:18:412:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:412:18:412:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:412:18:412:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:412:18:412:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:413:17:413:17 | a | | main.rs:243:5:247:5 | MyPair | | main.rs:414:18:414:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:414:18:414:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:414:18:414:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:414:18:414:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:420:13:420:13 | b | | main.rs:243:5:247:5 | MyPair | | main.rs:420:17:420:41 | MyPair {...} | | main.rs:243:5:247:5 | MyPair | | main.rs:421:17:421:17 | b | | main.rs:243:5:247:5 | MyPair | | main.rs:422:18:422:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:422:18:422:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:422:18:422:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:422:18:422:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:423:17:423:17 | b | | main.rs:243:5:247:5 | MyPair | | main.rs:424:18:424:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:424:18:424:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:424:18:424:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:424:18:424:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:428:31:428:38 | thing_s1 | | main.rs:238:5:241:5 | MyThing | | main.rs:429:18:429:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:429:18:429:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:429:18:429:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:429:18:429:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:430:31:430:38 | thing_s2 | | main.rs:238:5:241:5 | MyThing | | main.rs:431:18:431:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:431:18:431:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:431:18:431:28 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:431:18:431:28 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:434:13:434:13 | a | | main.rs:243:5:247:5 | MyPair | | main.rs:434:17:434:41 | MyPair {...} | | main.rs:243:5:247:5 | MyPair | | main.rs:435:25:435:25 | a | | main.rs:243:5:247:5 | MyPair | | main.rs:436:18:436:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:436:18:436:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:436:18:436:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:436:18:436:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:437:25:437:25 | a | | main.rs:243:5:247:5 | MyPair | | main.rs:438:18:438:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:438:18:438:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:438:18:438:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:438:18:438:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:441:13:441:13 | b | | main.rs:243:5:247:5 | MyPair | | main.rs:441:17:441:41 | MyPair {...} | | main.rs:243:5:247:5 | MyPair | | main.rs:442:25:442:25 | b | | main.rs:243:5:247:5 | MyPair | | main.rs:443:18:443:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:443:18:443:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:443:18:443:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:443:18:443:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:444:25:444:25 | b | | main.rs:243:5:247:5 | MyPair | | main.rs:445:18:445:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:445:18:445:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:445:18:445:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:445:18:445:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:447:13:447:13 | c | | main.rs:243:5:247:5 | MyPair | | main.rs:447:17:450:9 | MyPair {...} | | main.rs:243:5:247:5 | MyPair | @@ -1678,35 +1385,30 @@ inferCertainType | main.rs:484:18:484:18 | x | | main.rs:482:45:482:61 | T | | main.rs:485:18:485:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:485:18:485:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:485:18:485:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:485:18:485:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:488:65:488:65 | x | | main.rs:488:46:488:62 | T | | main.rs:488:71:492:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:490:18:490:18 | x | | main.rs:488:46:488:62 | T | | main.rs:491:18:491:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:491:18:491:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:491:18:491:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:491:18:491:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:494:49:494:49 | x | | main.rs:494:30:494:46 | T | | main.rs:494:55:497:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:495:17:495:17 | x | | main.rs:494:30:494:46 | T | | main.rs:496:18:496:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:496:18:496:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:496:18:496:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:496:18:496:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:499:53:499:53 | x | | main.rs:499:34:499:50 | T | | main.rs:499:59:502:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:500:17:500:17 | x | | main.rs:499:34:499:50 | T | | main.rs:501:18:501:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:501:18:501:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:501:18:501:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:501:18:501:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:504:43:504:43 | x | | main.rs:504:40:504:40 | T | | main.rs:507:5:510:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:508:17:508:17 | x | | main.rs:504:40:504:40 | T | | main.rs:509:18:509:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:509:18:509:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:509:18:509:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:509:18:509:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:513:16:513:19 | SelfParam | | main.rs:512:5:516:5 | Self [trait Pair] | | main.rs:515:16:515:19 | SelfParam | | main.rs:512:5:516:5 | Self [trait Pair] | @@ -1722,7 +1424,6 @@ inferCertainType | main.rs:530:18:530:18 | y | | main.rs:527:41:527:55 | T | | main.rs:531:18:531:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:531:18:531:29 | "{:?}, {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:531:18:531:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:531:18:531:37 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:534:69:534:69 | x | | main.rs:534:52:534:66 | T | | main.rs:534:75:534:75 | y | | main.rs:534:52:534:66 | T | @@ -1731,7 +1432,6 @@ inferCertainType | main.rs:537:18:537:18 | y | | main.rs:534:52:534:66 | T | | main.rs:538:18:538:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:538:18:538:29 | "{:?}, {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:538:18:538:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:538:18:538:37 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:541:50:541:50 | x | | main.rs:541:41:541:47 | T | | main.rs:541:56:541:56 | y | | main.rs:541:41:541:47 | T | @@ -1740,7 +1440,6 @@ inferCertainType | main.rs:544:18:544:18 | y | | main.rs:541:41:541:47 | T | | main.rs:545:18:545:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:545:18:545:29 | "{:?}, {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:545:18:545:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:545:18:545:37 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:548:54:548:54 | x | | main.rs:548:41:548:51 | T | | main.rs:548:60:548:60 | y | | main.rs:548:41:548:51 | T | @@ -1749,17 +1448,14 @@ inferCertainType | main.rs:551:18:551:18 | y | | main.rs:548:41:548:51 | T | | main.rs:552:18:552:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:552:18:552:29 | "{:?}, {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:552:18:552:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:552:18:552:37 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:560:18:560:22 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:560:18:560:22 | SelfParam | TRef | main.rs:557:5:561:5 | Self [trait TraitWithSelfTp] | | main.rs:563:40:563:44 | thing | | {EXTERNAL LOCATION} | & | | main.rs:563:40:563:44 | thing | TRef | main.rs:563:17:563:37 | T | -| main.rs:563:56:565:5 | { ... } | | main.rs:563:14:563:14 | A | | main.rs:564:9:564:13 | thing | | {EXTERNAL LOCATION} | & | | main.rs:564:9:564:13 | thing | TRef | main.rs:563:17:563:37 | T | | main.rs:568:44:568:48 | thing | | main.rs:568:24:568:41 | S | -| main.rs:568:61:571:5 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:569:19:569:23 | thing | | main.rs:568:24:568:41 | S | | main.rs:576:55:576:59 | thing | | {EXTERNAL LOCATION} | & | | main.rs:576:55:576:59 | thing | TRef | main.rs:576:25:576:52 | S | @@ -1768,8 +1464,6 @@ inferCertainType | main.rs:578:25:578:29 | thing | TRef | main.rs:576:25:576:52 | S | | main.rs:587:18:587:22 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:587:18:587:22 | SelfParam | TRef | main.rs:581:5:583:5 | MyStruct | -| main.rs:587:41:589:9 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:587:41:589:9 | { ... } | T | main.rs:581:5:583:5 | MyStruct | | main.rs:588:18:588:47 | MyStruct {...} | | main.rs:581:5:583:5 | MyStruct | | main.rs:588:36:588:39 | self | | {EXTERNAL LOCATION} | & | | main.rs:588:36:588:39 | self | TRef | main.rs:581:5:583:5 | MyStruct | @@ -1780,60 +1474,45 @@ inferCertainType | main.rs:596:26:596:26 | s | | main.rs:581:5:583:5 | MyStruct | | main.rs:612:15:612:18 | SelfParam | | main.rs:611:5:622:5 | Self [trait MyTrait] | | main.rs:614:15:614:18 | SelfParam | | main.rs:611:5:622:5 | Self [trait MyTrait] | -| main.rs:617:9:619:9 | { ... } | | main.rs:611:19:611:19 | A | | main.rs:618:13:618:16 | self | | main.rs:611:5:622:5 | Self [trait MyTrait] | | main.rs:621:18:621:18 | x | | main.rs:611:5:622:5 | Self [trait MyTrait] | | main.rs:625:15:625:18 | SelfParam | | main.rs:608:5:609:14 | S2 | -| main.rs:625:26:627:9 | { ... } | | main.rs:624:10:624:19 | T | | main.rs:629:18:629:18 | x | | main.rs:608:5:609:14 | S2 | -| main.rs:629:32:631:9 | { ... } | | main.rs:624:10:624:19 | T | | main.rs:635:15:635:18 | SelfParam | | main.rs:606:5:607:14 | S1 | -| main.rs:635:28:637:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:639:18:639:18 | x | | main.rs:606:5:607:14 | S1 | -| main.rs:639:34:641:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:646:50:646:50 | x | | main.rs:646:26:646:47 | T2 | -| main.rs:646:63:649:5 | { ... } | | main.rs:646:22:646:23 | T1 | | main.rs:647:9:647:9 | x | | main.rs:646:26:646:47 | T2 | | main.rs:648:9:648:9 | x | | main.rs:646:26:646:47 | T2 | | main.rs:650:52:650:52 | x | | main.rs:650:28:650:49 | T2 | -| main.rs:650:65:654:5 | { ... } | | main.rs:650:24:650:25 | T1 | | main.rs:651:24:651:24 | x | | main.rs:650:28:650:49 | T2 | | main.rs:653:16:653:16 | x | | main.rs:650:28:650:49 | T2 | | main.rs:655:52:655:52 | x | | main.rs:655:28:655:49 | T2 | -| main.rs:655:65:659:5 | { ... } | | main.rs:655:24:655:25 | T1 | | main.rs:656:29:656:29 | x | | main.rs:655:28:655:49 | T2 | | main.rs:658:21:658:21 | x | | main.rs:655:28:655:49 | T2 | | main.rs:660:55:660:55 | x | | main.rs:660:31:660:52 | T2 | -| main.rs:660:68:664:5 | { ... } | | main.rs:660:27:660:28 | T1 | | main.rs:661:27:661:27 | x | | main.rs:660:31:660:52 | T2 | | main.rs:663:19:663:19 | x | | main.rs:660:31:660:52 | T2 | | main.rs:665:55:665:55 | x | | main.rs:665:31:665:52 | T2 | -| main.rs:665:68:669:5 | { ... } | | main.rs:665:27:665:28 | T1 | | main.rs:666:32:666:32 | x | | main.rs:665:31:665:52 | T2 | | main.rs:668:24:668:24 | x | | main.rs:665:31:665:52 | T2 | | main.rs:673:49:673:49 | x | | main.rs:601:5:604:5 | MyThing | | main.rs:673:49:673:49 | x | T | main.rs:673:32:673:46 | T2 | -| main.rs:673:71:675:5 | { ... } | | main.rs:673:28:673:29 | T1 | | main.rs:674:9:674:9 | x | | main.rs:601:5:604:5 | MyThing | | main.rs:674:9:674:9 | x | T | main.rs:673:32:673:46 | T2 | | main.rs:676:51:676:51 | x | | main.rs:601:5:604:5 | MyThing | | main.rs:676:51:676:51 | x | T | main.rs:676:34:676:48 | T2 | -| main.rs:676:73:678:5 | { ... } | | main.rs:676:30:676:31 | T1 | | main.rs:677:16:677:16 | x | | main.rs:601:5:604:5 | MyThing | | main.rs:677:16:677:16 | x | T | main.rs:676:34:676:48 | T2 | | main.rs:679:51:679:51 | x | | main.rs:601:5:604:5 | MyThing | | main.rs:679:51:679:51 | x | T | main.rs:679:34:679:48 | T2 | -| main.rs:679:73:681:5 | { ... } | | main.rs:679:30:679:31 | T1 | | main.rs:680:21:680:21 | x | | main.rs:601:5:604:5 | MyThing | | main.rs:680:21:680:21 | x | T | main.rs:679:34:679:48 | T2 | | main.rs:684:15:684:18 | SelfParam | | main.rs:601:5:604:5 | MyThing | | main.rs:684:15:684:18 | SelfParam | T | main.rs:683:10:683:10 | T | -| main.rs:684:26:686:9 | { ... } | | main.rs:683:10:683:10 | T | | main.rs:685:13:685:16 | self | | main.rs:601:5:604:5 | MyThing | | main.rs:685:13:685:16 | self | T | main.rs:683:10:683:10 | T | | main.rs:688:18:688:18 | x | | main.rs:601:5:604:5 | MyThing | | main.rs:688:18:688:18 | x | T | main.rs:683:10:683:10 | T | -| main.rs:688:32:690:9 | { ... } | | main.rs:683:10:683:10 | T | | main.rs:689:13:689:13 | x | | main.rs:601:5:604:5 | MyThing | | main.rs:689:13:689:13 | x | T | main.rs:683:10:683:10 | T | | main.rs:695:15:695:18 | SelfParam | | main.rs:693:5:696:5 | Self [trait MyTrait2] | @@ -1853,12 +1532,10 @@ inferCertainType | main.rs:710:17:710:33 | MyThing {...} | | main.rs:601:5:604:5 | MyThing | | main.rs:712:18:712:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:712:18:712:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:712:18:712:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:712:18:712:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:712:26:712:26 | x | | main.rs:601:5:604:5 | MyThing | | main.rs:713:18:713:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:713:18:713:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:713:18:713:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:713:18:713:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:713:26:713:26 | y | | main.rs:601:5:604:5 | MyThing | | main.rs:715:13:715:13 | x | | main.rs:601:5:604:5 | MyThing | @@ -1867,12 +1544,10 @@ inferCertainType | main.rs:716:17:716:33 | MyThing {...} | | main.rs:601:5:604:5 | MyThing | | main.rs:718:18:718:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:718:18:718:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:718:18:718:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:718:18:718:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:718:26:718:26 | x | | main.rs:601:5:604:5 | MyThing | | main.rs:719:18:719:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:719:18:719:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:719:18:719:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:719:18:719:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:719:26:719:26 | y | | main.rs:601:5:604:5 | MyThing | | main.rs:721:13:721:14 | x2 | | main.rs:601:5:604:5 | MyThing | @@ -1882,52 +1557,42 @@ inferCertainType | main.rs:724:31:724:32 | x2 | | main.rs:601:5:604:5 | MyThing | | main.rs:725:18:725:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:725:18:725:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:725:18:725:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:725:18:725:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:726:33:726:34 | x2 | | main.rs:601:5:604:5 | MyThing | | main.rs:727:18:727:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:727:18:727:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:727:18:727:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:727:18:727:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:728:33:728:34 | x2 | | main.rs:601:5:604:5 | MyThing | | main.rs:729:18:729:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:729:18:729:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:729:18:729:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:729:18:729:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:730:31:730:32 | y2 | | main.rs:601:5:604:5 | MyThing | | main.rs:731:18:731:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:731:18:731:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:731:18:731:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:731:18:731:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:732:33:732:34 | y2 | | main.rs:601:5:604:5 | MyThing | | main.rs:733:18:733:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:733:18:733:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:733:18:733:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:733:18:733:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:734:33:734:34 | y2 | | main.rs:601:5:604:5 | MyThing | | main.rs:735:18:735:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:735:18:735:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:735:18:735:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:735:18:735:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:736:36:736:37 | x2 | | main.rs:601:5:604:5 | MyThing | | main.rs:737:18:737:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:737:18:737:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:737:18:737:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:737:18:737:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:738:36:738:37 | x2 | | main.rs:601:5:604:5 | MyThing | | main.rs:739:18:739:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:739:18:739:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:739:18:739:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:739:18:739:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:740:36:740:37 | y2 | | main.rs:601:5:604:5 | MyThing | | main.rs:741:18:741:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:741:18:741:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:741:18:741:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:741:18:741:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:742:36:742:37 | y2 | | main.rs:601:5:604:5 | MyThing | | main.rs:743:18:743:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:743:18:743:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:743:18:743:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:743:18:743:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:745:13:745:14 | x3 | | main.rs:601:5:604:5 | MyThing | | main.rs:745:18:747:9 | MyThing {...} | | main.rs:601:5:604:5 | MyThing | @@ -1938,37 +1603,30 @@ inferCertainType | main.rs:752:37:752:38 | x3 | | main.rs:601:5:604:5 | MyThing | | main.rs:753:18:753:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:753:18:753:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:753:18:753:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:753:18:753:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:754:39:754:40 | x3 | | main.rs:601:5:604:5 | MyThing | | main.rs:755:18:755:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:755:18:755:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:755:18:755:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:755:18:755:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:756:39:756:40 | x3 | | main.rs:601:5:604:5 | MyThing | | main.rs:757:18:757:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:757:18:757:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:757:18:757:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:757:18:757:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:758:37:758:38 | y3 | | main.rs:601:5:604:5 | MyThing | | main.rs:759:18:759:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:759:18:759:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:759:18:759:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:759:18:759:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:760:39:760:40 | y3 | | main.rs:601:5:604:5 | MyThing | | main.rs:761:18:761:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:761:18:761:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:761:18:761:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:761:18:761:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:762:39:762:40 | y3 | | main.rs:601:5:604:5 | MyThing | | main.rs:763:18:763:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:763:18:763:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:763:18:763:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:763:18:763:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:765:13:765:13 | y | | {EXTERNAL LOCATION} | i32 | | main.rs:782:15:782:18 | SelfParam | | main.rs:770:5:774:5 | MyEnum | | main.rs:782:15:782:18 | SelfParam | A | main.rs:781:10:781:10 | T | -| main.rs:782:26:787:9 | { ... } | | main.rs:781:10:781:10 | T | | main.rs:783:19:783:22 | self | | main.rs:770:5:774:5 | MyEnum | | main.rs:783:19:783:22 | self | A | main.rs:781:10:781:10 | T | | main.rs:785:17:785:32 | ...::C2 {...} | | main.rs:770:5:774:5 | MyEnum | @@ -1977,47 +1635,38 @@ inferCertainType | main.rs:792:17:792:36 | ...::C2 {...} | | main.rs:770:5:774:5 | MyEnum | | main.rs:794:18:794:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:794:18:794:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:794:18:794:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:794:18:794:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:795:18:795:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:795:18:795:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:795:18:795:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:795:18:795:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:795:26:795:26 | y | | main.rs:770:5:774:5 | MyEnum | | main.rs:817:15:817:18 | SelfParam | | main.rs:815:5:818:5 | Self [trait MyTrait1] | | main.rs:822:15:822:19 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:822:15:822:19 | SelfParam | TRef | main.rs:820:5:832:5 | Self [trait MyTrait2] | -| main.rs:825:9:831:9 | { ... } | | main.rs:820:20:820:22 | Tr2 | | main.rs:827:17:827:20 | self | | {EXTERNAL LOCATION} | & | | main.rs:827:17:827:20 | self | TRef | main.rs:820:5:832:5 | Self [trait MyTrait2] | | main.rs:829:27:829:30 | self | | {EXTERNAL LOCATION} | & | | main.rs:829:27:829:30 | self | TRef | main.rs:820:5:832:5 | Self [trait MyTrait2] | | main.rs:836:15:836:18 | SelfParam | | main.rs:834:5:846:5 | Self [trait MyTrait3] | -| main.rs:839:9:845:9 | { ... } | | main.rs:834:20:834:22 | Tr3 | | main.rs:841:17:841:20 | self | | main.rs:834:5:846:5 | Self [trait MyTrait3] | | main.rs:843:26:843:30 | &self | | {EXTERNAL LOCATION} | & | | main.rs:843:27:843:30 | self | | main.rs:834:5:846:5 | Self [trait MyTrait3] | | main.rs:850:15:850:18 | SelfParam | | main.rs:800:5:803:5 | MyThing | | main.rs:850:15:850:18 | SelfParam | A | main.rs:848:10:848:10 | T | -| main.rs:850:26:852:9 | { ... } | | main.rs:848:10:848:10 | T | | main.rs:851:13:851:16 | self | | main.rs:800:5:803:5 | MyThing | | main.rs:851:13:851:16 | self | A | main.rs:848:10:848:10 | T | | main.rs:859:15:859:18 | SelfParam | | main.rs:805:5:808:5 | MyThing2 | | main.rs:859:15:859:18 | SelfParam | A | main.rs:857:10:857:10 | T | -| main.rs:859:35:861:9 | { ... } | | main.rs:800:5:803:5 | MyThing | -| main.rs:859:35:861:9 | { ... } | A | main.rs:857:10:857:10 | T | | main.rs:860:13:860:33 | MyThing {...} | | main.rs:800:5:803:5 | MyThing | | main.rs:860:26:860:29 | self | | main.rs:805:5:808:5 | MyThing2 | | main.rs:860:26:860:29 | self | A | main.rs:857:10:857:10 | T | | main.rs:868:44:868:44 | x | | main.rs:868:26:868:41 | T2 | -| main.rs:868:57:870:5 | { ... } | | main.rs:868:22:868:23 | T1 | | main.rs:869:9:869:9 | x | | main.rs:868:26:868:41 | T2 | | main.rs:872:56:872:56 | x | | main.rs:872:39:872:53 | T | | main.rs:872:62:876:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:874:17:874:17 | x | | main.rs:872:39:872:53 | T | | main.rs:875:18:875:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:875:18:875:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:875:18:875:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:875:18:875:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:878:16:902:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:879:13:879:13 | x | | main.rs:800:5:803:5 | MyThing | @@ -2026,12 +1675,10 @@ inferCertainType | main.rs:880:17:880:33 | MyThing {...} | | main.rs:800:5:803:5 | MyThing | | main.rs:882:18:882:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:882:18:882:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:882:18:882:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:882:18:882:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:882:26:882:26 | x | | main.rs:800:5:803:5 | MyThing | | main.rs:883:18:883:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:883:18:883:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:883:18:883:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:883:18:883:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:883:26:883:26 | y | | main.rs:800:5:803:5 | MyThing | | main.rs:885:13:885:13 | x | | main.rs:800:5:803:5 | MyThing | @@ -2040,12 +1687,10 @@ inferCertainType | main.rs:886:17:886:33 | MyThing {...} | | main.rs:800:5:803:5 | MyThing | | main.rs:888:18:888:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:888:18:888:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:888:18:888:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:888:18:888:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:888:26:888:26 | x | | main.rs:800:5:803:5 | MyThing | | main.rs:889:18:889:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:889:18:889:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:889:18:889:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:889:18:889:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:889:26:889:26 | y | | main.rs:800:5:803:5 | MyThing | | main.rs:891:13:891:13 | x | | main.rs:805:5:808:5 | MyThing2 | @@ -2054,12 +1699,10 @@ inferCertainType | main.rs:892:17:892:34 | MyThing2 {...} | | main.rs:805:5:808:5 | MyThing2 | | main.rs:894:18:894:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:894:18:894:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:894:18:894:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:894:18:894:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:894:26:894:26 | x | | main.rs:805:5:808:5 | MyThing2 | | main.rs:895:18:895:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:895:18:895:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:895:18:895:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:895:18:895:31 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:895:26:895:26 | y | | main.rs:805:5:808:5 | MyThing2 | | main.rs:897:13:897:13 | x | | main.rs:800:5:803:5 | MyThing | @@ -2070,54 +1713,36 @@ inferCertainType | main.rs:901:31:901:31 | x | | main.rs:805:5:808:5 | MyThing2 | | main.rs:918:22:918:22 | x | | {EXTERNAL LOCATION} | & | | main.rs:918:22:918:22 | x | TRef | main.rs:918:11:918:19 | T | -| main.rs:918:35:920:5 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:918:35:920:5 | { ... } | TRef | main.rs:918:11:918:19 | T | | main.rs:919:9:919:9 | x | | {EXTERNAL LOCATION} | & | | main.rs:919:9:919:9 | x | TRef | main.rs:918:11:918:19 | T | | main.rs:923:17:923:20 | SelfParam | | main.rs:908:5:909:14 | S1 | -| main.rs:923:29:925:9 | { ... } | | main.rs:911:5:912:14 | S2 | | main.rs:928:21:928:21 | x | | main.rs:928:13:928:14 | T1 | -| main.rs:931:5:933:5 | { ... } | | main.rs:928:17:928:18 | T2 | | main.rs:932:9:932:9 | x | | main.rs:928:13:928:14 | T1 | | main.rs:935:16:951:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:937:18:937:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:937:18:937:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:937:18:937:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:937:18:937:31 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:937:26:937:31 | id(...) | | {EXTERNAL LOCATION} | & | | main.rs:937:29:937:30 | &x | | {EXTERNAL LOCATION} | & | | main.rs:940:18:940:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:940:18:940:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:940:18:940:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:940:18:940:37 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:940:26:940:37 | id::<...>(...) | | {EXTERNAL LOCATION} | & | -| main.rs:940:26:940:37 | id::<...>(...) | TRef | main.rs:908:5:909:14 | S1 | | main.rs:940:35:940:36 | &x | | {EXTERNAL LOCATION} | & | | main.rs:944:18:944:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:944:18:944:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:944:18:944:44 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:944:18:944:44 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:944:26:944:44 | id::<...>(...) | | {EXTERNAL LOCATION} | & | -| main.rs:944:26:944:44 | id::<...>(...) | TRef | main.rs:914:5:914:25 | dyn Trait | | main.rs:944:42:944:43 | &x | | {EXTERNAL LOCATION} | & | -| main.rs:947:9:947:25 | into::<...>(...) | | main.rs:911:5:912:14 | S2 | | main.rs:950:13:950:13 | y | | main.rs:911:5:912:14 | S2 | | main.rs:964:22:964:25 | SelfParam | | main.rs:955:5:961:5 | PairOption | | main.rs:964:22:964:25 | SelfParam | Fst | main.rs:963:10:963:12 | Fst | | main.rs:964:22:964:25 | SelfParam | Snd | main.rs:963:15:963:17 | Snd | -| main.rs:964:35:971:9 | { ... } | | main.rs:963:15:963:17 | Snd | | main.rs:965:19:965:22 | self | | main.rs:955:5:961:5 | PairOption | | main.rs:965:19:965:22 | self | Fst | main.rs:963:10:963:12 | Fst | | main.rs:965:19:965:22 | self | Snd | main.rs:963:15:963:17 | Snd | -| main.rs:966:43:966:82 | MacroExpr | | file://:0:0:0:0 | ! | | main.rs:966:50:966:81 | "PairNone has no second elemen... | | {EXTERNAL LOCATION} | & | | main.rs:966:50:966:81 | "PairNone has no second elemen... | TRef | {EXTERNAL LOCATION} | str | -| main.rs:966:50:966:81 | ...::panic_fmt(...) | | file://:0:0:0:0 | ! | | main.rs:966:50:966:81 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:967:43:967:81 | MacroExpr | | file://:0:0:0:0 | ! | | main.rs:967:50:967:80 | "PairFst has no second element... | | {EXTERNAL LOCATION} | & | | main.rs:967:50:967:80 | "PairFst has no second element... | TRef | {EXTERNAL LOCATION} | str | -| main.rs:967:50:967:80 | ...::panic_fmt(...) | | file://:0:0:0:0 | ! | | main.rs:967:50:967:80 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:995:10:995:10 | t | | main.rs:955:5:961:5 | PairOption | | main.rs:995:10:995:10 | t | Fst | main.rs:977:5:978:14 | S2 | @@ -2132,7 +1757,6 @@ inferCertainType | main.rs:996:17:996:17 | t | Snd.Snd | main.rs:980:5:981:14 | S3 | | main.rs:997:18:997:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:997:18:997:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:997:18:997:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:997:18:997:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1008:16:1028:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1010:13:1010:14 | p1 | | main.rs:955:5:961:5 | PairOption | @@ -2140,7 +1764,6 @@ inferCertainType | main.rs:1010:13:1010:14 | p1 | Snd | main.rs:977:5:978:14 | S2 | | main.rs:1011:18:1011:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1011:18:1011:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1011:18:1011:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1011:18:1011:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1011:26:1011:27 | p1 | | main.rs:955:5:961:5 | PairOption | | main.rs:1011:26:1011:27 | p1 | Fst | main.rs:974:5:975:14 | S1 | @@ -2150,7 +1773,6 @@ inferCertainType | main.rs:1014:13:1014:14 | p2 | Snd | main.rs:977:5:978:14 | S2 | | main.rs:1015:18:1015:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1015:18:1015:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1015:18:1015:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1015:18:1015:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1015:26:1015:27 | p2 | | main.rs:955:5:961:5 | PairOption | | main.rs:1015:26:1015:27 | p2 | Fst | main.rs:974:5:975:14 | S1 | @@ -2159,7 +1781,6 @@ inferCertainType | main.rs:1018:13:1018:14 | p3 | Fst | main.rs:977:5:978:14 | S2 | | main.rs:1019:18:1019:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1019:18:1019:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1019:18:1019:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1019:18:1019:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1019:26:1019:27 | p3 | | main.rs:955:5:961:5 | PairOption | | main.rs:1019:26:1019:27 | p3 | Fst | main.rs:977:5:978:14 | S2 | @@ -2168,12 +1789,10 @@ inferCertainType | main.rs:1022:13:1022:14 | p3 | Snd | main.rs:980:5:981:14 | S3 | | main.rs:1023:18:1023:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1023:18:1023:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1023:18:1023:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1023:18:1023:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1023:26:1023:27 | p3 | | main.rs:955:5:961:5 | PairOption | | main.rs:1023:26:1023:27 | p3 | Fst | main.rs:977:5:978:14 | S2 | | main.rs:1023:26:1023:27 | p3 | Snd | main.rs:980:5:981:14 | S3 | -| main.rs:1025:9:1025:55 | g(...) | | {EXTERNAL LOCATION} | () | | main.rs:1027:13:1027:13 | x | | {EXTERNAL LOCATION} | Result | | main.rs:1027:13:1027:13 | x | E | main.rs:974:5:975:14 | S1 | | main.rs:1027:13:1027:13 | x | T | main.rs:1000:5:1000:34 | S4 | @@ -2195,90 +1814,53 @@ inferCertainType | main.rs:1049:16:1049:24 | SelfParam | TRefMut.T | main.rs:1047:10:1047:10 | T | | main.rs:1049:27:1049:31 | value | | main.rs:1047:10:1047:10 | T | | main.rs:1049:37:1049:38 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1053:26:1055:9 | { ... } | | main.rs:1032:5:1036:5 | MyOption | -| main.rs:1053:26:1055:9 | { ... } | T | main.rs:1052:10:1052:10 | T | | main.rs:1059:20:1059:23 | SelfParam | | main.rs:1032:5:1036:5 | MyOption | | main.rs:1059:20:1059:23 | SelfParam | T | main.rs:1032:5:1036:5 | MyOption | | main.rs:1059:20:1059:23 | SelfParam | T.T | main.rs:1058:10:1058:10 | T | -| main.rs:1059:41:1064:9 | { ... } | | main.rs:1032:5:1036:5 | MyOption | -| main.rs:1059:41:1064:9 | { ... } | T | main.rs:1058:10:1058:10 | T | | main.rs:1060:19:1060:22 | self | | main.rs:1032:5:1036:5 | MyOption | | main.rs:1060:19:1060:22 | self | T | main.rs:1032:5:1036:5 | MyOption | | main.rs:1060:19:1060:22 | self | T.T | main.rs:1058:10:1058:10 | T | | main.rs:1070:16:1115:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1071:13:1071:14 | x1 | | main.rs:1032:5:1036:5 | MyOption | -| main.rs:1071:13:1071:14 | x1 | T | main.rs:1067:5:1068:13 | S | -| main.rs:1071:18:1071:37 | ...::new(...) | | main.rs:1032:5:1036:5 | MyOption | -| main.rs:1071:18:1071:37 | ...::new(...) | T | main.rs:1067:5:1068:13 | S | | main.rs:1072:18:1072:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1072:18:1072:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1072:18:1072:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1072:18:1072:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1072:26:1072:27 | x1 | | main.rs:1032:5:1036:5 | MyOption | -| main.rs:1072:26:1072:27 | x1 | T | main.rs:1067:5:1068:13 | S | -| main.rs:1074:17:1074:18 | x2 | | main.rs:1032:5:1036:5 | MyOption | -| main.rs:1074:22:1074:36 | ...::new(...) | | main.rs:1032:5:1036:5 | MyOption | -| main.rs:1075:9:1075:10 | x2 | | main.rs:1032:5:1036:5 | MyOption | | main.rs:1076:18:1076:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1076:18:1076:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1076:18:1076:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1076:18:1076:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1076:26:1076:27 | x2 | | main.rs:1032:5:1036:5 | MyOption | -| main.rs:1078:17:1078:18 | x3 | | main.rs:1032:5:1036:5 | MyOption | -| main.rs:1078:22:1078:36 | ...::new(...) | | main.rs:1032:5:1036:5 | MyOption | -| main.rs:1079:9:1079:10 | x3 | | main.rs:1032:5:1036:5 | MyOption | | main.rs:1080:18:1080:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1080:18:1080:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1080:18:1080:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1080:18:1080:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1080:26:1080:27 | x3 | | main.rs:1032:5:1036:5 | MyOption | -| main.rs:1082:17:1082:18 | x4 | | main.rs:1032:5:1036:5 | MyOption | -| main.rs:1082:22:1082:36 | ...::new(...) | | main.rs:1032:5:1036:5 | MyOption | -| main.rs:1083:9:1083:33 | ...::set(...) | | {EXTERNAL LOCATION} | () | | main.rs:1083:23:1083:29 | &mut x4 | | {EXTERNAL LOCATION} | &mut | -| main.rs:1083:28:1083:29 | x4 | | main.rs:1032:5:1036:5 | MyOption | | main.rs:1084:18:1084:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1084:18:1084:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1084:18:1084:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1084:18:1084:27 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1084:26:1084:27 | x4 | | main.rs:1032:5:1036:5 | MyOption | | main.rs:1087:18:1087:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1087:18:1087:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1087:18:1087:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1087:18:1087:37 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1090:18:1090:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1090:18:1090:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1090:18:1090:61 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1090:18:1090:61 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1090:26:1090:61 | ...::flatten(...) | | main.rs:1032:5:1036:5 | MyOption | -| main.rs:1090:26:1090:61 | ...::flatten(...) | T | main.rs:1067:5:1068:13 | S | | main.rs:1098:18:1098:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1098:18:1098:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1098:18:1098:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1098:18:1098:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1102:13:1102:16 | true | | {EXTERNAL LOCATION} | bool | | main.rs:1103:13:1103:17 | false | | {EXTERNAL LOCATION} | bool | | main.rs:1105:18:1105:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1105:18:1105:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1105:18:1105:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1105:18:1105:35 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1108:30:1113:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1109:13:1111:13 | if ... {...} | | {EXTERNAL LOCATION} | () | | main.rs:1109:22:1111:13 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1114:18:1114:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1114:18:1114:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1114:18:1114:34 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1114:18:1114:34 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1132:15:1132:18 | SelfParam | | main.rs:1120:5:1121:19 | S | | main.rs:1132:15:1132:18 | SelfParam | T | main.rs:1131:10:1131:10 | T | -| main.rs:1132:26:1134:9 | { ... } | | main.rs:1131:10:1131:10 | T | | main.rs:1133:13:1133:16 | self | | main.rs:1120:5:1121:19 | S | | main.rs:1133:13:1133:16 | self | T | main.rs:1131:10:1131:10 | T | | main.rs:1136:15:1136:19 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1136:15:1136:19 | SelfParam | TRef | main.rs:1120:5:1121:19 | S | | main.rs:1136:15:1136:19 | SelfParam | TRef.T | main.rs:1131:10:1131:10 | T | -| main.rs:1136:28:1138:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1136:28:1138:9 | { ... } | TRef | main.rs:1131:10:1131:10 | T | | main.rs:1137:13:1137:19 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1137:14:1137:17 | self | | {EXTERNAL LOCATION} | & | | main.rs:1137:14:1137:17 | self | TRef | main.rs:1120:5:1121:19 | S | @@ -2286,8 +1868,6 @@ inferCertainType | main.rs:1140:15:1140:25 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1140:15:1140:25 | SelfParam | TRef | main.rs:1120:5:1121:19 | S | | main.rs:1140:15:1140:25 | SelfParam | TRef.T | main.rs:1131:10:1131:10 | T | -| main.rs:1140:34:1142:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1140:34:1142:9 | { ... } | TRef | main.rs:1131:10:1131:10 | T | | main.rs:1141:13:1141:19 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1141:14:1141:17 | self | | {EXTERNAL LOCATION} | & | | main.rs:1141:14:1141:17 | self | TRef | main.rs:1120:5:1121:19 | S | @@ -2298,77 +1878,60 @@ inferCertainType | main.rs:1153:29:1153:33 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1153:29:1153:33 | SelfParam | TRef | {EXTERNAL LOCATION} | & | | main.rs:1153:29:1153:33 | SelfParam | TRef.TRef | main.rs:1126:5:1129:5 | MyInt | -| main.rs:1153:43:1155:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:1154:17:1154:20 | self | | {EXTERNAL LOCATION} | & | | main.rs:1154:17:1154:20 | self | TRef | {EXTERNAL LOCATION} | & | | main.rs:1154:17:1154:20 | self | TRef.TRef | main.rs:1126:5:1129:5 | MyInt | | main.rs:1158:33:1158:36 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1158:33:1158:36 | SelfParam | TRef | main.rs:1126:5:1129:5 | MyInt | -| main.rs:1158:46:1160:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:1159:15:1159:18 | self | | {EXTERNAL LOCATION} | & | | main.rs:1159:15:1159:18 | self | TRef | main.rs:1126:5:1129:5 | MyInt | | main.rs:1163:16:1213:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1165:18:1165:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1165:18:1165:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1165:18:1165:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1165:18:1165:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1169:18:1169:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1169:18:1169:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1169:18:1169:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1169:18:1169:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1170:18:1170:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1170:18:1170:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1170:18:1170:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1170:18:1170:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1174:18:1174:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1174:18:1174:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1174:18:1174:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1174:18:1174:41 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1174:26:1174:41 | ...::m2(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1174:26:1174:41 | ...::m2(...) | TRef | main.rs:1123:5:1124:14 | S2 | | main.rs:1174:38:1174:40 | &x3 | | {EXTERNAL LOCATION} | & | | main.rs:1175:18:1175:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1175:18:1175:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1175:18:1175:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1175:18:1175:41 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1175:26:1175:41 | ...::m3(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1175:26:1175:41 | ...::m3(...) | TRef | main.rs:1123:5:1124:14 | S2 | | main.rs:1175:38:1175:40 | &x3 | | {EXTERNAL LOCATION} | & | | main.rs:1177:13:1177:14 | x4 | | {EXTERNAL LOCATION} | & | | main.rs:1177:18:1177:23 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1179:18:1179:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1179:18:1179:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1179:18:1179:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1179:18:1179:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1179:26:1179:27 | x4 | | {EXTERNAL LOCATION} | & | | main.rs:1180:18:1180:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1180:18:1180:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1180:18:1180:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1180:18:1180:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1180:26:1180:27 | x4 | | {EXTERNAL LOCATION} | & | | main.rs:1182:13:1182:14 | x5 | | {EXTERNAL LOCATION} | & | | main.rs:1182:18:1182:23 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1184:18:1184:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1184:18:1184:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1184:18:1184:32 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1184:18:1184:32 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1184:26:1184:27 | x5 | | {EXTERNAL LOCATION} | & | | main.rs:1185:18:1185:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1185:18:1185:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1185:18:1185:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1185:18:1185:29 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1185:26:1185:27 | x5 | | {EXTERNAL LOCATION} | & | | main.rs:1187:13:1187:14 | x6 | | {EXTERNAL LOCATION} | & | | main.rs:1187:18:1187:23 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1190:18:1190:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1190:18:1190:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1190:18:1190:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1190:18:1190:35 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1190:28:1190:29 | x6 | | {EXTERNAL LOCATION} | & | | main.rs:1192:20:1192:22 | &S2 | | {EXTERNAL LOCATION} | & | | main.rs:1196:18:1196:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1196:18:1196:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1196:18:1196:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1196:18:1196:27 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1198:13:1198:14 | x9 | | {EXTERNAL LOCATION} | String | | main.rs:1198:26:1198:32 | "Hello" | | {EXTERNAL LOCATION} | & | @@ -2380,7 +1943,6 @@ inferCertainType | main.rs:1206:17:1206:24 | my_thing | | {EXTERNAL LOCATION} | & | | main.rs:1207:18:1207:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1207:18:1207:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1207:18:1207:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1207:18:1207:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1210:13:1210:20 | my_thing | | {EXTERNAL LOCATION} | & | | main.rs:1210:24:1210:39 | &... | | {EXTERNAL LOCATION} | & | @@ -2388,29 +1950,21 @@ inferCertainType | main.rs:1211:17:1211:24 | my_thing | | {EXTERNAL LOCATION} | & | | main.rs:1212:18:1212:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1212:18:1212:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1212:18:1212:26 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1212:18:1212:26 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1219:16:1219:20 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1219:16:1219:20 | SelfParam | TRef | main.rs:1217:5:1225:5 | Self [trait MyTrait] | | main.rs:1222:16:1222:20 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1222:16:1222:20 | SelfParam | TRef | main.rs:1217:5:1225:5 | Self [trait MyTrait] | -| main.rs:1222:32:1224:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1222:32:1224:9 | { ... } | TRef | main.rs:1217:5:1225:5 | Self [trait MyTrait] | | main.rs:1223:13:1223:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1223:13:1223:16 | self | TRef | main.rs:1217:5:1225:5 | Self [trait MyTrait] | | main.rs:1231:16:1231:20 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1231:16:1231:20 | SelfParam | TRef | main.rs:1227:5:1227:20 | MyStruct | -| main.rs:1231:36:1233:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1231:36:1233:9 | { ... } | TRef | main.rs:1227:5:1227:20 | MyStruct | | main.rs:1232:13:1232:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1232:13:1232:16 | self | TRef | main.rs:1227:5:1227:20 | MyStruct | | main.rs:1236:16:1239:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1248:16:1248:20 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1248:16:1248:20 | SelfParam | TRef | main.rs:1245:5:1245:26 | MyStruct | | main.rs:1248:16:1248:20 | SelfParam | TRef.T | main.rs:1247:10:1247:10 | T | -| main.rs:1248:32:1250:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1248:32:1250:9 | { ... } | TRef | main.rs:1245:5:1245:26 | MyStruct | -| main.rs:1248:32:1250:9 | { ... } | TRef.T | main.rs:1247:10:1247:10 | T | | main.rs:1249:13:1249:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1249:13:1249:16 | self | TRef | main.rs:1245:5:1245:26 | MyStruct | | main.rs:1249:13:1249:16 | self | TRef.T | main.rs:1247:10:1247:10 | T | @@ -2420,9 +1974,6 @@ inferCertainType | main.rs:1252:23:1252:23 | x | | {EXTERNAL LOCATION} | & | | main.rs:1252:23:1252:23 | x | TRef | main.rs:1245:5:1245:26 | MyStruct | | main.rs:1252:23:1252:23 | x | TRef.T | main.rs:1247:10:1247:10 | T | -| main.rs:1252:42:1254:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1252:42:1254:9 | { ... } | TRef | main.rs:1245:5:1245:26 | MyStruct | -| main.rs:1252:42:1254:9 | { ... } | TRef.T | main.rs:1247:10:1247:10 | T | | main.rs:1253:13:1253:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1253:13:1253:16 | self | TRef | main.rs:1245:5:1245:26 | MyStruct | | main.rs:1253:13:1253:16 | self | TRef.T | main.rs:1247:10:1247:10 | T | @@ -2438,8 +1989,6 @@ inferCertainType | main.rs:1274:26:1274:29 | self | TRefMut | main.rs:1267:5:1270:5 | MyFlag | | main.rs:1281:15:1281:19 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1281:15:1281:19 | SelfParam | TRef | main.rs:1278:5:1278:13 | S | -| main.rs:1281:31:1283:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1281:31:1283:9 | { ... } | TRef | main.rs:1278:5:1278:13 | S | | main.rs:1282:13:1282:19 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1282:14:1282:19 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1282:15:1282:19 | &self | | {EXTERNAL LOCATION} | & | @@ -2447,8 +1996,6 @@ inferCertainType | main.rs:1282:16:1282:19 | self | TRef | main.rs:1278:5:1278:13 | S | | main.rs:1285:15:1285:25 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1285:15:1285:25 | SelfParam | TRef | main.rs:1278:5:1278:13 | S | -| main.rs:1285:37:1287:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1285:37:1287:9 | { ... } | TRef | main.rs:1278:5:1278:13 | S | | main.rs:1286:13:1286:19 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1286:14:1286:19 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1286:15:1286:19 | &self | | {EXTERNAL LOCATION} | & | @@ -2456,14 +2003,10 @@ inferCertainType | main.rs:1286:16:1286:19 | self | TRef | main.rs:1278:5:1278:13 | S | | main.rs:1289:15:1289:15 | x | | {EXTERNAL LOCATION} | & | | main.rs:1289:15:1289:15 | x | TRef | main.rs:1278:5:1278:13 | S | -| main.rs:1289:34:1291:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1289:34:1291:9 | { ... } | TRef | main.rs:1278:5:1278:13 | S | | main.rs:1290:13:1290:13 | x | | {EXTERNAL LOCATION} | & | | main.rs:1290:13:1290:13 | x | TRef | main.rs:1278:5:1278:13 | S | | main.rs:1293:15:1293:15 | x | | {EXTERNAL LOCATION} | & | | main.rs:1293:15:1293:15 | x | TRef | main.rs:1278:5:1278:13 | S | -| main.rs:1293:34:1295:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1293:34:1295:9 | { ... } | TRef | main.rs:1278:5:1278:13 | S | | main.rs:1294:13:1294:16 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1294:14:1294:16 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1294:15:1294:16 | &x | | {EXTERNAL LOCATION} | & | @@ -2474,78 +2017,45 @@ inferCertainType | main.rs:1299:17:1299:20 | S {...} | | main.rs:1278:5:1278:13 | S | | main.rs:1300:9:1300:9 | x | | main.rs:1278:5:1278:13 | S | | main.rs:1301:9:1301:9 | x | | main.rs:1278:5:1278:13 | S | -| main.rs:1302:9:1302:17 | ...::f3(...) | | {EXTERNAL LOCATION} | & | -| main.rs:1302:9:1302:17 | ...::f3(...) | TRef | main.rs:1278:5:1278:13 | S | | main.rs:1302:15:1302:16 | &x | | {EXTERNAL LOCATION} | & | | main.rs:1302:16:1302:16 | x | | main.rs:1278:5:1278:13 | S | | main.rs:1304:19:1304:24 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1304:20:1304:24 | &true | | {EXTERNAL LOCATION} | & | | main.rs:1304:21:1304:24 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1309:9:1309:31 | ...::flip(...) | | {EXTERNAL LOCATION} | () | | main.rs:1309:22:1309:30 | &mut flag | | {EXTERNAL LOCATION} | &mut | | main.rs:1310:18:1310:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1310:18:1310:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1310:18:1310:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1310:18:1310:29 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1325:43:1328:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1325:43:1328:5 | { ... } | E | main.rs:1317:5:1318:14 | S1 | -| main.rs:1325:43:1328:5 | { ... } | T | main.rs:1317:5:1318:14 | S1 | -| main.rs:1332:46:1336:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1332:46:1336:5 | { ... } | E | main.rs:1320:5:1321:14 | S2 | -| main.rs:1332:46:1336:5 | { ... } | T | main.rs:1317:5:1318:14 | S1 | -| main.rs:1340:40:1345:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1340:40:1345:5 | { ... } | E | main.rs:1320:5:1321:14 | S2 | -| main.rs:1340:40:1345:5 | { ... } | T | main.rs:1317:5:1318:14 | S1 | | main.rs:1343:24:1343:28 | \|...\| s | | {EXTERNAL LOCATION} | dyn Fn | | main.rs:1349:30:1349:34 | input | | {EXTERNAL LOCATION} | Result | | main.rs:1349:30:1349:34 | input | E | main.rs:1317:5:1318:14 | S1 | | main.rs:1349:30:1349:34 | input | T | main.rs:1349:20:1349:27 | T | -| main.rs:1349:69:1356:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1349:69:1356:5 | { ... } | E | main.rs:1317:5:1318:14 | S1 | -| main.rs:1349:69:1356:5 | { ... } | T | main.rs:1349:20:1349:27 | T | | main.rs:1350:21:1350:25 | input | | {EXTERNAL LOCATION} | Result | | main.rs:1350:21:1350:25 | input | E | main.rs:1317:5:1318:14 | S1 | | main.rs:1350:21:1350:25 | input | T | main.rs:1349:20:1349:27 | T | | main.rs:1351:49:1354:9 | \|...\| ... | | {EXTERNAL LOCATION} | dyn Fn | | main.rs:1352:22:1352:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1352:22:1352:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1352:22:1352:30 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1352:22:1352:30 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1359:16:1375:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1360:9:1362:9 | if ... {...} | | {EXTERNAL LOCATION} | () | -| main.rs:1360:37:1360:52 | try_same_error(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1360:37:1360:52 | try_same_error(...) | E | main.rs:1317:5:1318:14 | S1 | -| main.rs:1360:37:1360:52 | try_same_error(...) | T | main.rs:1317:5:1318:14 | S1 | | main.rs:1360:54:1362:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1361:22:1361:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1361:22:1361:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1361:22:1361:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1361:22:1361:35 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1364:9:1366:9 | if ... {...} | | {EXTERNAL LOCATION} | () | -| main.rs:1364:37:1364:55 | try_convert_error(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1364:37:1364:55 | try_convert_error(...) | E | main.rs:1320:5:1321:14 | S2 | -| main.rs:1364:37:1364:55 | try_convert_error(...) | T | main.rs:1317:5:1318:14 | S1 | | main.rs:1364:57:1366:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1365:22:1365:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1365:22:1365:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1365:22:1365:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1365:22:1365:35 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1368:9:1370:9 | if ... {...} | | {EXTERNAL LOCATION} | () | -| main.rs:1368:37:1368:49 | try_chained(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1368:37:1368:49 | try_chained(...) | E | main.rs:1320:5:1321:14 | S2 | -| main.rs:1368:37:1368:49 | try_chained(...) | T | main.rs:1317:5:1318:14 | S1 | | main.rs:1368:51:1370:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1369:22:1369:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1369:22:1369:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1369:22:1369:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1369:22:1369:35 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1372:9:1374:9 | if ... {...} | | {EXTERNAL LOCATION} | () | -| main.rs:1372:37:1372:63 | try_complex(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1372:37:1372:63 | try_complex(...) | E | main.rs:1317:5:1318:14 | S1 | | main.rs:1372:65:1374:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1373:22:1373:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1373:22:1373:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:1373:22:1373:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1373:22:1373:35 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1379:16:1470:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1380:13:1380:13 | x | | {EXTERNAL LOCATION} | i32 | @@ -2568,28 +2078,18 @@ inferCertainType | main.rs:1397:26:1397:30 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1397:26:1397:30 | SelfParam | TRef | {EXTERNAL LOCATION} | [;] | | main.rs:1397:26:1397:30 | SelfParam | TRef.TArray | main.rs:1396:14:1396:23 | T | -| main.rs:1397:39:1399:13 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1397:39:1399:13 | { ... } | TRef | main.rs:1396:14:1396:23 | T | | main.rs:1398:17:1398:20 | self | | {EXTERNAL LOCATION} | & | | main.rs:1398:17:1398:20 | self | TRef | {EXTERNAL LOCATION} | [;] | | main.rs:1398:17:1398:20 | self | TRef.TArray | main.rs:1396:14:1396:23 | T | -| main.rs:1401:31:1403:13 | { ... } | | main.rs:1396:14:1396:23 | T | | main.rs:1406:17:1406:25 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:1407:13:1407:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1407:17:1407:47 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | | main.rs:1407:37:1407:46 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1407:38:1407:46 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:1408:13:1408:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1408:17:1408:37 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | | main.rs:1411:26:1411:30 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1411:26:1411:30 | SelfParam | TRef | {EXTERNAL LOCATION} | [] | | main.rs:1411:26:1411:30 | SelfParam | TRef.TSlice | main.rs:1410:14:1410:23 | T | -| main.rs:1411:39:1413:13 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1411:39:1413:13 | { ... } | TRef | main.rs:1410:14:1410:23 | T | | main.rs:1412:17:1412:20 | self | | {EXTERNAL LOCATION} | & | | main.rs:1412:17:1412:20 | self | TRef | {EXTERNAL LOCATION} | [] | | main.rs:1412:17:1412:20 | self | TRef.TSlice | main.rs:1410:14:1410:23 | T | -| main.rs:1415:31:1417:13 | { ... } | | main.rs:1410:14:1410:23 | T | | main.rs:1420:13:1420:13 | s | | {EXTERNAL LOCATION} | & | | main.rs:1420:13:1420:13 | s | TRef | {EXTERNAL LOCATION} | [] | | main.rs:1420:13:1420:13 | s | TRef.TSlice | {EXTERNAL LOCATION} | i32 | @@ -2598,73 +2098,49 @@ inferCertainType | main.rs:1421:17:1421:17 | s | | {EXTERNAL LOCATION} | & | | main.rs:1421:17:1421:17 | s | TRef | {EXTERNAL LOCATION} | [] | | main.rs:1421:17:1421:17 | s | TRef.TSlice | {EXTERNAL LOCATION} | i32 | -| main.rs:1422:13:1422:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1422:17:1422:35 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | | main.rs:1422:34:1422:34 | s | | {EXTERNAL LOCATION} | & | | main.rs:1422:34:1422:34 | s | TRef | {EXTERNAL LOCATION} | [] | | main.rs:1422:34:1422:34 | s | TRef.TSlice | {EXTERNAL LOCATION} | i32 | -| main.rs:1423:13:1423:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1423:17:1423:34 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | | main.rs:1426:26:1426:30 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1426:26:1426:30 | SelfParam | TRef | {EXTERNAL LOCATION} | (T_2) | | main.rs:1426:26:1426:30 | SelfParam | TRef.T0 | main.rs:1425:14:1425:23 | T | | main.rs:1426:26:1426:30 | SelfParam | TRef.T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:1426:39:1428:13 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1426:39:1428:13 | { ... } | TRef | main.rs:1425:14:1425:23 | T | | main.rs:1427:17:1427:23 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1427:18:1427:21 | self | | {EXTERNAL LOCATION} | & | | main.rs:1427:18:1427:21 | self | TRef | {EXTERNAL LOCATION} | (T_2) | | main.rs:1427:18:1427:21 | self | TRef.T0 | main.rs:1425:14:1425:23 | T | | main.rs:1427:18:1427:21 | self | TRef.T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:1430:31:1432:13 | { ... } | | main.rs:1425:14:1425:23 | T | | main.rs:1435:13:1435:13 | p | | {EXTERNAL LOCATION} | (T_2) | | main.rs:1435:17:1435:23 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | | main.rs:1436:17:1436:17 | p | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:1437:13:1437:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1437:17:1437:39 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | | main.rs:1437:37:1437:38 | &p | | {EXTERNAL LOCATION} | & | | main.rs:1437:38:1437:38 | p | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:1438:13:1438:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1438:17:1438:39 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | | main.rs:1441:26:1441:30 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1441:26:1441:30 | SelfParam | TRef | {EXTERNAL LOCATION} | & | | main.rs:1441:26:1441:30 | SelfParam | TRef.TRef | main.rs:1440:14:1440:23 | T | -| main.rs:1441:39:1443:13 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1441:39:1443:13 | { ... } | TRef | main.rs:1440:14:1440:23 | T | | main.rs:1442:18:1442:21 | self | | {EXTERNAL LOCATION} | & | | main.rs:1442:18:1442:21 | self | TRef | {EXTERNAL LOCATION} | & | | main.rs:1442:18:1442:21 | self | TRef.TRef | main.rs:1440:14:1440:23 | T | -| main.rs:1445:31:1447:13 | { ... } | | main.rs:1440:14:1440:23 | T | | main.rs:1450:13:1450:13 | r | | {EXTERNAL LOCATION} | & | | main.rs:1450:17:1450:19 | &42 | | {EXTERNAL LOCATION} | & | | main.rs:1451:17:1451:17 | r | | {EXTERNAL LOCATION} | & | -| main.rs:1452:13:1452:13 | x | | {EXTERNAL LOCATION} | & | -| main.rs:1452:17:1452:35 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | | main.rs:1452:33:1452:34 | &r | | {EXTERNAL LOCATION} | & | | main.rs:1452:34:1452:34 | r | | {EXTERNAL LOCATION} | & | -| main.rs:1453:13:1453:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1453:17:1453:33 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | | main.rs:1456:26:1456:30 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1456:26:1456:30 | SelfParam | TRef | {EXTERNAL LOCATION} | *mut | | main.rs:1456:26:1456:30 | SelfParam | TRef.TPtrMut | main.rs:1455:14:1455:23 | T | -| main.rs:1456:39:1458:13 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1456:39:1458:13 | { ... } | TRef | main.rs:1455:14:1455:23 | T | | main.rs:1457:26:1457:32 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1457:29:1457:32 | self | | {EXTERNAL LOCATION} | & | | main.rs:1457:29:1457:32 | self | TRef | {EXTERNAL LOCATION} | *mut | | main.rs:1457:29:1457:32 | self | TRef.TPtrMut | main.rs:1455:14:1455:23 | T | -| main.rs:1460:31:1462:13 | { ... } | | main.rs:1455:14:1455:23 | T | | main.rs:1466:13:1466:13 | p | | {EXTERNAL LOCATION} | *mut | | main.rs:1466:13:1466:13 | p | TPtrMut | {EXTERNAL LOCATION} | i32 | | main.rs:1466:27:1466:32 | &mut v | | {EXTERNAL LOCATION} | &mut | | main.rs:1467:26:1467:26 | p | | {EXTERNAL LOCATION} | *mut | | main.rs:1467:26:1467:26 | p | TPtrMut | {EXTERNAL LOCATION} | i32 | -| main.rs:1468:26:1468:48 | ...::my_method(...) | | {EXTERNAL LOCATION} | & | | main.rs:1468:46:1468:47 | &p | | {EXTERNAL LOCATION} | & | | main.rs:1468:47:1468:47 | p | | {EXTERNAL LOCATION} | *mut | | main.rs:1468:47:1468:47 | p | TPtrMut | {EXTERNAL LOCATION} | i32 | -| main.rs:1469:13:1469:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1469:17:1469:37 | ...::my_func(...) | | {EXTERNAL LOCATION} | i32 | | main.rs:1475:16:1487:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1476:13:1476:13 | x | | {EXTERNAL LOCATION} | bool | | main.rs:1476:17:1476:20 | true | | {EXTERNAL LOCATION} | bool | @@ -2676,11 +2152,9 @@ inferCertainType | main.rs:1477:25:1477:29 | false | | {EXTERNAL LOCATION} | bool | | main.rs:1481:17:1483:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1483:16:1485:9 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1500:30:1502:9 | { ... } | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1501:13:1501:31 | Vec2 {...} | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1508:16:1508:19 | SelfParam | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1508:22:1508:24 | rhs | | main.rs:1493:5:1498:5 | Vec2 | -| main.rs:1508:41:1513:9 | { ... } | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1509:13:1512:13 | Vec2 {...} | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1510:20:1510:23 | self | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1510:29:1510:31 | rhs | | main.rs:1493:5:1498:5 | Vec2 | @@ -2698,7 +2172,6 @@ inferCertainType | main.rs:1520:23:1520:25 | rhs | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1526:16:1526:19 | SelfParam | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1526:22:1526:24 | rhs | | main.rs:1493:5:1498:5 | Vec2 | -| main.rs:1526:41:1531:9 | { ... } | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1527:13:1530:13 | Vec2 {...} | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1528:20:1528:23 | self | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1528:29:1528:31 | rhs | | main.rs:1493:5:1498:5 | Vec2 | @@ -2716,7 +2189,6 @@ inferCertainType | main.rs:1538:23:1538:25 | rhs | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1544:16:1544:19 | SelfParam | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1544:22:1544:24 | rhs | | main.rs:1493:5:1498:5 | Vec2 | -| main.rs:1544:41:1549:9 | { ... } | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1545:13:1548:13 | Vec2 {...} | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1546:20:1546:23 | self | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1546:29:1546:31 | rhs | | main.rs:1493:5:1498:5 | Vec2 | @@ -2734,7 +2206,6 @@ inferCertainType | main.rs:1555:23:1555:25 | rhs | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1561:16:1561:19 | SelfParam | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1561:22:1561:24 | rhs | | main.rs:1493:5:1498:5 | Vec2 | -| main.rs:1561:41:1566:9 | { ... } | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1562:13:1565:13 | Vec2 {...} | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1563:20:1563:23 | self | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1563:29:1563:31 | rhs | | main.rs:1493:5:1498:5 | Vec2 | @@ -2752,7 +2223,6 @@ inferCertainType | main.rs:1572:23:1572:25 | rhs | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1578:16:1578:19 | SelfParam | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1578:22:1578:24 | rhs | | main.rs:1493:5:1498:5 | Vec2 | -| main.rs:1578:41:1583:9 | { ... } | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1579:13:1582:13 | Vec2 {...} | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1580:20:1580:23 | self | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1580:29:1580:31 | rhs | | main.rs:1493:5:1498:5 | Vec2 | @@ -2770,7 +2240,6 @@ inferCertainType | main.rs:1589:23:1589:25 | rhs | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1595:19:1595:22 | SelfParam | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1595:25:1595:27 | rhs | | main.rs:1493:5:1498:5 | Vec2 | -| main.rs:1595:44:1600:9 | { ... } | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1596:13:1599:13 | Vec2 {...} | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1597:20:1597:23 | self | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1597:29:1597:31 | rhs | | main.rs:1493:5:1498:5 | Vec2 | @@ -2788,7 +2257,6 @@ inferCertainType | main.rs:1606:23:1606:25 | rhs | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1612:18:1612:21 | SelfParam | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1612:24:1612:26 | rhs | | main.rs:1493:5:1498:5 | Vec2 | -| main.rs:1612:43:1617:9 | { ... } | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1613:13:1616:13 | Vec2 {...} | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1614:20:1614:23 | self | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1614:29:1614:31 | rhs | | main.rs:1493:5:1498:5 | Vec2 | @@ -2806,7 +2274,6 @@ inferCertainType | main.rs:1623:23:1623:25 | rhs | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1629:19:1629:22 | SelfParam | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1629:25:1629:27 | rhs | | main.rs:1493:5:1498:5 | Vec2 | -| main.rs:1629:44:1634:9 | { ... } | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1630:13:1633:13 | Vec2 {...} | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1631:20:1631:23 | self | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1631:29:1631:31 | rhs | | main.rs:1493:5:1498:5 | Vec2 | @@ -2824,7 +2291,6 @@ inferCertainType | main.rs:1640:23:1640:25 | rhs | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1646:16:1646:19 | SelfParam | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1646:22:1646:24 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1646:40:1651:9 | { ... } | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1647:13:1650:13 | Vec2 {...} | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1648:20:1648:23 | self | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1648:30:1648:32 | rhs | | {EXTERNAL LOCATION} | u32 | @@ -2842,7 +2308,6 @@ inferCertainType | main.rs:1657:24:1657:26 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:1663:16:1663:19 | SelfParam | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1663:22:1663:24 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1663:40:1668:9 | { ... } | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1664:13:1667:13 | Vec2 {...} | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1665:20:1665:23 | self | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1665:30:1665:32 | rhs | | {EXTERNAL LOCATION} | u32 | @@ -2859,12 +2324,10 @@ inferCertainType | main.rs:1674:13:1674:16 | self | TRefMut | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1674:24:1674:26 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:1680:16:1680:19 | SelfParam | | main.rs:1493:5:1498:5 | Vec2 | -| main.rs:1680:30:1685:9 | { ... } | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1681:13:1684:13 | Vec2 {...} | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1682:21:1682:24 | self | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1683:21:1683:24 | self | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1690:16:1690:19 | SelfParam | | main.rs:1493:5:1498:5 | Vec2 | -| main.rs:1690:30:1695:9 | { ... } | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1691:13:1694:13 | Vec2 {...} | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1692:21:1692:24 | self | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1693:21:1693:24 | self | | main.rs:1493:5:1498:5 | Vec2 | @@ -2872,7 +2335,6 @@ inferCertainType | main.rs:1699:15:1699:19 | SelfParam | TRef | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1699:22:1699:26 | other | | {EXTERNAL LOCATION} | & | | main.rs:1699:22:1699:26 | other | TRef | main.rs:1493:5:1498:5 | Vec2 | -| main.rs:1699:44:1701:9 | { ... } | | {EXTERNAL LOCATION} | bool | | main.rs:1700:13:1700:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1700:13:1700:16 | self | TRef | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1700:13:1700:29 | ... == ... | | {EXTERNAL LOCATION} | bool | @@ -2888,7 +2350,6 @@ inferCertainType | main.rs:1703:15:1703:19 | SelfParam | TRef | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1703:22:1703:26 | other | | {EXTERNAL LOCATION} | & | | main.rs:1703:22:1703:26 | other | TRef | main.rs:1493:5:1498:5 | Vec2 | -| main.rs:1703:44:1705:9 | { ... } | | {EXTERNAL LOCATION} | bool | | main.rs:1704:13:1704:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1704:13:1704:16 | self | TRef | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1704:13:1704:29 | ... != ... | | {EXTERNAL LOCATION} | bool | @@ -2904,8 +2365,6 @@ inferCertainType | main.rs:1709:24:1709:28 | SelfParam | TRef | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1709:31:1709:35 | other | | {EXTERNAL LOCATION} | & | | main.rs:1709:31:1709:35 | other | TRef | main.rs:1493:5:1498:5 | Vec2 | -| main.rs:1709:75:1711:9 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:1709:75:1711:9 | { ... } | T | {EXTERNAL LOCATION} | Ordering | | main.rs:1710:14:1710:17 | self | | {EXTERNAL LOCATION} | & | | main.rs:1710:14:1710:17 | self | TRef | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1710:23:1710:26 | self | | {EXTERNAL LOCATION} | & | @@ -2919,7 +2378,6 @@ inferCertainType | main.rs:1713:15:1713:19 | SelfParam | TRef | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1713:22:1713:26 | other | | {EXTERNAL LOCATION} | & | | main.rs:1713:22:1713:26 | other | TRef | main.rs:1493:5:1498:5 | Vec2 | -| main.rs:1713:44:1715:9 | { ... } | | {EXTERNAL LOCATION} | bool | | main.rs:1714:13:1714:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1714:13:1714:16 | self | TRef | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1714:13:1714:28 | ... < ... | | {EXTERNAL LOCATION} | bool | @@ -2935,7 +2393,6 @@ inferCertainType | main.rs:1717:15:1717:19 | SelfParam | TRef | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1717:22:1717:26 | other | | {EXTERNAL LOCATION} | & | | main.rs:1717:22:1717:26 | other | TRef | main.rs:1493:5:1498:5 | Vec2 | -| main.rs:1717:44:1719:9 | { ... } | | {EXTERNAL LOCATION} | bool | | main.rs:1718:13:1718:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1718:13:1718:16 | self | TRef | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1718:13:1718:29 | ... <= ... | | {EXTERNAL LOCATION} | bool | @@ -2951,7 +2408,6 @@ inferCertainType | main.rs:1721:15:1721:19 | SelfParam | TRef | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1721:22:1721:26 | other | | {EXTERNAL LOCATION} | & | | main.rs:1721:22:1721:26 | other | TRef | main.rs:1493:5:1498:5 | Vec2 | -| main.rs:1721:44:1723:9 | { ... } | | {EXTERNAL LOCATION} | bool | | main.rs:1722:13:1722:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1722:13:1722:16 | self | TRef | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1722:13:1722:28 | ... > ... | | {EXTERNAL LOCATION} | bool | @@ -2967,7 +2423,6 @@ inferCertainType | main.rs:1725:15:1725:19 | SelfParam | TRef | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1725:22:1725:26 | other | | {EXTERNAL LOCATION} | & | | main.rs:1725:22:1725:26 | other | TRef | main.rs:1493:5:1498:5 | Vec2 | -| main.rs:1725:44:1727:9 | { ... } | | {EXTERNAL LOCATION} | bool | | main.rs:1726:13:1726:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:1726:13:1726:16 | self | TRef | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1726:13:1726:29 | ... >= ... | | {EXTERNAL LOCATION} | bool | @@ -2981,7 +2436,6 @@ inferCertainType | main.rs:1726:44:1726:48 | other | TRef | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1730:26:1730:26 | a | | main.rs:1730:18:1730:23 | T | | main.rs:1730:32:1730:32 | b | | main.rs:1730:18:1730:23 | T | -| main.rs:1730:51:1732:5 | { ... } | | main.rs:1730:18:1730:23 | T::Output[Add] | | main.rs:1731:9:1731:9 | a | | main.rs:1730:18:1730:23 | T | | main.rs:1731:13:1731:13 | b | | main.rs:1730:18:1730:23 | T | | main.rs:1734:16:1865:5 | { ... } | | {EXTERNAL LOCATION} | () | @@ -3143,7 +2597,6 @@ inferCertainType | main.rs:1864:30:1864:48 | Vec2 {...} | | main.rs:1493:5:1498:5 | Vec2 | | main.rs:1874:18:1874:21 | SelfParam | | main.rs:1871:5:1871:14 | S1 | | main.rs:1874:24:1874:25 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1877:25:1879:5 | { ... } | | main.rs:1871:5:1871:14 | S1 | | main.rs:1882:9:1882:20 | { ... } | | {EXTERNAL LOCATION} | dyn Future | | main.rs:1886:9:1886:16 | { ... } | | {EXTERNAL LOCATION} | dyn Future | | main.rs:1886:9:1886:16 | { ... } | dyn(Output) | {EXTERNAL LOCATION} | () | @@ -3152,14 +2605,7 @@ inferCertainType | main.rs:1895:13:1895:42 | SelfParam | Ptr.TRefMut | main.rs:1889:5:1889:14 | S2 | | main.rs:1896:13:1896:15 | _cx | | {EXTERNAL LOCATION} | &mut | | main.rs:1896:13:1896:15 | _cx | TRefMut | {EXTERNAL LOCATION} | Context | -| main.rs:1897:44:1899:9 | { ... } | | {EXTERNAL LOCATION} | Poll | -| main.rs:1897:44:1899:9 | { ... } | T | main.rs:1871:5:1871:14 | S1 | | main.rs:1906:22:1914:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1907:9:1907:12 | f1(...) | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:1907:9:1907:12 | f1(...) | dyn(Output) | main.rs:1871:5:1871:14 | S1 | -| main.rs:1908:9:1908:12 | f2(...) | | main.rs:1881:16:1881:39 | impl ... | -| main.rs:1909:9:1909:12 | f3(...) | | main.rs:1885:16:1885:39 | impl ... | -| main.rs:1910:9:1910:12 | f4(...) | | main.rs:1902:16:1902:39 | impl ... | | main.rs:1912:13:1912:13 | b | | {EXTERNAL LOCATION} | dyn Future | | main.rs:1912:17:1912:28 | { ... } | | {EXTERNAL LOCATION} | dyn Future | | main.rs:1913:9:1913:9 | b | | {EXTERNAL LOCATION} | dyn Future | @@ -3179,63 +2625,28 @@ inferCertainType | main.rs:1944:18:1944:22 | SelfParam | TRef | main.rs:1943:5:1945:5 | Self [trait MyTrait] | | main.rs:1948:18:1948:22 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1948:18:1948:22 | SelfParam | TRef | main.rs:1918:5:1919:14 | S1 | -| main.rs:1948:31:1950:9 | { ... } | | main.rs:1920:5:1920:14 | S2 | | main.rs:1954:18:1954:22 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1954:18:1954:22 | SelfParam | TRef | main.rs:1921:5:1921:22 | S3 | | main.rs:1954:18:1954:22 | SelfParam | TRef.T3 | main.rs:1953:10:1953:17 | T | -| main.rs:1954:30:1957:9 | { ... } | | main.rs:1953:10:1953:17 | T | | main.rs:1955:25:1955:28 | self | | {EXTERNAL LOCATION} | & | | main.rs:1955:25:1955:28 | self | TRef | main.rs:1921:5:1921:22 | S3 | | main.rs:1955:25:1955:28 | self | TRef.T3 | main.rs:1953:10:1953:17 | T | | main.rs:1964:41:1964:41 | t | | main.rs:1964:26:1964:38 | B | -| main.rs:1964:52:1966:5 | { ... } | | main.rs:1964:23:1964:23 | A | | main.rs:1965:9:1965:9 | t | | main.rs:1964:26:1964:38 | B | | main.rs:1968:34:1968:34 | x | | main.rs:1968:24:1968:31 | T | -| main.rs:1968:59:1970:5 | { ... } | | main.rs:1968:43:1968:57 | impl ... | -| main.rs:1968:59:1970:5 | { ... } | impl(T) | main.rs:1968:24:1968:31 | T | | main.rs:1969:12:1969:12 | x | | main.rs:1968:24:1968:31 | T | | main.rs:1972:34:1972:34 | x | | main.rs:1972:24:1972:31 | T | -| main.rs:1972:67:1974:5 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:1972:67:1974:5 | { ... } | T | main.rs:1972:50:1972:64 | impl ... | -| main.rs:1972:67:1974:5 | { ... } | T.impl(T) | main.rs:1972:24:1972:31 | T | | main.rs:1973:17:1973:17 | x | | main.rs:1972:24:1972:31 | T | | main.rs:1976:34:1976:34 | x | | main.rs:1976:24:1976:31 | T | -| main.rs:1976:78:1978:5 | { ... } | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:1976:78:1978:5 | { ... } | T0 | main.rs:1976:44:1976:58 | impl ... | -| main.rs:1976:78:1978:5 | { ... } | T0.impl(T) | main.rs:1976:24:1976:31 | T | -| main.rs:1976:78:1978:5 | { ... } | T1 | main.rs:1976:61:1976:75 | impl ... | -| main.rs:1976:78:1978:5 | { ... } | T1.impl(T) | main.rs:1976:24:1976:31 | T | | main.rs:1977:9:1977:30 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | | main.rs:1977:13:1977:13 | x | | main.rs:1976:24:1976:31 | T | | main.rs:1977:28:1977:28 | x | | main.rs:1976:24:1976:31 | T | | main.rs:1980:26:1980:26 | t | | main.rs:1980:29:1980:43 | impl ... | -| main.rs:1980:51:1982:5 | { ... } | | main.rs:1980:23:1980:23 | A | | main.rs:1981:9:1981:9 | t | | main.rs:1980:29:1980:43 | impl ... | | main.rs:1984:16:1998:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1985:13:1985:13 | x | | main.rs:1939:16:1939:35 | impl ... + ... | -| main.rs:1985:17:1985:20 | f1(...) | | main.rs:1939:16:1939:35 | impl ... + ... | -| main.rs:1986:9:1986:9 | x | | main.rs:1939:16:1939:35 | impl ... + ... | -| main.rs:1987:9:1987:9 | x | | main.rs:1939:16:1939:35 | impl ... + ... | -| main.rs:1988:13:1988:13 | a | | main.rs:1960:28:1960:43 | impl ... | -| main.rs:1988:17:1988:32 | get_a_my_trait(...) | | main.rs:1960:28:1960:43 | impl ... | -| main.rs:1989:32:1989:32 | a | | main.rs:1960:28:1960:43 | impl ... | -| main.rs:1990:13:1990:13 | a | | main.rs:1960:28:1960:43 | impl ... | -| main.rs:1990:17:1990:32 | get_a_my_trait(...) | | main.rs:1960:28:1960:43 | impl ... | -| main.rs:1991:32:1991:32 | a | | main.rs:1960:28:1960:43 | impl ... | -| main.rs:1993:17:1993:35 | get_a_my_trait2(...) | | main.rs:1968:43:1968:57 | impl ... | -| main.rs:1996:17:1996:35 | get_a_my_trait3(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:1996:17:1996:35 | get_a_my_trait3(...) | T | main.rs:1972:50:1972:64 | impl ... | -| main.rs:1997:17:1997:35 | get_a_my_trait4(...) | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:1997:17:1997:35 | get_a_my_trait4(...) | T0 | main.rs:1976:44:1976:58 | impl ... | -| main.rs:1997:17:1997:35 | get_a_my_trait4(...) | T1 | main.rs:1976:61:1976:75 | impl ... | | main.rs:2008:16:2008:20 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2008:16:2008:20 | SelfParam | TRef | main.rs:2004:5:2005:13 | S | -| main.rs:2008:31:2010:9 | { ... } | | main.rs:2004:5:2005:13 | S | -| main.rs:2019:26:2021:9 | { ... } | | main.rs:2013:5:2016:5 | MyVec | -| main.rs:2019:26:2021:9 | { ... } | T | main.rs:2018:10:2018:10 | T | | main.rs:2020:13:2020:38 | MyVec {...} | | main.rs:2013:5:2016:5 | MyVec | -| main.rs:2020:27:2020:36 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2020:27:2020:36 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | main.rs:2023:17:2023:25 | SelfParam | | {EXTERNAL LOCATION} | &mut | | main.rs:2023:17:2023:25 | SelfParam | TRefMut | main.rs:2013:5:2016:5 | MyVec | | main.rs:2023:17:2023:25 | SelfParam | TRefMut.T | main.rs:2018:10:2018:10 | T | @@ -3249,8 +2660,6 @@ inferCertainType | main.rs:2032:18:2032:22 | SelfParam | TRef | main.rs:2013:5:2016:5 | MyVec | | main.rs:2032:18:2032:22 | SelfParam | TRef.T | main.rs:2028:10:2028:10 | T | | main.rs:2032:25:2032:29 | index | | {EXTERNAL LOCATION} | usize | -| main.rs:2032:56:2034:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:2032:56:2034:9 | { ... } | TRef | main.rs:2028:10:2028:10 | T | | main.rs:2033:13:2033:29 | &... | | {EXTERNAL LOCATION} | & | | main.rs:2033:14:2033:17 | self | | {EXTERNAL LOCATION} | & | | main.rs:2033:14:2033:17 | self | TRef | main.rs:2013:5:2016:5 | MyVec | @@ -3265,52 +2674,39 @@ inferCertainType | main.rs:2038:17:2038:21 | slice | TRef.TSlice | main.rs:2004:5:2005:13 | S | | main.rs:2041:37:2041:37 | a | | main.rs:2041:20:2041:34 | T | | main.rs:2041:43:2041:43 | b | | {EXTERNAL LOCATION} | usize | -| main.rs:2044:5:2046:5 | { ... } | | main.rs:2041:20:2041:34 | T::Output[Index] | | main.rs:2045:9:2045:9 | a | | main.rs:2041:20:2041:34 | T | | main.rs:2045:11:2045:11 | b | | {EXTERNAL LOCATION} | usize | | main.rs:2048:16:2059:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2049:17:2049:19 | vec | | main.rs:2013:5:2016:5 | MyVec | -| main.rs:2049:23:2049:34 | ...::new(...) | | main.rs:2013:5:2016:5 | MyVec | -| main.rs:2050:9:2050:11 | vec | | main.rs:2013:5:2016:5 | MyVec | -| main.rs:2051:9:2051:11 | vec | | main.rs:2013:5:2016:5 | MyVec | | main.rs:2053:13:2053:14 | xs | | {EXTERNAL LOCATION} | [;] | | main.rs:2053:13:2053:14 | xs | TArray | main.rs:2004:5:2005:13 | S | | main.rs:2053:26:2053:28 | [...] | | {EXTERNAL LOCATION} | [;] | | main.rs:2054:17:2054:18 | xs | | {EXTERNAL LOCATION} | [;] | | main.rs:2054:17:2054:18 | xs | TArray | main.rs:2004:5:2005:13 | S | -| main.rs:2056:29:2056:31 | vec | | main.rs:2013:5:2016:5 | MyVec | -| main.rs:2058:9:2058:26 | analyze_slice(...) | | {EXTERNAL LOCATION} | () | | main.rs:2058:23:2058:25 | &xs | | {EXTERNAL LOCATION} | & | | main.rs:2058:24:2058:25 | xs | | {EXTERNAL LOCATION} | [;] | | main.rs:2058:24:2058:25 | xs | TArray | main.rs:2004:5:2005:13 | S | | main.rs:2063:16:2065:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2064:25:2064:35 | "Hello, {}" | | {EXTERNAL LOCATION} | & | | main.rs:2064:25:2064:35 | "Hello, {}" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2064:25:2064:45 | ...::format(...) | | {EXTERNAL LOCATION} | String | | main.rs:2064:38:2064:45 | "World!" | | {EXTERNAL LOCATION} | & | | main.rs:2064:38:2064:45 | "World!" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2073:19:2073:22 | SelfParam | | main.rs:2069:5:2074:5 | Self [trait MyAdd] | | main.rs:2073:25:2073:27 | rhs | | main.rs:2069:17:2069:26 | Rhs | | main.rs:2080:19:2080:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | | main.rs:2080:25:2080:29 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2080:45:2082:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:2081:13:2081:17 | value | | {EXTERNAL LOCATION} | i64 | | main.rs:2089:19:2089:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | | main.rs:2089:25:2089:29 | value | | {EXTERNAL LOCATION} | & | | main.rs:2089:25:2089:29 | value | TRef | {EXTERNAL LOCATION} | i64 | -| main.rs:2089:46:2091:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:2090:14:2090:18 | value | | {EXTERNAL LOCATION} | & | | main.rs:2090:14:2090:18 | value | TRef | {EXTERNAL LOCATION} | i64 | | main.rs:2098:19:2098:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | | main.rs:2098:25:2098:29 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2098:46:2104:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:2099:16:2099:20 | value | | {EXTERNAL LOCATION} | bool | | main.rs:2113:19:2113:22 | SelfParam | | main.rs:2107:5:2107:19 | S | | main.rs:2113:19:2113:22 | SelfParam | T | main.rs:2109:10:2109:17 | T | | main.rs:2113:25:2113:29 | other | | main.rs:2107:5:2107:19 | S | | main.rs:2113:25:2113:29 | other | T | main.rs:2109:10:2109:17 | T | -| main.rs:2113:54:2115:9 | { ... } | | main.rs:2107:5:2107:19 | S | -| main.rs:2113:54:2115:9 | { ... } | T | main.rs:2109:10:2109:17 | T::Output[MyAdd] | | main.rs:2114:16:2114:19 | self | | main.rs:2107:5:2107:19 | S | | main.rs:2114:16:2114:19 | self | T | main.rs:2109:10:2109:17 | T | | main.rs:2114:31:2114:35 | other | | main.rs:2107:5:2107:19 | S | @@ -3318,8 +2714,6 @@ inferCertainType | main.rs:2122:19:2122:22 | SelfParam | | main.rs:2107:5:2107:19 | S | | main.rs:2122:19:2122:22 | SelfParam | T | main.rs:2118:10:2118:17 | T | | main.rs:2122:25:2122:29 | other | | main.rs:2118:10:2118:17 | T | -| main.rs:2122:51:2124:9 | { ... } | | main.rs:2107:5:2107:19 | S | -| main.rs:2122:51:2124:9 | { ... } | T | main.rs:2118:10:2118:17 | T::Output[MyAdd] | | main.rs:2123:16:2123:19 | self | | main.rs:2107:5:2107:19 | S | | main.rs:2123:16:2123:19 | self | T | main.rs:2118:10:2118:17 | T | | main.rs:2123:31:2123:35 | other | | main.rs:2118:10:2118:17 | T | @@ -3327,18 +2721,14 @@ inferCertainType | main.rs:2134:19:2134:22 | SelfParam | T | main.rs:2127:14:2127:14 | T | | main.rs:2134:25:2134:29 | other | | {EXTERNAL LOCATION} | & | | main.rs:2134:25:2134:29 | other | TRef | main.rs:2127:14:2127:14 | T | -| main.rs:2134:55:2136:9 | { ... } | | main.rs:2107:5:2107:19 | S | -| main.rs:2134:55:2136:9 | { ... } | T | main.rs:2127:14:2127:14 | T::Output[MyAdd] | | main.rs:2135:16:2135:19 | self | | main.rs:2107:5:2107:19 | S | | main.rs:2135:16:2135:19 | self | T | main.rs:2127:14:2127:14 | T | | main.rs:2135:31:2135:35 | other | | {EXTERNAL LOCATION} | & | | main.rs:2135:31:2135:35 | other | TRef | main.rs:2127:14:2127:14 | T | | main.rs:2141:20:2141:24 | value | | main.rs:2139:18:2139:18 | T | | main.rs:2146:20:2146:24 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2146:40:2148:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:2147:13:2147:17 | value | | {EXTERNAL LOCATION} | i64 | | main.rs:2153:20:2153:24 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2153:41:2159:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:2154:16:2154:20 | value | | {EXTERNAL LOCATION} | bool | | main.rs:2164:21:2164:25 | value | | main.rs:2162:19:2162:19 | T | | main.rs:2164:31:2164:31 | x | | main.rs:2162:5:2165:5 | Self [trait MyFrom2] | @@ -3353,15 +2743,11 @@ inferCertainType | main.rs:2187:15:2187:15 | x | | main.rs:2185:5:2191:5 | Self [trait MySelfTrait] | | main.rs:2190:15:2190:15 | x | | main.rs:2185:5:2191:5 | Self [trait MySelfTrait] | | main.rs:2195:15:2195:15 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2195:31:2197:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:2196:13:2196:13 | x | | {EXTERNAL LOCATION} | i64 | | main.rs:2200:15:2200:15 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2200:32:2202:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:2201:13:2201:13 | x | | {EXTERNAL LOCATION} | i64 | | main.rs:2207:15:2207:15 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:2207:31:2209:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:2212:15:2212:15 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:2212:32:2214:9 | { ... } | | {EXTERNAL LOCATION} | bool | | main.rs:2213:13:2213:13 | x | | {EXTERNAL LOCATION} | bool | | main.rs:2217:16:2242:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2218:13:2218:13 | x | | {EXTERNAL LOCATION} | i64 | @@ -3379,42 +2765,27 @@ inferCertainType | main.rs:2225:11:2225:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2225:24:2225:28 | &3i64 | | {EXTERNAL LOCATION} | & | | main.rs:2225:25:2225:28 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2227:13:2227:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2227:17:2227:35 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | | main.rs:2227:30:2227:34 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2228:13:2228:13 | y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2228:17:2228:34 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | | main.rs:2228:30:2228:33 | true | | {EXTERNAL LOCATION} | bool | | main.rs:2229:13:2229:13 | z | | {EXTERNAL LOCATION} | i64 | | main.rs:2229:38:2229:42 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2230:9:2230:34 | ...::my_from2(...) | | {EXTERNAL LOCATION} | () | | main.rs:2230:23:2230:27 | 73i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2230:30:2230:33 | 0i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2231:9:2231:33 | ...::my_from2(...) | | {EXTERNAL LOCATION} | () | | main.rs:2231:23:2231:26 | true | | {EXTERNAL LOCATION} | bool | | main.rs:2231:29:2231:32 | 0i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2232:9:2232:38 | ...::my_from2(...) | | {EXTERNAL LOCATION} | () | | main.rs:2232:27:2232:31 | 73i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2232:34:2232:37 | 0i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2234:9:2234:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | | main.rs:2234:17:2234:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2235:9:2235:22 | ...::f2(...) | | {EXTERNAL LOCATION} | i64 | | main.rs:2235:17:2235:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2236:9:2236:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | | main.rs:2236:18:2236:21 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2237:9:2237:22 | ...::f2(...) | | {EXTERNAL LOCATION} | bool | | main.rs:2237:18:2237:21 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2238:9:2238:30 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | | main.rs:2238:25:2238:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:2239:25:2239:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2240:9:2240:29 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | | main.rs:2240:25:2240:28 | true | | {EXTERNAL LOCATION} | bool | | main.rs:2241:25:2241:28 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2249:26:2251:9 | { ... } | | main.rs:2246:5:2246:24 | MyCallable | | main.rs:2250:13:2250:25 | MyCallable {...} | | main.rs:2246:5:2246:24 | MyCallable | | main.rs:2253:17:2253:21 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2253:17:2253:21 | SelfParam | TRef | main.rs:2246:5:2246:24 | MyCallable | -| main.rs:2253:31:2255:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:2258:16:2365:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2261:9:2261:29 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2261:18:2261:26 | [...] | | {EXTERNAL LOCATION} | [;] | @@ -3473,13 +2844,10 @@ inferCertainType | main.rs:2280:27:2280:28 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2282:13:2282:20 | strings2 | | {EXTERNAL LOCATION} | [;] | | main.rs:2283:9:2287:9 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2284:13:2284:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | | main.rs:2284:26:2284:30 | "foo" | | {EXTERNAL LOCATION} | & | | main.rs:2284:26:2284:30 | "foo" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2285:13:2285:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | | main.rs:2285:26:2285:30 | "bar" | | {EXTERNAL LOCATION} | & | | main.rs:2285:26:2285:30 | "bar" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2286:13:2286:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | | main.rs:2286:26:2286:30 | "baz" | | {EXTERNAL LOCATION} | & | | main.rs:2286:26:2286:30 | "baz" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2288:9:2288:28 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | @@ -3488,13 +2856,10 @@ inferCertainType | main.rs:2290:13:2290:20 | strings3 | | {EXTERNAL LOCATION} | & | | main.rs:2291:9:2295:9 | &... | | {EXTERNAL LOCATION} | & | | main.rs:2291:10:2295:9 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2292:13:2292:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | | main.rs:2292:26:2292:30 | "foo" | | {EXTERNAL LOCATION} | & | | main.rs:2292:26:2292:30 | "foo" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2293:13:2293:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | | main.rs:2293:26:2293:30 | "bar" | | {EXTERNAL LOCATION} | & | | main.rs:2293:26:2293:30 | "bar" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2294:13:2294:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | | main.rs:2294:26:2294:30 | "baz" | | {EXTERNAL LOCATION} | & | | main.rs:2294:26:2294:30 | "baz" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2296:9:2296:28 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | @@ -3502,9 +2867,6 @@ inferCertainType | main.rs:2296:27:2296:28 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2298:13:2298:21 | callables | | {EXTERNAL LOCATION} | [;] | | main.rs:2298:25:2298:81 | [...] | | {EXTERNAL LOCATION} | [;] | -| main.rs:2298:26:2298:42 | ...::new(...) | | main.rs:2246:5:2246:24 | MyCallable | -| main.rs:2298:45:2298:61 | ...::new(...) | | main.rs:2246:5:2246:24 | MyCallable | -| main.rs:2298:64:2298:80 | ...::new(...) | | main.rs:2246:5:2246:24 | MyCallable | | main.rs:2299:9:2303:9 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2300:12:2300:20 | callables | | {EXTERNAL LOCATION} | [;] | | main.rs:2301:9:2303:9 | { ... } | | {EXTERNAL LOCATION} | () | @@ -3554,12 +2916,9 @@ inferCertainType | main.rs:2329:23:2329:26 | 1u16 | | {EXTERNAL LOCATION} | u16 | | main.rs:2330:9:2330:26 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2330:25:2330:26 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2332:13:2332:17 | vals5 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2332:21:2332:43 | ...::from(...) | | {EXTERNAL LOCATION} | Vec | | main.rs:2332:31:2332:42 | [...] | | {EXTERNAL LOCATION} | [;] | | main.rs:2332:32:2332:35 | 1u32 | | {EXTERNAL LOCATION} | u32 | | main.rs:2333:9:2333:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2333:18:2333:22 | vals5 | | {EXTERNAL LOCATION} | Vec | | main.rs:2333:24:2333:25 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2335:13:2335:17 | vals6 | | {EXTERNAL LOCATION} | Vec | | main.rs:2335:13:2335:17 | vals6 | A | {EXTERNAL LOCATION} | Global | @@ -3573,103 +2932,42 @@ inferCertainType | main.rs:2336:18:2336:22 | vals6 | T | {EXTERNAL LOCATION} | & | | main.rs:2336:18:2336:22 | vals6 | T.TRef | {EXTERNAL LOCATION} | u64 | | main.rs:2336:24:2336:25 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2338:17:2338:21 | vals7 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2338:17:2338:21 | vals7 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2338:25:2338:34 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2338:25:2338:34 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2339:9:2339:13 | vals7 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2339:9:2339:13 | vals7 | A | {EXTERNAL LOCATION} | Global | | main.rs:2339:20:2339:22 | 1u8 | | {EXTERNAL LOCATION} | u8 | | main.rs:2340:9:2340:25 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2340:18:2340:22 | vals7 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2340:18:2340:22 | vals7 | A | {EXTERNAL LOCATION} | Global | | main.rs:2340:24:2340:25 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2344:17:2347:9 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2345:13:2346:13 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2345:29:2346:13 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2349:17:2349:20 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2349:17:2349:20 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2349:24:2349:55 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2349:24:2349:55 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2350:9:2350:12 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2350:9:2350:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2350:24:2350:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2350:24:2350:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | main.rs:2350:33:2350:37 | "one" | | {EXTERNAL LOCATION} | & | | main.rs:2350:33:2350:37 | "one" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2351:9:2351:12 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2351:9:2351:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2351:24:2351:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2351:24:2351:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | main.rs:2351:33:2351:37 | "two" | | {EXTERNAL LOCATION} | & | | main.rs:2351:33:2351:37 | "two" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2352:9:2352:33 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2352:20:2352:23 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2352:20:2352:23 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2352:32:2352:33 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2353:9:2353:37 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2353:22:2353:25 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2353:22:2353:25 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2353:36:2353:37 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2354:9:2354:42 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2354:13:2354:24 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2354:29:2354:32 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2354:29:2354:32 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2354:41:2354:42 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2355:9:2355:36 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2355:13:2355:24 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2355:29:2355:33 | &map1 | | {EXTERNAL LOCATION} | & | -| main.rs:2355:30:2355:33 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2355:30:2355:33 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2355:35:2355:36 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2359:17:2359:17 | a | | {EXTERNAL LOCATION} | i64 | | main.rs:2361:17:2364:9 | while ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2361:23:2361:23 | a | | {EXTERNAL LOCATION} | i64 | | main.rs:2362:9:2364:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2363:13:2363:13 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2375:40:2377:9 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:2375:40:2377:9 | { ... } | T | main.rs:2369:5:2369:20 | S1 | -| main.rs:2375:40:2377:9 | { ... } | T.T | main.rs:2374:10:2374:19 | T | -| main.rs:2379:30:2381:9 | { ... } | | main.rs:2369:5:2369:20 | S1 | -| main.rs:2379:30:2381:9 | { ... } | T | main.rs:2374:10:2374:19 | T | | main.rs:2383:19:2383:22 | SelfParam | | main.rs:2369:5:2369:20 | S1 | | main.rs:2383:19:2383:22 | SelfParam | T | main.rs:2374:10:2374:19 | T | -| main.rs:2383:33:2385:9 | { ... } | | main.rs:2369:5:2369:20 | S1 | -| main.rs:2383:33:2385:9 | { ... } | T | main.rs:2374:10:2374:19 | T | | main.rs:2384:13:2384:16 | self | | main.rs:2369:5:2369:20 | S1 | | main.rs:2384:13:2384:16 | self | T | main.rs:2374:10:2374:19 | T | | main.rs:2396:15:2396:15 | x | | main.rs:2396:12:2396:12 | T | -| main.rs:2396:26:2398:5 | { ... } | | main.rs:2396:12:2396:12 | T | | main.rs:2397:9:2397:9 | x | | main.rs:2396:12:2396:12 | T | | main.rs:2400:16:2422:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2401:13:2401:14 | x1 | | {EXTERNAL LOCATION} | Option | | main.rs:2401:13:2401:14 | x1 | T | main.rs:2369:5:2369:20 | S1 | | main.rs:2401:13:2401:14 | x1 | T.T | main.rs:2371:5:2372:14 | S2 | -| main.rs:2401:34:2401:48 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2401:34:2401:48 | ...::assoc_fun(...) | T | main.rs:2369:5:2369:20 | S1 | -| main.rs:2402:13:2402:14 | x2 | | {EXTERNAL LOCATION} | Option | -| main.rs:2402:13:2402:14 | x2 | T | main.rs:2369:5:2369:20 | S1 | -| main.rs:2402:13:2402:14 | x2 | T.T | main.rs:2371:5:2372:14 | S2 | -| main.rs:2402:18:2402:38 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2402:18:2402:38 | ...::assoc_fun(...) | T | main.rs:2369:5:2369:20 | S1 | -| main.rs:2402:18:2402:38 | ...::assoc_fun(...) | T.T | main.rs:2371:5:2372:14 | S2 | -| main.rs:2403:13:2403:14 | x3 | | {EXTERNAL LOCATION} | Option | -| main.rs:2403:13:2403:14 | x3 | T | main.rs:2369:5:2369:20 | S1 | -| main.rs:2403:13:2403:14 | x3 | T.T | main.rs:2371:5:2372:14 | S2 | -| main.rs:2403:18:2403:32 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2403:18:2403:32 | ...::assoc_fun(...) | T | main.rs:2369:5:2369:20 | S1 | -| main.rs:2403:18:2403:32 | ...::assoc_fun(...) | T.T | main.rs:2371:5:2372:14 | S2 | -| main.rs:2404:13:2404:14 | x4 | | main.rs:2369:5:2369:20 | S1 | -| main.rs:2404:13:2404:14 | x4 | T | main.rs:2371:5:2372:14 | S2 | -| main.rs:2404:18:2404:48 | ...::method(...) | | main.rs:2369:5:2369:20 | S1 | -| main.rs:2404:18:2404:48 | ...::method(...) | T | main.rs:2371:5:2372:14 | S2 | -| main.rs:2404:35:2404:47 | ...::default(...) | | main.rs:2369:5:2369:20 | S1 | -| main.rs:2405:13:2405:14 | x5 | | main.rs:2369:5:2369:20 | S1 | -| main.rs:2405:13:2405:14 | x5 | T | main.rs:2371:5:2372:14 | S2 | -| main.rs:2405:18:2405:42 | ...::method(...) | | main.rs:2369:5:2369:20 | S1 | -| main.rs:2405:18:2405:42 | ...::method(...) | T | main.rs:2371:5:2372:14 | S2 | -| main.rs:2405:29:2405:41 | ...::default(...) | | main.rs:2369:5:2369:20 | S1 | -| main.rs:2409:21:2409:33 | ...::default(...) | | main.rs:2371:5:2372:14 | S2 | | main.rs:2410:13:2410:15 | x10 | | main.rs:2392:5:2394:5 | S5 | | main.rs:2410:13:2410:15 | x10 | T5 | main.rs:2371:5:2372:14 | S2 | | main.rs:2410:19:2413:9 | S5::<...> {...} | | main.rs:2392:5:2394:5 | S5 | @@ -3680,52 +2978,15 @@ inferCertainType | main.rs:2415:19:2415:33 | S5 {...} | | main.rs:2392:5:2394:5 | S5 | | main.rs:2416:13:2416:15 | x13 | | main.rs:2392:5:2394:5 | S5 | | main.rs:2416:19:2419:9 | S5 {...} | | main.rs:2392:5:2394:5 | S5 | -| main.rs:2418:20:2418:32 | ...::default(...) | | main.rs:2371:5:2372:14 | S2 | -| main.rs:2420:13:2420:15 | x14 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2420:19:2420:48 | foo::<...>(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:2421:13:2421:15 | x15 | | main.rs:2369:5:2369:20 | S1 | -| main.rs:2421:13:2421:15 | x15 | T | main.rs:2371:5:2372:14 | S2 | -| main.rs:2421:19:2421:37 | ...::default(...) | | main.rs:2369:5:2369:20 | S1 | -| main.rs:2421:19:2421:37 | ...::default(...) | T | main.rs:2371:5:2372:14 | S2 | -| main.rs:2430:35:2432:9 | { ... } | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2430:35:2432:9 | { ... } | T0 | main.rs:2426:5:2427:16 | S1 | -| main.rs:2430:35:2432:9 | { ... } | T1 | main.rs:2426:5:2427:16 | S1 | | main.rs:2431:13:2431:26 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2431:14:2431:18 | S1 {...} | | main.rs:2426:5:2427:16 | S1 | | main.rs:2431:21:2431:25 | S1 {...} | | main.rs:2426:5:2427:16 | S1 | | main.rs:2433:16:2433:19 | SelfParam | | main.rs:2426:5:2427:16 | S1 | | main.rs:2433:22:2433:23 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2436:16:2470:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2437:13:2437:13 | a | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2437:13:2437:13 | a | T0 | main.rs:2426:5:2427:16 | S1 | -| main.rs:2437:13:2437:13 | a | T1 | main.rs:2426:5:2427:16 | S1 | -| main.rs:2437:17:2437:30 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2437:17:2437:30 | ...::get_pair(...) | T0 | main.rs:2426:5:2427:16 | S1 | -| main.rs:2437:17:2437:30 | ...::get_pair(...) | T1 | main.rs:2426:5:2427:16 | S1 | -| main.rs:2438:17:2438:17 | b | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2438:17:2438:17 | b | T0 | main.rs:2426:5:2427:16 | S1 | -| main.rs:2438:17:2438:17 | b | T1 | main.rs:2426:5:2427:16 | S1 | -| main.rs:2438:21:2438:34 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2438:21:2438:34 | ...::get_pair(...) | T0 | main.rs:2426:5:2427:16 | S1 | -| main.rs:2438:21:2438:34 | ...::get_pair(...) | T1 | main.rs:2426:5:2427:16 | S1 | | main.rs:2439:13:2439:18 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2439:22:2439:35 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2439:22:2439:35 | ...::get_pair(...) | T0 | main.rs:2426:5:2427:16 | S1 | -| main.rs:2439:22:2439:35 | ...::get_pair(...) | T1 | main.rs:2426:5:2427:16 | S1 | | main.rs:2440:13:2440:22 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2440:26:2440:39 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2440:26:2440:39 | ...::get_pair(...) | T0 | main.rs:2426:5:2427:16 | S1 | -| main.rs:2440:26:2440:39 | ...::get_pair(...) | T1 | main.rs:2426:5:2427:16 | S1 | | main.rs:2441:13:2441:26 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2441:30:2441:43 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2441:30:2441:43 | ...::get_pair(...) | T0 | main.rs:2426:5:2427:16 | S1 | -| main.rs:2441:30:2441:43 | ...::get_pair(...) | T1 | main.rs:2426:5:2427:16 | S1 | -| main.rs:2443:9:2443:9 | a | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2443:9:2443:9 | a | T0 | main.rs:2426:5:2427:16 | S1 | -| main.rs:2443:9:2443:9 | a | T1 | main.rs:2426:5:2427:16 | S1 | -| main.rs:2444:9:2444:9 | b | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2444:9:2444:9 | b | T0 | main.rs:2426:5:2427:16 | S1 | -| main.rs:2444:9:2444:9 | b | T1 | main.rs:2426:5:2427:16 | S1 | | main.rs:2457:13:2457:16 | pair | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2457:20:2457:25 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2458:13:2458:13 | i | | {EXTERNAL LOCATION} | i64 | @@ -3736,79 +2997,42 @@ inferCertainType | main.rs:2463:13:2463:18 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2463:30:2463:41 | "unexpected" | | {EXTERNAL LOCATION} | & | | main.rs:2463:30:2463:41 | "unexpected" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2463:30:2463:41 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:2463:30:2463:41 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2464:25:2464:34 | "expected" | | {EXTERNAL LOCATION} | & | | main.rs:2464:25:2464:34 | "expected" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2464:25:2464:34 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:2464:25:2464:34 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2468:13:2468:13 | y | | {EXTERNAL LOCATION} | & | | main.rs:2468:17:2468:31 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:2468:18:2468:31 | ...::get_pair(...) | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:2468:18:2468:31 | ...::get_pair(...) | T0 | main.rs:2426:5:2427:16 | S1 | -| main.rs:2468:18:2468:31 | ...::get_pair(...) | T1 | main.rs:2426:5:2427:16 | S1 | | main.rs:2469:9:2469:9 | y | | {EXTERNAL LOCATION} | & | -| main.rs:2475:27:2497:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2476:13:2476:23 | boxed_value | | {EXTERNAL LOCATION} | Box | -| main.rs:2476:13:2476:23 | boxed_value | A | {EXTERNAL LOCATION} | Global | -| main.rs:2476:27:2476:42 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2476:27:2476:42 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | main.rs:2476:36:2476:41 | 100i32 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2479:15:2479:25 | boxed_value | | {EXTERNAL LOCATION} | Box | -| main.rs:2479:15:2479:25 | boxed_value | A | {EXTERNAL LOCATION} | Global | | main.rs:2480:24:2482:13 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2481:26:2481:36 | "Boxed 100\\n" | | {EXTERNAL LOCATION} | & | | main.rs:2481:26:2481:36 | "Boxed 100\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2481:26:2481:36 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:2481:26:2481:36 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2483:22:2486:13 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2485:26:2485:42 | "Boxed value: {}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:2485:26:2485:42 | "Boxed value: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2485:26:2485:51 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:2485:26:2485:51 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2490:13:2490:22 | nested_box | | {EXTERNAL LOCATION} | Box | -| main.rs:2490:13:2490:22 | nested_box | A | {EXTERNAL LOCATION} | Global | -| main.rs:2490:26:2490:50 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2490:26:2490:50 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2490:35:2490:49 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2490:35:2490:49 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | main.rs:2490:44:2490:48 | 42i32 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2491:15:2491:24 | nested_box | | {EXTERNAL LOCATION} | Box | -| main.rs:2491:15:2491:24 | nested_box | A | {EXTERNAL LOCATION} | Global | | main.rs:2492:26:2495:13 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2494:26:2494:43 | "Nested boxed: {}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:2494:26:2494:43 | "Nested boxed: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2494:26:2494:59 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:2494:26:2494:59 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2506:36:2508:9 | { ... } | | main.rs:2503:5:2503:22 | Path | | main.rs:2507:13:2507:19 | Path {...} | | main.rs:2503:5:2503:22 | Path | | main.rs:2510:29:2510:33 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2510:29:2510:33 | SelfParam | TRef | main.rs:2503:5:2503:22 | Path | -| main.rs:2510:59:2512:9 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:2510:59:2512:9 | { ... } | E | {EXTERNAL LOCATION} | () | -| main.rs:2510:59:2512:9 | { ... } | T | main.rs:2515:5:2515:25 | PathBuf | -| main.rs:2511:16:2511:29 | ...::new(...) | | main.rs:2515:5:2515:25 | PathBuf | -| main.rs:2518:39:2520:9 | { ... } | | main.rs:2515:5:2515:25 | PathBuf | | main.rs:2519:13:2519:22 | PathBuf {...} | | main.rs:2515:5:2515:25 | PathBuf | | main.rs:2528:18:2528:22 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2528:18:2528:22 | SelfParam | TRef | main.rs:2515:5:2515:25 | PathBuf | -| main.rs:2528:34:2532:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:2528:34:2532:9 | { ... } | TRef | main.rs:2503:5:2503:22 | Path | -| main.rs:2530:33:2530:43 | ...::new(...) | | main.rs:2503:5:2503:22 | Path | +| main.rs:2529:13:2530:44 | static path | | main.rs:2503:5:2503:22 | Path | | main.rs:2531:13:2531:17 | &path | | {EXTERNAL LOCATION} | & | +| main.rs:2531:14:2531:17 | path | | main.rs:2503:5:2503:22 | Path | | main.rs:2535:16:2543:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2536:13:2536:17 | path1 | | main.rs:2503:5:2503:22 | Path | -| main.rs:2536:21:2536:31 | ...::new(...) | | main.rs:2503:5:2503:22 | Path | -| main.rs:2537:21:2537:25 | path1 | | main.rs:2503:5:2503:22 | Path | -| main.rs:2540:13:2540:20 | pathbuf1 | | main.rs:2515:5:2515:25 | PathBuf | -| main.rs:2540:24:2540:37 | ...::new(...) | | main.rs:2515:5:2515:25 | PathBuf | -| main.rs:2541:24:2541:31 | pathbuf1 | | main.rs:2515:5:2515:25 | PathBuf | | main.rs:2548:14:2548:18 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2548:14:2548:18 | SelfParam | TRef | main.rs:2547:5:2549:5 | Self [trait MyTrait] | | main.rs:2555:14:2555:18 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2555:14:2555:18 | SelfParam | TRef | main.rs:2551:5:2552:19 | S | | main.rs:2555:14:2555:18 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2555:28:2557:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:2556:13:2556:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:2556:13:2556:16 | self | TRef | main.rs:2551:5:2552:19 | S | | main.rs:2556:13:2556:16 | self | TRef.T | {EXTERNAL LOCATION} | i32 | @@ -3816,7 +3040,6 @@ inferCertainType | main.rs:2561:14:2561:18 | SelfParam | TRef | main.rs:2551:5:2552:19 | S | | main.rs:2561:14:2561:18 | SelfParam | TRef.T | main.rs:2551:5:2552:19 | S | | main.rs:2561:14:2561:18 | SelfParam | TRef.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2561:28:2563:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:2562:13:2562:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:2562:13:2562:16 | self | TRef | main.rs:2551:5:2552:19 | S | | main.rs:2562:13:2562:16 | self | TRef.T | main.rs:2551:5:2552:19 | S | @@ -3824,40 +3047,24 @@ inferCertainType | main.rs:2567:15:2567:19 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2567:15:2567:19 | SelfParam | TRef | main.rs:2551:5:2552:19 | S | | main.rs:2567:15:2567:19 | SelfParam | TRef.T | main.rs:2566:10:2566:16 | T | -| main.rs:2567:33:2569:9 | { ... } | | main.rs:2551:5:2552:19 | S | -| main.rs:2567:33:2569:9 | { ... } | T | main.rs:2551:5:2552:19 | S | -| main.rs:2567:33:2569:9 | { ... } | T.T | main.rs:2566:10:2566:16 | T | | main.rs:2568:17:2568:20 | self | | {EXTERNAL LOCATION} | & | | main.rs:2568:17:2568:20 | self | TRef | main.rs:2551:5:2552:19 | S | | main.rs:2568:17:2568:20 | self | TRef.T | main.rs:2566:10:2566:16 | T | | main.rs:2572:14:2572:14 | b | | {EXTERNAL LOCATION} | bool | -| main.rs:2572:48:2589:5 | { ... } | | {EXTERNAL LOCATION} | Box | -| main.rs:2572:48:2589:5 | { ... } | A | {EXTERNAL LOCATION} | Global | -| main.rs:2572:48:2589:5 | { ... } | T | main.rs:2547:5:2549:5 | dyn MyTrait | -| main.rs:2572:48:2589:5 | { ... } | T.dyn(T) | {EXTERNAL LOCATION} | i32 | | main.rs:2573:20:2573:20 | b | | {EXTERNAL LOCATION} | bool | | main.rs:2583:12:2583:12 | b | | {EXTERNAL LOCATION} | bool | -| main.rs:2585:13:2585:23 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2585:13:2585:23 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2587:13:2587:23 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2587:13:2587:23 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | main.rs:2593:22:2597:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2594:18:2594:18 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2594:33:2596:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:2595:13:2595:13 | x | | {EXTERNAL LOCATION} | i32 | | main.rs:2602:11:2602:14 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:2602:30:2610:5 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:2605:13:2607:13 | if cond {...} | | {EXTERNAL LOCATION} | () | | main.rs:2605:16:2605:19 | cond | | {EXTERNAL LOCATION} | bool | | main.rs:2605:21:2607:13 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2613:20:2620:5 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:2618:18:2618:26 | "b: {:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:2618:18:2618:26 | "b: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2618:18:2618:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:2618:18:2618:29 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2622:20:2624:5 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2622:20:2624:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2627:11:2627:14 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:2627:30:2635:5 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:2628:13:2628:13 | a | | {EXTERNAL LOCATION} | () | | main.rs:2628:17:2632:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2629:13:2631:13 | if cond {...} | | {EXTERNAL LOCATION} | () | @@ -3865,12 +3072,10 @@ inferCertainType | main.rs:2629:21:2631:13 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2633:18:2633:26 | "a: {:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:2633:18:2633:26 | "a: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| main.rs:2633:18:2633:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:2633:18:2633:29 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2633:29:2633:29 | a | | {EXTERNAL LOCATION} | () | | main.rs:2643:14:2643:17 | SelfParam | | main.rs:2639:5:2640:13 | S | | main.rs:2643:20:2643:21 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2646:41:2648:5 | { ... } | | main.rs:2646:22:2646:31 | T | | main.rs:2650:16:2703:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2652:13:2652:13 | x | | {EXTERNAL LOCATION} | Option | | main.rs:2652:13:2652:13 | x | T | {EXTERNAL LOCATION} | i32 | @@ -3878,7 +3083,6 @@ inferCertainType | main.rs:2656:26:2656:28 | opt | T | main.rs:2656:23:2656:23 | T | | main.rs:2656:42:2656:42 | x | | main.rs:2656:23:2656:23 | T | | main.rs:2656:48:2656:49 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2659:9:2659:24 | pin_option(...) | | {EXTERNAL LOCATION} | () | | main.rs:2666:13:2666:13 | x | | main.rs:2661:9:2664:9 | MyEither | | main.rs:2666:17:2666:39 | ...::A {...} | | main.rs:2661:9:2664:9 | MyEither | | main.rs:2667:13:2667:13 | x | | main.rs:2661:9:2664:9 | MyEither | @@ -3893,7 +3097,6 @@ inferCertainType | main.rs:2670:13:2670:13 | x | T1 | {EXTERNAL LOCATION} | i32 | | main.rs:2670:17:2672:9 | ...::B::<...> {...} | | main.rs:2661:9:2664:9 | MyEither | | main.rs:2670:17:2672:9 | ...::B::<...> {...} | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2671:20:2671:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | | main.rs:2674:29:2674:29 | e | | main.rs:2661:9:2664:9 | MyEither | | main.rs:2674:29:2674:29 | e | T1 | main.rs:2674:26:2674:26 | T | | main.rs:2674:29:2674:29 | e | T2 | {EXTERNAL LOCATION} | String | @@ -3901,8 +3104,6 @@ inferCertainType | main.rs:2674:59:2674:60 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2677:13:2677:13 | x | | main.rs:2661:9:2664:9 | MyEither | | main.rs:2677:17:2679:9 | ...::B {...} | | main.rs:2661:9:2664:9 | MyEither | -| main.rs:2678:20:2678:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2680:9:2680:27 | pin_my_either(...) | | {EXTERNAL LOCATION} | () | | main.rs:2680:23:2680:23 | x | | main.rs:2661:9:2664:9 | MyEither | | main.rs:2683:13:2683:13 | x | | {EXTERNAL LOCATION} | Result | | main.rs:2683:13:2683:13 | x | E | {EXTERNAL LOCATION} | String | @@ -3912,41 +3113,22 @@ inferCertainType | main.rs:2687:29:2687:31 | res | T | main.rs:2687:23:2687:23 | T | | main.rs:2687:48:2687:48 | x | | main.rs:2687:26:2687:26 | E | | main.rs:2687:54:2687:55 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2690:9:2690:28 | pin_result(...) | | {EXTERNAL LOCATION} | () | | main.rs:2690:23:2690:27 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:2692:17:2692:17 | x | | {EXTERNAL LOCATION} | Vec | -| main.rs:2692:17:2692:17 | x | A | {EXTERNAL LOCATION} | Global | -| main.rs:2692:21:2692:30 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2692:21:2692:30 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2693:9:2693:9 | x | | {EXTERNAL LOCATION} | Vec | -| main.rs:2693:9:2693:9 | x | A | {EXTERNAL LOCATION} | Global | -| main.rs:2696:9:2696:9 | x | | {EXTERNAL LOCATION} | Vec | -| main.rs:2696:9:2696:9 | x | A | {EXTERNAL LOCATION} | Global | -| main.rs:2699:9:2699:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2702:9:2702:9 | x | | {EXTERNAL LOCATION} | Vec | -| main.rs:2702:9:2702:9 | x | A | {EXTERNAL LOCATION} | Global | | main.rs:2709:14:2709:17 | SelfParam | | main.rs:2707:5:2715:5 | Self [trait MyTrait] | | main.rs:2712:14:2712:18 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2712:14:2712:18 | SelfParam | TRef | main.rs:2707:5:2715:5 | Self [trait MyTrait] | | main.rs:2712:21:2712:25 | other | | {EXTERNAL LOCATION} | & | | main.rs:2712:21:2712:25 | other | TRef | main.rs:2707:5:2715:5 | Self [trait MyTrait] | -| main.rs:2712:44:2714:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:2712:44:2714:9 | { ... } | TRef | main.rs:2707:5:2715:5 | Self [trait MyTrait] | | main.rs:2713:13:2713:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:2713:13:2713:16 | self | TRef | main.rs:2707:5:2715:5 | Self [trait MyTrait] | | main.rs:2719:14:2719:17 | SelfParam | | {EXTERNAL LOCATION} | i32 | -| main.rs:2719:28:2721:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:2720:13:2720:16 | self | | {EXTERNAL LOCATION} | i32 | | main.rs:2726:14:2726:17 | SelfParam | | {EXTERNAL LOCATION} | usize | -| main.rs:2726:28:2728:9 | { ... } | | {EXTERNAL LOCATION} | usize | | main.rs:2727:13:2727:16 | self | | {EXTERNAL LOCATION} | usize | | main.rs:2733:14:2733:17 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2733:14:2733:17 | SelfParam | TRef | main.rs:2731:10:2731:10 | T | -| main.rs:2733:28:2735:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:2733:28:2735:9 | { ... } | TRef | main.rs:2731:10:2731:10 | T | | main.rs:2734:13:2734:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:2734:13:2734:16 | self | TRef | main.rs:2731:10:2731:10 | T | -| main.rs:2738:25:2742:5 | { ... } | | {EXTERNAL LOCATION} | usize | | main.rs:2744:12:2752:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2745:13:2745:13 | x | | {EXTERNAL LOCATION} | usize | | main.rs:2746:13:2746:13 | y | | {EXTERNAL LOCATION} | & | @@ -3959,154 +3141,74 @@ inferCertainType | main.rs:2766:22:2766:26 | SelfParam | TRef | main.rs:2765:5:2767:5 | Self [trait Container] | | main.rs:2769:34:2769:34 | c | | {EXTERNAL LOCATION} | & | | main.rs:2769:34:2769:34 | c | TRef | main.rs:2769:15:2769:31 | T | -| main.rs:2769:49:2771:5 | { ... } | | {EXTERNAL LOCATION} | bool | | main.rs:2770:9:2770:9 | c | | {EXTERNAL LOCATION} | & | | main.rs:2770:9:2770:9 | c | TRef | main.rs:2769:15:2769:31 | T | | main.rs:2774:22:2774:26 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2774:22:2774:26 | SelfParam | TRef | main.rs:2763:5:2763:21 | Gen | | main.rs:2774:22:2774:26 | SelfParam | TRef.T | main.rs:2773:10:2773:17 | GT | -| main.rs:2774:35:2776:9 | { ... } | | main.rs:2773:10:2773:17 | GT | | main.rs:2775:13:2775:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:2775:13:2775:16 | self | TRef | main.rs:2763:5:2763:21 | Gen | | main.rs:2775:13:2775:16 | self | TRef.T | main.rs:2773:10:2773:17 | GT | | main.rs:2779:15:2783:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2782:17:2782:26 | my_get(...) | | {EXTERNAL LOCATION} | bool | | main.rs:2782:24:2782:25 | &g | | {EXTERNAL LOCATION} | & | | main.rs:2786:11:2821:1 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2787:5:2787:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2788:5:2788:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2789:5:2789:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | | main.rs:2789:20:2789:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | | main.rs:2789:41:2789:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2790:5:2790:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2791:5:2791:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2792:5:2792:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2793:5:2793:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2794:5:2794:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2795:5:2795:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2796:5:2796:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2797:5:2797:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2798:5:2798:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2799:5:2799:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2800:5:2800:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2801:5:2801:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2802:5:2802:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2803:5:2803:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2804:5:2804:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2805:5:2805:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:2805:5:2805:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () | -| main.rs:2806:5:2806:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2807:5:2807:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2808:5:2808:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2809:5:2809:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2810:5:2810:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2811:5:2811:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2812:5:2812:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2813:5:2813:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2814:5:2814:28 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2815:5:2815:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2816:5:2816:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2817:5:2817:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2818:5:2818:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2819:5:2819:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2819:5:2819:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2819:5:2819:20 | ...::f(...) | T | main.rs:2547:5:2549:5 | dyn MyTrait | -| main.rs:2819:5:2819:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | | main.rs:2819:16:2819:19 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2820:5:2820:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:4:19:4:23 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:4:19:4:23 | SelfParam | TRef | overloading.rs:2:5:11:5 | Self [trait FirstTrait] | -| overloading.rs:4:34:6:9 | { ... } | | {EXTERNAL LOCATION} | bool | | overloading.rs:5:13:5:16 | true | | {EXTERNAL LOCATION} | bool | | overloading.rs:8:20:8:24 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:8:20:8:24 | SelfParam | TRef | overloading.rs:2:5:11:5 | Self [trait FirstTrait] | | overloading.rs:14:19:14:23 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:14:19:14:23 | SelfParam | TRef | overloading.rs:12:5:19:5 | Self [trait SecondTrait] | -| overloading.rs:14:33:16:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | overloading.rs:18:20:18:24 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:18:20:18:24 | SelfParam | TRef | overloading.rs:12:5:19:5 | Self [trait SecondTrait] | | overloading.rs:24:20:24:24 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:24:20:24:24 | SelfParam | TRef | overloading.rs:20:5:21:13 | S | -| overloading.rs:24:35:26:9 | { ... } | | {EXTERNAL LOCATION} | bool | | overloading.rs:25:13:25:16 | true | | {EXTERNAL LOCATION} | bool | -| overloading.rs:29:31:31:9 | { ... } | | {EXTERNAL LOCATION} | bool | | overloading.rs:30:13:30:16 | true | | {EXTERNAL LOCATION} | bool | | overloading.rs:35:20:35:24 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:35:20:35:24 | SelfParam | TRef | overloading.rs:20:5:21:13 | S | -| overloading.rs:35:34:37:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | overloading.rs:43:20:43:24 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:43:20:43:24 | SelfParam | TRef | overloading.rs:40:5:40:14 | S2 | -| overloading.rs:43:35:45:9 | { ... } | | {EXTERNAL LOCATION} | bool | | overloading.rs:44:13:44:17 | false | | {EXTERNAL LOCATION} | bool | -| overloading.rs:48:31:50:9 | { ... } | | {EXTERNAL LOCATION} | bool | | overloading.rs:49:13:49:17 | false | | {EXTERNAL LOCATION} | bool | | overloading.rs:53:16:70:5 | { ... } | | {EXTERNAL LOCATION} | () | -| overloading.rs:56:13:56:15 | _b1 | | {EXTERNAL LOCATION} | bool | -| overloading.rs:56:19:56:40 | ...::method(...) | | {EXTERNAL LOCATION} | bool | | overloading.rs:56:38:56:39 | &s | | {EXTERNAL LOCATION} | & | -| overloading.rs:57:13:57:15 | _b2 | | {EXTERNAL LOCATION} | bool | -| overloading.rs:57:19:57:47 | ...::method(...) | | {EXTERNAL LOCATION} | bool | | overloading.rs:57:45:57:46 | &s | | {EXTERNAL LOCATION} | & | -| overloading.rs:58:13:58:15 | _b3 | | {EXTERNAL LOCATION} | bool | -| overloading.rs:58:19:58:64 | ...::method(...) | | {EXTERNAL LOCATION} | bool | | overloading.rs:58:45:58:63 | &... | | {EXTERNAL LOCATION} | & | -| overloading.rs:59:13:59:15 | _b4 | | {EXTERNAL LOCATION} | bool | -| overloading.rs:59:19:59:48 | ...::method2(...) | | {EXTERNAL LOCATION} | bool | | overloading.rs:59:46:59:47 | &s | | {EXTERNAL LOCATION} | & | -| overloading.rs:60:13:60:15 | _b5 | | {EXTERNAL LOCATION} | bool | -| overloading.rs:60:19:60:65 | ...::method2(...) | | {EXTERNAL LOCATION} | bool | | overloading.rs:60:46:60:64 | &... | | {EXTERNAL LOCATION} | & | -| overloading.rs:62:13:62:15 | _n1 | | {EXTERNAL LOCATION} | i64 | -| overloading.rs:62:19:62:41 | ...::method(...) | | {EXTERNAL LOCATION} | i64 | | overloading.rs:62:39:62:40 | &s | | {EXTERNAL LOCATION} | & | -| overloading.rs:63:13:63:15 | _n2 | | {EXTERNAL LOCATION} | i64 | -| overloading.rs:63:19:63:48 | ...::method(...) | | {EXTERNAL LOCATION} | i64 | | overloading.rs:63:46:63:47 | &s | | {EXTERNAL LOCATION} | & | -| overloading.rs:64:13:64:15 | _n3 | | {EXTERNAL LOCATION} | i64 | -| overloading.rs:64:19:64:65 | ...::method(...) | | {EXTERNAL LOCATION} | i64 | | overloading.rs:64:46:64:64 | &... | | {EXTERNAL LOCATION} | & | -| overloading.rs:65:13:65:15 | _n4 | | {EXTERNAL LOCATION} | i64 | -| overloading.rs:65:19:65:49 | ...::method2(...) | | {EXTERNAL LOCATION} | i64 | | overloading.rs:65:47:65:48 | &s | | {EXTERNAL LOCATION} | & | -| overloading.rs:66:13:66:15 | _n5 | | {EXTERNAL LOCATION} | i64 | -| overloading.rs:66:19:66:66 | ...::method2(...) | | {EXTERNAL LOCATION} | i64 | | overloading.rs:66:47:66:65 | &... | | {EXTERNAL LOCATION} | & | -| overloading.rs:68:9:68:37 | ...::function(...) | | {EXTERNAL LOCATION} | bool | -| overloading.rs:69:9:69:38 | ...::function(...) | | {EXTERNAL LOCATION} | bool | | overloading.rs:78:26:78:29 | SelfParam | | overloading.rs:77:5:81:5 | Self [trait OverlappingTrait] | | overloading.rs:80:28:80:31 | SelfParam | | overloading.rs:77:5:81:5 | Self [trait OverlappingTrait] | | overloading.rs:80:34:80:35 | s1 | | overloading.rs:74:5:75:14 | S1 | | overloading.rs:85:26:85:29 | SelfParam | | overloading.rs:74:5:75:14 | S1 | -| overloading.rs:85:38:87:9 | { ... } | | overloading.rs:74:5:75:14 | S1 | | overloading.rs:90:28:90:31 | SelfParam | | overloading.rs:74:5:75:14 | S1 | | overloading.rs:90:34:90:35 | s1 | | overloading.rs:74:5:75:14 | S1 | -| overloading.rs:90:48:92:9 | { ... } | | overloading.rs:74:5:75:14 | S1 | | overloading.rs:97:26:97:29 | SelfParam | | overloading.rs:74:5:75:14 | S1 | -| overloading.rs:97:38:99:9 | { ... } | | overloading.rs:74:5:75:14 | S1 | | overloading.rs:98:13:98:16 | self | | overloading.rs:74:5:75:14 | S1 | | overloading.rs:102:28:102:31 | SelfParam | | overloading.rs:74:5:75:14 | S1 | -| overloading.rs:102:40:104:9 | { ... } | | overloading.rs:74:5:75:14 | S1 | | overloading.rs:103:13:103:16 | self | | overloading.rs:74:5:75:14 | S1 | | overloading.rs:111:26:111:29 | SelfParam | | overloading.rs:107:5:107:22 | S2 | | overloading.rs:111:26:111:29 | SelfParam | T2 | {EXTERNAL LOCATION} | i32 | -| overloading.rs:111:38:113:9 | { ... } | | overloading.rs:74:5:75:14 | S1 | | overloading.rs:116:28:116:31 | SelfParam | | overloading.rs:107:5:107:22 | S2 | | overloading.rs:116:28:116:31 | SelfParam | T2 | {EXTERNAL LOCATION} | i32 | -| overloading.rs:116:40:118:9 | { ... } | | overloading.rs:74:5:75:14 | S1 | | overloading.rs:123:26:123:29 | SelfParam | | overloading.rs:107:5:107:22 | S2 | | overloading.rs:123:26:123:29 | SelfParam | T2 | {EXTERNAL LOCATION} | i32 | -| overloading.rs:123:38:125:9 | { ... } | | overloading.rs:74:5:75:14 | S1 | | overloading.rs:128:28:128:31 | SelfParam | | overloading.rs:107:5:107:22 | S2 | | overloading.rs:128:28:128:31 | SelfParam | T2 | {EXTERNAL LOCATION} | i32 | | overloading.rs:128:34:128:35 | s1 | | overloading.rs:74:5:75:14 | S1 | -| overloading.rs:128:48:130:9 | { ... } | | overloading.rs:74:5:75:14 | S1 | | overloading.rs:135:26:135:29 | SelfParam | | overloading.rs:107:5:107:22 | S2 | | overloading.rs:135:26:135:29 | SelfParam | T2 | overloading.rs:74:5:75:14 | S1 | -| overloading.rs:135:38:137:9 | { ... } | | overloading.rs:74:5:75:14 | S1 | | overloading.rs:140:28:140:31 | SelfParam | | overloading.rs:107:5:107:22 | S2 | | overloading.rs:140:28:140:31 | SelfParam | T2 | overloading.rs:74:5:75:14 | S1 | | overloading.rs:140:34:140:35 | s1 | | overloading.rs:74:5:75:14 | S1 | -| overloading.rs:140:48:142:9 | { ... } | | overloading.rs:74:5:75:14 | S1 | | overloading.rs:149:14:149:18 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:149:14:149:18 | SelfParam | TRef | overloading.rs:148:5:150:5 | Self [trait OverlappingTrait2] | | overloading.rs:149:21:149:21 | x | | {EXTERNAL LOCATION} | & | @@ -4116,9 +3218,6 @@ inferCertainType | overloading.rs:154:14:154:18 | SelfParam | TRef.T3 | overloading.rs:152:10:152:10 | T | | overloading.rs:154:21:154:21 | x | | {EXTERNAL LOCATION} | & | | overloading.rs:154:21:154:21 | x | TRef | overloading.rs:152:10:152:10 | T | -| overloading.rs:154:37:156:9 | { ... } | | {EXTERNAL LOCATION} | & | -| overloading.rs:154:37:156:9 | { ... } | TRef | overloading.rs:145:5:146:22 | S3 | -| overloading.rs:154:37:156:9 | { ... } | TRef.T3 | overloading.rs:152:10:152:10 | T | | overloading.rs:155:13:155:16 | self | | {EXTERNAL LOCATION} | & | | overloading.rs:155:13:155:16 | self | TRef | overloading.rs:145:5:146:22 | S3 | | overloading.rs:155:13:155:16 | self | TRef.T3 | overloading.rs:152:10:152:10 | T | @@ -4126,9 +3225,6 @@ inferCertainType | overloading.rs:161:14:161:18 | SelfParam | TRef | overloading.rs:145:5:146:22 | S3 | | overloading.rs:161:14:161:18 | SelfParam | TRef.T3 | overloading.rs:159:10:159:10 | T | | overloading.rs:161:21:161:21 | x | | overloading.rs:159:10:159:10 | T | -| overloading.rs:161:36:163:9 | { ... } | | {EXTERNAL LOCATION} | & | -| overloading.rs:161:36:163:9 | { ... } | TRef | overloading.rs:145:5:146:22 | S3 | -| overloading.rs:161:36:163:9 | { ... } | TRef.T3 | overloading.rs:159:10:159:10 | T | | overloading.rs:162:13:162:16 | self | | {EXTERNAL LOCATION} | & | | overloading.rs:162:13:162:16 | self | TRef | overloading.rs:145:5:146:22 | S3 | | overloading.rs:162:13:162:16 | self | TRef.T3 | overloading.rs:159:10:159:10 | T | @@ -4145,82 +3241,57 @@ inferCertainType | overloading.rs:197:16:223:5 | { ... } | | {EXTERNAL LOCATION} | () | | overloading.rs:199:18:199:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | overloading.rs:199:18:199:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| overloading.rs:199:18:199:42 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:199:18:199:42 | { ... } | | {EXTERNAL LOCATION} | () | | overloading.rs:200:18:200:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | overloading.rs:200:18:200:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| overloading.rs:200:18:200:45 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:200:18:200:45 | { ... } | | {EXTERNAL LOCATION} | () | -| overloading.rs:200:26:200:45 | ...::common_method(...) | | overloading.rs:74:5:75:14 | S1 | | overloading.rs:201:18:201:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | overloading.rs:201:18:201:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| overloading.rs:201:18:201:44 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:201:18:201:44 | { ... } | | {EXTERNAL LOCATION} | () | | overloading.rs:202:18:202:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | overloading.rs:202:18:202:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| overloading.rs:202:18:202:47 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:202:18:202:47 | { ... } | | {EXTERNAL LOCATION} | () | -| overloading.rs:202:26:202:47 | ...::common_method_2(...) | | overloading.rs:74:5:75:14 | S1 | | overloading.rs:205:18:205:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | overloading.rs:205:18:205:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| overloading.rs:205:18:205:42 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:205:18:205:42 | { ... } | | {EXTERNAL LOCATION} | () | | overloading.rs:206:18:206:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | overloading.rs:206:18:206:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| overloading.rs:206:18:206:56 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:206:18:206:56 | { ... } | | {EXTERNAL LOCATION} | () | -| overloading.rs:206:26:206:56 | ...::common_method(...) | | overloading.rs:74:5:75:14 | S1 | | overloading.rs:209:18:209:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | overloading.rs:209:18:209:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| overloading.rs:209:18:209:42 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:209:18:209:42 | { ... } | | {EXTERNAL LOCATION} | () | | overloading.rs:210:18:210:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | overloading.rs:210:18:210:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| overloading.rs:210:18:210:49 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:210:18:210:49 | { ... } | | {EXTERNAL LOCATION} | () | -| overloading.rs:210:26:210:49 | ...::common_method(...) | | overloading.rs:74:5:75:14 | S1 | | overloading.rs:211:18:211:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | overloading.rs:211:18:211:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| overloading.rs:211:18:211:56 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:211:18:211:56 | { ... } | | {EXTERNAL LOCATION} | () | -| overloading.rs:211:26:211:56 | ...::common_method(...) | | overloading.rs:74:5:75:14 | S1 | | overloading.rs:214:18:214:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | overloading.rs:214:18:214:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| overloading.rs:214:18:214:31 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:214:18:214:31 | { ... } | | {EXTERNAL LOCATION} | () | | overloading.rs:215:18:215:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | overloading.rs:215:18:215:23 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| overloading.rs:215:18:215:37 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:215:18:215:37 | { ... } | | {EXTERNAL LOCATION} | () | -| overloading.rs:215:26:215:37 | ...::m(...) | | {EXTERNAL LOCATION} | & | -| overloading.rs:215:26:215:37 | ...::m(...) | TRef | overloading.rs:145:5:146:22 | S3 | | overloading.rs:215:32:215:33 | &w | | {EXTERNAL LOCATION} | & | -| overloading.rs:218:9:218:18 | ...::m(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:218:15:218:17 | &S4 | | {EXTERNAL LOCATION} | & | | overloading.rs:219:12:219:15 | 0i32 | | {EXTERNAL LOCATION} | i32 | -| overloading.rs:220:9:220:24 | ...::m(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:220:15:220:23 | &... | | {EXTERNAL LOCATION} | & | | overloading.rs:220:19:220:22 | 0i32 | | {EXTERNAL LOCATION} | i32 | | overloading.rs:221:12:221:15 | true | | {EXTERNAL LOCATION} | bool | -| overloading.rs:222:9:222:24 | ...::m(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:222:15:222:23 | &... | | {EXTERNAL LOCATION} | & | | overloading.rs:222:19:222:22 | true | | {EXTERNAL LOCATION} | bool | | overloading.rs:228:14:228:17 | SelfParam | | overloading.rs:227:5:229:5 | Self [trait Trait1] | | overloading.rs:228:20:228:20 | x | | overloading.rs:227:18:227:19 | T1 | | overloading.rs:233:14:233:17 | SelfParam | | {EXTERNAL LOCATION} | i32 | | overloading.rs:233:20:233:20 | x | | {EXTERNAL LOCATION} | i32 | -| overloading.rs:233:35:235:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | overloading.rs:240:14:240:17 | SelfParam | | {EXTERNAL LOCATION} | i32 | | overloading.rs:240:20:240:20 | x | | {EXTERNAL LOCATION} | i64 | -| overloading.rs:240:35:242:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | overloading.rs:246:14:246:17 | SelfParam | | overloading.rs:245:5:247:5 | Self [trait Trait2] | | overloading.rs:246:20:246:20 | x | | overloading.rs:245:18:245:19 | T1 | | overloading.rs:251:14:251:17 | SelfParam | | {EXTERNAL LOCATION} | i32 | | overloading.rs:251:20:251:20 | x | | {EXTERNAL LOCATION} | i32 | -| overloading.rs:251:35:253:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | overloading.rs:258:14:258:17 | SelfParam | | {EXTERNAL LOCATION} | i32 | | overloading.rs:258:20:258:20 | x | | {EXTERNAL LOCATION} | i32 | -| overloading.rs:258:35:260:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | overloading.rs:263:12:270:5 | { ... } | | {EXTERNAL LOCATION} | () | | overloading.rs:265:21:265:24 | 0i32 | | {EXTERNAL LOCATION} | i32 | | overloading.rs:266:13:266:13 | z | | {EXTERNAL LOCATION} | i32 | @@ -4228,49 +3299,31 @@ inferCertainType | overloading.rs:268:13:268:13 | z | | {EXTERNAL LOCATION} | i64 | | overloading.rs:269:13:269:13 | z | | {EXTERNAL LOCATION} | i64 | | overloading.rs:269:26:269:29 | 0i32 | | {EXTERNAL LOCATION} | i32 | -| overloading.rs:286:35:288:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| overloading.rs:295:35:297:9 | { ... } | | {EXTERNAL LOCATION} | bool | | overloading.rs:296:13:296:16 | true | | {EXTERNAL LOCATION} | bool | | overloading.rs:302:14:302:14 | x | | {EXTERNAL LOCATION} | i32 | -| overloading.rs:302:29:304:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | overloading.rs:309:14:309:14 | x | | {EXTERNAL LOCATION} | bool | -| overloading.rs:309:31:311:9 | { ... } | | {EXTERNAL LOCATION} | bool | | overloading.rs:310:13:310:16 | true | | {EXTERNAL LOCATION} | bool | | overloading.rs:314:12:321:5 | { ... } | | {EXTERNAL LOCATION} | () | | overloading.rs:319:22:319:25 | true | | {EXTERNAL LOCATION} | bool | | overloading.rs:330:14:330:17 | SelfParam | | overloading.rs:327:5:331:5 | Self [trait MyTrait] | | overloading.rs:334:14:334:17 | SelfParam | | overloading.rs:325:5:325:25 | S | | overloading.rs:334:14:334:17 | SelfParam | T | {EXTERNAL LOCATION} | i64 | -| overloading.rs:334:27:336:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | overloading.rs:335:13:335:16 | self | | overloading.rs:325:5:325:25 | S | | overloading.rs:335:13:335:16 | self | T | {EXTERNAL LOCATION} | i64 | | overloading.rs:338:14:338:17 | SelfParam | | overloading.rs:325:5:325:25 | S | | overloading.rs:338:14:338:17 | SelfParam | T | {EXTERNAL LOCATION} | i64 | -| overloading.rs:338:27:340:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | overloading.rs:339:13:339:16 | self | | overloading.rs:325:5:325:25 | S | | overloading.rs:339:13:339:16 | self | T | {EXTERNAL LOCATION} | i64 | | overloading.rs:344:14:344:17 | SelfParam | | overloading.rs:325:5:325:25 | S | | overloading.rs:344:14:344:17 | SelfParam | T | {EXTERNAL LOCATION} | bool | -| overloading.rs:344:28:346:9 | { ... } | | {EXTERNAL LOCATION} | bool | | overloading.rs:345:13:345:16 | self | | overloading.rs:325:5:325:25 | S | | overloading.rs:345:13:345:16 | self | T | {EXTERNAL LOCATION} | bool | | overloading.rs:352:14:352:17 | SelfParam | | overloading.rs:325:5:325:25 | S | | overloading.rs:352:14:352:17 | SelfParam | T | overloading.rs:349:10:349:10 | T | -| overloading.rs:352:25:359:9 | { ... } | | overloading.rs:325:5:325:25 | S | -| overloading.rs:352:25:359:9 | { ... } | T | {EXTERNAL LOCATION} | i64 | -| overloading.rs:353:17:353:17 | x | | {EXTERNAL LOCATION} | i64 | -| overloading.rs:353:21:353:47 | ...::f(...) | | {EXTERNAL LOCATION} | i64 | -| overloading.rs:354:17:354:17 | x | | {EXTERNAL LOCATION} | i64 | -| overloading.rs:354:21:354:61 | ...::f(...) | | {EXTERNAL LOCATION} | i64 | -| overloading.rs:367:17:370:5 | { ... } | | overloading.rs:364:5:365:13 | S | | overloading.rs:378:17:378:17 | _ | | overloading.rs:364:5:365:13 | S | -| overloading.rs:378:31:380:9 | { ... } | | overloading.rs:372:5:372:14 | S1 | | overloading.rs:385:17:385:17 | _ | | overloading.rs:374:5:374:14 | S2 | -| overloading.rs:385:32:387:9 | { ... } | | overloading.rs:372:5:372:14 | S1 | | overloading.rs:392:17:392:17 | _ | | overloading.rs:364:5:365:13 | S | -| overloading.rs:392:31:394:9 | { ... } | | overloading.rs:374:5:374:14 | S2 | | overloading.rs:397:10:397:10 | b | | {EXTERNAL LOCATION} | bool | -| overloading.rs:397:25:401:5 | { ... } | | overloading.rs:372:5:372:14 | S1 | | overloading.rs:398:20:398:20 | b | | {EXTERNAL LOCATION} | bool | | overloading.rs:408:16:408:20 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:408:16:408:20 | SelfParam | TRef | overloading.rs:407:5:410:5 | Self [trait Trait] | @@ -4287,12 +3340,9 @@ inferCertainType | overloading.rs:422:16:422:20 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:422:16:422:20 | SelfParam | TRef | overloading.rs:405:5:405:19 | S | | overloading.rs:422:16:422:20 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | -| overloading.rs:422:23:426:9 | { ... } | | {EXTERNAL LOCATION} | () | -| overloading.rs:423:13:423:24 | ...::foo(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:423:20:423:23 | self | | {EXTERNAL LOCATION} | & | | overloading.rs:423:20:423:23 | self | TRef | overloading.rs:405:5:405:19 | S | | overloading.rs:423:20:423:23 | self | TRef.T | {EXTERNAL LOCATION} | i32 | -| overloading.rs:424:13:424:31 | ...::foo(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:424:27:424:30 | self | | {EXTERNAL LOCATION} | & | | overloading.rs:424:27:424:30 | self | TRef | overloading.rs:405:5:405:19 | S | | overloading.rs:424:27:424:30 | self | TRef.T | {EXTERNAL LOCATION} | i32 | @@ -4302,12 +3352,9 @@ inferCertainType | overloading.rs:429:16:429:20 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:429:16:429:20 | SelfParam | TRef | overloading.rs:405:5:405:19 | S | | overloading.rs:429:16:429:20 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | -| overloading.rs:429:23:433:9 | { ... } | | {EXTERNAL LOCATION} | () | -| overloading.rs:430:13:430:24 | ...::bar(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:430:20:430:23 | self | | {EXTERNAL LOCATION} | & | | overloading.rs:430:20:430:23 | self | TRef | overloading.rs:405:5:405:19 | S | | overloading.rs:430:20:430:23 | self | TRef.T | {EXTERNAL LOCATION} | i32 | -| overloading.rs:431:13:431:31 | ...::bar(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:431:27:431:30 | self | | {EXTERNAL LOCATION} | & | | overloading.rs:431:27:431:30 | self | TRef | overloading.rs:405:5:405:19 | S | | overloading.rs:431:27:431:30 | self | TRef.T | {EXTERNAL LOCATION} | i32 | @@ -4317,8 +3364,6 @@ inferCertainType | overloading.rs:438:16:438:20 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:438:16:438:20 | SelfParam | TRef | overloading.rs:405:5:405:19 | S | | overloading.rs:438:16:438:20 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i64 | -| overloading.rs:438:23:442:9 | { ... } | | {EXTERNAL LOCATION} | () | -| overloading.rs:440:13:440:31 | ...::foo(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:440:27:440:30 | self | | {EXTERNAL LOCATION} | & | | overloading.rs:440:27:440:30 | self | TRef | overloading.rs:405:5:405:19 | S | | overloading.rs:440:27:440:30 | self | TRef.T | {EXTERNAL LOCATION} | i64 | @@ -4328,8 +3373,6 @@ inferCertainType | overloading.rs:445:16:445:20 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:445:16:445:20 | SelfParam | TRef | overloading.rs:405:5:405:19 | S | | overloading.rs:445:16:445:20 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i64 | -| overloading.rs:445:23:449:9 | { ... } | | {EXTERNAL LOCATION} | () | -| overloading.rs:447:13:447:31 | ...::bar(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:447:27:447:30 | self | | {EXTERNAL LOCATION} | & | | overloading.rs:447:27:447:30 | self | TRef | overloading.rs:405:5:405:19 | S | | overloading.rs:447:27:447:30 | self | TRef.T | {EXTERNAL LOCATION} | i64 | @@ -4344,64 +3387,49 @@ inferCertainType | overloading.rs:467:14:467:18 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:467:14:467:18 | SelfParam | TRef | overloading.rs:464:5:464:19 | S | | overloading.rs:467:14:467:18 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | -| overloading.rs:467:28:469:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | overloading.rs:473:14:473:18 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:473:14:473:18 | SelfParam | TRef | overloading.rs:464:5:464:19 | S | | overloading.rs:473:14:473:18 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | -| overloading.rs:473:28:475:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | overloading.rs:481:14:481:18 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:481:14:481:18 | SelfParam | TRef | overloading.rs:464:5:464:19 | S | | overloading.rs:481:14:481:18 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | | overloading.rs:481:21:481:21 | x | | overloading.rs:464:5:464:19 | S | | overloading.rs:481:21:481:21 | x | T | {EXTERNAL LOCATION} | i32 | -| overloading.rs:481:48:483:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | overloading.rs:489:14:489:18 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:489:14:489:18 | SelfParam | TRef | overloading.rs:464:5:464:19 | S | | overloading.rs:489:14:489:18 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | | overloading.rs:489:21:489:21 | x | | overloading.rs:464:5:464:19 | S | | overloading.rs:489:21:489:21 | x | T | {EXTERNAL LOCATION} | i64 | -| overloading.rs:489:48:491:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | overloading.rs:497:14:497:18 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:497:14:497:18 | SelfParam | TRef | overloading.rs:464:5:464:19 | S | | overloading.rs:497:14:497:18 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | | overloading.rs:497:21:497:21 | x | | overloading.rs:464:5:464:19 | S | | overloading.rs:497:21:497:21 | x | T | {EXTERNAL LOCATION} | bool | -| overloading.rs:497:49:499:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | overloading.rs:502:36:502:36 | x | | overloading.rs:502:19:502:33 | T2 | -| overloading.rs:502:49:504:5 | { ... } | | overloading.rs:502:15:502:16 | T1 | | overloading.rs:503:9:503:9 | x | | overloading.rs:502:19:502:33 | T2 | | overloading.rs:506:38:506:38 | x | | overloading.rs:506:16:506:17 | T1 | | overloading.rs:506:45:506:45 | y | | overloading.rs:506:20:506:35 | T2 | -| overloading.rs:506:66:508:5 | { ... } | | overloading.rs:506:20:506:35 | T2::Output[MyTrait2] | | overloading.rs:507:9:507:9 | y | | overloading.rs:506:20:506:35 | T2 | | overloading.rs:507:13:507:13 | x | | overloading.rs:506:16:506:17 | T1 | | overloading.rs:510:15:522:5 | { ... } | | {EXTERNAL LOCATION} | () | | overloading.rs:513:13:513:13 | z | | {EXTERNAL LOCATION} | i32 | -| overloading.rs:516:13:516:13 | y | | {EXTERNAL LOCATION} | i32 | -| overloading.rs:516:17:516:35 | call_f::<...>(...) | | {EXTERNAL LOCATION} | i32 | | overloading.rs:519:27:519:30 | 0i32 | | {EXTERNAL LOCATION} | i32 | | overloading.rs:521:27:521:30 | 0i64 | | {EXTERNAL LOCATION} | i64 | -| pattern_matching.rs:13:26:133:1 | { ... } | | {EXTERNAL LOCATION} | Option | -| pattern_matching.rs:13:26:133:1 | { ... } | T | {EXTERNAL LOCATION} | () | | pattern_matching.rs:15:5:18:5 | if ... {...} | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:15:31:18:5 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:17:18:17:25 | "{mesg}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:17:18:17:25 | "{mesg}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:17:18:17:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:17:18:17:25 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:20:23:23:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:22:22:22:29 | "{mesg}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:22:22:22:29 | "{mesg}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:22:22:22:29 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:22:22:22:29 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:24:17:24:18 | TupleExpr | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:28:14:28:21 | "{mesg}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:28:14:28:21 | "{mesg}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:28:14:28:21 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:28:14:28:21 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:30:14:30:21 | "{mesg}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:30:14:30:21 | "{mesg}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:30:14:30:21 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:30:14:30:21 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:32:9:32:14 | value2 | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:32:18:32:26 | &... | | {EXTERNAL LOCATION} | & | @@ -4411,7 +3439,6 @@ inferCertainType | pattern_matching.rs:33:33:36:5 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:35:18:35:25 | "{mesg}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:35:18:35:25 | "{mesg}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:35:18:35:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:35:18:35:25 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:39:5:42:5 | if ... {...} | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:39:16:39:19 | mesg | | {EXTERNAL LOCATION} | & | @@ -4420,7 +3447,6 @@ inferCertainType | pattern_matching.rs:40:20:40:23 | mesg | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:41:18:41:25 | "{mesg}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:41:18:41:25 | "{mesg}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:41:18:41:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:41:18:41:25 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:41:20:41:23 | mesg | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:45:5:48:5 | if ... {...} | | {EXTERNAL LOCATION} | () | @@ -4430,7 +3456,6 @@ inferCertainType | pattern_matching.rs:46:20:46:23 | mesg | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:47:18:47:25 | "{mesg}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:47:18:47:25 | "{mesg}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:47:18:47:25 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:47:18:47:25 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:47:20:47:23 | mesg | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:50:13:50:18 | value5 | | {EXTERNAL LOCATION} | & | @@ -4471,7 +3496,6 @@ inferCertainType | pattern_matching.rs:121:5:123:5 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:127:13:130:5 | if ... {...} | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:128:5:130:5 | { ... } | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:168:27:217:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:169:9:169:13 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:169:17:169:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:171:11:171:15 | value | | {EXTERNAL LOCATION} | i32 | @@ -4480,7 +3504,6 @@ inferCertainType | pattern_matching.rs:174:33:174:37 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:175:22:175:42 | "Literal pattern: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:175:22:175:42 | "Literal pattern: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:175:22:175:57 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:175:22:175:57 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:175:45:175:57 | literal_match | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:177:15:180:9 | { ... } | | {EXTERNAL LOCATION} | () | @@ -4488,7 +3511,6 @@ inferCertainType | pattern_matching.rs:178:36:178:40 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:179:22:179:43 | "Negative literal: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:179:22:179:43 | "Negative literal: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:179:22:179:61 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:179:22:179:61 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:179:46:179:61 | negative_literal | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:181:14:184:9 | { ... } | | {EXTERNAL LOCATION} | () | @@ -4496,7 +3518,6 @@ inferCertainType | pattern_matching.rs:182:32:182:36 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:183:22:183:39 | "Zero literal: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:183:22:183:39 | "Zero literal: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:183:22:183:53 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:183:22:183:53 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:183:42:183:53 | zero_literal | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:185:14:185:15 | { ... } | | {EXTERNAL LOCATION} | () | @@ -4508,7 +3529,6 @@ inferCertainType | pattern_matching.rs:191:28:191:36 | float_val | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:192:22:192:37 | "Pi matched: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:192:22:192:37 | "Pi matched: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:192:22:192:47 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:192:22:192:47 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:192:40:192:47 | pi_match | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:194:14:194:15 | { ... } | | {EXTERNAL LOCATION} | () | @@ -4527,7 +3547,6 @@ inferCertainType | pattern_matching.rs:200:31:200:40 | string_val | TRef | {EXTERNAL LOCATION} | str | | pattern_matching.rs:201:22:201:41 | "String literal: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:201:22:201:41 | "String literal: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:201:22:201:54 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:201:22:201:54 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:201:44:201:54 | hello_match | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:201:44:201:54 | hello_match | TRef | {EXTERNAL LOCATION} | str | @@ -4541,7 +3560,6 @@ inferCertainType | pattern_matching.rs:209:30:209:37 | bool_val | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:210:22:210:39 | "True literal: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:210:22:210:39 | "True literal: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:210:22:210:51 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:210:22:210:51 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:210:42:210:51 | true_match | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:212:9:212:13 | false | | {EXTERNAL LOCATION} | bool | @@ -4550,17 +3568,14 @@ inferCertainType | pattern_matching.rs:213:31:213:38 | bool_val | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:214:22:214:40 | "False literal: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:214:22:214:40 | "False literal: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:214:22:214:53 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:214:22:214:53 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:214:43:214:53 | false_match | | {EXTERNAL LOCATION} | bool | -| pattern_matching.rs:219:30:277:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:220:9:220:13 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:220:17:220:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:223:11:223:15 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:224:14:227:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:226:22:226:45 | "Identifier pattern: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:226:22:226:45 | "Identifier pattern: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:226:22:226:58 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:226:22:226:58 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:231:11:231:16 | &value | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:231:12:231:16 | value | | {EXTERNAL LOCATION} | i32 | @@ -4570,7 +3585,6 @@ inferCertainType | pattern_matching.rs:233:29:233:29 | x | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:234:22:234:49 | "Reference identifier: {:?}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:234:22:234:49 | "Reference identifier: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:234:22:234:60 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:234:22:234:60 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:234:52:234:60 | ref_bound | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:239:13:239:25 | mutable_value | | {EXTERNAL LOCATION} | i32 | @@ -4579,28 +3593,23 @@ inferCertainType | pattern_matching.rs:241:18:245:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:244:22:244:45 | "Mutable identifier: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:244:22:244:45 | "Mutable identifier: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:244:22:244:56 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:244:22:244:56 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:249:39:249:43 | 42i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:251:35:254:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:253:22:253:49 | "@ pattern with literal: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:253:22:253:49 | "@ pattern with literal: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:253:22:253:59 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:253:22:253:59 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:255:40:258:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:257:22:257:47 | "@ pattern with range: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:257:22:257:47 | "@ pattern with range: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:257:22:257:63 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:257:22:257:63 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:259:30:262:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:261:22:261:37 | "Some value: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:261:22:261:37 | "Some value: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:261:22:261:49 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:261:22:261:49 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:263:27:265:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:264:22:264:33 | "None value\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:264:22:264:33 | "None value\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:264:22:264:33 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:264:22:264:33 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:269:13:269:23 | ref_mut_val | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:269:27:269:30 | 5i32 | | {EXTERNAL LOCATION} | i32 | @@ -4613,25 +3622,20 @@ inferCertainType | pattern_matching.rs:273:15:273:27 | ref_mut_bound | | {EXTERNAL LOCATION} | &mut | | pattern_matching.rs:274:22:274:38 | "Ref mut pattern\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:274:22:274:38 | "Ref mut pattern\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:274:22:274:38 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:274:22:274:38 | { ... } | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:279:28:290:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:280:9:280:13 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:280:17:280:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:282:11:282:15 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:283:24:283:39 | "Specific match\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:283:24:283:39 | "Specific match\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:283:24:283:39 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:283:24:283:39 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:285:14:288:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:286:17:286:32 | wildcard_context | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:286:36:286:40 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:287:22:287:47 | "Wildcard pattern for: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:287:22:287:47 | "Wildcard pattern for: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:287:22:287:65 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:287:22:287:65 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:287:50:287:65 | wildcard_context | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:292:25:324:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:293:9:293:13 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:293:17:293:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:295:11:295:15 | value | | {EXTERNAL LOCATION} | i32 | @@ -4640,7 +3644,6 @@ inferCertainType | pattern_matching.rs:298:35:298:39 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:299:22:299:42 | "Range inclusive: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:299:22:299:42 | "Range inclusive: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:299:22:299:59 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:299:22:299:59 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:299:45:299:59 | range_inclusive | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:301:17:304:9 | { ... } | | {EXTERNAL LOCATION} | () | @@ -4648,7 +3651,6 @@ inferCertainType | pattern_matching.rs:302:30:302:34 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:303:22:303:40 | "Range from 11: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:303:22:303:40 | "Range from 11: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:303:22:303:52 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:303:22:303:52 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:303:43:303:52 | range_from | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:305:17:308:9 | { ... } | | {EXTERNAL LOCATION} | () | @@ -4656,7 +3658,6 @@ inferCertainType | pattern_matching.rs:306:38:306:42 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:307:22:307:47 | "Range to 0 inclusive: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:307:22:307:47 | "Range to 0 inclusive: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:307:22:307:67 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:307:22:307:67 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:307:50:307:67 | range_to_inclusive | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:309:14:309:15 | { ... } | | {EXTERNAL LOCATION} | () | @@ -4670,7 +3671,6 @@ inferCertainType | pattern_matching.rs:315:34:315:41 | char_val | | {EXTERNAL LOCATION} | char | | pattern_matching.rs:316:22:316:41 | "Lowercase char: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:316:22:316:41 | "Lowercase char: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:316:22:316:57 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:316:22:316:57 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:316:44:316:57 | lowercase_char | | {EXTERNAL LOCATION} | char | | pattern_matching.rs:318:9:318:11 | 'A' | | {EXTERNAL LOCATION} | char | @@ -4680,11 +3680,9 @@ inferCertainType | pattern_matching.rs:319:34:319:41 | char_val | | {EXTERNAL LOCATION} | char | | pattern_matching.rs:320:22:320:41 | "Uppercase char: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:320:22:320:41 | "Uppercase char: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:320:22:320:57 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:320:22:320:57 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:320:44:320:57 | uppercase_char | | {EXTERNAL LOCATION} | char | | pattern_matching.rs:322:14:322:15 | { ... } | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:326:29:355:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:327:9:327:13 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:327:17:327:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:328:13:328:25 | mutable_value | | {EXTERNAL LOCATION} | i32 | @@ -4697,14 +3695,12 @@ inferCertainType | pattern_matching.rs:333:31:333:35 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:334:22:334:45 | "Dereferenced match: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:334:22:334:45 | "Dereferenced match: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:334:22:334:58 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:334:22:334:58 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:334:48:334:58 | deref_match | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:336:9:336:10 | &... | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:336:15:339:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:338:22:338:47 | "Dereferenced binding: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:338:22:338:47 | "Dereferenced binding: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:338:22:338:60 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:338:22:338:60 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:342:11:342:28 | &mut mutable_value | | {EXTERNAL LOCATION} | &mut | | pattern_matching.rs:342:16:342:28 | mutable_value | | {EXTERNAL LOCATION} | i32 | @@ -4715,7 +3711,6 @@ inferCertainType | pattern_matching.rs:344:33:344:33 | x | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:345:22:345:46 | "Mutable ref pattern: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:345:22:345:46 | "Mutable ref pattern: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:345:22:345:61 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:345:22:345:61 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:345:49:345:61 | mut_ref_bound | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:349:11:349:16 | &value | | {EXTERNAL LOCATION} | & | @@ -4726,10 +3721,8 @@ inferCertainType | pattern_matching.rs:351:31:351:31 | x | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:352:22:352:44 | "Reference pattern: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:352:22:352:44 | "Reference pattern: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:352:22:352:57 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:352:22:352:57 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:352:47:352:57 | ref_pattern | | {EXTERNAL LOCATION} | & | -| pattern_matching.rs:357:26:398:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:358:9:358:13 | point | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:358:17:358:38 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:361:11:361:15 | point | | pattern_matching.rs:135:1:140:1 | Point | @@ -4739,7 +3732,6 @@ inferCertainType | pattern_matching.rs:363:26:363:30 | point | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:364:22:364:41 | "Origin point: {:?}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:364:22:364:41 | "Origin point: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:364:22:364:49 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:364:22:364:49 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:364:44:364:49 | origin | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:366:9:366:25 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | @@ -4748,7 +3740,6 @@ inferCertainType | pattern_matching.rs:368:32:368:36 | point | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:369:22:369:56 | "Point on x-axis: x={}, point=... | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:369:22:369:56 | "Point on x-axis: x={}, point=... | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:369:22:369:80 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:369:22:369:80 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:369:69:369:80 | x_axis_point | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:371:9:371:27 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | @@ -4757,14 +3748,12 @@ inferCertainType | pattern_matching.rs:372:31:372:35 | point | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:373:22:373:44 | "Point with x=10: {:?}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:373:22:373:44 | "Point with x=10: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:373:22:373:57 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:373:22:373:57 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:373:47:373:57 | ten_x_point | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:375:9:375:22 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:375:27:379:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:378:22:378:46 | "General point: ({}, {})\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:378:22:378:46 | "General point: ({}, {})\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:378:22:378:68 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:378:22:378:68 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:383:9:383:13 | shape | | pattern_matching.rs:145:1:150:1 | Shape | | pattern_matching.rs:383:17:386:5 | ...::Rectangle {...} | | pattern_matching.rs:145:1:150:1 | Shape | @@ -4773,34 +3762,27 @@ inferCertainType | pattern_matching.rs:391:14:395:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:394:22:394:39 | "Rectangle: {}x{}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:394:22:394:39 | "Rectangle: {}x{}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:394:22:394:64 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:394:22:394:64 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:396:14:396:15 | { ... } | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:400:32:441:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:405:29:408:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:407:22:407:37 | "Pure red: {:?}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:407:22:407:37 | "Pure red: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:407:22:407:48 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:407:22:407:48 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:409:27:417:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:414:17:414:37 | "Color: ({}, {}, {})\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:414:17:414:37 | "Color: ({}, {}, {})\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:414:17:415:62 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:414:17:415:62 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:422:27:425:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:424:22:424:42 | "Reddish color: {:?}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:424:22:424:42 | "Reddish color: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:424:22:424:57 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:424:22:424:57 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:426:25:429:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:428:22:428:45 | "Any color with red: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:428:22:428:45 | "Any color with red: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:428:22:428:54 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:428:22:428:54 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:436:23:439:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:438:22:438:34 | "Wrapped: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:438:22:438:34 | "Wrapped: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:438:22:438:49 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:438:22:438:49 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:443:25:498:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:444:9:444:13 | tuple | | {EXTERNAL LOCATION} | (T_3) | @@ -4815,20 +3797,17 @@ inferCertainType | pattern_matching.rs:449:31:449:35 | tuple | | {EXTERNAL LOCATION} | (T_3) | | pattern_matching.rs:450:22:450:40 | "Exact tuple: {:?}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:450:22:450:40 | "Exact tuple: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:450:22:450:53 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:450:22:450:53 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:450:43:450:53 | exact_tuple | | {EXTERNAL LOCATION} | (T_3) | | pattern_matching.rs:452:9:452:17 | TuplePat | | {EXTERNAL LOCATION} | (T_3) | | pattern_matching.rs:452:22:457:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:456:22:456:42 | "Tuple: ({}, {}, {})\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:456:22:456:42 | "Tuple: ({}, {}, {})\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:456:22:456:79 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:456:22:456:79 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:461:11:461:15 | tuple | | {EXTERNAL LOCATION} | (T_3) | | pattern_matching.rs:462:24:465:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:464:22:464:40 | "First element: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:464:22:464:40 | "First element: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:464:22:464:53 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:464:22:464:53 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:469:9:469:12 | unit | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:469:16:469:17 | TupleExpr | | {EXTERNAL LOCATION} | () | @@ -4839,7 +3818,6 @@ inferCertainType | pattern_matching.rs:472:30:472:33 | unit | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:473:22:473:39 | "Unit value: {:?}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:473:22:473:39 | "Unit value: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:473:22:473:51 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:473:22:473:51 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:473:42:473:51 | unit_value | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:478:9:478:14 | single | | {EXTERNAL LOCATION} | (T_1) | @@ -4850,7 +3828,6 @@ inferCertainType | pattern_matching.rs:480:17:483:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:482:22:482:47 | "Single element tuple: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:482:22:482:47 | "Single element tuple: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:482:22:482:60 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:482:22:482:60 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:487:9:487:18 | ref_tuple1 | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:487:9:487:18 | ref_tuple1 | TRef | {EXTERNAL LOCATION} | (T_2) | @@ -4867,11 +3844,9 @@ inferCertainType | pattern_matching.rs:488:32:491:5 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:489:18:489:24 | "n: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:489:18:489:24 | "n: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:489:18:489:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:489:18:489:27 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:490:18:490:24 | "m: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:490:18:490:24 | "m: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:490:18:490:27 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:490:18:490:27 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:494:9:494:18 | ref_tuple2 | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:494:9:494:18 | ref_tuple2 | TRef | {EXTERNAL LOCATION} | (T_2) | @@ -4886,20 +3861,16 @@ inferCertainType | pattern_matching.rs:495:18:495:27 | ref_tuple2 | TRef.T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:496:14:496:20 | "n: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:496:14:496:20 | "n: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:496:14:496:23 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:496:14:496:23 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:497:14:497:20 | "m: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:497:14:497:20 | "m: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:497:14:497:23 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:497:14:497:23 | { ... } | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:500:33:520:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:501:9:501:13 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:501:17:501:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:504:11:504:15 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:505:16:508:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:507:22:507:48 | "Parenthesized pattern: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:507:22:507:48 | "Parenthesized pattern: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:507:22:507:61 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:507:22:507:61 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:512:9:512:13 | tuple | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:512:17:512:28 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | @@ -4910,9 +3881,7 @@ inferCertainType | pattern_matching.rs:514:21:518:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:517:22:517:53 | "Parenthesized in tuple: {}, {... | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:517:22:517:53 | "Parenthesized in tuple: {}, {... | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:517:22:517:71 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:517:22:517:71 | { ... } | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:522:25:563:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:523:9:523:13 | slice | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:523:9:523:13 | slice | TRef | {EXTERNAL LOCATION} | [] | | pattern_matching.rs:523:9:523:13 | slice | TRef.TSlice | {EXTERNAL LOCATION} | i32 | @@ -4930,7 +3899,6 @@ inferCertainType | pattern_matching.rs:528:31:528:35 | slice | TRef.TSlice | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:529:22:529:40 | "Empty slice: {:?}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:529:22:529:40 | "Empty slice: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:529:22:529:53 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:529:22:529:53 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:529:43:529:53 | empty_slice | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:529:43:529:53 | empty_slice | TRef | {EXTERNAL LOCATION} | [] | @@ -4938,17 +3906,14 @@ inferCertainType | pattern_matching.rs:531:16:534:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:533:22:533:41 | "Single element: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:533:22:533:41 | "Single element: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:533:22:533:54 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:533:22:533:54 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:535:28:539:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:538:22:538:43 | "Two elements: {}, {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:538:22:538:43 | "Two elements: {}, {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:538:22:538:70 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:538:22:538:70 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:540:39:550:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:545:17:545:53 | "First: {}, last: {}, middle l... | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:545:17:545:53 | "First: {}, last: {}, middle l... | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:545:17:548:34 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:545:17:548:34 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:554:9:554:13 | array | | {EXTERNAL LOCATION} | [;] | | pattern_matching.rs:554:17:554:28 | [...] | | {EXTERNAL LOCATION} | [;] | @@ -4957,9 +3922,8 @@ inferCertainType | pattern_matching.rs:556:22:561:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:560:22:560:49 | "Array elements: {}, {}, {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:560:22:560:49 | "Array elements: {}, {}, {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:560:22:560:70 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:560:22:560:70 | { ... } | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:565:24:601:1 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:566:5:567:29 | const CONSTANT | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:568:9:568:13 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:568:17:568:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:570:11:570:15 | value | | {EXTERNAL LOCATION} | i32 | @@ -4968,7 +3932,6 @@ inferCertainType | pattern_matching.rs:572:31:572:35 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:573:22:573:43 | "Matches constant: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:573:22:573:43 | "Matches constant: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:573:22:573:56 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:573:22:573:56 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:573:46:573:56 | const_match | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:575:14:575:15 | { ... } | | {EXTERNAL LOCATION} | () | @@ -4976,24 +3939,19 @@ inferCertainType | pattern_matching.rs:581:27:583:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:582:22:582:35 | "None variant\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:582:22:582:35 | "None variant\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:582:22:582:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:582:22:582:35 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:584:30:587:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:586:22:586:37 | "Some value: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:586:22:586:37 | "Some value: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:586:22:586:49 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:586:22:586:49 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:592:39:595:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:594:22:594:35 | "Ok value: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:594:22:594:35 | "Ok value: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:594:22:594:45 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:594:22:594:45 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:596:40:599:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:598:22:598:32 | "Error: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:598:22:598:32 | "Error: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:598:22:598:43 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:598:22:598:43 | { ... } | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:603:22:638:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:604:9:604:13 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:604:17:604:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:607:11:607:15 | value | | {EXTERNAL LOCATION} | i32 | @@ -5002,7 +3960,6 @@ inferCertainType | pattern_matching.rs:609:29:609:33 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:610:22:610:39 | "Small number: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:610:22:610:39 | "Small number: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:610:22:610:50 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:610:22:610:50 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:610:42:610:50 | small_num | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:612:20:615:9 | { ... } | | {EXTERNAL LOCATION} | () | @@ -5010,7 +3967,6 @@ inferCertainType | pattern_matching.rs:613:29:613:33 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:614:22:614:39 | "Round number: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:614:22:614:39 | "Round number: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:614:22:614:50 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:614:22:614:50 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:614:42:614:50 | round_num | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:616:14:616:15 | { ... } | | {EXTERNAL LOCATION} | () | @@ -5022,7 +3978,6 @@ inferCertainType | pattern_matching.rs:622:58:626:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:625:22:625:46 | "Point on axis: ({}, {})\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:625:22:625:46 | "Point on axis: ({}, {})\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:625:22:625:62 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:625:22:625:62 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:627:14:627:15 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:631:11:631:15 | value | | {EXTERNAL LOCATION} | i32 | @@ -5031,11 +3986,9 @@ inferCertainType | pattern_matching.rs:633:34:633:38 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:634:22:634:35 | "In range: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:634:22:634:35 | "In range: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:634:22:634:51 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:634:22:634:51 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:634:38:634:51 | range_or_value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:636:14:636:15 | { ... } | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:640:24:674:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:641:9:641:13 | tuple | | {EXTERNAL LOCATION} | (T_4) | | pattern_matching.rs:641:17:641:41 | TupleExpr | | {EXTERNAL LOCATION} | (T_4) | | pattern_matching.rs:641:18:641:21 | 1i32 | | {EXTERNAL LOCATION} | i32 | @@ -5046,19 +3999,16 @@ inferCertainType | pattern_matching.rs:645:24:648:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:647:22:647:42 | "First with rest: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:647:22:647:42 | "First with rest: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:647:22:647:54 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:647:22:647:54 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:651:11:651:15 | tuple | | {EXTERNAL LOCATION} | (T_4) | | pattern_matching.rs:652:23:655:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:654:22:654:41 | "Last with rest: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:654:22:654:41 | "Last with rest: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:654:22:654:52 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:654:22:654:52 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:658:11:658:15 | tuple | | {EXTERNAL LOCATION} | (T_4) | | pattern_matching.rs:659:30:663:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:662:22:662:45 | "First and last: {}, {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:662:22:662:45 | "First and last: {}, {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:662:22:662:67 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:662:22:662:67 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:667:9:667:13 | point | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:667:17:667:38 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | @@ -5067,7 +4017,6 @@ inferCertainType | pattern_matching.rs:669:28:672:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:671:22:671:39 | "X coordinate: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:671:22:671:39 | "X coordinate: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:671:22:671:47 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:671:22:671:47 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:676:25:696:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:694:21:694:25 | 42i32 | | {EXTERNAL LOCATION} | i32 | @@ -5076,7 +4025,6 @@ inferCertainType | pattern_matching.rs:695:21:695:25 | 10i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:695:21:695:25 | 10i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:695:21:695:25 | { ... } | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:698:34:724:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:700:9:700:20 | complex_data | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:700:24:700:79 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:700:25:700:44 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | @@ -5086,7 +4034,6 @@ inferCertainType | pattern_matching.rs:704:66:712:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:709:17:709:57 | "Complex nested: y={}, green={... | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:709:17:709:57 | "Complex nested: y={}, green={... | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:709:17:710:44 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:709:17:710:44 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:714:9:714:41 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:714:10:714:24 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | @@ -5095,12 +4042,10 @@ inferCertainType | pattern_matching.rs:714:76:717:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:716:22:716:50 | "Alternative complex: x={:?}\\n... | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:716:22:716:50 | "Alternative complex: x={:?}\\n... | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:716:22:716:65 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:716:22:716:65 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:719:18:722:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:721:22:721:47 | "Other complex data: {:?}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:721:22:721:47 | "Other complex data: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:721:22:721:62 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:721:22:721:62 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:726:37:758:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:728:9:728:13 | point | | pattern_matching.rs:135:1:140:1 | Point | @@ -5133,44 +4078,22 @@ inferCertainType | pattern_matching.rs:757:19:757:25 | mut_val | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:760:42:789:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:763:22:763:35 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | -| pattern_matching.rs:763:59:767:5 | { ... } | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:763:59:767:5 | { ... } | T0 | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:763:59:767:5 | { ... } | T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:766:9:766:26 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:769:22:769:35 | Color(...) | | pattern_matching.rs:142:1:143:25 | Color | -| pattern_matching.rs:769:51:772:5 | { ... } | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:774:22:774:38 | TuplePat | | {EXTERNAL LOCATION} | (T_3) | | pattern_matching.rs:774:22:774:38 | TuplePat | T0 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:774:22:774:38 | TuplePat | T1 | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:774:22:774:38 | TuplePat | T2 | {EXTERNAL LOCATION} | bool | -| pattern_matching.rs:774:74:778:5 | { ... } | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:774:74:778:5 | { ... } | T0 | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:774:74:778:5 | { ... } | T1 | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:777:9:777:34 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | | pattern_matching.rs:781:9:781:13 | point | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:781:17:781:37 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | -| pattern_matching.rs:782:9:782:17 | extracted | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:782:9:782:17 | extracted | T0 | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:782:9:782:17 | extracted | T1 | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:782:21:782:40 | extract_point(...) | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:782:21:782:40 | extract_point(...) | T0 | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:782:21:782:40 | extract_point(...) | T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:782:35:782:39 | point | | pattern_matching.rs:135:1:140:1 | Point | -| pattern_matching.rs:785:9:785:11 | red | | {EXTERNAL LOCATION} | u8 | -| pattern_matching.rs:785:15:785:34 | extract_color(...) | | {EXTERNAL LOCATION} | u8 | | pattern_matching.rs:787:9:787:13 | tuple | | {EXTERNAL LOCATION} | (T_3) | | pattern_matching.rs:787:17:787:38 | TupleExpr | | {EXTERNAL LOCATION} | (T_3) | | pattern_matching.rs:787:18:787:22 | 42i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:787:25:787:31 | 3.14f64 | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:787:34:787:37 | true | | {EXTERNAL LOCATION} | bool | -| pattern_matching.rs:788:9:788:23 | tuple_extracted | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:788:9:788:23 | tuple_extracted | T0 | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:788:9:788:23 | tuple_extracted | T1 | {EXTERNAL LOCATION} | bool | -| pattern_matching.rs:788:27:788:46 | extract_tuple(...) | | {EXTERNAL LOCATION} | (T_2) | -| pattern_matching.rs:788:27:788:46 | extract_tuple(...) | T0 | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:788:27:788:46 | extract_tuple(...) | T1 | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:788:41:788:45 | tuple | | {EXTERNAL LOCATION} | (T_3) | -| pattern_matching.rs:792:35:824:1 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:794:23:794:42 | (...) | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:794:23:794:42 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:794:45:794:64 | (...) | | pattern_matching.rs:135:1:140:1 | Point | @@ -5180,14 +4103,12 @@ inferCertainType | pattern_matching.rs:795:34:799:5 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:798:18:798:42 | "Point in loop: ({}, {})\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:798:18:798:42 | "Point in loop: ({}, {})\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:798:18:798:58 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:798:18:798:58 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:802:39:802:43 | 42i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:803:5:806:5 | if ... {...} | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:803:50:806:5 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:805:18:805:44 | "If let with @ pattern: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:805:18:805:44 | "If let with @ pattern: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:805:18:805:54 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:805:18:805:54 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:809:13:809:17 | stack | | {EXTERNAL LOCATION} | Vec | | pattern_matching.rs:809:13:809:17 | stack | A | {EXTERNAL LOCATION} | Global | @@ -5200,7 +4121,6 @@ inferCertainType | pattern_matching.rs:810:37:813:5 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:812:18:812:29 | "Popped: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:812:18:812:29 | "Popped: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:812:18:812:42 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:812:18:812:42 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:816:9:816:13 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:816:17:816:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | @@ -5208,48 +4128,23 @@ inferCertainType | pattern_matching.rs:818:23:821:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:820:22:820:35 | "Positive: {}\\n" | | {EXTERNAL LOCATION} | & | | pattern_matching.rs:820:22:820:35 | "Positive: {}\\n" | TRef | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:820:22:820:44 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:820:22:820:44 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:822:14:822:15 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:826:28:846:1 | { ... } | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:827:5:827:7 | f(...) | | {EXTERNAL LOCATION} | Option | -| pattern_matching.rs:827:5:827:7 | f(...) | T | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:828:5:828:22 | literal_patterns(...) | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:829:5:829:25 | identifier_patterns(...) | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:830:5:830:23 | wildcard_patterns(...) | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:831:5:831:20 | range_patterns(...) | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:832:5:832:24 | reference_patterns(...) | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:833:5:833:21 | record_patterns(...) | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:834:5:834:27 | tuple_struct_patterns(...) | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:835:5:835:20 | tuple_patterns(...) | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:836:5:836:28 | parenthesized_patterns(...) | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:837:5:837:20 | slice_patterns(...) | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:838:5:838:19 | path_patterns(...) | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:839:5:839:17 | or_patterns(...) | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:840:5:840:19 | rest_patterns(...) | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:841:5:841:20 | macro_patterns(...) | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:842:5:842:29 | complex_nested_patterns(...) | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:843:5:843:32 | patterns_in_let_statements(...) | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:844:5:844:37 | patterns_in_function_parameters(...) | | {EXTERNAL LOCATION} | () | -| pattern_matching.rs:845:5:845:30 | patterns_in_control_flow(...) | | {EXTERNAL LOCATION} | () | | raw_pointer.rs:3:28:3:28 | x | | {EXTERNAL LOCATION} | *const | | raw_pointer.rs:3:28:3:28 | x | TPtrConst | {EXTERNAL LOCATION} | i32 | -| raw_pointer.rs:3:50:6:1 | { ... } | | {EXTERNAL LOCATION} | i32 | | raw_pointer.rs:4:24:4:24 | x | | {EXTERNAL LOCATION} | *const | | raw_pointer.rs:4:24:4:24 | x | TPtrConst | {EXTERNAL LOCATION} | i32 | | raw_pointer.rs:8:26:8:26 | x | | {EXTERNAL LOCATION} | *mut | | raw_pointer.rs:8:26:8:26 | x | TPtrMut | {EXTERNAL LOCATION} | bool | -| raw_pointer.rs:8:47:11:1 | { ... } | | {EXTERNAL LOCATION} | i32 | | raw_pointer.rs:9:24:9:24 | x | | {EXTERNAL LOCATION} | *mut | | raw_pointer.rs:9:24:9:24 | x | TPtrMut | {EXTERNAL LOCATION} | bool | -| raw_pointer.rs:13:23:19:1 | { ... } | | {EXTERNAL LOCATION} | () | | raw_pointer.rs:14:9:14:9 | a | | {EXTERNAL LOCATION} | i64 | | raw_pointer.rs:15:9:15:9 | x | | {EXTERNAL LOCATION} | *const | | raw_pointer.rs:15:13:15:24 | &raw const a | | {EXTERNAL LOCATION} | *const | | raw_pointer.rs:15:24:15:24 | a | | {EXTERNAL LOCATION} | i64 | | raw_pointer.rs:16:5:18:5 | { ... } | | {EXTERNAL LOCATION} | () | | raw_pointer.rs:17:19:17:19 | x | | {EXTERNAL LOCATION} | *const | -| raw_pointer.rs:21:21:27:1 | { ... } | | {EXTERNAL LOCATION} | () | | raw_pointer.rs:22:13:22:13 | a | | {EXTERNAL LOCATION} | i32 | | raw_pointer.rs:22:17:22:21 | 10i32 | | {EXTERNAL LOCATION} | i32 | | raw_pointer.rs:23:9:23:9 | x | | {EXTERNAL LOCATION} | *mut | @@ -5258,72 +4153,41 @@ inferCertainType | raw_pointer.rs:24:5:26:5 | { ... } | | {EXTERNAL LOCATION} | () | | raw_pointer.rs:25:19:25:19 | x | | {EXTERNAL LOCATION} | *mut | | raw_pointer.rs:29:18:29:21 | cond | | {EXTERNAL LOCATION} | bool | -| raw_pointer.rs:29:30:40:1 | { ... } | | {EXTERNAL LOCATION} | () | | raw_pointer.rs:30:9:30:9 | a | | {EXTERNAL LOCATION} | i32 | | raw_pointer.rs:30:13:30:17 | 10i32 | | {EXTERNAL LOCATION} | i32 | -| raw_pointer.rs:32:9:32:19 | ptr_written | | {EXTERNAL LOCATION} | *mut | -| raw_pointer.rs:32:23:32:32 | null_mut(...) | | {EXTERNAL LOCATION} | *mut | | raw_pointer.rs:33:5:39:5 | if cond {...} | | {EXTERNAL LOCATION} | () | | raw_pointer.rs:33:8:33:11 | cond | | {EXTERNAL LOCATION} | bool | | raw_pointer.rs:34:9:38:9 | { ... } | | {EXTERNAL LOCATION} | () | -| raw_pointer.rs:36:14:36:24 | ptr_written | | {EXTERNAL LOCATION} | *mut | | raw_pointer.rs:36:28:36:28 | a | | {EXTERNAL LOCATION} | i32 | -| raw_pointer.rs:37:23:37:33 | ptr_written | | {EXTERNAL LOCATION} | *mut | | raw_pointer.rs:42:24:42:27 | cond | | {EXTERNAL LOCATION} | bool | -| raw_pointer.rs:42:36:51:1 | { ... } | | {EXTERNAL LOCATION} | () | -| raw_pointer.rs:44:9:44:16 | ptr_read | | {EXTERNAL LOCATION} | *mut | -| raw_pointer.rs:44:20:44:29 | null_mut(...) | | {EXTERNAL LOCATION} | *mut | | raw_pointer.rs:45:5:50:5 | if cond {...} | | {EXTERNAL LOCATION} | () | | raw_pointer.rs:45:8:45:11 | cond | | {EXTERNAL LOCATION} | bool | | raw_pointer.rs:46:9:49:9 | { ... } | | {EXTERNAL LOCATION} | () | | raw_pointer.rs:48:17:48:18 | _y | | {EXTERNAL LOCATION} | i64 | -| raw_pointer.rs:48:28:48:35 | ptr_read | | {EXTERNAL LOCATION} | *mut | | raw_pointer.rs:53:15:60:1 | { ... } | | {EXTERNAL LOCATION} | () | -| raw_pointer.rs:54:5:54:32 | raw_pointer_const_deref(...) | | {EXTERNAL LOCATION} | i32 | | raw_pointer.rs:54:29:54:31 | &10 | | {EXTERNAL LOCATION} | & | -| raw_pointer.rs:55:5:55:36 | raw_pointer_mut_deref(...) | | {EXTERNAL LOCATION} | i32 | | raw_pointer.rs:55:27:55:35 | &mut true | | {EXTERNAL LOCATION} | &mut | | raw_pointer.rs:55:32:55:35 | true | | {EXTERNAL LOCATION} | bool | -| raw_pointer.rs:56:5:56:22 | raw_const_borrow(...) | | {EXTERNAL LOCATION} | () | -| raw_pointer.rs:57:5:57:20 | raw_mut_borrow(...) | | {EXTERNAL LOCATION} | () | -| raw_pointer.rs:58:5:58:24 | raw_mut_write(...) | | {EXTERNAL LOCATION} | () | | raw_pointer.rs:58:19:58:23 | false | | {EXTERNAL LOCATION} | bool | -| raw_pointer.rs:59:5:59:30 | raw_type_from_deref(...) | | {EXTERNAL LOCATION} | () | | raw_pointer.rs:59:25:59:29 | false | | {EXTERNAL LOCATION} | bool | | regressions.rs:10:17:10:17 | s | | regressions.rs:3:5:3:23 | S | | regressions.rs:10:17:10:17 | s | T | regressions.rs:9:10:9:10 | T | -| regressions.rs:10:34:12:9 | { ... } | | {EXTERNAL LOCATION} | Option | -| regressions.rs:10:34:12:9 | { ... } | T | regressions.rs:9:10:9:10 | T | | regressions.rs:11:18:11:18 | s | | regressions.rs:3:5:3:23 | S | | regressions.rs:11:18:11:18 | s | T | regressions.rs:9:10:9:10 | T | -| regressions.rs:15:21:33:5 | { ... } | | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:17:16:21 | vec_e | | {EXTERNAL LOCATION} | Vec | -| regressions.rs:16:17:16:21 | vec_e | A | {EXTERNAL LOCATION} | Global | -| regressions.rs:16:25:16:34 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | -| regressions.rs:16:25:16:34 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | regressions.rs:19:13:19:13 | e | | regressions.rs:5:5:7:5 | E | | regressions.rs:19:17:19:40 | ...::V {...} | | regressions.rs:5:5:7:5 | E | -| regressions.rs:19:29:19:38 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | -| regressions.rs:19:29:19:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | regressions.rs:21:9:23:9 | if ... {...} | | {EXTERNAL LOCATION} | () | | regressions.rs:21:32:23:9 | { ... } | | {EXTERNAL LOCATION} | () | -| regressions.rs:22:13:22:17 | vec_e | | {EXTERNAL LOCATION} | Vec | -| regressions.rs:22:13:22:17 | vec_e | A | {EXTERNAL LOCATION} | Global | | regressions.rs:24:17:24:17 | e | | regressions.rs:5:5:7:5 | E | | regressions.rs:27:17:30:9 | if ... {...} | | {EXTERNAL LOCATION} | () | -| regressions.rs:27:37:27:41 | vec_e | | {EXTERNAL LOCATION} | Vec | -| regressions.rs:27:37:27:41 | vec_e | A | {EXTERNAL LOCATION} | Global | | regressions.rs:28:9:30:9 | { ... } | | {EXTERNAL LOCATION} | () | | regressions.rs:48:16:48:19 | SelfParam | | regressions.rs:39:5:40:14 | S1 | | regressions.rs:48:22:48:25 | _rhs | | regressions.rs:39:5:40:14 | S1 | -| regressions.rs:48:50:50:9 | { ... } | | regressions.rs:39:5:40:14 | S1 | | regressions.rs:57:16:57:19 | SelfParam | | regressions.rs:39:5:40:14 | S1 | | regressions.rs:57:22:57:25 | _rhs | | regressions.rs:41:5:42:14 | S2 | -| regressions.rs:57:48:59:9 | { ... } | | regressions.rs:41:5:42:14 | S2 | | regressions.rs:66:16:66:19 | SelfParam | | regressions.rs:39:5:40:14 | S1 | | regressions.rs:66:22:66:26 | other | | {EXTERNAL LOCATION} | & | | regressions.rs:66:22:66:26 | other | TRef | regressions.rs:41:5:42:14 | S2 | -| regressions.rs:66:61:68:9 | { ... } | | regressions.rs:41:5:42:14 | S2 | | regressions.rs:67:22:67:25 | self | | regressions.rs:39:5:40:14 | S1 | | regressions.rs:67:29:67:33 | other | | {EXTERNAL LOCATION} | & | | regressions.rs:67:29:67:33 | other | TRef | regressions.rs:41:5:42:14 | S2 | @@ -5331,14 +4195,10 @@ inferCertainType | regressions.rs:74:22:74:24 | &s2 | | {EXTERNAL LOCATION} | & | | regressions.rs:82:20:82:24 | value | | regressions.rs:81:18:81:18 | T | | regressions.rs:86:20:86:20 | s | | regressions.rs:85:10:85:10 | T | -| regressions.rs:86:34:88:9 | { ... } | | regressions.rs:85:10:85:10 | T | | regressions.rs:87:13:87:13 | s | | regressions.rs:85:10:85:10 | T | | regressions.rs:92:20:92:22 | val | | regressions.rs:91:10:91:10 | T | -| regressions.rs:92:41:94:9 | { ... } | | {EXTERNAL LOCATION} | Option | -| regressions.rs:92:41:94:9 | { ... } | T | regressions.rs:91:10:91:10 | T | | regressions.rs:93:18:93:20 | val | | regressions.rs:91:10:91:10 | T | | regressions.rs:99:22:99:22 | x | | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:103:5:107:5 | { ... } | | regressions.rs:99:18:99:19 | T2 | | regressions.rs:104:33:104:33 | x | | regressions.rs:99:18:99:19 | T2 | | regressions.rs:113:14:113:17 | SelfParam | | regressions.rs:111:5:114:5 | Self [trait MyTrait] | | regressions.rs:118:14:118:17 | SelfParam | | {EXTERNAL LOCATION} | & | @@ -5351,27 +4211,17 @@ inferCertainType | regressions.rs:128:24:128:27 | self | T | regressions.rs:123:10:123:10 | T | | regressions.rs:139:17:139:17 | _ | | {EXTERNAL LOCATION} | & | | regressions.rs:139:17:139:17 | _ | TRef | regressions.rs:135:5:135:14 | S1 | -| regressions.rs:139:33:141:9 | { ... } | | regressions.rs:136:5:136:22 | S2 | -| regressions.rs:139:33:141:9 | { ... } | T2 | regressions.rs:135:5:135:14 | S1 | | regressions.rs:145:17:145:17 | t | | regressions.rs:144:10:144:10 | T | -| regressions.rs:145:31:147:9 | { ... } | | regressions.rs:136:5:136:22 | S2 | -| regressions.rs:145:31:147:9 | { ... } | T2 | regressions.rs:144:10:144:10 | T | | regressions.rs:146:16:146:16 | t | | regressions.rs:144:10:144:10 | T | -| regressions.rs:150:24:153:5 | { ... } | | regressions.rs:136:5:136:22 | S2 | -| regressions.rs:150:24:153:5 | { ... } | T2 | regressions.rs:135:5:135:14 | S1 | | regressions.rs:164:16:164:19 | SelfParam | | regressions.rs:158:5:158:19 | S | | regressions.rs:164:16:164:19 | SelfParam | T | regressions.rs:160:10:160:10 | T | | regressions.rs:164:22:164:25 | _rhs | | regressions.rs:158:5:158:19 | S | | regressions.rs:164:22:164:25 | _rhs | T | regressions.rs:160:10:160:10 | T | -| regressions.rs:164:50:166:9 | { ... } | | regressions.rs:158:5:158:19 | S | -| regressions.rs:164:50:166:9 | { ... } | T | regressions.rs:160:10:160:10 | T | | regressions.rs:165:13:165:16 | self | | regressions.rs:158:5:158:19 | S | | regressions.rs:165:13:165:16 | self | T | regressions.rs:160:10:160:10 | T | | regressions.rs:173:16:173:19 | SelfParam | | regressions.rs:158:5:158:19 | S | | regressions.rs:173:16:173:19 | SelfParam | T | regressions.rs:169:10:169:10 | T | | regressions.rs:173:22:173:25 | _rhs | | regressions.rs:169:10:169:10 | T | -| regressions.rs:173:47:175:9 | { ... } | | regressions.rs:158:5:158:19 | S | -| regressions.rs:173:47:175:9 | { ... } | T | regressions.rs:169:10:169:10 | T | | regressions.rs:174:13:174:16 | self | | regressions.rs:158:5:158:19 | S | | regressions.rs:174:13:174:16 | self | T | regressions.rs:169:10:169:10 | T | | regressions.rs:178:14:180:5 | { ... } | | {EXTERNAL LOCATION} | () | @@ -5424,10 +4274,8 @@ inferType | associated_types.rs:81:9:81:11 | 'a' | | {EXTERNAL LOCATION} | char | | associated_types.rs:92:15:92:18 | SelfParam | | associated_types.rs:88:5:103:5 | Self [trait MyTrait] | | associated_types.rs:94:15:94:18 | SelfParam | | associated_types.rs:88:5:103:5 | Self [trait MyTrait] | -| associated_types.rs:98:9:102:9 | { ... } | | associated_types.rs:89:9:89:28 | AssociatedType[MyTrait] | | associated_types.rs:99:13:99:16 | self | | associated_types.rs:88:5:103:5 | Self [trait MyTrait] | | associated_types.rs:99:13:99:21 | self.m1() | | associated_types.rs:89:9:89:28 | AssociatedType[MyTrait] | -| associated_types.rs:101:13:101:43 | ...::default(...) | | associated_types.rs:89:9:89:28 | AssociatedType[MyTrait] | | associated_types.rs:109:15:109:18 | SelfParam | | associated_types.rs:10:1:11:9 | S | | associated_types.rs:109:45:111:9 | { ... } | | associated_types.rs:16:1:17:10 | S3 | | associated_types.rs:110:13:110:14 | S3 | | associated_types.rs:16:1:17:10 | S3 | @@ -7280,9 +6128,8 @@ inferType | dereference.rs:164:13:164:13 | S | | dereference.rs:159:5:159:13 | S | | dereference.rs:170:16:170:19 | SelfParam | | {EXTERNAL LOCATION} | &mut | | dereference.rs:170:16:170:19 | SelfParam | TRefMut | dereference.rs:159:5:159:13 | S | -| dereference.rs:170:29:172:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:170:29:172:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | dereference.rs:171:13:171:14 | 42 | | {EXTERNAL LOCATION} | i32 | -| dereference.rs:171:13:171:14 | 42 | | {EXTERNAL LOCATION} | i64 | | dereference.rs:176:16:176:19 | SelfParam | | dereference.rs:175:5:177:5 | Self [trait MyTrait2] | | dereference.rs:176:22:176:24 | arg | | dereference.rs:175:20:175:21 | T1 | | dereference.rs:181:16:181:19 | SelfParam | | dereference.rs:159:5:159:13 | S | @@ -7293,9 +6140,8 @@ inferType | dereference.rs:188:16:188:19 | SelfParam | | dereference.rs:159:5:159:13 | S | | dereference.rs:188:22:188:24 | arg | | {EXTERNAL LOCATION} | &mut | | dereference.rs:188:22:188:24 | arg | TRefMut | dereference.rs:159:5:159:13 | S | -| dereference.rs:188:42:190:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:188:42:190:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | dereference.rs:189:13:189:14 | 42 | | {EXTERNAL LOCATION} | i32 | -| dereference.rs:189:13:189:14 | 42 | | {EXTERNAL LOCATION} | i64 | | dereference.rs:193:19:200:5 | { ... } | | {EXTERNAL LOCATION} | () | | dereference.rs:194:13:194:13 | x | | dereference.rs:159:5:159:13 | S | | dereference.rs:194:17:194:20 | (...) | | {EXTERNAL LOCATION} | & | @@ -7412,14 +6258,12 @@ inferType | dyn_type.rs:60:46:60:46 | a | | dyn_type.rs:60:18:60:43 | A | | dyn_type.rs:60:78:62:1 | { ... } | | {EXTERNAL LOCATION} | Box | | dyn_type.rs:60:78:62:1 | { ... } | A | {EXTERNAL LOCATION} | Global | -| dyn_type.rs:60:78:62:1 | { ... } | T | dyn_type.rs:10:1:13:1 | dyn GenericGet | -| dyn_type.rs:60:78:62:1 | { ... } | T.dyn(A) | dyn_type.rs:60:18:60:43 | A | +| dyn_type.rs:60:78:62:1 | { ... } | T | dyn_type.rs:33:1:36:1 | GenStruct | +| dyn_type.rs:60:78:62:1 | { ... } | T.A | dyn_type.rs:60:18:60:43 | A | | dyn_type.rs:61:5:61:36 | ...::new(...) | | {EXTERNAL LOCATION} | Box | | dyn_type.rs:61:5:61:36 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| dyn_type.rs:61:5:61:36 | ...::new(...) | T | dyn_type.rs:10:1:13:1 | dyn GenericGet | | dyn_type.rs:61:5:61:36 | ...::new(...) | T | dyn_type.rs:33:1:36:1 | GenStruct | | dyn_type.rs:61:5:61:36 | ...::new(...) | T.A | dyn_type.rs:60:18:60:43 | A | -| dyn_type.rs:61:5:61:36 | ...::new(...) | T.dyn(A) | dyn_type.rs:60:18:60:43 | A | | dyn_type.rs:61:14:61:35 | GenStruct {...} | | dyn_type.rs:33:1:36:1 | GenStruct | | dyn_type.rs:61:14:61:35 | GenStruct {...} | A | dyn_type.rs:60:18:60:43 | A | | dyn_type.rs:61:33:61:33 | a | | dyn_type.rs:60:18:60:43 | A | @@ -8498,14 +7342,13 @@ inferType | main.rs:564:9:564:13 | thing | TRef | main.rs:563:17:563:37 | T | | main.rs:564:9:564:21 | thing.get_a() | | main.rs:563:14:563:14 | A | | main.rs:568:44:568:48 | thing | | main.rs:568:24:568:41 | S | -| main.rs:568:61:571:5 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:568:61:571:5 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:569:13:569:15 | _ms | | {EXTERNAL LOCATION} | Option | | main.rs:569:13:569:15 | _ms | T | main.rs:568:24:568:41 | S | | main.rs:569:19:569:23 | thing | | main.rs:568:24:568:41 | S | | main.rs:569:19:569:31 | thing.get_a() | | {EXTERNAL LOCATION} | Option | | main.rs:569:19:569:31 | thing.get_a() | T | main.rs:568:24:568:41 | S | | main.rs:570:9:570:9 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:570:9:570:9 | 0 | | {EXTERNAL LOCATION} | i64 | | main.rs:576:55:576:59 | thing | | {EXTERNAL LOCATION} | & | | main.rs:576:55:576:59 | thing | TRef | main.rs:576:25:576:52 | S | | main.rs:576:66:579:5 | { ... } | | {EXTERNAL LOCATION} | () | @@ -9191,7 +8034,6 @@ inferType | main.rs:964:22:964:25 | SelfParam | Fst | main.rs:963:10:963:12 | Fst | | main.rs:964:22:964:25 | SelfParam | Snd | main.rs:963:15:963:17 | Snd | | main.rs:964:35:971:9 | { ... } | | main.rs:963:15:963:17 | Snd | -| main.rs:965:13:970:13 | match self { ... } | | file://:0:0:0:0 | ! | | main.rs:965:13:970:13 | match self { ... } | | main.rs:963:15:963:17 | Snd | | main.rs:965:19:965:22 | self | | main.rs:955:5:961:5 | PairOption | | main.rs:965:19:965:22 | self | Fst | main.rs:963:10:963:12 | Fst | @@ -9199,20 +8041,18 @@ inferType | main.rs:966:17:966:38 | ...::PairNone(...) | | main.rs:955:5:961:5 | PairOption | | main.rs:966:17:966:38 | ...::PairNone(...) | Fst | main.rs:963:10:963:12 | Fst | | main.rs:966:17:966:38 | ...::PairNone(...) | Snd | main.rs:963:15:963:17 | Snd | -| main.rs:966:43:966:82 | MacroExpr | | file://:0:0:0:0 | ! | +| main.rs:966:43:966:82 | MacroExpr | | main.rs:963:15:963:17 | Snd | | main.rs:966:50:966:81 | "PairNone has no second elemen... | | {EXTERNAL LOCATION} | & | | main.rs:966:50:966:81 | "PairNone has no second elemen... | TRef | {EXTERNAL LOCATION} | str | -| main.rs:966:50:966:81 | ...::panic_fmt(...) | | file://:0:0:0:0 | ! | | main.rs:966:50:966:81 | MacroExpr | | {EXTERNAL LOCATION} | () | | main.rs:966:50:966:81 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:967:17:967:38 | ...::PairFst(...) | | main.rs:955:5:961:5 | PairOption | | main.rs:967:17:967:38 | ...::PairFst(...) | Fst | main.rs:963:10:963:12 | Fst | | main.rs:967:17:967:38 | ...::PairFst(...) | Snd | main.rs:963:15:963:17 | Snd | | main.rs:967:37:967:37 | _ | | main.rs:963:10:963:12 | Fst | -| main.rs:967:43:967:81 | MacroExpr | | file://:0:0:0:0 | ! | +| main.rs:967:43:967:81 | MacroExpr | | main.rs:963:15:963:17 | Snd | | main.rs:967:50:967:80 | "PairFst has no second element... | | {EXTERNAL LOCATION} | & | | main.rs:967:50:967:80 | "PairFst has no second element... | TRef | {EXTERNAL LOCATION} | str | -| main.rs:967:50:967:80 | ...::panic_fmt(...) | | file://:0:0:0:0 | ! | | main.rs:967:50:967:80 | MacroExpr | | {EXTERNAL LOCATION} | () | | main.rs:967:50:967:80 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:968:17:968:40 | ...::PairSnd(...) | | main.rs:955:5:961:5 | PairOption | @@ -9906,10 +8746,12 @@ inferType | main.rs:1281:15:1281:19 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1281:15:1281:19 | SelfParam | TRef | main.rs:1278:5:1278:13 | S | | main.rs:1281:31:1283:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1281:31:1283:9 | { ... } | TRef | main.rs:1278:5:1278:13 | S | +| main.rs:1281:31:1283:9 | { ... } | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1281:31:1283:9 | { ... } | TRef.TRef | {EXTERNAL LOCATION} | & | +| main.rs:1281:31:1283:9 | { ... } | TRef.TRef.TRef | {EXTERNAL LOCATION} | & | +| main.rs:1281:31:1283:9 | { ... } | TRef.TRef.TRef.TRef | main.rs:1278:5:1278:13 | S | | main.rs:1282:13:1282:19 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1282:13:1282:19 | &... | TRef | {EXTERNAL LOCATION} | & | -| main.rs:1282:13:1282:19 | &... | TRef | main.rs:1278:5:1278:13 | S | | main.rs:1282:13:1282:19 | &... | TRef.TRef | {EXTERNAL LOCATION} | & | | main.rs:1282:13:1282:19 | &... | TRef.TRef.TRef | {EXTERNAL LOCATION} | & | | main.rs:1282:13:1282:19 | &... | TRef.TRef.TRef.TRef | main.rs:1278:5:1278:13 | S | @@ -9925,10 +8767,12 @@ inferType | main.rs:1285:15:1285:25 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1285:15:1285:25 | SelfParam | TRef | main.rs:1278:5:1278:13 | S | | main.rs:1285:37:1287:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1285:37:1287:9 | { ... } | TRef | main.rs:1278:5:1278:13 | S | +| main.rs:1285:37:1287:9 | { ... } | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1285:37:1287:9 | { ... } | TRef.TRef | {EXTERNAL LOCATION} | & | +| main.rs:1285:37:1287:9 | { ... } | TRef.TRef.TRef | {EXTERNAL LOCATION} | & | +| main.rs:1285:37:1287:9 | { ... } | TRef.TRef.TRef.TRef | main.rs:1278:5:1278:13 | S | | main.rs:1286:13:1286:19 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1286:13:1286:19 | &... | TRef | {EXTERNAL LOCATION} | & | -| main.rs:1286:13:1286:19 | &... | TRef | main.rs:1278:5:1278:13 | S | | main.rs:1286:13:1286:19 | &... | TRef.TRef | {EXTERNAL LOCATION} | & | | main.rs:1286:13:1286:19 | &... | TRef.TRef.TRef | {EXTERNAL LOCATION} | & | | main.rs:1286:13:1286:19 | &... | TRef.TRef.TRef.TRef | main.rs:1278:5:1278:13 | S | @@ -9950,10 +8794,12 @@ inferType | main.rs:1293:15:1293:15 | x | | {EXTERNAL LOCATION} | & | | main.rs:1293:15:1293:15 | x | TRef | main.rs:1278:5:1278:13 | S | | main.rs:1293:34:1295:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1293:34:1295:9 | { ... } | TRef | main.rs:1278:5:1278:13 | S | +| main.rs:1293:34:1295:9 | { ... } | TRef | {EXTERNAL LOCATION} | & | +| main.rs:1293:34:1295:9 | { ... } | TRef.TRef | {EXTERNAL LOCATION} | & | +| main.rs:1293:34:1295:9 | { ... } | TRef.TRef.TRef | {EXTERNAL LOCATION} | & | +| main.rs:1293:34:1295:9 | { ... } | TRef.TRef.TRef.TRef | main.rs:1278:5:1278:13 | S | | main.rs:1294:13:1294:16 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1294:13:1294:16 | &... | TRef | {EXTERNAL LOCATION} | & | -| main.rs:1294:13:1294:16 | &... | TRef | main.rs:1278:5:1278:13 | S | | main.rs:1294:13:1294:16 | &... | TRef.TRef | {EXTERNAL LOCATION} | & | | main.rs:1294:13:1294:16 | &... | TRef.TRef.TRef | {EXTERNAL LOCATION} | & | | main.rs:1294:13:1294:16 | &... | TRef.TRef.TRef.TRef | main.rs:1278:5:1278:13 | S | @@ -10205,13 +9051,9 @@ inferType | main.rs:1397:26:1397:30 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1397:26:1397:30 | SelfParam | TRef | {EXTERNAL LOCATION} | [;] | | main.rs:1397:26:1397:30 | SelfParam | TRef.TArray | main.rs:1396:14:1396:23 | T | -| main.rs:1397:39:1399:13 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1397:39:1399:13 | { ... } | TRef | main.rs:1396:14:1396:23 | T | | main.rs:1398:17:1398:20 | self | | {EXTERNAL LOCATION} | & | | main.rs:1398:17:1398:20 | self | TRef | {EXTERNAL LOCATION} | [;] | | main.rs:1398:17:1398:20 | self | TRef.TArray | main.rs:1396:14:1396:23 | T | -| main.rs:1398:17:1398:36 | ... .unwrap() | | {EXTERNAL LOCATION} | & | -| main.rs:1398:17:1398:36 | ... .unwrap() | TRef | main.rs:1396:14:1396:23 | T | | main.rs:1398:26:1398:26 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:1401:31:1403:13 | { ... } | | main.rs:1396:14:1396:23 | T | | main.rs:1402:17:1402:28 | ...::default(...) | | main.rs:1396:14:1396:23 | T | @@ -10244,14 +9086,12 @@ inferType | main.rs:1411:26:1411:30 | SelfParam | TRef | {EXTERNAL LOCATION} | [] | | main.rs:1411:26:1411:30 | SelfParam | TRef.TSlice | main.rs:1410:14:1410:23 | T | | main.rs:1411:39:1413:13 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:1411:39:1413:13 | { ... } | TRef | main.rs:1410:14:1410:23 | T | | main.rs:1412:17:1412:20 | self | | {EXTERNAL LOCATION} | & | | main.rs:1412:17:1412:20 | self | TRef | {EXTERNAL LOCATION} | [] | | main.rs:1412:17:1412:20 | self | TRef.TSlice | main.rs:1410:14:1410:23 | T | | main.rs:1412:17:1412:27 | self.get(...) | | {EXTERNAL LOCATION} | Option | | main.rs:1412:17:1412:27 | self.get(...) | T | {EXTERNAL LOCATION} | & | | main.rs:1412:17:1412:36 | ... .unwrap() | | {EXTERNAL LOCATION} | & | -| main.rs:1412:17:1412:36 | ... .unwrap() | TRef | main.rs:1410:14:1410:23 | T | | main.rs:1412:26:1412:26 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:1415:31:1417:13 | { ... } | | main.rs:1410:14:1410:23 | T | | main.rs:1416:17:1416:28 | ...::default(...) | | main.rs:1410:14:1410:23 | T | @@ -11247,7 +10087,6 @@ inferType | main.rs:1954:18:1954:22 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1954:18:1954:22 | SelfParam | TRef | main.rs:1921:5:1921:22 | S3 | | main.rs:1954:18:1954:22 | SelfParam | TRef.T3 | main.rs:1953:10:1953:17 | T | -| main.rs:1954:30:1957:9 | { ... } | | main.rs:1953:10:1953:17 | T | | main.rs:1955:17:1955:21 | S3(...) | | {EXTERNAL LOCATION} | & | | main.rs:1955:17:1955:21 | S3(...) | | main.rs:1921:5:1921:22 | S3 | | main.rs:1955:17:1955:21 | S3(...) | TRef | main.rs:1921:5:1921:22 | S3 | @@ -11255,7 +10094,6 @@ inferType | main.rs:1955:25:1955:28 | self | | {EXTERNAL LOCATION} | & | | main.rs:1955:25:1955:28 | self | TRef | main.rs:1921:5:1921:22 | S3 | | main.rs:1955:25:1955:28 | self | TRef.T3 | main.rs:1953:10:1953:17 | T | -| main.rs:1956:13:1956:21 | t.clone() | | main.rs:1953:10:1953:17 | T | | main.rs:1960:45:1962:5 | { ... } | | main.rs:1918:5:1919:14 | S1 | | main.rs:1961:9:1961:10 | S1 | | main.rs:1918:5:1919:14 | S1 | | main.rs:1964:41:1964:41 | t | | main.rs:1964:26:1964:38 | B | @@ -11263,50 +10101,38 @@ inferType | main.rs:1965:9:1965:9 | t | | main.rs:1964:26:1964:38 | B | | main.rs:1965:9:1965:17 | t.get_a() | | main.rs:1964:23:1964:23 | A | | main.rs:1968:34:1968:34 | x | | main.rs:1968:24:1968:31 | T | -| main.rs:1968:59:1970:5 | { ... } | | main.rs:1968:43:1968:57 | impl ... | -| main.rs:1968:59:1970:5 | { ... } | impl(T) | main.rs:1968:24:1968:31 | T | +| main.rs:1968:59:1970:5 | { ... } | | main.rs:1921:5:1921:22 | S3 | +| main.rs:1968:59:1970:5 | { ... } | T3 | main.rs:1968:24:1968:31 | T | | main.rs:1969:9:1969:13 | S3(...) | | main.rs:1921:5:1921:22 | S3 | -| main.rs:1969:9:1969:13 | S3(...) | | main.rs:1968:43:1968:57 | impl ... | | main.rs:1969:9:1969:13 | S3(...) | T3 | main.rs:1968:24:1968:31 | T | -| main.rs:1969:9:1969:13 | S3(...) | impl(T) | main.rs:1968:24:1968:31 | T | | main.rs:1969:12:1969:12 | x | | main.rs:1968:24:1968:31 | T | | main.rs:1972:34:1972:34 | x | | main.rs:1972:24:1972:31 | T | | main.rs:1972:67:1974:5 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:1972:67:1974:5 | { ... } | T | main.rs:1972:50:1972:64 | impl ... | -| main.rs:1972:67:1974:5 | { ... } | T.impl(T) | main.rs:1972:24:1972:31 | T | +| main.rs:1972:67:1974:5 | { ... } | T | main.rs:1921:5:1921:22 | S3 | +| main.rs:1972:67:1974:5 | { ... } | T.T3 | main.rs:1972:24:1972:31 | T | | main.rs:1973:9:1973:19 | Some(...) | | {EXTERNAL LOCATION} | Option | | main.rs:1973:9:1973:19 | Some(...) | T | main.rs:1921:5:1921:22 | S3 | -| main.rs:1973:9:1973:19 | Some(...) | T | main.rs:1972:50:1972:64 | impl ... | | main.rs:1973:9:1973:19 | Some(...) | T.T3 | main.rs:1972:24:1972:31 | T | -| main.rs:1973:9:1973:19 | Some(...) | T.impl(T) | main.rs:1972:24:1972:31 | T | | main.rs:1973:14:1973:18 | S3(...) | | main.rs:1921:5:1921:22 | S3 | | main.rs:1973:14:1973:18 | S3(...) | T3 | main.rs:1972:24:1972:31 | T | | main.rs:1973:17:1973:17 | x | | main.rs:1972:24:1972:31 | T | | main.rs:1976:34:1976:34 | x | | main.rs:1976:24:1976:31 | T | | main.rs:1976:78:1978:5 | { ... } | | {EXTERNAL LOCATION} | (T_2) | -| main.rs:1976:78:1978:5 | { ... } | T0 | main.rs:1976:44:1976:58 | impl ... | -| main.rs:1976:78:1978:5 | { ... } | T0.impl(T) | main.rs:1976:24:1976:31 | T | -| main.rs:1976:78:1978:5 | { ... } | T1 | main.rs:1976:61:1976:75 | impl ... | -| main.rs:1976:78:1978:5 | { ... } | T1.impl(T) | main.rs:1976:24:1976:31 | T | +| main.rs:1976:78:1978:5 | { ... } | T0 | main.rs:1921:5:1921:22 | S3 | +| main.rs:1976:78:1978:5 | { ... } | T0.T3 | main.rs:1976:24:1976:31 | T | +| main.rs:1976:78:1978:5 | { ... } | T1 | main.rs:1921:5:1921:22 | S3 | +| main.rs:1976:78:1978:5 | { ... } | T1.T3 | main.rs:1976:24:1976:31 | T | | main.rs:1977:9:1977:30 | TupleExpr | | {EXTERNAL LOCATION} | (T_2) | | main.rs:1977:9:1977:30 | TupleExpr | T0 | main.rs:1921:5:1921:22 | S3 | -| main.rs:1977:9:1977:30 | TupleExpr | T0 | main.rs:1976:44:1976:58 | impl ... | | main.rs:1977:9:1977:30 | TupleExpr | T0.T3 | main.rs:1976:24:1976:31 | T | -| main.rs:1977:9:1977:30 | TupleExpr | T0.impl(T) | main.rs:1976:24:1976:31 | T | | main.rs:1977:9:1977:30 | TupleExpr | T1 | main.rs:1921:5:1921:22 | S3 | -| main.rs:1977:9:1977:30 | TupleExpr | T1 | main.rs:1976:61:1976:75 | impl ... | | main.rs:1977:9:1977:30 | TupleExpr | T1.T3 | main.rs:1976:24:1976:31 | T | -| main.rs:1977:9:1977:30 | TupleExpr | T1.impl(T) | main.rs:1976:24:1976:31 | T | | main.rs:1977:10:1977:22 | S3(...) | | main.rs:1921:5:1921:22 | S3 | -| main.rs:1977:10:1977:22 | S3(...) | | main.rs:1976:44:1976:58 | impl ... | | main.rs:1977:10:1977:22 | S3(...) | T3 | main.rs:1976:24:1976:31 | T | -| main.rs:1977:10:1977:22 | S3(...) | impl(T) | main.rs:1976:24:1976:31 | T | | main.rs:1977:13:1977:13 | x | | main.rs:1976:24:1976:31 | T | | main.rs:1977:13:1977:21 | x.clone() | | main.rs:1976:24:1976:31 | T | | main.rs:1977:25:1977:29 | S3(...) | | main.rs:1921:5:1921:22 | S3 | -| main.rs:1977:25:1977:29 | S3(...) | | main.rs:1976:61:1976:75 | impl ... | | main.rs:1977:25:1977:29 | S3(...) | T3 | main.rs:1976:24:1976:31 | T | -| main.rs:1977:25:1977:29 | S3(...) | impl(T) | main.rs:1976:24:1976:31 | T | | main.rs:1977:28:1977:28 | x | | main.rs:1976:24:1976:31 | T | | main.rs:1980:26:1980:26 | t | | main.rs:1980:29:1980:43 | impl ... | | main.rs:1980:51:1982:5 | { ... } | | main.rs:1980:23:1980:23 | A | @@ -11474,9 +10300,8 @@ inferType | main.rs:2090:14:2090:18 | value | TRef | {EXTERNAL LOCATION} | i64 | | main.rs:2098:19:2098:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | | main.rs:2098:25:2098:29 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2098:46:2104:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2098:46:2104:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:2099:13:2103:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | -| main.rs:2099:13:2103:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | | main.rs:2099:16:2099:20 | value | | {EXTERNAL LOCATION} | bool | | main.rs:2099:22:2101:13 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:2100:17:2100:17 | 1 | | {EXTERNAL LOCATION} | i32 | @@ -11531,9 +10356,8 @@ inferType | main.rs:2146:40:2148:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:2147:13:2147:17 | value | | {EXTERNAL LOCATION} | i64 | | main.rs:2153:20:2153:24 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2153:41:2159:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2153:41:2159:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:2154:13:2158:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | -| main.rs:2154:13:2158:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | | main.rs:2154:16:2154:20 | value | | {EXTERNAL LOCATION} | bool | | main.rs:2154:22:2156:13 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:2155:17:2155:17 | 1 | | {EXTERNAL LOCATION} | i32 | @@ -11557,19 +10381,14 @@ inferType | main.rs:2187:15:2187:15 | x | | main.rs:2185:5:2191:5 | Self [trait MySelfTrait] | | main.rs:2190:15:2190:15 | x | | main.rs:2185:5:2191:5 | Self [trait MySelfTrait] | | main.rs:2195:15:2195:15 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2195:31:2197:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:2196:13:2196:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2196:13:2196:17 | ... + ... | | {EXTERNAL LOCATION} | i64 | | main.rs:2196:17:2196:17 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2200:15:2200:15 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2200:32:2202:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | main.rs:2201:13:2201:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2201:13:2201:17 | ... + ... | | {EXTERNAL LOCATION} | i64 | | main.rs:2201:17:2201:17 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2207:15:2207:15 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:2207:31:2209:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2207:31:2209:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:2208:13:2208:13 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2208:13:2208:13 | 0 | | {EXTERNAL LOCATION} | i64 | | main.rs:2212:15:2212:15 | x | | {EXTERNAL LOCATION} | bool | | main.rs:2212:32:2214:9 | { ... } | | {EXTERNAL LOCATION} | bool | | main.rs:2213:13:2213:13 | x | | {EXTERNAL LOCATION} | bool | @@ -11652,9 +10471,8 @@ inferType | main.rs:2250:13:2250:25 | MyCallable {...} | | main.rs:2246:5:2246:24 | MyCallable | | main.rs:2253:17:2253:21 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2253:17:2253:21 | SelfParam | TRef | main.rs:2246:5:2246:24 | MyCallable | -| main.rs:2253:31:2255:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2253:31:2255:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:2254:13:2254:13 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2254:13:2254:13 | 1 | | {EXTERNAL LOCATION} | i64 | | main.rs:2258:16:2365:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2261:9:2261:29 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2261:13:2261:13 | i | | {EXTERNAL LOCATION} | i32 | @@ -12511,6 +11329,7 @@ inferType | main.rs:2528:18:2528:22 | SelfParam | TRef | main.rs:2515:5:2515:25 | PathBuf | | main.rs:2528:34:2532:9 | { ... } | | {EXTERNAL LOCATION} | & | | main.rs:2528:34:2532:9 | { ... } | TRef | main.rs:2503:5:2503:22 | Path | +| main.rs:2529:13:2530:44 | static path | | main.rs:2503:5:2503:22 | Path | | main.rs:2530:33:2530:43 | ...::new(...) | | main.rs:2503:5:2503:22 | Path | | main.rs:2531:13:2531:17 | &path | | {EXTERNAL LOCATION} | & | | main.rs:2531:13:2531:17 | &path | TRef | main.rs:2503:5:2503:22 | Path | @@ -12584,8 +11403,10 @@ inferType | main.rs:2572:14:2572:14 | b | | {EXTERNAL LOCATION} | bool | | main.rs:2572:48:2589:5 | { ... } | | {EXTERNAL LOCATION} | Box | | main.rs:2572:48:2589:5 | { ... } | A | {EXTERNAL LOCATION} | Global | -| main.rs:2572:48:2589:5 | { ... } | T | main.rs:2547:5:2549:5 | dyn MyTrait | -| main.rs:2572:48:2589:5 | { ... } | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2572:48:2589:5 | { ... } | T | main.rs:2551:5:2552:19 | S | +| main.rs:2572:48:2589:5 | { ... } | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2572:48:2589:5 | { ... } | T.T | main.rs:2551:5:2552:19 | S | +| main.rs:2572:48:2589:5 | { ... } | T.T.T | {EXTERNAL LOCATION} | i32 | | main.rs:2573:13:2573:13 | x | | main.rs:2551:5:2552:19 | S | | main.rs:2573:13:2573:13 | x | T | {EXTERNAL LOCATION} | i32 | | main.rs:2573:17:2578:9 | if b {...} else {...} | | main.rs:2551:5:2552:19 | S | @@ -12611,12 +11432,10 @@ inferType | main.rs:2582:19:2582:19 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2583:9:2588:9 | if b {...} else {...} | | {EXTERNAL LOCATION} | Box | | main.rs:2583:9:2588:9 | if b {...} else {...} | A | {EXTERNAL LOCATION} | Global | -| main.rs:2583:9:2588:9 | if b {...} else {...} | T | main.rs:2547:5:2549:5 | dyn MyTrait | | main.rs:2583:9:2588:9 | if b {...} else {...} | T | main.rs:2551:5:2552:19 | S | | main.rs:2583:9:2588:9 | if b {...} else {...} | T.T | {EXTERNAL LOCATION} | i32 | | main.rs:2583:9:2588:9 | if b {...} else {...} | T.T | main.rs:2551:5:2552:19 | S | | main.rs:2583:9:2588:9 | if b {...} else {...} | T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2583:9:2588:9 | if b {...} else {...} | T.dyn(T) | {EXTERNAL LOCATION} | i32 | | main.rs:2583:12:2583:12 | b | | {EXTERNAL LOCATION} | bool | | main.rs:2583:14:2586:9 | { ... } | | {EXTERNAL LOCATION} | Box | | main.rs:2583:14:2586:9 | { ... } | A | {EXTERNAL LOCATION} | Global | @@ -12673,8 +11492,9 @@ inferType | main.rs:2618:18:2618:29 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2618:18:2618:29 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2619:9:2619:9 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2622:20:2624:5 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2622:20:2624:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2623:16:2623:16 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2623:16:2623:16 | 0 | | {EXTERNAL LOCATION} | () | | main.rs:2627:11:2627:14 | cond | | {EXTERNAL LOCATION} | bool | | main.rs:2627:30:2635:5 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:2628:13:2628:13 | a | | {EXTERNAL LOCATION} | () | @@ -12864,20 +11684,14 @@ inferType | main.rs:2733:28:2735:9 | { ... } | TRef | main.rs:2731:10:2731:10 | T | | main.rs:2734:13:2734:16 | self | | {EXTERNAL LOCATION} | & | | main.rs:2734:13:2734:16 | self | TRef | main.rs:2731:10:2731:10 | T | -| main.rs:2738:25:2742:5 | { ... } | | {EXTERNAL LOCATION} | usize | +| main.rs:2738:25:2742:5 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:2739:17:2739:17 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2739:17:2739:17 | x | | {EXTERNAL LOCATION} | usize | | main.rs:2739:21:2739:21 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2739:21:2739:21 | 0 | | {EXTERNAL LOCATION} | usize | | main.rs:2740:9:2740:9 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2740:9:2740:9 | x | | {EXTERNAL LOCATION} | usize | | main.rs:2740:9:2740:17 | ... = ... | | {EXTERNAL LOCATION} | () | | main.rs:2740:13:2740:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2740:13:2740:13 | x | | {EXTERNAL LOCATION} | usize | | main.rs:2740:13:2740:17 | x.f() | | {EXTERNAL LOCATION} | i32 | -| main.rs:2740:13:2740:17 | x.f() | | {EXTERNAL LOCATION} | usize | | main.rs:2741:9:2741:9 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2741:9:2741:9 | x | | {EXTERNAL LOCATION} | usize | | main.rs:2744:12:2752:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2745:13:2745:13 | x | | {EXTERNAL LOCATION} | usize | | main.rs:2745:24:2745:24 | 0 | | {EXTERNAL LOCATION} | i32 | @@ -12986,9 +11800,8 @@ inferType | overloading.rs:8:20:8:24 | SelfParam | TRef | overloading.rs:2:5:11:5 | Self [trait FirstTrait] | | overloading.rs:14:19:14:23 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:14:19:14:23 | SelfParam | TRef | overloading.rs:12:5:19:5 | Self [trait SecondTrait] | -| overloading.rs:14:33:16:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| overloading.rs:14:33:16:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | overloading.rs:15:13:15:13 | 1 | | {EXTERNAL LOCATION} | i32 | -| overloading.rs:15:13:15:13 | 1 | | {EXTERNAL LOCATION} | i64 | | overloading.rs:18:20:18:24 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:18:20:18:24 | SelfParam | TRef | overloading.rs:12:5:19:5 | Self [trait SecondTrait] | | overloading.rs:24:20:24:24 | SelfParam | | {EXTERNAL LOCATION} | & | @@ -12999,9 +11812,8 @@ inferType | overloading.rs:30:13:30:16 | true | | {EXTERNAL LOCATION} | bool | | overloading.rs:35:20:35:24 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:35:20:35:24 | SelfParam | TRef | overloading.rs:20:5:21:13 | S | -| overloading.rs:35:34:37:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| overloading.rs:35:34:37:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | overloading.rs:36:13:36:13 | 1 | | {EXTERNAL LOCATION} | i32 | -| overloading.rs:36:13:36:13 | 1 | | {EXTERNAL LOCATION} | i64 | | overloading.rs:43:20:43:24 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:43:20:43:24 | SelfParam | TRef | overloading.rs:40:5:40:14 | S2 | | overloading.rs:43:35:45:9 | { ... } | | {EXTERNAL LOCATION} | bool | @@ -13301,9 +12113,8 @@ inferType | overloading.rs:234:13:234:13 | 0 | | {EXTERNAL LOCATION} | i32 | | overloading.rs:240:14:240:17 | SelfParam | | {EXTERNAL LOCATION} | i32 | | overloading.rs:240:20:240:20 | x | | {EXTERNAL LOCATION} | i64 | -| overloading.rs:240:35:242:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| overloading.rs:240:35:242:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | overloading.rs:241:13:241:13 | 0 | | {EXTERNAL LOCATION} | i32 | -| overloading.rs:241:13:241:13 | 0 | | {EXTERNAL LOCATION} | i64 | | overloading.rs:246:14:246:17 | SelfParam | | overloading.rs:245:5:247:5 | Self [trait Trait2] | | overloading.rs:246:20:246:20 | x | | overloading.rs:245:18:245:19 | T1 | | overloading.rs:251:14:251:17 | SelfParam | | {EXTERNAL LOCATION} | i32 | @@ -13312,9 +12123,8 @@ inferType | overloading.rs:252:13:252:13 | 0 | | {EXTERNAL LOCATION} | i32 | | overloading.rs:258:14:258:17 | SelfParam | | {EXTERNAL LOCATION} | i32 | | overloading.rs:258:20:258:20 | x | | {EXTERNAL LOCATION} | i32 | -| overloading.rs:258:35:260:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| overloading.rs:258:35:260:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | overloading.rs:259:13:259:13 | 0 | | {EXTERNAL LOCATION} | i32 | -| overloading.rs:259:13:259:13 | 0 | | {EXTERNAL LOCATION} | i64 | | overloading.rs:263:12:270:5 | { ... } | | {EXTERNAL LOCATION} | () | | overloading.rs:264:13:264:13 | x | | {EXTERNAL LOCATION} | i32 | | overloading.rs:264:17:264:17 | 0 | | {EXTERNAL LOCATION} | i32 | @@ -13377,7 +12187,7 @@ inferType | overloading.rs:352:14:352:17 | SelfParam | | overloading.rs:325:5:325:25 | S | | overloading.rs:352:14:352:17 | SelfParam | T | overloading.rs:349:10:349:10 | T | | overloading.rs:352:25:359:9 | { ... } | | overloading.rs:325:5:325:25 | S | -| overloading.rs:352:25:359:9 | { ... } | T | {EXTERNAL LOCATION} | i64 | +| overloading.rs:352:25:359:9 | { ... } | T | {EXTERNAL LOCATION} | i32 | | overloading.rs:353:17:353:17 | x | | {EXTERNAL LOCATION} | i64 | | overloading.rs:353:21:353:47 | ...::f(...) | | {EXTERNAL LOCATION} | i64 | | overloading.rs:353:26:353:46 | S(...) | | overloading.rs:325:5:325:25 | S | @@ -13405,7 +12215,6 @@ inferType | overloading.rs:357:42:357:59 | ...::default(...) | | {EXTERNAL LOCATION} | i64 | | overloading.rs:358:13:358:16 | S(...) | | overloading.rs:325:5:325:25 | S | | overloading.rs:358:13:358:16 | S(...) | T | {EXTERNAL LOCATION} | i32 | -| overloading.rs:358:13:358:16 | S(...) | T | {EXTERNAL LOCATION} | i64 | | overloading.rs:358:15:358:15 | 0 | | {EXTERNAL LOCATION} | i32 | | overloading.rs:367:17:370:5 | { ... } | | overloading.rs:364:5:365:13 | S | | overloading.rs:368:13:368:13 | x | | overloading.rs:364:5:365:13 | S | @@ -13450,7 +12259,6 @@ inferType | overloading.rs:422:16:422:20 | SelfParam | TRef | overloading.rs:405:5:405:19 | S | | overloading.rs:422:16:422:20 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | | overloading.rs:422:23:426:9 | { ... } | | {EXTERNAL LOCATION} | () | -| overloading.rs:423:13:423:24 | ...::foo(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:423:20:423:23 | self | | {EXTERNAL LOCATION} | & | | overloading.rs:423:20:423:23 | self | TRef | overloading.rs:405:5:405:19 | S | | overloading.rs:423:20:423:23 | self | TRef.T | {EXTERNAL LOCATION} | i32 | @@ -13515,9 +12323,8 @@ inferType | overloading.rs:473:14:473:18 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:473:14:473:18 | SelfParam | TRef | overloading.rs:464:5:464:19 | S | | overloading.rs:473:14:473:18 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | -| overloading.rs:473:28:475:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| overloading.rs:473:28:475:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | overloading.rs:474:13:474:13 | 0 | | {EXTERNAL LOCATION} | i32 | -| overloading.rs:474:13:474:13 | 0 | | {EXTERNAL LOCATION} | i64 | | overloading.rs:481:14:481:18 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:481:14:481:18 | SelfParam | TRef | overloading.rs:464:5:464:19 | S | | overloading.rs:481:14:481:18 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | @@ -13530,17 +12337,15 @@ inferType | overloading.rs:489:14:489:18 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | | overloading.rs:489:21:489:21 | x | | overloading.rs:464:5:464:19 | S | | overloading.rs:489:21:489:21 | x | T | {EXTERNAL LOCATION} | i64 | -| overloading.rs:489:48:491:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| overloading.rs:489:48:491:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | overloading.rs:490:13:490:13 | 0 | | {EXTERNAL LOCATION} | i32 | -| overloading.rs:490:13:490:13 | 0 | | {EXTERNAL LOCATION} | i64 | | overloading.rs:497:14:497:18 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:497:14:497:18 | SelfParam | TRef | overloading.rs:464:5:464:19 | S | | overloading.rs:497:14:497:18 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | | overloading.rs:497:21:497:21 | x | | overloading.rs:464:5:464:19 | S | | overloading.rs:497:21:497:21 | x | T | {EXTERNAL LOCATION} | bool | -| overloading.rs:497:49:499:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| overloading.rs:497:49:499:9 | { ... } | | {EXTERNAL LOCATION} | i32 | | overloading.rs:498:13:498:13 | 0 | | {EXTERNAL LOCATION} | i32 | -| overloading.rs:498:13:498:13 | 0 | | {EXTERNAL LOCATION} | i64 | | overloading.rs:502:36:502:36 | x | | overloading.rs:502:19:502:33 | T2 | | overloading.rs:502:49:504:5 | { ... } | | overloading.rs:502:15:502:16 | T1 | | overloading.rs:503:9:503:9 | x | | overloading.rs:502:19:502:33 | T2 | @@ -14881,6 +13686,7 @@ inferType | pattern_matching.rs:560:22:560:70 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:560:22:560:70 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:565:24:601:1 | { ... } | | {EXTERNAL LOCATION} | () | +| pattern_matching.rs:566:5:567:29 | const CONSTANT | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:567:27:567:28 | 42 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:568:9:568:13 | value | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:568:17:568:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | @@ -15831,3 +14637,23 @@ inferType | regressions.rs:179:24:179:27 | S(...) | T | {EXTERNAL LOCATION} | i32 | | regressions.rs:179:26:179:26 | 1 | | {EXTERNAL LOCATION} | i32 | testFailures +| closure.rs:67:33:67:73 | //... | Missing result: certainType=_r2:i64 | +| closure.rs:104:33:104:73 | //... | Missing result: certainType=_r2:i64 | +| closure.rs:141:33:141:73 | //... | Missing result: certainType=_r2:i64 | +| main.rs:1071:40:1071:83 | //... | Missing result: certainType=x1@MyOption:S | +| main.rs:2402:41:2402:95 | //... | Missing result: certainType=x2@Option.S1:S2 | +| main.rs:2403:35:2403:89 | //... | Missing result: certainType=x3@Option.S1:S2 | +| main.rs:2404:51:2404:107 | //... | Missing result: certainType=x4@S1:S2 | +| main.rs:2405:45:2405:101 | //... | Missing result: certainType=x5@S1:S2 | +| main.rs:2420:51:2420:100 | //... | Missing result: certainType=x14:i32 | +| main.rs:2421:40:2421:83 | //... | Missing result: certainType=x15@S1:S2 | +| main.rs:2437:33:2437:72 | //... | Missing result: certainType=a:(T_2) | +| main.rs:2438:37:2438:76 | //... | Missing result: certainType=b:(T_2) | +| main.rs:2536:34:2536:71 | //... | Missing result: certainType=path1:Path | +| main.rs:2540:40:2540:83 | //... | Missing result: certainType=pathbuf1:PathBuf | +| main.rs:2740:20:2740:61 | //... | Missing result: target=usizef | +| pattern_matching.rs:782:43:782:139 | //... | Missing result: certainType=extracted@(T_2):i32 | +| pattern_matching.rs:782:43:782:139 | //... | Missing result: certainType=extracted@(T_2):i32 | +| pattern_matching.rs:785:37:785:80 | //... | Missing result: certainType=red:u8 | +| pattern_matching.rs:788:49:788:158 | //... | Missing result: certainType=tuple_extracted@(T_2):i32 | +| pattern_matching.rs:788:49:788:158 | //... | Missing result: certainType=tuple_extracted@(T_2):bool | diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index 0b5dc0787fe2..a287808d4708 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -2022,11 +2022,10 @@ module Make1 Input1> { */ signature module InputSig3 { /** - * A predicate used to reference cached predicates that should be included to the - * cached stage of type inference. Such predicates should themselves reference - * `CachedStage::ref`. + * Reverse references to the cached predicates that reference + * `CachedStage::ref()`. */ - default predicate cachedStageRevRef() { none() } + default predicate cacheRevRef() { none() } /** * Point this predicate to the `inferType` predicate from the output of this module. @@ -2122,8 +2121,11 @@ module Make1 Input1> { Expr getExpr(); } - /** A variable, for example a local variable or a field. */ - class Variable { + /** + * A local variable, or an entity that behaves like a local variable with + * respect to type inference, for example a `const` or `static` in Rust. + */ + class LocalVariable { /** Gets the AST node that defines this variable. */ AstNode getDefiningNode(); @@ -2356,7 +2358,7 @@ module Make1 Input1> { path1.isEmpty() and path2.isEmpty() and ( - exists(Variable v | n1 = v.getAnAccess() and n2 = v.getDefiningNode()) + exists(LocalVariable v | n1 = v.getAnAccess() and n2 = v.getDefiningNode()) or exists(LetDeclaration let | not let.isCoercionSite() and @@ -2689,21 +2691,27 @@ module Make1 Input1> { Type inferType(AstNode n) { result = inferType(n, TypePath::nil()) } // todo: consistency checks - /** The cached stage of type inference. */ + /** + * The cached stage of this module. + * + * Should not be exposed. + */ cached module CachedStage { - /** Reference to the cached stage of type inference. */ + /** Reference to the cached stage of this module. */ cached predicate ref() { any() } /** Reverse references to the predicates that reference `ref()`. */ cached predicate revRef() { + any() + or + cacheRevRef() + or (exists(inferTypeCertain(_, _)) implies any()) or (exists(inferType(_, _)) implies any()) - or - cachedStageRevRef() } } } From 7f35a137646a4a8e43f042241b3b1856ce4c66f7 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 4 Jun 2026 15:15:02 +0200 Subject: [PATCH 3/3] wip2 --- .../internal/typeinference/TypeInference.qll | 27 +++----------- .../type-inference/dereference.rs | 2 +- .../test/library-tests/type-inference/main.rs | 4 +-- .../type-inference/type-inference.expected | 25 +++++++------ .../typeinference/internal/TypeInference.qll | 36 ------------------- 5 files changed, 22 insertions(+), 72 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll index dc898c4f3196..da1ee042b899 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll @@ -432,17 +432,6 @@ private module Input3 implements InputSig3 { } class Call extends FunctionCallMatchingInput::Access { - /** Gets the target of this call. */ - Callable getTargetCertain() { - none() and - exists(ImplOrTraitItemNodeOption i, FunctionDeclaration f, Path p | - result.isFunction(i, f) and - p = CallExprImpl::getFunctionPath(this) and - f = resolvePath(p) and - f.isDirectlyFor(i) - ) - } - Callable getTarget(string derefChainBorrow) { result = super.getTarget(derefChainBorrow) } } @@ -880,17 +869,6 @@ private Type getCallExprTypeArgument(CallExpr ce, TypeArgumentPosition apos, Typ ) } -pragma[nomagic] -private Type inferFunctionBodyType(AstNode n, TypePath path) { - exists(Function f | - n = f.getFunctionBody() and - result = getReturnTypeMention(f).getTypeAt(path) and - not exists(ImplTraitReturnType i | i.getFunction() = f | - result = i or result = i.getATypeParameter() - ) - ) -} - /** * Holds if `me` is a call to the `panic!` macro. * @@ -3480,7 +3458,10 @@ private DynTraitTypeParameter getDynFutureOutputTypeParameter() { pragma[nomagic] predicate isUnitBlockExpr(BlockExpr be) { not be.getStmtList().hasTailExpr() and - // not be = any(Callable c).getBody() and + not exists(Callable c | + be = c.getBody() and + c = any(ReturnExpr re).getEnclosingCallable() + ) and not be.hasLabel() } diff --git a/rust/ql/test/library-tests/type-inference/dereference.rs b/rust/ql/test/library-tests/type-inference/dereference.rs index 99886987d995..71a0a15b6b8f 100644 --- a/rust/ql/test/library-tests/type-inference/dereference.rs +++ b/rust/ql/test/library-tests/type-inference/dereference.rs @@ -141,7 +141,7 @@ mod implicit_deref_coercion_cycle { #[rustfmt::skip] pub fn test() { - let mut key_to_key = HashMap::<&Key, &Key>::new(); // $ target=new + let mut key_to_key = HashMap::<_, &Key>::new(); // $ target=new let mut key = &Key {}; // Initialize key2 to a reference if let Some(ref_key) = key_to_key.get(key) { // $ target=get // Below `ref_key` is implicitly dereferenced from `&&Key` to `&Key` diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index ddba6c53da86..9eab75ee74e7 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -1953,7 +1953,7 @@ mod impl_trait { impl MyTrait for S3 { fn get_a(&self) -> T { let S3(t) = self; - t.clone() + t.clone() // $ MISSING: target=clone type=t:T } } @@ -2737,7 +2737,7 @@ mod literal_overlap { pub fn f() -> usize { let mut x = 0; - x = x.f(); // $ target=usizef $ SPURIOUS: target=i32f + x = x.f(); // $ MISSING: target=usizef $ SPURIOUS: target=i32f x } 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 b620e05ef4a6..92656e7457c9 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -3063,7 +3063,6 @@ inferCertainType | main.rs:2618:18:2618:26 | "b: {:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:2618:18:2618:26 | "b: {:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2618:18:2618:29 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2622:20:2624:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2627:11:2627:14 | cond | | {EXTERNAL LOCATION} | bool | | main.rs:2628:13:2628:13 | a | | {EXTERNAL LOCATION} | () | | main.rs:2628:17:2632:9 | { ... } | | {EXTERNAL LOCATION} | () | @@ -6049,15 +6048,19 @@ inferType | dereference.rs:144:17:144:26 | key_to_key | | {EXTERNAL LOCATION} | HashMap | | dereference.rs:144:17:144:26 | key_to_key | K | {EXTERNAL LOCATION} | & | | dereference.rs:144:17:144:26 | key_to_key | K.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:144:17:144:26 | key_to_key | K.TRef | {EXTERNAL LOCATION} | & | +| dereference.rs:144:17:144:26 | key_to_key | K.TRef.TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:144:17:144:26 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | | dereference.rs:144:17:144:26 | key_to_key | V | {EXTERNAL LOCATION} | & | | dereference.rs:144:17:144:26 | key_to_key | V.TRef | dereference.rs:122:5:123:21 | Key | -| dereference.rs:144:30:144:57 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:144:30:144:57 | ...::new(...) | K | {EXTERNAL LOCATION} | & | -| dereference.rs:144:30:144:57 | ...::new(...) | K.TRef | dereference.rs:122:5:123:21 | Key | -| dereference.rs:144:30:144:57 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | -| dereference.rs:144:30:144:57 | ...::new(...) | V | {EXTERNAL LOCATION} | & | -| dereference.rs:144:30:144:57 | ...::new(...) | V.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:144:30:144:54 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:144:30:144:54 | ...::new(...) | K | {EXTERNAL LOCATION} | & | +| dereference.rs:144:30:144:54 | ...::new(...) | K.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:144:30:144:54 | ...::new(...) | K.TRef | {EXTERNAL LOCATION} | & | +| dereference.rs:144:30:144:54 | ...::new(...) | K.TRef.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:144:30:144:54 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | +| dereference.rs:144:30:144:54 | ...::new(...) | V | {EXTERNAL LOCATION} | & | +| dereference.rs:144:30:144:54 | ...::new(...) | V.TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:145:17:145:19 | key | | {EXTERNAL LOCATION} | & | | dereference.rs:145:17:145:19 | key | TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:145:17:145:19 | key | TRef | {EXTERNAL LOCATION} | & | @@ -6080,6 +6083,8 @@ inferType | dereference.rs:146:32:146:41 | key_to_key | | {EXTERNAL LOCATION} | HashMap | | dereference.rs:146:32:146:41 | key_to_key | K | {EXTERNAL LOCATION} | & | | dereference.rs:146:32:146:41 | key_to_key | K.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:146:32:146:41 | key_to_key | K.TRef | {EXTERNAL LOCATION} | & | +| dereference.rs:146:32:146:41 | key_to_key | K.TRef.TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:146:32:146:41 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | | dereference.rs:146:32:146:41 | key_to_key | V | {EXTERNAL LOCATION} | & | | dereference.rs:146:32:146:41 | key_to_key | V.TRef | dereference.rs:122:5:123:21 | Key | @@ -6105,6 +6110,8 @@ inferType | dereference.rs:150:9:150:18 | key_to_key | | {EXTERNAL LOCATION} | HashMap | | dereference.rs:150:9:150:18 | key_to_key | K | {EXTERNAL LOCATION} | & | | dereference.rs:150:9:150:18 | key_to_key | K.TRef | dereference.rs:122:5:123:21 | Key | +| dereference.rs:150:9:150:18 | key_to_key | K.TRef | {EXTERNAL LOCATION} | & | +| dereference.rs:150:9:150:18 | key_to_key | K.TRef.TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:150:9:150:18 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | | dereference.rs:150:9:150:18 | key_to_key | V | {EXTERNAL LOCATION} | & | | dereference.rs:150:9:150:18 | key_to_key | V.TRef | dereference.rs:122:5:123:21 | Key | @@ -11492,9 +11499,8 @@ inferType | main.rs:2618:18:2618:29 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2618:18:2618:29 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2619:9:2619:9 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2622:20:2624:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2622:20:2624:5 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:2623:16:2623:16 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2623:16:2623:16 | 0 | | {EXTERNAL LOCATION} | () | | main.rs:2627:11:2627:14 | cond | | {EXTERNAL LOCATION} | bool | | main.rs:2627:30:2635:5 | { ... } | | {EXTERNAL LOCATION} | i32 | | main.rs:2628:13:2628:13 | a | | {EXTERNAL LOCATION} | () | @@ -14651,7 +14657,6 @@ testFailures | main.rs:2438:37:2438:76 | //... | Missing result: certainType=b:(T_2) | | main.rs:2536:34:2536:71 | //... | Missing result: certainType=path1:Path | | main.rs:2540:40:2540:83 | //... | Missing result: certainType=pathbuf1:PathBuf | -| main.rs:2740:20:2740:61 | //... | Missing result: target=usizef | | pattern_matching.rs:782:43:782:139 | //... | Missing result: certainType=extracted@(T_2):i32 | | pattern_matching.rs:782:43:782:139 | //... | Missing result: certainType=extracted@(T_2):i32 | | pattern_matching.rs:785:37:785:80 | //... | Missing result: certainType=red:u8 | diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index a287808d4708..59a9b370fa80 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -2214,11 +2214,6 @@ module Make1 Input1> { /** Gets the AST node corresponding to the position `pos` of this call. */ AstNode getNodeAt(TypePosition pos); - /** - * Gets the target of this call, to be used when inferring certain types. - */ - Callable getTargetCertain(); - /** Gets the target of this call in the given context. */ Callable getTarget(CallResolutionContext ctx); } @@ -2398,35 +2393,6 @@ module Make1 Input1> { path.isEmpty() } - pragma[nomagic] - private Type getCertainCallExprReturnType(Call call, TypePath path) { - exists(TypePosition ret | - ret.isReturn() and - forex(Callable target | target = call.getTargetCertain() | - result = target.getDeclaredType(ret, path) - ) - ) - } - - pragma[nomagic] - private Type inferCertainCallExprReturnType(Call call, TypePath path) { - exists(Type ty, TypePath prefix | ty = getCertainCallExprReturnType(call, prefix) | - exists( - Callable target, TypePath suffix, TypeParameterPosition tppos, - TypeArgumentPosition tapos - | - ty = target.getTypeParameter(tppos) and - path = prefix.append(suffix) and - result = call.getTypeArgument(tapos, suffix) and - typeArgumentParameterPositionMatch(tapos, tppos) - ) - or - not ty instanceof TypeParameter and - result = ty and - path = prefix - ) - } - /** Gets the inferred certain type of `n` at `path`. */ cached Type inferTypeCertain(AstNode n, TypePath path) { @@ -2439,8 +2405,6 @@ module Make1 Input1> { or result = inferLogicalOperationType(n, path) or - result = inferCertainCallExprReturnType(n, path) - or infersCertainTypeAt(n, path, result.getATypeParameter()) }