From f3fa0e715fd31600845787ac0bfc8a306232d7bd Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Mon, 28 Apr 2025 13:28:33 +0200 Subject: [PATCH 1/6] Rust: Add type inference test for non-universal impl blocks --- .../test/library-tests/type-inference/main.rs | 213 ++++++++++++++++-- 1 file changed, 191 insertions(+), 22 deletions(-) diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index 1972b181c83c..dc1a8dbecb6d 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -130,7 +130,7 @@ mod method_non_parametric_impl { println!("{:?}", y.a); // $ fieldof=MyThing println!("{:?}", x.m1()); // $ MISSING: method=MyThing::m1 - println!("{:?}", y.m1().a); // $ MISSING: method=MyThing::m1, field=MyThing + println!("{:?}", y.m1().a); // $ MISSING: method=MyThing::m1 fieldof=MyThing let x = MyThing { a: S1 }; let y = MyThing { a: S2 }; @@ -141,15 +141,23 @@ mod method_non_parametric_impl { } mod method_non_parametric_trait_impl { - #[derive(Debug)] + #[derive(Debug, Clone, Copy)] struct MyThing { a: A, } - #[derive(Debug)] + #[derive(Debug, Clone, Copy)] + struct MyPair { + p1: P1, + p2: P2, + } + + #[derive(Debug, Clone, Copy)] struct S1; - #[derive(Debug)] + #[derive(Debug, Clone, Copy)] struct S2; + #[derive(Debug, Clone, Copy, Default)] + struct S3; trait MyTrait { fn m1(self) -> A; @@ -162,6 +170,13 @@ mod method_non_parametric_trait_impl { } } + trait MyProduct { + // MyProduct::fst + fn fst(self) -> A; + // MyProduct::snd + fn snd(self) -> B; + } + fn call_trait_m1>(x: T2) -> T1 { x.m1() // $ method=m1 } @@ -180,18 +195,170 @@ mod method_non_parametric_trait_impl { } } + // Implementation where the type parameter `TD` only occurs in the + // implemented trait and not the implementing type. + impl MyTrait for MyThing + where + TD: Default, + { + // MyThing::m1 + fn m1(self) -> TD { + TD::default() + } + } + + impl MyTrait for MyPair { + // MyTrait::m1 + fn m1(self) -> I { + self.p1 // $ fieldof=MyPair + } + } + + impl MyTrait for MyPair { + // MyTrait::m1 + fn m1(self) -> S3 { + S3 + } + } + + impl MyTrait for MyPair, S3> { + // MyTrait::m1 + fn m1(self) -> TT { + let alpha = self.p1; // $ fieldof=MyPair + alpha.a // $ fieldof=MyThing + } + } + + // This implementation only applies if the two type parameters are equal. + impl MyProduct for MyPair { + // MyPair::fst + fn fst(self) -> A { + self.p1 // $ fieldof=MyPair + } + + // MyPair::snd + fn snd(self) -> A { + self.p2 // $ fieldof=MyPair + } + } + + // This implementation swaps the type parameters. + impl MyProduct for MyPair { + // MyPair::fst + fn fst(self) -> S1 { + self.p2 // $ fieldof=MyPair + } + + // MyPair::snd + fn snd(self) -> S2 { + self.p1 // $ fieldof=MyPair + } + } + + fn get_fst>(p: P) -> V1 { + p.fst() // $ method=MyProduct::fst + } + + fn get_snd>(p: P) -> V2 { + p.snd() // $ method=MyProduct::snd + } + + fn get_snd_fst>(p: MyPair) -> V1 { + p.p2.fst() // $ fieldof=MyPair method=MyProduct::fst + } + + trait ConvertTo { + // ConvertTo::convert_to + fn convert_to(self) -> T; + } + + impl> ConvertTo for T { + // T::convert_to + fn convert_to(self) -> S1 { + self.m1() // $ method=m1 + } + } + + fn convert_to>(thing: T) -> TS { + thing.convert_to() // $ method=ConvertTo::convert_to + } + + fn type_bound_type_parameter_impl>(thing: TP) -> S1 { + // The trait bound on `TP` makes the implementation of `ConvertTo` valid + thing.convert_to() // $ MISSING: method=T::convert_to + } + pub fn f() { - let x = MyThing { a: S1 }; - let y = MyThing { a: S2 }; + let thing_s1 = MyThing { a: S1 }; + let thing_s2 = MyThing { a: S2 }; + let thing_s3 = MyThing { a: S3 }; - println!("{:?}", x.m1()); // $ MISSING: method=MyThing::m1 - println!("{:?}", y.m1().a); // $ MISSING: method=MyThing::m1, field=MyThing + // Tests for method resolution - let x = MyThing { a: S1 }; - let y = MyThing { a: S2 }; + println!("{:?}", thing_s1.m1()); // $ MISSING: method=MyThing::m1 + println!("{:?}", thing_s2.m1().a); // $ MISSING: method=MyThing::m1 fieldof=MyThing + let s3: S3 = thing_s3.m1(); // $ MISSING: method=MyThing::m1 + println!("{:?}", s3); + + let p1 = MyPair { p1: S1, p2: S1 }; + println!("{:?}", p1.m1()); // $ MISSING: method=MyTrait::m1 - println!("{:?}", call_trait_m1(x)); // MISSING: type=call_trait_m1(...):S1 - println!("{:?}", call_trait_m1(y).a); // MISSING: field=MyThing + let p2 = MyPair { p1: S1, p2: S2 }; + println!("{:?}", p2.m1()); // $ MISSING: method=MyTrait::m1 + + let p3 = MyPair { + p1: MyThing { a: S1 }, + p2: S3, + }; + println!("{:?}", p3.m1()); // $ MISSING: method=MyTrait::m1 + + // These calls go to the first implementation of `MyProduct` for `MyPair` + let a = MyPair { p1: S1, p2: S1 }; + let x = a.fst(); // $ method=MyPair::fst + println!("{:?}", x); + let y = a.snd(); // $ method=MyPair::snd + println!("{:?}", y); + + // These calls go to the last implementation of `MyProduct` for + // `MyPair`. The first implementation does not apply as the type + // parameters of the implementation enforce that the two generics must + // be equal. + let b = MyPair { p1: S2, p2: S1 }; + let x = b.fst(); // $ MISSING: method=MyPair::fst SPURIOUS: method=MyPair::fst + println!("{:?}", x); + let y = b.snd(); // $ MISSING: method=MyPair::snd SPURIOUS: method=MyPair::snd + println!("{:?}", y); + + // Tests for inference of type parameters based on trait implementations. + + let x = call_trait_m1(thing_s1); // $ MISSING: type=x:S1 + println!("{:?}", x); + let y = call_trait_m1(thing_s2); // $ MISSING: type=y:MyThing type=y.A:S2 + println!("{:?}", y.a); // $ MISSING: fieldof=MyThing + + // First implementation + let a = MyPair { p1: S1, p2: S1 }; + let x = get_fst(a); // $ type=x:S1 + println!("{:?}", x); + let y = get_snd(a); // $ type=y:S1 + println!("{:?}", y); + + // Second implementation + let b = MyPair { p1: S2, p2: S1 }; + let x = get_fst(b); // $ type=x:S1 SPURIOUS: type=x:S2 + println!("{:?}", x); + let y = get_snd(b); // $ type=y:S2 SPURIOUS: type=y:S1 + println!("{:?}", y); + + let c = MyPair { + p1: S3, + p2: MyPair { p1: S2, p2: S1 }, + }; + let x = get_snd_fst(c); // $ type=x:S1 SPURIOUS: type=x:S2 + + let thing = MyThing { a: S1 }; + let i = thing.convert_to(); // $ MISSING: type=i:S1 MISSING: method=T::convert_to + let j = convert_to(thing); // $ MISSING: type=j:S1 } } @@ -219,13 +386,13 @@ mod type_parameter_bounds { fn call_first_trait_per_bound>(x: T) { // The type parameter bound determines which method this call is resolved to. let s1 = x.method(); // $ method=SecondTrait::method - println!("{:?}", s1); + println!("{:?}", s1); // $ type=s1:I } fn call_second_trait_per_bound>(x: T) { // The type parameter bound determines which method this call is resolved to. let s2 = x.method(); // $ method=SecondTrait::method - println!("{:?}", s2); + println!("{:?}", s2); // $ type=s2:I } fn trait_bound_with_type>(x: T) { @@ -235,7 +402,7 @@ mod type_parameter_bounds { fn trait_per_bound_with_type>(x: T) { let s = x.method(); // $ method=FirstTrait::method - println!("{:?}", s); + println!("{:?}", s); // $ type=s:S1 } trait Pair { @@ -323,8 +490,10 @@ mod function_trait_bounds { a: MyThing { a: S2 }, }; - println!("{:?}", call_trait_thing_m1(x3)); - println!("{:?}", call_trait_thing_m1(y3)); + let a = call_trait_thing_m1(x3); // $ type=a:S1 + println!("{:?}", a); + let b = call_trait_thing_m1(y3); // $ type=b:S2 + println!("{:?}", b); } } @@ -584,14 +753,14 @@ mod method_supertraits { let x = MyThing { a: S1 }; let y = MyThing { a: S2 }; - println!("{:?}", x.m2()); // $ method=m2 - println!("{:?}", y.m2()); // $ method=m2 + println!("{:?}", x.m2()); // $ method=m2 type=x.m2():S1 + println!("{:?}", y.m2()); // $ method=m2 type=y.m2():S2 let x = MyThing2 { a: S1 }; let y = MyThing2 { a: S2 }; - println!("{:?}", x.m3()); // $ method=m3 - println!("{:?}", y.m3()); // $ method=m3 + println!("{:?}", x.m3()); // $ method=m3 type=x.m3():S1 + println!("{:?}", y.m3()); // $ method=m3 type=y.m3():S2 } } @@ -767,7 +936,7 @@ mod option_methods { println!("{:?}", x4); let x5 = MyOption::MySome(MyOption::::MyNone()); - println!("{:?}", x5.flatten()); // MISSING: method=flatten + println!("{:?}", x5.flatten()); // $ MISSING: method=flatten let x6 = MyOption::MySome(MyOption::::MyNone()); println!("{:?}", MyOption::>::flatten(x6)); From 02115f676aba0179e1520e54382b648495a2c381 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Mon, 28 Apr 2025 15:14:33 +0200 Subject: [PATCH 2/6] Rust: Implement type inference support for non-universal impl blocks --- .../codeql/rust/internal/PathResolution.qll | 55 - rust/ql/lib/codeql/rust/internal/Type.qll | 112 +- .../codeql/rust/internal/TypeInference.qll | 138 +- .../lib/codeql/rust/internal/TypeMention.qll | 16 + .../test/library-tests/type-inference/main.rs | 38 +- .../type-inference/type-inference.expected | 2020 ++++++++++------- .../typeinference/internal/TypeInference.qll | 481 +++- 7 files changed, 1779 insertions(+), 1081 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index a6cc51a21c54..3c80728a326b 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -413,61 +413,6 @@ class ImplItemNode extends ImplOrTraitItemNode instanceof Impl { TraitItemNode resolveTraitTy() { result = resolvePath(this.getTraitPath()) } - pragma[nomagic] - private TypeRepr getASelfTyArg() { - result = - this.getSelfPath().getSegment().getGenericArgList().getAGenericArg().(TypeArg).getTypeRepr() - } - - /** - * Holds if this `impl` block is not fully parametric. That is, the implementing - * type is generic and the implementation is not parametrically polymorphic in all - * the implementing type's arguments. - * - * Examples: - * - * ```rust - * impl Foo { ... } // fully parametric - * - * impl Foo { ... } // fully parametric - * - * impl Foo { ... } // not fully parametric - * - * impl Foo> { ... } // not fully parametric - * - * impl Foo { ... } // not fully parametric - * - * impl Foo where T: Trait { ... } // not fully parametric - * ``` - */ - pragma[nomagic] - predicate isNotFullyParametric() { - exists(TypeRepr arg | arg = this.getASelfTyArg() | - not exists(resolveTypeParamPathTypeRepr(arg)) - or - resolveTypeParamPathTypeRepr(arg).hasTraitBound() - ) - } - - /** - * Holds if this `impl` block is fully parametric. Examples: - * - * ```rust - * impl Foo { ... } // fully parametric - * - * impl Foo { ... } // fully parametric - * - * impl Foo { ... } // not fully parametric - * - * impl Foo> { ... } // not fully parametric - * - * impl Foo { ... } // not fully parametric - * - * impl Foo where T: Trait { ... } // not fully parametric - * ``` - */ - predicate isFullyParametric() { not this.isNotFullyParametric() } - override AssocItemNode getAnAssocItem() { result = super.getAssocItemList().getAnAssocItem() } override string getName() { result = "(impl)" } diff --git a/rust/ql/lib/codeql/rust/internal/Type.qll b/rust/ql/lib/codeql/rust/internal/Type.qll index 9e063d215161..b50d0424a3de 100644 --- a/rust/ql/lib/codeql/rust/internal/Type.qll +++ b/rust/ql/lib/codeql/rust/internal/Type.qll @@ -27,10 +27,6 @@ newtype TType = * types, such as traits and implementation blocks. */ abstract class Type extends TType { - /** Gets the method `name` belonging to this type, if any. */ - pragma[nomagic] - abstract Function getMethod(string name); - /** Gets the struct field `name` belonging to this type, if any. */ pragma[nomagic] abstract StructField getStructField(string name); @@ -45,25 +41,6 @@ abstract class Type extends TType { /** Gets a type parameter of this type. */ final TypeParameter getATypeParameter() { result = this.getTypeParameter(_) } - /** - * Gets an AST node that mentions a base type of this type, if any. - * - * Although Rust doesn't have traditional OOP-style inheritance, we model trait - * bounds and `impl` blocks as base types. Example: - * - * ```rust - * trait T1 {} - * - * trait T2 {} - * - * trait T3 : T1, T2 {} - * // ^^ `this` - * // ^^ `result` - * // ^^ `result` - * ``` - */ - abstract TypeMention getABaseTypeMention(); - /** Gets a textual representation of this type. */ abstract string toString(); @@ -73,21 +50,6 @@ abstract class Type extends TType { abstract private class StructOrEnumType extends Type { abstract ItemNode asItemNode(); - - final override Function getMethod(string name) { - result = this.asItemNode().getASuccessor(name) and - exists(ImplOrTraitItemNode impl | result = impl.getAnAssocItem() | - impl instanceof Trait - or - impl.(ImplItemNode).isFullyParametric() - ) - } - - /** Gets all of the fully parametric `impl` blocks that target this type. */ - final override ImplMention getABaseTypeMention() { - this.asItemNode() = result.resolveSelfTy() and - result.isFullyParametric() - } } /** A struct type. */ @@ -138,8 +100,6 @@ class TraitType extends Type, TTrait { TraitType() { this = TTrait(trait) } - override Function getMethod(string name) { result = trait.(ItemNode).getASuccessor(name) } - override StructField getStructField(string name) { none() } override TupleField getTupleField(int i) { none() } @@ -151,14 +111,6 @@ class TraitType extends Type, TTrait { any(AssociatedTypeTypeParameter param | param.getTrait() = trait and param.getIndex() = i) } - pragma[nomagic] - private TypeReprMention getABoundMention() { - result = trait.getTypeBoundList().getABound().getTypeRepr() - } - - /** Gets any of the trait bounds of this trait. */ - override TypeMention getABaseTypeMention() { result = this.getABoundMention() } - override string toString() { result = trait.toString() } override Location getLocation() { result = trait.getLocation() } @@ -220,8 +172,6 @@ class ImplType extends Type, TImpl { ImplType() { this = TImpl(impl) } - override Function getMethod(string name) { result = impl.(ItemNode).getASuccessor(name) } - override StructField getStructField(string name) { none() } override TupleField getTupleField(int i) { none() } @@ -230,9 +180,6 @@ class ImplType extends Type, TImpl { result = TTypeParamTypeParameter(impl.getGenericParamList().getTypeParam(i)) } - /** Get the trait implemented by this `impl` block, if any. */ - override TypeMention getABaseTypeMention() { result = impl.getTrait() } - override string toString() { result = impl.toString() } override Location getLocation() { result = impl.getLocation() } @@ -247,8 +194,6 @@ class ImplType extends Type, TImpl { class ArrayType extends Type, TArrayType { ArrayType() { this = TArrayType() } - override Function getMethod(string name) { none() } - override StructField getStructField(string name) { none() } override TupleField getTupleField(int i) { none() } @@ -257,8 +202,6 @@ class ArrayType extends Type, TArrayType { none() // todo } - override TypeMention getABaseTypeMention() { none() } - override string toString() { result = "[]" } override Location getLocation() { result instanceof EmptyLocation } @@ -273,8 +216,6 @@ class ArrayType extends Type, TArrayType { class RefType extends Type, TRefType { RefType() { this = TRefType() } - override Function getMethod(string name) { none() } - override StructField getStructField(string name) { none() } override TupleField getTupleField(int i) { none() } @@ -284,8 +225,6 @@ class RefType extends Type, TRefType { i = 0 } - override TypeMention getABaseTypeMention() { none() } - override string toString() { result = "&" } override Location getLocation() { result instanceof EmptyLocation } @@ -293,8 +232,6 @@ class RefType extends Type, TRefType { /** A type parameter. */ abstract class TypeParameter extends Type { - override TypeMention getABaseTypeMention() { none() } - override StructField getStructField(string name) { none() } override TupleField getTupleField(int i) { none() } @@ -318,19 +255,9 @@ class TypeParamTypeParameter extends TypeParameter, TTypeParamTypeParameter { TypeParam getTypeParam() { result = typeParam } - override Function getMethod(string name) { - // NOTE: If the type parameter has trait bounds, then this finds methods - // on the bounding traits. - result = typeParam.(ItemNode).getASuccessor(name) - } - override string toString() { result = typeParam.toString() } override Location getLocation() { result = typeParam.getLocation() } - - final override TypeMention getABaseTypeMention() { - result = typeParam.getTypeBoundList().getABound().getTypeRepr() - } } /** @@ -377,19 +304,13 @@ class AssociatedTypeTypeParameter extends TypeParameter, TAssociatedTypeTypePara int getIndex() { traitAliasIndex(_, result, typeAlias) } - override Function getMethod(string name) { none() } - override string toString() { result = typeAlias.getName().getText() } override Location getLocation() { result = typeAlias.getLocation() } - - override TypeMention getABaseTypeMention() { none() } } /** An implicit reference type parameter. */ class RefTypeParameter extends TypeParameter, TRefTypeParameter { - override Function getMethod(string name) { none() } - override string toString() { result = "&T" } override Location getLocation() { result instanceof EmptyLocation } @@ -409,15 +330,34 @@ class SelfTypeParameter extends TypeParameter, TSelfTypeParameter { Trait getTrait() { result = trait } - override TypeMention getABaseTypeMention() { result = trait } + override string toString() { result = "Self [" + trait.toString() + "]" } + + override Location getLocation() { result = trait.getLocation() } +} + +/** A type abstraction. */ +abstract class TypeAbstraction extends AstNode { + abstract TypeParameter getATypeParameter(); +} - override Function getMethod(string name) { - // The `Self` type parameter is an implementation of the trait, so it has - // all the trait's methods. - result = trait.(ItemNode).getASuccessor(name) +final class ImplTypeAbstraction extends TypeAbstraction, Impl { + override TypeParamTypeParameter getATypeParameter() { + result.getTypeParam() = this.getGenericParamList().getATypeParam() } +} - override string toString() { result = "Self [" + trait.toString() + "]" } +final class TraitTypeAbstraction extends TypeAbstraction, Trait { + override TypeParamTypeParameter getATypeParameter() { + result.getTypeParam() = this.getGenericParamList().getATypeParam() + } +} - override Location getLocation() { result = trait.getLocation() } +final class TypeBoundTypeAbstraction extends TypeAbstraction, TypeBound { + override TypeParamTypeParameter getATypeParameter() { none() } +} + +final class SelfTypeBoundTypeAbstraction extends TypeAbstraction, Name { + SelfTypeBoundTypeAbstraction() { any(Trait trait).getName() = this } + + override TypeParamTypeParameter getATypeParameter() { none() } } diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index 2fae9ef1f5b8..c346aedcc178 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -18,6 +18,8 @@ private module Input1 implements InputSig1 { class TypeParameter = T::TypeParameter; + class TypeAbstraction = T::TypeAbstraction; + private newtype TTypeArgumentPosition = // method type parameters are matched by position instead of by type // parameter entity, to avoid extra recursion through method call resolution @@ -107,7 +109,45 @@ private module Input2 implements InputSig2 { class TypeMention = TM::TypeMention; - TypeMention getABaseTypeMention(Type t) { result = t.getABaseTypeMention() } + TypeMention getABaseTypeMention(Type t) { none() } + + TypeMention getTypeParameterConstraint(TypeParameter tp) { + result = tp.(TypeParamTypeParameter).getTypeParam().getTypeBoundList().getABound().getTypeRepr() + or + result = tp.(SelfTypeParameter).getTrait() + } + + predicate conditionSatisfiesConstraint( + TypeAbstraction abs, TypeMention condition, TypeMention constraint + ) { + // `impl` blocks implementing traits + exists(Impl impl | + abs = impl and + condition = impl.getSelfTy() and + constraint = impl.getTrait() + ) + or + // supertraits + exists(Trait trait | + abs = trait and + condition = trait and + constraint = trait.getTypeBoundList().getABound().getTypeRepr() + ) + or + // trait bounds on type parameters + exists(TypeParam param | + abs = param.getTypeBoundList().getABound() and + condition = param and + constraint = param.getTypeBoundList().getABound().getTypeRepr() + ) + or + // the implicit `Self` type parameter satisfies the trait + exists(SelfTypeParameterMention self | + abs = self and + condition = self and + constraint = self.getTrait() + ) + } } private module M2 = Make2; @@ -226,7 +266,7 @@ private Type getRefAdjustImplicitSelfType(SelfParam self, TypePath suffix, Type } pragma[nomagic] -private Type inferImplSelfType(Impl i, TypePath path) { +private Type resolveImplSelfType(Impl i, TypePath path) { result = i.getSelfTy().(TypeReprMention).resolveTypeAt(path) } @@ -238,7 +278,7 @@ private Type inferImplicitSelfType(SelfParam self, TypePath path) { self = f.getParamList().getSelfParam() and result = getRefAdjustImplicitSelfType(self, suffix, t, path) | - t = inferImplSelfType(i, suffix) + t = resolveImplSelfType(i, suffix) or t = TSelfTypeParameter(i) and suffix.isEmpty() ) @@ -895,36 +935,94 @@ cached private module Cached { private import codeql.rust.internal.CachedStages - pragma[inline] - private Type getLookupType(AstNode n) { - exists(Type t | - t = inferType(n) and - if t = TRefType() - then - // for reference types, lookup members in the type being referenced - result = inferType(n, TypePath::singleton(TRefTypeParameter())) - else result = t - ) + pragma[nomagic] + private Type receiverRootType(Expr e) { + any(MethodCallExpr mce).getReceiver() = e and + result = inferType(e) } pragma[nomagic] - private Type getMethodCallExprLookupType(MethodCallExpr mce, string name) { - result = getLookupType(mce.getReceiver()) and - name = mce.getIdentifier().getText() + private Type inferReceiverType(Expr e, TypePath path) { + exists(Type root | root = receiverRootType(e) | + // for reference types, lookup members in the type being referenced + if root = TRefType() + then result = inferType(e, TypePath::cons(TRefTypeParameter(), path)) + else result = inferType(e, path) + ) + } + + private class ReceiverExpr extends Expr { + MethodCallExpr mce; + + ReceiverExpr() { mce.getReceiver() = this } + + string getField() { result = mce.getIdentifier().getText() } + + Type resolveTypeAt(TypePath path) { result = inferReceiverType(this, path) } + } + + private module IsInstantiationOfInput implements IsInstantiationOfSig { + predicate potentialInstantiationOf(ReceiverExpr receiver, TypeAbstraction impl, TypeMention sub) { + sub.resolveType() = receiver.resolveTypeAt(TypePath::nil()) and + sub = impl.(ImplTypeAbstraction).getSelfTy().(TypeReprMention) and + exists(impl.(ImplItemNode).getASuccessor(receiver.getField())) + } + } + + bindingset[item, name] + pragma[inline_late] + private Function getMethodSuccessor(ItemNode item, string name) { + result = item.getASuccessor(name) + } + + bindingset[tp, name] + pragma[inline_late] + private Function getTypeParameterMethod(TypeParameter tp, string name) { + result = getMethodSuccessor(tp.(TypeParamTypeParameter).getTypeParam(), name) + or + result = getMethodSuccessor(tp.(SelfTypeParameter).getTrait(), name) } /** - * Gets a method that the method call `mce` resolves to, if any. + * Gets the method from an `impl` block with an implementing type that matches + * the type of `receiver` and with a name of the method call in which + * `receiver` occurs, if any. */ + private Function getMethodFromImpl(ReceiverExpr receiver) { + exists(Impl impl | + IsInstantiationOf::isInstantiationOf(receiver, impl, + impl.(ImplTypeAbstraction).getSelfTy().(TypeReprMention)) and + result = getMethodSuccessor(impl, receiver.getField()) + ) + } + + /** Gets a method that the method call `mce` resolves to, if any. */ cached Function resolveMethodCallExpr(MethodCallExpr mce) { - exists(string name | result = getMethodCallExprLookupType(mce, name).getMethod(name)) + exists(ReceiverExpr receiver | mce.getReceiver() = receiver | + // The method comes from an `impl` block targeting the type of `receiver`. + result = getMethodFromImpl(receiver) + or + // The type of `receiver` is a type parameter and the method comes from a + // trait bound on the type parameter. + result = getTypeParameterMethod(receiver.resolveTypeAt(TypePath::nil()), receiver.getField()) + ) + } + + pragma[inline] + private Type inferRootTypeDeref(AstNode n) { + exists(Type t | + t = inferType(n) and + // for reference types, lookup members in the type being referenced + if t = TRefType() + then result = inferType(n, TypePath::singleton(TRefTypeParameter())) + else result = t + ) } pragma[nomagic] private Type getFieldExprLookupType(FieldExpr fe, string name) { - result = getLookupType(fe.getContainer()) and - name = fe.getIdentifier().getText() + result = inferRootTypeDeref(fe.getContainer()) and name = fe.getIdentifier().getText() } /** diff --git a/rust/ql/lib/codeql/rust/internal/TypeMention.qll b/rust/ql/lib/codeql/rust/internal/TypeMention.qll index df180e8f6cfa..d12cdf8ac3e3 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeMention.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeMention.qll @@ -248,3 +248,19 @@ class TraitMention extends TypeMention, TraitItemNode { override Type resolveType() { result = TTrait(this) } } + +// NOTE: Since the implicit type parameter for the self type parameter never +// appears in the AST, we (somewhat arbitrarily) choose the name of a trait as a +// type mention. This works because there is a one-to-one correspondence between +// a trait and its name. +class SelfTypeParameterMention extends TypeMention, Name { + Trait trait; + + SelfTypeParameterMention() { trait.getName() = this } + + Trait getTrait() { result = trait } + + override Type resolveType() { result = TSelfTypeParameter(trait) } + + override TypeReprMention getTypeArgument(int i) { none() } +} diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index dc1a8dbecb6d..b20acd432c39 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -129,8 +129,8 @@ mod method_non_parametric_impl { println!("{:?}", x.a); // $ fieldof=MyThing println!("{:?}", y.a); // $ fieldof=MyThing - println!("{:?}", x.m1()); // $ MISSING: method=MyThing::m1 - println!("{:?}", y.m1().a); // $ MISSING: method=MyThing::m1 fieldof=MyThing + println!("{:?}", x.m1()); // $ method=MyThing::m1 + println!("{:?}", y.m1().a); // $ method=MyThing::m1 fieldof=MyThing let x = MyThing { a: S1 }; let y = MyThing { a: S2 }; @@ -295,22 +295,22 @@ mod method_non_parametric_trait_impl { // Tests for method resolution - println!("{:?}", thing_s1.m1()); // $ MISSING: method=MyThing::m1 - println!("{:?}", thing_s2.m1().a); // $ MISSING: method=MyThing::m1 fieldof=MyThing - let s3: S3 = thing_s3.m1(); // $ MISSING: method=MyThing::m1 + println!("{:?}", thing_s1.m1()); // $ method=MyThing::m1 + println!("{:?}", thing_s2.m1().a); // $ method=MyThing::m1 fieldof=MyThing + let s3: S3 = thing_s3.m1(); // $ method=MyThing::m1 println!("{:?}", s3); let p1 = MyPair { p1: S1, p2: S1 }; - println!("{:?}", p1.m1()); // $ MISSING: method=MyTrait::m1 + println!("{:?}", p1.m1()); // $ method=MyTrait::m1 let p2 = MyPair { p1: S1, p2: S2 }; - println!("{:?}", p2.m1()); // $ MISSING: method=MyTrait::m1 + println!("{:?}", p2.m1()); // $ method=MyTrait::m1 let p3 = MyPair { p1: MyThing { a: S1 }, p2: S3, }; - println!("{:?}", p3.m1()); // $ MISSING: method=MyTrait::m1 + println!("{:?}", p3.m1()); // $ method=MyTrait::m1 // These calls go to the first implementation of `MyProduct` for `MyPair` let a = MyPair { p1: S1, p2: S1 }; @@ -324,17 +324,17 @@ mod method_non_parametric_trait_impl { // parameters of the implementation enforce that the two generics must // be equal. let b = MyPair { p1: S2, p2: S1 }; - let x = b.fst(); // $ MISSING: method=MyPair::fst SPURIOUS: method=MyPair::fst + let x = b.fst(); // $ method=MyPair::fst println!("{:?}", x); - let y = b.snd(); // $ MISSING: method=MyPair::snd SPURIOUS: method=MyPair::snd + let y = b.snd(); // $ method=MyPair::snd println!("{:?}", y); // Tests for inference of type parameters based on trait implementations. - let x = call_trait_m1(thing_s1); // $ MISSING: type=x:S1 + let x = call_trait_m1(thing_s1); // $ type=x:S1 println!("{:?}", x); - let y = call_trait_m1(thing_s2); // $ MISSING: type=y:MyThing type=y.A:S2 - println!("{:?}", y.a); // $ MISSING: fieldof=MyThing + let y = call_trait_m1(thing_s2); // $ type=y:MyThing type=y:A.S2 + println!("{:?}", y.a); // $ fieldof=MyThing // First implementation let a = MyPair { p1: S1, p2: S1 }; @@ -345,20 +345,20 @@ mod method_non_parametric_trait_impl { // Second implementation let b = MyPair { p1: S2, p2: S1 }; - let x = get_fst(b); // $ type=x:S1 SPURIOUS: type=x:S2 + let x = get_fst(b); // $ type=x:S1 println!("{:?}", x); - let y = get_snd(b); // $ type=y:S2 SPURIOUS: type=y:S1 + let y = get_snd(b); // $ type=y:S2 println!("{:?}", y); let c = MyPair { p1: S3, p2: MyPair { p1: S2, p2: S1 }, }; - let x = get_snd_fst(c); // $ type=x:S1 SPURIOUS: type=x:S2 + let x = get_snd_fst(c); // $ type=x:S1 let thing = MyThing { a: S1 }; - let i = thing.convert_to(); // $ MISSING: type=i:S1 MISSING: method=T::convert_to - let j = convert_to(thing); // $ MISSING: type=j:S1 + let i = thing.convert_to(); // $ MISSING: type=i:S1 method=T::convert_to + let j = convert_to(thing); // $ type=j:S1 } } @@ -936,7 +936,7 @@ mod option_methods { println!("{:?}", x4); let x5 = MyOption::MySome(MyOption::::MyNone()); - println!("{:?}", x5.flatten()); // $ MISSING: method=flatten + println!("{:?}", x5.flatten()); // $ method=flatten let x6 = MyOption::MySome(MyOption::::MyNone()); println!("{:?}", MyOption::>::flatten(x6)); 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 c91b3cef3dc3..ef2538deef90 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -119,8 +119,12 @@ inferType | main.rs:130:26:130:28 | y.a | | main.rs:101:5:102:14 | S2 | | main.rs:132:26:132:26 | x | | main.rs:94:5:97:5 | MyThing | | main.rs:132:26:132:26 | x | A | main.rs:99:5:100:14 | S1 | +| main.rs:132:26:132:31 | x.m1() | | main.rs:99:5:100:14 | S1 | | main.rs:133:26:133:26 | y | | main.rs:94:5:97:5 | MyThing | | main.rs:133:26:133:26 | y | A | main.rs:101:5:102:14 | S2 | +| main.rs:133:26:133:31 | y.m1() | | main.rs:94:5:97:5 | MyThing | +| main.rs:133:26:133:31 | y.m1() | A | main.rs:101:5:102:14 | S2 | +| main.rs:133:26:133:33 | ... .a | | main.rs:101:5:102:14 | S2 | | main.rs:135:13:135:13 | x | | main.rs:94:5:97:5 | MyThing | | main.rs:135:13:135:13 | x | A | main.rs:99:5:100:14 | S1 | | main.rs:135:17:135:33 | MyThing {...} | | main.rs:94:5:97:5 | MyThing | @@ -137,875 +141,1147 @@ inferType | main.rs:139:26:139:26 | y | | main.rs:94:5:97:5 | MyThing | | main.rs:139:26:139:26 | y | A | main.rs:101:5:102:14 | S2 | | main.rs:139:26:139:31 | y.m2() | | main.rs:101:5:102:14 | S2 | -| main.rs:155:15:155:18 | SelfParam | | main.rs:154:5:163:5 | Self [trait MyTrait] | -| main.rs:157:15:157:18 | SelfParam | | main.rs:154:5:163:5 | Self [trait MyTrait] | -| main.rs:160:9:162:9 | { ... } | | main.rs:154:5:163:5 | Self [trait MyTrait] | -| main.rs:161:13:161:16 | self | | main.rs:154:5:163:5 | Self [trait MyTrait] | -| main.rs:165:43:165:43 | x | | main.rs:165:26:165:40 | T2 | -| main.rs:165:56:167:5 | { ... } | | main.rs:165:22:165:23 | T1 | -| main.rs:166:9:166:9 | x | | main.rs:165:26:165:40 | T2 | -| main.rs:166:9:166:14 | x.m1() | | main.rs:165:22:165:23 | T1 | -| main.rs:171:15:171:18 | SelfParam | | main.rs:144:5:147:5 | MyThing | -| main.rs:171:15:171:18 | SelfParam | A | main.rs:149:5:150:14 | S1 | -| main.rs:171:27:173:9 | { ... } | | main.rs:149:5:150:14 | S1 | -| main.rs:172:13:172:16 | self | | main.rs:144:5:147:5 | MyThing | -| main.rs:172:13:172:16 | self | A | main.rs:149:5:150:14 | S1 | -| main.rs:172:13:172:18 | self.a | | main.rs:149:5:150:14 | S1 | -| main.rs:178:15:178:18 | SelfParam | | main.rs:144:5:147:5 | MyThing | -| main.rs:178:15:178:18 | SelfParam | A | main.rs:151:5:152:14 | S2 | -| main.rs:178:29:180:9 | { ... } | | main.rs:144:5:147:5 | MyThing | -| main.rs:178:29:180:9 | { ... } | A | main.rs:151:5:152:14 | S2 | -| main.rs:179:13:179:30 | Self {...} | | main.rs:144:5:147:5 | MyThing | -| main.rs:179:13:179:30 | Self {...} | A | main.rs:151:5:152:14 | S2 | -| main.rs:179:23:179:26 | self | | main.rs:144:5:147:5 | MyThing | -| main.rs:179:23:179:26 | self | A | main.rs:151:5:152:14 | S2 | -| main.rs:179:23:179:28 | self.a | | main.rs:151:5:152:14 | S2 | -| main.rs:184:13:184:13 | x | | main.rs:144:5:147:5 | MyThing | -| main.rs:184:13:184:13 | x | A | main.rs:149:5:150:14 | S1 | -| main.rs:184:17:184:33 | MyThing {...} | | main.rs:144:5:147:5 | MyThing | -| main.rs:184:17:184:33 | MyThing {...} | A | main.rs:149:5:150:14 | S1 | -| main.rs:184:30:184:31 | S1 | | main.rs:149:5:150:14 | S1 | -| main.rs:185:13:185:13 | y | | main.rs:144:5:147:5 | MyThing | -| main.rs:185:13:185:13 | y | A | main.rs:151:5:152:14 | S2 | -| main.rs:185:17:185:33 | MyThing {...} | | main.rs:144:5:147:5 | MyThing | -| main.rs:185:17:185:33 | MyThing {...} | A | main.rs:151:5:152:14 | S2 | -| main.rs:185:30:185:31 | S2 | | main.rs:151:5:152:14 | S2 | -| main.rs:187:26:187:26 | x | | main.rs:144:5:147:5 | MyThing | -| main.rs:187:26:187:26 | x | A | main.rs:149:5:150:14 | S1 | -| main.rs:188:26:188:26 | y | | main.rs:144:5:147:5 | MyThing | -| main.rs:188:26:188:26 | y | A | main.rs:151:5:152:14 | S2 | -| main.rs:190:13:190:13 | x | | main.rs:144:5:147:5 | MyThing | -| main.rs:190:13:190:13 | x | A | main.rs:149:5:150:14 | S1 | -| main.rs:190:17:190:33 | MyThing {...} | | main.rs:144:5:147:5 | MyThing | -| main.rs:190:17:190:33 | MyThing {...} | A | main.rs:149:5:150:14 | S1 | -| main.rs:190:30:190:31 | S1 | | main.rs:149:5:150:14 | S1 | -| main.rs:191:13:191:13 | y | | main.rs:144:5:147:5 | MyThing | -| main.rs:191:13:191:13 | y | A | main.rs:151:5:152:14 | S2 | -| main.rs:191:17:191:33 | MyThing {...} | | main.rs:144:5:147:5 | MyThing | -| main.rs:191:17:191:33 | MyThing {...} | A | main.rs:151:5:152:14 | S2 | -| main.rs:191:30:191:31 | S2 | | main.rs:151:5:152:14 | S2 | -| main.rs:193:40:193:40 | x | | main.rs:144:5:147:5 | MyThing | -| main.rs:193:40:193:40 | x | A | main.rs:149:5:150:14 | S1 | -| main.rs:194:40:194:40 | y | | main.rs:144:5:147:5 | MyThing | -| main.rs:194:40:194:40 | y | A | main.rs:151:5:152:14 | S2 | -| main.rs:211:19:211:22 | SelfParam | | main.rs:209:5:212:5 | Self [trait FirstTrait] | -| main.rs:216:19:216:22 | SelfParam | | main.rs:214:5:217:5 | Self [trait SecondTrait] | -| main.rs:219:64:219:64 | x | | main.rs:219:45:219:61 | T | -| main.rs:221:13:221:14 | s1 | | main.rs:219:35:219:42 | I | -| main.rs:221:18:221:18 | x | | main.rs:219:45:219:61 | T | -| main.rs:221:18:221:27 | x.method() | | main.rs:219:35:219:42 | I | -| main.rs:222:26:222:27 | s1 | | main.rs:219:35:219:42 | I | -| main.rs:225:65:225:65 | x | | main.rs:225:46:225:62 | T | -| main.rs:227:13:227:14 | s2 | | main.rs:225:36:225:43 | I | -| main.rs:227:18:227:18 | x | | main.rs:225:46:225:62 | T | -| main.rs:227:18:227:27 | x.method() | | main.rs:225:36:225:43 | I | -| main.rs:228:26:228:27 | s2 | | main.rs:225:36:225:43 | I | -| main.rs:231:49:231:49 | x | | main.rs:231:30:231:46 | T | -| main.rs:232:13:232:13 | s | | main.rs:201:5:202:14 | S1 | -| main.rs:232:17:232:17 | x | | main.rs:231:30:231:46 | T | -| main.rs:232:17:232:26 | x.method() | | main.rs:201:5:202:14 | S1 | -| main.rs:233:26:233:26 | s | | main.rs:201:5:202:14 | S1 | -| main.rs:236:53:236:53 | x | | main.rs:236:34:236:50 | T | -| main.rs:237:13:237:13 | s | | main.rs:201:5:202:14 | S1 | -| main.rs:237:17:237:17 | x | | main.rs:236:34:236:50 | T | -| main.rs:237:17:237:26 | x.method() | | main.rs:201:5:202:14 | S1 | -| main.rs:238:26:238:26 | s | | main.rs:201:5:202:14 | S1 | -| main.rs:242:16:242:19 | SelfParam | | main.rs:241:5:245:5 | Self [trait Pair] | -| main.rs:244:16:244:19 | SelfParam | | main.rs:241:5:245:5 | Self [trait Pair] | -| main.rs:247:58:247:58 | x | | main.rs:247:41:247:55 | T | -| main.rs:247:64:247:64 | y | | main.rs:247:41:247:55 | T | -| main.rs:249:13:249:14 | s1 | | main.rs:201:5:202:14 | S1 | -| main.rs:249:18:249:18 | x | | main.rs:247:41:247:55 | T | -| main.rs:249:18:249:24 | x.fst() | | main.rs:201:5:202:14 | S1 | -| main.rs:250:13:250:14 | s2 | | main.rs:204:5:205:14 | S2 | -| main.rs:250:18:250:18 | y | | main.rs:247:41:247:55 | T | -| main.rs:250:18:250:24 | y.snd() | | main.rs:204:5:205:14 | S2 | -| main.rs:251:32:251:33 | s1 | | main.rs:201:5:202:14 | S1 | -| main.rs:251:36:251:37 | s2 | | main.rs:204:5:205:14 | S2 | -| main.rs:254:69:254:69 | x | | main.rs:254:52:254:66 | T | -| main.rs:254:75:254:75 | y | | main.rs:254:52:254:66 | T | -| main.rs:256:13:256:14 | s1 | | main.rs:201:5:202:14 | S1 | -| main.rs:256:18:256:18 | x | | main.rs:254:52:254:66 | T | -| main.rs:256:18:256:24 | x.fst() | | main.rs:201:5:202:14 | S1 | -| main.rs:257:13:257:14 | s2 | | main.rs:254:41:254:49 | T2 | -| main.rs:257:18:257:18 | y | | main.rs:254:52:254:66 | T | -| main.rs:257:18:257:24 | y.snd() | | main.rs:254:41:254:49 | T2 | -| main.rs:258:32:258:33 | s1 | | main.rs:201:5:202:14 | S1 | -| main.rs:258:36:258:37 | s2 | | main.rs:254:41:254:49 | T2 | -| main.rs:274:15:274:18 | SelfParam | | main.rs:273:5:282:5 | Self [trait MyTrait] | -| main.rs:276:15:276:18 | SelfParam | | main.rs:273:5:282:5 | Self [trait MyTrait] | -| main.rs:279:9:281:9 | { ... } | | main.rs:273:19:273:19 | A | -| main.rs:280:13:280:16 | self | | main.rs:273:5:282:5 | Self [trait MyTrait] | -| main.rs:280:13:280:21 | self.m1() | | main.rs:273:19:273:19 | A | -| main.rs:285:43:285:43 | x | | main.rs:285:26:285:40 | T2 | -| main.rs:285:56:287:5 | { ... } | | main.rs:285:22:285:23 | T1 | -| main.rs:286:9:286:9 | x | | main.rs:285:26:285:40 | T2 | -| main.rs:286:9:286:14 | x.m1() | | main.rs:285:22:285:23 | T1 | -| main.rs:290:49:290:49 | x | | main.rs:263:5:266:5 | MyThing | -| main.rs:290:49:290:49 | x | T | main.rs:290:32:290:46 | T2 | -| main.rs:290:71:292:5 | { ... } | | main.rs:290:28:290:29 | T1 | -| main.rs:291:9:291:9 | x | | main.rs:263:5:266:5 | MyThing | -| main.rs:291:9:291:9 | x | T | main.rs:290:32:290:46 | T2 | -| main.rs:291:9:291:11 | x.a | | main.rs:290:32:290:46 | T2 | -| main.rs:291:9:291:16 | ... .m1() | | main.rs:290:28:290:29 | T1 | -| main.rs:295:15:295:18 | SelfParam | | main.rs:263:5:266:5 | MyThing | -| main.rs:295:15:295:18 | SelfParam | T | main.rs:294:10:294:10 | T | -| main.rs:295:26:297:9 | { ... } | | main.rs:294:10:294:10 | T | -| main.rs:296:13:296:16 | self | | main.rs:263:5:266:5 | MyThing | -| main.rs:296:13:296:16 | self | T | main.rs:294:10:294:10 | T | -| main.rs:296:13:296:18 | self.a | | main.rs:294:10:294:10 | T | -| main.rs:301:13:301:13 | x | | main.rs:263:5:266:5 | MyThing | -| main.rs:301:13:301:13 | x | T | main.rs:268:5:269:14 | S1 | -| main.rs:301:17:301:33 | MyThing {...} | | main.rs:263:5:266:5 | MyThing | -| main.rs:301:17:301:33 | MyThing {...} | T | main.rs:268:5:269:14 | S1 | -| main.rs:301:30:301:31 | S1 | | main.rs:268:5:269:14 | S1 | -| main.rs:302:13:302:13 | y | | main.rs:263:5:266:5 | MyThing | -| main.rs:302:13:302:13 | y | T | main.rs:270:5:271:14 | S2 | -| main.rs:302:17:302:33 | MyThing {...} | | main.rs:263:5:266:5 | MyThing | -| main.rs:302:17:302:33 | MyThing {...} | T | main.rs:270:5:271:14 | S2 | -| main.rs:302:30:302:31 | S2 | | main.rs:270:5:271:14 | S2 | -| main.rs:304:26:304:26 | x | | main.rs:263:5:266:5 | MyThing | -| main.rs:304:26:304:26 | x | T | main.rs:268:5:269:14 | S1 | -| main.rs:304:26:304:31 | x.m1() | | main.rs:268:5:269:14 | S1 | -| main.rs:305:26:305:26 | y | | main.rs:263:5:266:5 | MyThing | -| main.rs:305:26:305:26 | y | T | main.rs:270:5:271:14 | S2 | -| main.rs:305:26:305:31 | y.m1() | | main.rs:270:5:271:14 | S2 | -| main.rs:307:13:307:13 | x | | main.rs:263:5:266:5 | MyThing | -| main.rs:307:13:307:13 | x | T | main.rs:268:5:269:14 | S1 | -| main.rs:307:17:307:33 | MyThing {...} | | main.rs:263:5:266:5 | MyThing | -| main.rs:307:17:307:33 | MyThing {...} | T | main.rs:268:5:269:14 | S1 | -| main.rs:307:30:307:31 | S1 | | main.rs:268:5:269:14 | S1 | -| main.rs:308:13:308:13 | y | | main.rs:263:5:266:5 | MyThing | -| main.rs:308:13:308:13 | y | T | main.rs:270:5:271:14 | S2 | -| main.rs:308:17:308:33 | MyThing {...} | | main.rs:263:5:266:5 | MyThing | -| main.rs:308:17:308:33 | MyThing {...} | T | main.rs:270:5:271:14 | S2 | -| main.rs:308:30:308:31 | S2 | | main.rs:270:5:271:14 | S2 | -| main.rs:310:26:310:26 | x | | main.rs:263:5:266:5 | MyThing | -| main.rs:310:26:310:26 | x | T | main.rs:268:5:269:14 | S1 | -| main.rs:310:26:310:31 | x.m2() | | main.rs:268:5:269:14 | S1 | -| main.rs:311:26:311:26 | y | | main.rs:263:5:266:5 | MyThing | -| main.rs:311:26:311:26 | y | T | main.rs:270:5:271:14 | S2 | -| main.rs:311:26:311:31 | y.m2() | | main.rs:270:5:271:14 | S2 | -| main.rs:313:13:313:14 | x2 | | main.rs:263:5:266:5 | MyThing | -| main.rs:313:13:313:14 | x2 | T | main.rs:268:5:269:14 | S1 | -| main.rs:313:18:313:34 | MyThing {...} | | main.rs:263:5:266:5 | MyThing | -| main.rs:313:18:313:34 | MyThing {...} | T | main.rs:268:5:269:14 | S1 | -| main.rs:313:31:313:32 | S1 | | main.rs:268:5:269:14 | S1 | -| main.rs:314:13:314:14 | y2 | | main.rs:263:5:266:5 | MyThing | -| main.rs:314:13:314:14 | y2 | T | main.rs:270:5:271:14 | S2 | -| main.rs:314:18:314:34 | MyThing {...} | | main.rs:263:5:266:5 | MyThing | -| main.rs:314:18:314:34 | MyThing {...} | T | main.rs:270:5:271:14 | S2 | -| main.rs:314:31:314:32 | S2 | | main.rs:270:5:271:14 | S2 | -| main.rs:316:26:316:42 | call_trait_m1(...) | | main.rs:268:5:269:14 | S1 | -| main.rs:316:40:316:41 | x2 | | main.rs:263:5:266:5 | MyThing | -| main.rs:316:40:316:41 | x2 | T | main.rs:268:5:269:14 | S1 | -| main.rs:317:26:317:42 | call_trait_m1(...) | | main.rs:270:5:271:14 | S2 | -| main.rs:317:40:317:41 | y2 | | main.rs:263:5:266:5 | MyThing | -| main.rs:317:40:317:41 | y2 | T | main.rs:270:5:271:14 | S2 | -| main.rs:319:13:319:14 | x3 | | main.rs:263:5:266:5 | MyThing | -| main.rs:319:13:319:14 | x3 | T | main.rs:263:5:266:5 | MyThing | -| main.rs:319:13:319:14 | x3 | T.T | main.rs:268:5:269:14 | S1 | -| main.rs:319:18:321:9 | MyThing {...} | | main.rs:263:5:266:5 | MyThing | -| main.rs:319:18:321:9 | MyThing {...} | T | main.rs:263:5:266:5 | MyThing | -| main.rs:319:18:321:9 | MyThing {...} | T.T | main.rs:268:5:269:14 | S1 | -| main.rs:320:16:320:32 | MyThing {...} | | main.rs:263:5:266:5 | MyThing | -| main.rs:320:16:320:32 | MyThing {...} | T | main.rs:268:5:269:14 | S1 | -| main.rs:320:29:320:30 | S1 | | main.rs:268:5:269:14 | S1 | -| main.rs:322:13:322:14 | y3 | | main.rs:263:5:266:5 | MyThing | -| main.rs:322:13:322:14 | y3 | T | main.rs:263:5:266:5 | MyThing | -| main.rs:322:13:322:14 | y3 | T.T | main.rs:270:5:271:14 | S2 | -| main.rs:322:18:324:9 | MyThing {...} | | main.rs:263:5:266:5 | MyThing | -| main.rs:322:18:324:9 | MyThing {...} | T | main.rs:263:5:266:5 | MyThing | -| main.rs:322:18:324:9 | MyThing {...} | T.T | main.rs:270:5:271:14 | S2 | -| main.rs:323:16:323:32 | MyThing {...} | | main.rs:263:5:266:5 | MyThing | -| main.rs:323:16:323:32 | MyThing {...} | T | main.rs:270:5:271:14 | S2 | -| main.rs:323:29:323:30 | S2 | | main.rs:270:5:271:14 | S2 | -| main.rs:326:26:326:48 | call_trait_thing_m1(...) | | main.rs:268:5:269:14 | S1 | -| main.rs:326:46:326:47 | x3 | | main.rs:263:5:266:5 | MyThing | -| main.rs:326:46:326:47 | x3 | T | main.rs:263:5:266:5 | MyThing | -| main.rs:326:46:326:47 | x3 | T.T | main.rs:268:5:269:14 | S1 | -| main.rs:327:26:327:48 | call_trait_thing_m1(...) | | main.rs:270:5:271:14 | S2 | -| main.rs:327:46:327:47 | y3 | | main.rs:263:5:266:5 | MyThing | -| main.rs:327:46:327:47 | y3 | T | main.rs:263:5:266:5 | MyThing | -| main.rs:327:46:327:47 | y3 | T.T | main.rs:270:5:271:14 | S2 | -| main.rs:338:19:338:22 | SelfParam | | main.rs:332:5:335:5 | Wrapper | -| main.rs:338:19:338:22 | SelfParam | A | main.rs:337:10:337:10 | A | -| main.rs:338:30:340:9 | { ... } | | main.rs:337:10:337:10 | A | -| main.rs:339:13:339:16 | self | | main.rs:332:5:335:5 | Wrapper | -| main.rs:339:13:339:16 | self | A | main.rs:337:10:337:10 | A | -| main.rs:339:13:339:22 | self.field | | main.rs:337:10:337:10 | A | -| main.rs:347:15:347:18 | SelfParam | | main.rs:343:5:357:5 | Self [trait MyTrait] | -| main.rs:349:15:349:18 | SelfParam | | main.rs:343:5:357:5 | Self [trait MyTrait] | -| main.rs:353:9:356:9 | { ... } | | main.rs:344:9:344:28 | AssociatedType | -| main.rs:354:13:354:16 | self | | main.rs:343:5:357:5 | Self [trait MyTrait] | -| main.rs:354:13:354:21 | self.m1() | | main.rs:344:9:344:28 | AssociatedType | -| main.rs:355:13:355:43 | ...::default(...) | | main.rs:344:9:344:28 | AssociatedType | -| main.rs:363:19:363:23 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:363:19:363:23 | SelfParam | &T | main.rs:359:5:369:5 | Self [trait MyTraitAssoc2] | -| main.rs:363:26:363:26 | a | | main.rs:363:16:363:16 | A | -| main.rs:365:22:365:26 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:365:22:365:26 | SelfParam | &T | main.rs:359:5:369:5 | Self [trait MyTraitAssoc2] | -| main.rs:365:29:365:29 | a | | main.rs:365:19:365:19 | A | -| main.rs:365:35:365:35 | b | | main.rs:365:19:365:19 | A | -| main.rs:365:75:368:9 | { ... } | | main.rs:360:9:360:52 | GenericAssociatedType | -| main.rs:366:13:366:16 | self | | file://:0:0:0:0 | & | -| main.rs:366:13:366:16 | self | &T | main.rs:359:5:369:5 | Self [trait MyTraitAssoc2] | -| main.rs:366:13:366:23 | self.put(...) | | main.rs:360:9:360:52 | GenericAssociatedType | -| main.rs:366:22:366:22 | a | | main.rs:365:19:365:19 | A | -| main.rs:367:13:367:16 | self | | file://:0:0:0:0 | & | -| main.rs:367:13:367:16 | self | &T | main.rs:359:5:369:5 | Self [trait MyTraitAssoc2] | -| main.rs:367:13:367:23 | self.put(...) | | main.rs:360:9:360:52 | GenericAssociatedType | -| main.rs:367:22:367:22 | b | | main.rs:365:19:365:19 | A | -| main.rs:376:21:376:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:376:21:376:25 | SelfParam | &T | main.rs:371:5:381:5 | Self [trait TraitMultipleAssoc] | -| main.rs:378:20:378:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:378:20:378:24 | SelfParam | &T | main.rs:371:5:381:5 | Self [trait TraitMultipleAssoc] | -| main.rs:380:20:380:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:380:20:380:24 | SelfParam | &T | main.rs:371:5:381:5 | Self [trait TraitMultipleAssoc] | -| main.rs:396:15:396:18 | SelfParam | | main.rs:383:5:384:13 | S | -| main.rs:396:45:398:9 | { ... } | | main.rs:389:5:390:14 | AT | -| main.rs:397:13:397:14 | AT | | main.rs:389:5:390:14 | AT | -| main.rs:406:19:406:23 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:406:19:406:23 | SelfParam | &T | main.rs:383:5:384:13 | S | -| main.rs:406:26:406:26 | a | | main.rs:406:16:406:16 | A | -| main.rs:406:46:408:9 | { ... } | | main.rs:332:5:335:5 | Wrapper | -| main.rs:406:46:408:9 | { ... } | A | main.rs:406:16:406:16 | A | -| main.rs:407:13:407:32 | Wrapper {...} | | main.rs:332:5:335:5 | Wrapper | -| main.rs:407:13:407:32 | Wrapper {...} | A | main.rs:406:16:406:16 | A | -| main.rs:407:30:407:30 | a | | main.rs:406:16:406:16 | A | -| main.rs:415:15:415:18 | SelfParam | | main.rs:386:5:387:14 | S2 | -| main.rs:415:45:417:9 | { ... } | | main.rs:332:5:335:5 | Wrapper | -| main.rs:415:45:417:9 | { ... } | A | main.rs:386:5:387:14 | S2 | -| main.rs:416:13:416:35 | Wrapper {...} | | main.rs:332:5:335:5 | Wrapper | -| main.rs:416:13:416:35 | Wrapper {...} | A | main.rs:386:5:387:14 | S2 | -| main.rs:416:30:416:33 | self | | main.rs:386:5:387:14 | S2 | -| main.rs:422:30:424:9 | { ... } | | main.rs:332:5:335:5 | Wrapper | -| main.rs:422:30:424:9 | { ... } | A | main.rs:386:5:387:14 | S2 | -| main.rs:423:13:423:33 | Wrapper {...} | | main.rs:332:5:335:5 | Wrapper | -| main.rs:423:13:423:33 | Wrapper {...} | A | main.rs:386:5:387:14 | S2 | -| main.rs:423:30:423:31 | S2 | | main.rs:386:5:387:14 | S2 | -| main.rs:428:22:428:26 | thing | | main.rs:428:10:428:19 | T | -| main.rs:429:9:429:13 | thing | | main.rs:428:10:428:19 | T | -| main.rs:436:21:436:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:436:21:436:25 | SelfParam | &T | main.rs:389:5:390:14 | AT | -| main.rs:436:34:438:9 | { ... } | | main.rs:389:5:390:14 | AT | -| main.rs:437:13:437:14 | AT | | main.rs:389:5:390:14 | AT | -| main.rs:440:20:440:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:440:20:440:24 | SelfParam | &T | main.rs:389:5:390:14 | AT | -| main.rs:440:43:442:9 | { ... } | | main.rs:383:5:384:13 | S | -| main.rs:441:13:441:13 | S | | main.rs:383:5:384:13 | S | -| main.rs:444:20:444:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:444:20:444:24 | SelfParam | &T | main.rs:389:5:390:14 | AT | -| main.rs:444:43:446:9 | { ... } | | main.rs:386:5:387:14 | S2 | -| main.rs:445:13:445:14 | S2 | | main.rs:386:5:387:14 | S2 | -| main.rs:450:13:450:14 | x1 | | main.rs:383:5:384:13 | S | -| main.rs:450:18:450:18 | S | | main.rs:383:5:384:13 | S | -| main.rs:452:26:452:27 | x1 | | main.rs:383:5:384:13 | S | -| main.rs:452:26:452:32 | x1.m1() | | main.rs:389:5:390:14 | AT | -| main.rs:454:13:454:14 | x2 | | main.rs:383:5:384:13 | S | -| main.rs:454:18:454:18 | S | | main.rs:383:5:384:13 | S | -| main.rs:456:13:456:13 | y | | main.rs:389:5:390:14 | AT | -| main.rs:456:17:456:18 | x2 | | main.rs:383:5:384:13 | S | -| main.rs:456:17:456:23 | x2.m2() | | main.rs:389:5:390:14 | AT | -| main.rs:457:26:457:26 | y | | main.rs:389:5:390:14 | AT | -| main.rs:459:13:459:14 | x3 | | main.rs:383:5:384:13 | S | -| main.rs:459:18:459:18 | S | | main.rs:383:5:384:13 | S | -| main.rs:461:26:461:27 | x3 | | main.rs:383:5:384:13 | S | -| main.rs:461:26:461:34 | x3.put(...) | | main.rs:332:5:335:5 | Wrapper | -| main.rs:464:26:464:27 | x3 | | main.rs:383:5:384:13 | S | -| main.rs:466:20:466:20 | S | | main.rs:383:5:384:13 | S | -| main.rs:469:13:469:14 | x5 | | main.rs:386:5:387:14 | S2 | -| main.rs:469:18:469:19 | S2 | | main.rs:386:5:387:14 | S2 | -| main.rs:470:26:470:27 | x5 | | main.rs:386:5:387:14 | S2 | -| main.rs:470:26:470:32 | x5.m1() | | main.rs:332:5:335:5 | Wrapper | -| main.rs:470:26:470:32 | x5.m1() | A | main.rs:386:5:387:14 | S2 | -| main.rs:471:13:471:14 | x6 | | main.rs:386:5:387:14 | S2 | -| main.rs:471:18:471:19 | S2 | | main.rs:386:5:387:14 | S2 | -| main.rs:472:26:472:27 | x6 | | main.rs:386:5:387:14 | S2 | -| main.rs:472:26:472:32 | x6.m2() | | main.rs:332:5:335:5 | Wrapper | -| main.rs:472:26:472:32 | x6.m2() | A | main.rs:386:5:387:14 | S2 | -| main.rs:474:13:474:22 | assoc_zero | | main.rs:389:5:390:14 | AT | -| main.rs:474:26:474:27 | AT | | main.rs:389:5:390:14 | AT | -| main.rs:474:26:474:38 | AT.get_zero() | | main.rs:389:5:390:14 | AT | -| main.rs:475:13:475:21 | assoc_one | | main.rs:383:5:384:13 | S | -| main.rs:475:25:475:26 | AT | | main.rs:389:5:390:14 | AT | -| main.rs:475:25:475:36 | AT.get_one() | | main.rs:383:5:384:13 | S | -| main.rs:476:13:476:21 | assoc_two | | main.rs:386:5:387:14 | S2 | -| main.rs:476:25:476:26 | AT | | main.rs:389:5:390:14 | AT | -| main.rs:476:25:476:36 | AT.get_two() | | main.rs:386:5:387:14 | S2 | -| main.rs:493:15:493:18 | SelfParam | | main.rs:481:5:485:5 | MyEnum | -| main.rs:493:15:493:18 | SelfParam | A | main.rs:492:10:492:10 | T | -| main.rs:493:26:498:9 | { ... } | | main.rs:492:10:492:10 | T | -| main.rs:494:13:497:13 | match self { ... } | | main.rs:492:10:492:10 | T | -| main.rs:494:19:494:22 | self | | main.rs:481:5:485:5 | MyEnum | -| main.rs:494:19:494:22 | self | A | main.rs:492:10:492:10 | T | -| main.rs:495:28:495:28 | a | | main.rs:492:10:492:10 | T | -| main.rs:495:34:495:34 | a | | main.rs:492:10:492:10 | T | -| main.rs:496:30:496:30 | a | | main.rs:492:10:492:10 | T | -| main.rs:496:37:496:37 | a | | main.rs:492:10:492:10 | T | -| main.rs:502:13:502:13 | x | | main.rs:481:5:485:5 | MyEnum | -| main.rs:502:13:502:13 | x | A | main.rs:487:5:488:14 | S1 | -| main.rs:502:17:502:30 | ...::C1(...) | | main.rs:481:5:485:5 | MyEnum | -| main.rs:502:17:502:30 | ...::C1(...) | A | main.rs:487:5:488:14 | S1 | -| main.rs:502:28:502:29 | S1 | | main.rs:487:5:488:14 | S1 | -| main.rs:503:13:503:13 | y | | main.rs:481:5:485:5 | MyEnum | -| main.rs:503:13:503:13 | y | A | main.rs:489:5:490:14 | S2 | -| main.rs:503:17:503:36 | ...::C2 {...} | | main.rs:481:5:485:5 | MyEnum | -| main.rs:503:17:503:36 | ...::C2 {...} | A | main.rs:489:5:490:14 | S2 | -| main.rs:503:33:503:34 | S2 | | main.rs:489:5:490:14 | S2 | -| main.rs:505:26:505:26 | x | | main.rs:481:5:485:5 | MyEnum | -| main.rs:505:26:505:26 | x | A | main.rs:487:5:488:14 | S1 | -| main.rs:505:26:505:31 | x.m1() | | main.rs:487:5:488:14 | S1 | -| main.rs:506:26:506:26 | y | | main.rs:481:5:485:5 | MyEnum | -| main.rs:506:26:506:26 | y | A | main.rs:489:5:490:14 | S2 | -| main.rs:506:26:506:31 | y.m1() | | main.rs:489:5:490:14 | S2 | -| main.rs:528:15:528:18 | SelfParam | | main.rs:526:5:529:5 | Self [trait MyTrait1] | -| main.rs:532:15:532:18 | SelfParam | | main.rs:531:5:542:5 | Self [trait MyTrait2] | -| main.rs:535:9:541:9 | { ... } | | main.rs:531:20:531:22 | Tr2 | -| main.rs:536:13:540:13 | if ... {...} else {...} | | main.rs:531:20:531:22 | Tr2 | -| main.rs:536:26:538:13 | { ... } | | main.rs:531:20:531:22 | Tr2 | -| main.rs:537:17:537:20 | self | | main.rs:531:5:542:5 | Self [trait MyTrait2] | -| main.rs:537:17:537:25 | self.m1() | | main.rs:531:20:531:22 | Tr2 | -| main.rs:538:20:540:13 | { ... } | | main.rs:531:20:531:22 | Tr2 | -| main.rs:539:17:539:30 | ...::m1(...) | | main.rs:531:20:531:22 | Tr2 | -| main.rs:539:26:539:29 | self | | main.rs:531:5:542:5 | Self [trait MyTrait2] | -| main.rs:545:15:545:18 | SelfParam | | main.rs:544:5:555:5 | Self [trait MyTrait3] | -| main.rs:548:9:554:9 | { ... } | | main.rs:544:20:544:22 | Tr3 | -| main.rs:549:13:553:13 | if ... {...} else {...} | | main.rs:544:20:544:22 | Tr3 | -| main.rs:549:26:551:13 | { ... } | | main.rs:544:20:544:22 | Tr3 | -| main.rs:550:17:550:20 | self | | main.rs:544:5:555:5 | Self [trait MyTrait3] | -| main.rs:550:17:550:25 | self.m2() | | main.rs:511:5:514:5 | MyThing | -| main.rs:550:17:550:25 | self.m2() | A | main.rs:544:20:544:22 | Tr3 | -| main.rs:550:17:550:27 | ... .a | | main.rs:544:20:544:22 | Tr3 | -| main.rs:551:20:553:13 | { ... } | | main.rs:544:20:544:22 | Tr3 | -| main.rs:552:17:552:30 | ...::m2(...) | | main.rs:511:5:514:5 | MyThing | -| main.rs:552:17:552:30 | ...::m2(...) | A | main.rs:544:20:544:22 | Tr3 | -| main.rs:552:17:552:32 | ... .a | | main.rs:544:20:544:22 | Tr3 | -| main.rs:552:26:552:29 | self | | main.rs:544:5:555:5 | Self [trait MyTrait3] | -| main.rs:559:15:559:18 | SelfParam | | main.rs:511:5:514:5 | MyThing | -| main.rs:559:15:559:18 | SelfParam | A | main.rs:557:10:557:10 | T | -| main.rs:559:26:561:9 | { ... } | | main.rs:557:10:557:10 | T | -| main.rs:560:13:560:16 | self | | main.rs:511:5:514:5 | MyThing | -| main.rs:560:13:560:16 | self | A | main.rs:557:10:557:10 | T | -| main.rs:560:13:560:18 | self.a | | main.rs:557:10:557:10 | T | -| main.rs:568:15:568:18 | SelfParam | | main.rs:516:5:519:5 | MyThing2 | -| main.rs:568:15:568:18 | SelfParam | A | main.rs:566:10:566:10 | T | -| main.rs:568:35:570:9 | { ... } | | main.rs:511:5:514:5 | MyThing | -| main.rs:568:35:570:9 | { ... } | A | main.rs:566:10:566:10 | T | -| main.rs:569:13:569:33 | MyThing {...} | | main.rs:511:5:514:5 | MyThing | -| main.rs:569:13:569:33 | MyThing {...} | A | main.rs:566:10:566:10 | T | -| main.rs:569:26:569:29 | self | | main.rs:516:5:519:5 | MyThing2 | -| main.rs:569:26:569:29 | self | A | main.rs:566:10:566:10 | T | -| main.rs:569:26:569:31 | self.a | | main.rs:566:10:566:10 | T | -| main.rs:578:13:578:13 | x | | main.rs:511:5:514:5 | MyThing | -| main.rs:578:13:578:13 | x | A | main.rs:521:5:522:14 | S1 | -| main.rs:578:17:578:33 | MyThing {...} | | main.rs:511:5:514:5 | MyThing | -| main.rs:578:17:578:33 | MyThing {...} | A | main.rs:521:5:522:14 | S1 | -| main.rs:578:30:578:31 | S1 | | main.rs:521:5:522:14 | S1 | -| main.rs:579:13:579:13 | y | | main.rs:511:5:514:5 | MyThing | -| main.rs:579:13:579:13 | y | A | main.rs:523:5:524:14 | S2 | -| main.rs:579:17:579:33 | MyThing {...} | | main.rs:511:5:514:5 | MyThing | -| main.rs:579:17:579:33 | MyThing {...} | A | main.rs:523:5:524:14 | S2 | -| main.rs:579:30:579:31 | S2 | | main.rs:523:5:524:14 | S2 | -| main.rs:581:26:581:26 | x | | main.rs:511:5:514:5 | MyThing | -| main.rs:581:26:581:26 | x | A | main.rs:521:5:522:14 | S1 | -| main.rs:581:26:581:31 | x.m1() | | main.rs:521:5:522:14 | S1 | -| main.rs:582:26:582:26 | y | | main.rs:511:5:514:5 | MyThing | -| main.rs:582:26:582:26 | y | A | main.rs:523:5:524:14 | S2 | -| main.rs:582:26:582:31 | y.m1() | | main.rs:523:5:524:14 | S2 | -| main.rs:584:13:584:13 | x | | main.rs:511:5:514:5 | MyThing | -| main.rs:584:13:584:13 | x | A | main.rs:521:5:522:14 | S1 | -| main.rs:584:17:584:33 | MyThing {...} | | main.rs:511:5:514:5 | MyThing | -| main.rs:584:17:584:33 | MyThing {...} | A | main.rs:521:5:522:14 | S1 | -| main.rs:584:30:584:31 | S1 | | main.rs:521:5:522:14 | S1 | -| main.rs:585:13:585:13 | y | | main.rs:511:5:514:5 | MyThing | -| main.rs:585:13:585:13 | y | A | main.rs:523:5:524:14 | S2 | -| main.rs:585:17:585:33 | MyThing {...} | | main.rs:511:5:514:5 | MyThing | -| main.rs:585:17:585:33 | MyThing {...} | A | main.rs:523:5:524:14 | S2 | -| main.rs:585:30:585:31 | S2 | | main.rs:523:5:524:14 | S2 | -| main.rs:587:26:587:26 | x | | main.rs:511:5:514:5 | MyThing | -| main.rs:587:26:587:26 | x | A | main.rs:521:5:522:14 | S1 | -| main.rs:587:26:587:31 | x.m2() | | main.rs:521:5:522:14 | S1 | -| main.rs:588:26:588:26 | y | | main.rs:511:5:514:5 | MyThing | -| main.rs:588:26:588:26 | y | A | main.rs:523:5:524:14 | S2 | -| main.rs:588:26:588:31 | y.m2() | | main.rs:523:5:524:14 | S2 | -| main.rs:590:13:590:13 | x | | main.rs:516:5:519:5 | MyThing2 | -| main.rs:590:13:590:13 | x | A | main.rs:521:5:522:14 | S1 | -| main.rs:590:17:590:34 | MyThing2 {...} | | main.rs:516:5:519:5 | MyThing2 | -| main.rs:590:17:590:34 | MyThing2 {...} | A | main.rs:521:5:522:14 | S1 | -| main.rs:590:31:590:32 | S1 | | main.rs:521:5:522:14 | S1 | -| main.rs:591:13:591:13 | y | | main.rs:516:5:519:5 | MyThing2 | -| main.rs:591:13:591:13 | y | A | main.rs:523:5:524:14 | S2 | -| main.rs:591:17:591:34 | MyThing2 {...} | | main.rs:516:5:519:5 | MyThing2 | -| main.rs:591:17:591:34 | MyThing2 {...} | A | main.rs:523:5:524:14 | S2 | -| main.rs:591:31:591:32 | S2 | | main.rs:523:5:524:14 | S2 | -| main.rs:593:26:593:26 | x | | main.rs:516:5:519:5 | MyThing2 | -| main.rs:593:26:593:26 | x | A | main.rs:521:5:522:14 | S1 | -| main.rs:593:26:593:31 | x.m3() | | main.rs:521:5:522:14 | S1 | -| main.rs:594:26:594:26 | y | | main.rs:516:5:519:5 | MyThing2 | -| main.rs:594:26:594:26 | y | A | main.rs:523:5:524:14 | S2 | -| main.rs:594:26:594:31 | y.m3() | | main.rs:523:5:524:14 | S2 | -| main.rs:612:22:612:22 | x | | file://:0:0:0:0 | & | -| main.rs:612:22:612:22 | x | &T | main.rs:612:11:612:19 | T | -| main.rs:612:35:614:5 | { ... } | | file://:0:0:0:0 | & | -| main.rs:612:35:614:5 | { ... } | &T | main.rs:612:11:612:19 | T | -| main.rs:613:9:613:9 | x | | file://:0:0:0:0 | & | -| main.rs:613:9:613:9 | x | &T | main.rs:612:11:612:19 | T | -| main.rs:617:17:617:20 | SelfParam | | main.rs:602:5:603:14 | S1 | -| main.rs:617:29:619:9 | { ... } | | main.rs:605:5:606:14 | S2 | -| main.rs:618:13:618:14 | S2 | | main.rs:605:5:606:14 | S2 | -| main.rs:622:21:622:21 | x | | main.rs:622:13:622:14 | T1 | -| main.rs:625:5:627:5 | { ... } | | main.rs:622:17:622:18 | T2 | -| main.rs:626:9:626:9 | x | | main.rs:622:13:622:14 | T1 | -| main.rs:626:9:626:16 | x.into() | | main.rs:622:17:622:18 | T2 | -| main.rs:630:13:630:13 | x | | main.rs:602:5:603:14 | S1 | -| main.rs:630:17:630:18 | S1 | | main.rs:602:5:603:14 | S1 | -| main.rs:631:26:631:31 | id(...) | | file://:0:0:0:0 | & | -| main.rs:631:26:631:31 | id(...) | &T | main.rs:602:5:603:14 | S1 | -| main.rs:631:29:631:30 | &x | | file://:0:0:0:0 | & | -| main.rs:631:29:631:30 | &x | &T | main.rs:602:5:603:14 | S1 | -| main.rs:631:30:631:30 | x | | main.rs:602:5:603:14 | S1 | -| main.rs:633:13:633:13 | x | | main.rs:602:5:603:14 | S1 | -| main.rs:633:17:633:18 | S1 | | main.rs:602:5:603:14 | S1 | -| main.rs:634:26:634:37 | id::<...>(...) | | file://:0:0:0:0 | & | -| main.rs:634:26:634:37 | id::<...>(...) | &T | main.rs:602:5:603:14 | S1 | -| main.rs:634:35:634:36 | &x | | file://:0:0:0:0 | & | -| main.rs:634:35:634:36 | &x | &T | main.rs:602:5:603:14 | S1 | -| main.rs:634:36:634:36 | x | | main.rs:602:5:603:14 | S1 | -| main.rs:636:13:636:13 | x | | main.rs:602:5:603:14 | S1 | -| main.rs:636:17:636:18 | S1 | | main.rs:602:5:603:14 | S1 | -| main.rs:637:26:637:44 | id::<...>(...) | | file://:0:0:0:0 | & | -| main.rs:637:26:637:44 | id::<...>(...) | &T | main.rs:602:5:603:14 | S1 | -| main.rs:637:42:637:43 | &x | | file://:0:0:0:0 | & | -| main.rs:637:42:637:43 | &x | &T | main.rs:602:5:603:14 | S1 | -| main.rs:637:43:637:43 | x | | main.rs:602:5:603:14 | S1 | -| main.rs:639:13:639:13 | x | | main.rs:602:5:603:14 | S1 | -| main.rs:639:17:639:18 | S1 | | main.rs:602:5:603:14 | S1 | -| main.rs:640:9:640:25 | into::<...>(...) | | main.rs:605:5:606:14 | S2 | -| main.rs:640:24:640:24 | x | | main.rs:602:5:603:14 | S1 | -| main.rs:642:13:642:13 | x | | main.rs:602:5:603:14 | S1 | -| main.rs:642:17:642:18 | S1 | | main.rs:602:5:603:14 | S1 | -| main.rs:643:13:643:13 | y | | main.rs:605:5:606:14 | S2 | -| main.rs:643:21:643:27 | into(...) | | main.rs:605:5:606:14 | S2 | -| main.rs:643:26:643:26 | x | | main.rs:602:5:603:14 | S1 | -| main.rs:657:22:657:25 | SelfParam | | main.rs:648:5:654:5 | PairOption | -| main.rs:657:22:657:25 | SelfParam | Fst | main.rs:656:10:656:12 | Fst | -| main.rs:657:22:657:25 | SelfParam | Snd | main.rs:656:15:656:17 | Snd | -| main.rs:657:35:664:9 | { ... } | | main.rs:656:15:656:17 | Snd | -| main.rs:658:13:663:13 | match self { ... } | | main.rs:656:15:656:17 | Snd | -| main.rs:658:19:658:22 | self | | main.rs:648:5:654:5 | PairOption | -| main.rs:658:19:658:22 | self | Fst | main.rs:656:10:656:12 | Fst | -| main.rs:658:19:658:22 | self | Snd | main.rs:656:15:656:17 | Snd | -| main.rs:659:43:659:82 | MacroExpr | | main.rs:656:15:656:17 | Snd | -| main.rs:660:43:660:81 | MacroExpr | | main.rs:656:15:656:17 | Snd | -| main.rs:661:37:661:39 | snd | | main.rs:656:15:656:17 | Snd | -| main.rs:661:45:661:47 | snd | | main.rs:656:15:656:17 | Snd | -| main.rs:662:41:662:43 | snd | | main.rs:656:15:656:17 | Snd | -| main.rs:662:49:662:51 | snd | | main.rs:656:15:656:17 | Snd | -| main.rs:688:10:688:10 | t | | main.rs:648:5:654:5 | PairOption | -| main.rs:688:10:688:10 | t | Fst | main.rs:670:5:671:14 | S2 | -| main.rs:688:10:688:10 | t | Snd | main.rs:648:5:654:5 | PairOption | -| main.rs:688:10:688:10 | t | Snd.Fst | main.rs:670:5:671:14 | S2 | -| main.rs:688:10:688:10 | t | Snd.Snd | main.rs:673:5:674:14 | S3 | -| main.rs:689:13:689:13 | x | | main.rs:673:5:674:14 | S3 | -| main.rs:689:17:689:17 | t | | main.rs:648:5:654:5 | PairOption | -| main.rs:689:17:689:17 | t | Fst | main.rs:670:5:671:14 | S2 | -| main.rs:689:17:689:17 | t | Snd | main.rs:648:5:654:5 | PairOption | -| main.rs:689:17:689:17 | t | Snd.Fst | main.rs:670:5:671:14 | S2 | -| main.rs:689:17:689:17 | t | Snd.Snd | main.rs:673:5:674:14 | S3 | -| main.rs:689:17:689:29 | t.unwrapSnd() | | main.rs:648:5:654:5 | PairOption | -| main.rs:689:17:689:29 | t.unwrapSnd() | Fst | main.rs:670:5:671:14 | S2 | -| main.rs:689:17:689:29 | t.unwrapSnd() | Snd | main.rs:673:5:674:14 | S3 | -| main.rs:689:17:689:41 | ... .unwrapSnd() | | main.rs:673:5:674:14 | S3 | -| main.rs:690:26:690:26 | x | | main.rs:673:5:674:14 | S3 | -| main.rs:695:13:695:14 | p1 | | main.rs:648:5:654:5 | PairOption | -| main.rs:695:13:695:14 | p1 | Fst | main.rs:667:5:668:14 | S1 | -| main.rs:695:13:695:14 | p1 | Snd | main.rs:670:5:671:14 | S2 | -| main.rs:695:26:695:53 | ...::PairBoth(...) | | main.rs:648:5:654:5 | PairOption | -| main.rs:695:26:695:53 | ...::PairBoth(...) | Fst | main.rs:667:5:668:14 | S1 | -| main.rs:695:26:695:53 | ...::PairBoth(...) | Snd | main.rs:670:5:671:14 | S2 | -| main.rs:695:47:695:48 | S1 | | main.rs:667:5:668:14 | S1 | -| main.rs:695:51:695:52 | S2 | | main.rs:670:5:671:14 | S2 | -| main.rs:696:26:696:27 | p1 | | main.rs:648:5:654:5 | PairOption | -| main.rs:696:26:696:27 | p1 | Fst | main.rs:667:5:668:14 | S1 | -| main.rs:696:26:696:27 | p1 | Snd | main.rs:670:5:671:14 | S2 | -| main.rs:699:13:699:14 | p2 | | main.rs:648:5:654:5 | PairOption | -| main.rs:699:13:699:14 | p2 | Fst | main.rs:667:5:668:14 | S1 | -| main.rs:699:13:699:14 | p2 | Snd | main.rs:670:5:671:14 | S2 | -| main.rs:699:26:699:47 | ...::PairNone(...) | | main.rs:648:5:654:5 | PairOption | -| main.rs:699:26:699:47 | ...::PairNone(...) | Fst | main.rs:667:5:668:14 | S1 | -| main.rs:699:26:699:47 | ...::PairNone(...) | Snd | main.rs:670:5:671:14 | S2 | -| main.rs:700:26:700:27 | p2 | | main.rs:648:5:654:5 | PairOption | -| main.rs:700:26:700:27 | p2 | Fst | main.rs:667:5:668:14 | S1 | -| main.rs:700:26:700:27 | p2 | Snd | main.rs:670:5:671:14 | S2 | -| main.rs:703:13:703:14 | p3 | | main.rs:648:5:654:5 | PairOption | -| main.rs:703:13:703:14 | p3 | Fst | main.rs:670:5:671:14 | S2 | -| main.rs:703:13:703:14 | p3 | Snd | main.rs:673:5:674:14 | S3 | -| main.rs:703:34:703:56 | ...::PairSnd(...) | | main.rs:648:5:654:5 | PairOption | -| main.rs:703:34:703:56 | ...::PairSnd(...) | Fst | main.rs:670:5:671:14 | S2 | -| main.rs:703:34:703:56 | ...::PairSnd(...) | Snd | main.rs:673:5:674:14 | S3 | -| main.rs:703:54:703:55 | S3 | | main.rs:673:5:674:14 | S3 | -| main.rs:704:26:704:27 | p3 | | main.rs:648:5:654:5 | PairOption | -| main.rs:704:26:704:27 | p3 | Fst | main.rs:670:5:671:14 | S2 | -| main.rs:704:26:704:27 | p3 | Snd | main.rs:673:5:674:14 | S3 | -| main.rs:707:13:707:14 | p3 | | main.rs:648:5:654:5 | PairOption | -| main.rs:707:13:707:14 | p3 | Fst | main.rs:670:5:671:14 | S2 | -| main.rs:707:13:707:14 | p3 | Snd | main.rs:673:5:674:14 | S3 | -| main.rs:707:35:707:56 | ...::PairNone(...) | | main.rs:648:5:654:5 | PairOption | -| main.rs:707:35:707:56 | ...::PairNone(...) | Fst | main.rs:670:5:671:14 | S2 | -| main.rs:707:35:707:56 | ...::PairNone(...) | Snd | main.rs:673:5:674:14 | S3 | -| main.rs:708:26:708:27 | p3 | | main.rs:648:5:654:5 | PairOption | -| main.rs:708:26:708:27 | p3 | Fst | main.rs:670:5:671:14 | S2 | -| main.rs:708:26:708:27 | p3 | Snd | main.rs:673:5:674:14 | S3 | -| main.rs:710:11:710:54 | ...::PairSnd(...) | | main.rs:648:5:654:5 | PairOption | -| main.rs:710:11:710:54 | ...::PairSnd(...) | Fst | main.rs:670:5:671:14 | S2 | -| main.rs:710:11:710:54 | ...::PairSnd(...) | Snd | main.rs:648:5:654:5 | PairOption | -| main.rs:710:11:710:54 | ...::PairSnd(...) | Snd.Fst | main.rs:670:5:671:14 | S2 | -| main.rs:710:11:710:54 | ...::PairSnd(...) | Snd.Snd | main.rs:673:5:674:14 | S3 | -| main.rs:710:31:710:53 | ...::PairSnd(...) | | main.rs:648:5:654:5 | PairOption | -| main.rs:710:31:710:53 | ...::PairSnd(...) | Fst | main.rs:670:5:671:14 | S2 | -| main.rs:710:31:710:53 | ...::PairSnd(...) | Snd | main.rs:673:5:674:14 | S3 | -| main.rs:710:51:710:52 | S3 | | main.rs:673:5:674:14 | S3 | -| main.rs:723:16:723:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:723:16:723:24 | SelfParam | &T | main.rs:721:5:728:5 | Self [trait MyTrait] | -| main.rs:723:27:723:31 | value | | main.rs:721:19:721:19 | S | -| main.rs:725:21:725:29 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:725:21:725:29 | SelfParam | &T | main.rs:721:5:728:5 | Self [trait MyTrait] | -| main.rs:725:32:725:36 | value | | main.rs:721:19:721:19 | S | -| main.rs:726:13:726:16 | self | | file://:0:0:0:0 | & | -| main.rs:726:13:726:16 | self | &T | main.rs:721:5:728:5 | Self [trait MyTrait] | -| main.rs:726:22:726:26 | value | | main.rs:721:19:721:19 | S | -| main.rs:732:16:732:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:732:16:732:24 | SelfParam | &T | main.rs:715:5:719:5 | MyOption | -| main.rs:732:16:732:24 | SelfParam | &T.T | main.rs:730:10:730:10 | T | -| main.rs:732:27:732:31 | value | | main.rs:730:10:730:10 | T | -| main.rs:736:26:738:9 | { ... } | | main.rs:715:5:719:5 | MyOption | -| main.rs:736:26:738:9 | { ... } | T | main.rs:735:10:735:10 | T | -| main.rs:737:13:737:30 | ...::MyNone(...) | | main.rs:715:5:719:5 | MyOption | -| main.rs:737:13:737:30 | ...::MyNone(...) | T | main.rs:735:10:735:10 | T | -| main.rs:742:20:742:23 | SelfParam | | main.rs:715:5:719:5 | MyOption | -| main.rs:742:20:742:23 | SelfParam | T | main.rs:715:5:719:5 | MyOption | -| main.rs:742:20:742:23 | SelfParam | T.T | main.rs:741:10:741:10 | T | -| main.rs:742:41:747:9 | { ... } | | main.rs:715:5:719:5 | MyOption | -| main.rs:742:41:747:9 | { ... } | T | main.rs:741:10:741:10 | T | -| main.rs:743:13:746:13 | match self { ... } | | main.rs:715:5:719:5 | MyOption | -| main.rs:743:13:746:13 | match self { ... } | T | main.rs:741:10:741:10 | T | -| main.rs:743:19:743:22 | self | | main.rs:715:5:719:5 | MyOption | -| main.rs:743:19:743:22 | self | T | main.rs:715:5:719:5 | MyOption | -| main.rs:743:19:743:22 | self | T.T | main.rs:741:10:741:10 | T | -| main.rs:744:39:744:56 | ...::MyNone(...) | | main.rs:715:5:719:5 | MyOption | -| main.rs:744:39:744:56 | ...::MyNone(...) | T | main.rs:741:10:741:10 | T | -| main.rs:745:34:745:34 | x | | main.rs:715:5:719:5 | MyOption | -| main.rs:745:34:745:34 | x | T | main.rs:741:10:741:10 | T | -| main.rs:745:40:745:40 | x | | main.rs:715:5:719:5 | MyOption | -| main.rs:745:40:745:40 | x | T | main.rs:741:10:741:10 | T | -| main.rs:754:13:754:14 | x1 | | main.rs:715:5:719:5 | MyOption | -| main.rs:754:18:754:37 | ...::new(...) | | main.rs:715:5:719:5 | MyOption | -| main.rs:755:26:755:27 | x1 | | main.rs:715:5:719:5 | MyOption | -| main.rs:757:13:757:18 | mut x2 | | main.rs:715:5:719:5 | MyOption | -| main.rs:757:13:757:18 | mut x2 | T | main.rs:750:5:751:13 | S | -| main.rs:757:22:757:36 | ...::new(...) | | main.rs:715:5:719:5 | MyOption | -| main.rs:757:22:757:36 | ...::new(...) | T | main.rs:750:5:751:13 | S | -| main.rs:758:9:758:10 | x2 | | main.rs:715:5:719:5 | MyOption | -| main.rs:758:9:758:10 | x2 | T | main.rs:750:5:751:13 | S | -| main.rs:758:16:758:16 | S | | main.rs:750:5:751:13 | S | -| main.rs:759:26:759:27 | x2 | | main.rs:715:5:719:5 | MyOption | -| main.rs:759:26:759:27 | x2 | T | main.rs:750:5:751:13 | S | -| main.rs:761:13:761:18 | mut x3 | | main.rs:715:5:719:5 | MyOption | -| main.rs:761:22:761:36 | ...::new(...) | | main.rs:715:5:719:5 | MyOption | -| main.rs:762:9:762:10 | x3 | | main.rs:715:5:719:5 | MyOption | -| main.rs:762:21:762:21 | S | | main.rs:750:5:751:13 | S | -| main.rs:763:26:763:27 | x3 | | main.rs:715:5:719:5 | MyOption | -| main.rs:765:13:765:18 | mut x4 | | main.rs:715:5:719:5 | MyOption | -| main.rs:765:13:765:18 | mut x4 | T | main.rs:750:5:751:13 | S | -| main.rs:765:22:765:36 | ...::new(...) | | main.rs:715:5:719:5 | MyOption | -| main.rs:765:22:765:36 | ...::new(...) | T | main.rs:750:5:751:13 | S | -| main.rs:766:23:766:29 | &mut x4 | | file://:0:0:0:0 | & | -| main.rs:766:23:766:29 | &mut x4 | &T | main.rs:715:5:719:5 | MyOption | -| main.rs:766:23:766:29 | &mut x4 | &T.T | main.rs:750:5:751:13 | S | -| main.rs:766:28:766:29 | x4 | | main.rs:715:5:719:5 | MyOption | -| main.rs:766:28:766:29 | x4 | T | main.rs:750:5:751:13 | S | -| main.rs:766:32:766:32 | S | | main.rs:750:5:751:13 | S | -| main.rs:767:26:767:27 | x4 | | main.rs:715:5:719:5 | MyOption | -| main.rs:767:26:767:27 | x4 | T | main.rs:750:5:751:13 | S | -| main.rs:769:13:769:14 | x5 | | main.rs:715:5:719:5 | MyOption | -| main.rs:769:13:769:14 | x5 | T | main.rs:715:5:719:5 | MyOption | -| main.rs:769:13:769:14 | x5 | T.T | main.rs:750:5:751:13 | S | -| main.rs:769:18:769:58 | ...::MySome(...) | | main.rs:715:5:719:5 | MyOption | -| main.rs:769:18:769:58 | ...::MySome(...) | T | main.rs:715:5:719:5 | MyOption | -| main.rs:769:18:769:58 | ...::MySome(...) | T.T | main.rs:750:5:751:13 | S | -| main.rs:769:35:769:57 | ...::MyNone(...) | | main.rs:715:5:719:5 | MyOption | -| main.rs:769:35:769:57 | ...::MyNone(...) | T | main.rs:750:5:751:13 | S | -| main.rs:770:26:770:27 | x5 | | main.rs:715:5:719:5 | MyOption | -| main.rs:770:26:770:27 | x5 | T | main.rs:715:5:719:5 | MyOption | -| main.rs:770:26:770:27 | x5 | T.T | main.rs:750:5:751:13 | S | -| main.rs:772:13:772:14 | x6 | | main.rs:715:5:719:5 | MyOption | -| main.rs:772:13:772:14 | x6 | T | main.rs:715:5:719:5 | MyOption | -| main.rs:772:13:772:14 | x6 | T.T | main.rs:750:5:751:13 | S | -| main.rs:772:18:772:58 | ...::MySome(...) | | main.rs:715:5:719:5 | MyOption | -| main.rs:772:18:772:58 | ...::MySome(...) | T | main.rs:715:5:719:5 | MyOption | -| main.rs:772:18:772:58 | ...::MySome(...) | T.T | main.rs:750:5:751:13 | S | -| main.rs:772:35:772:57 | ...::MyNone(...) | | main.rs:715:5:719:5 | MyOption | -| main.rs:772:35:772:57 | ...::MyNone(...) | T | main.rs:750:5:751:13 | S | -| main.rs:773:26:773:61 | ...::flatten(...) | | main.rs:715:5:719:5 | MyOption | -| main.rs:773:26:773:61 | ...::flatten(...) | T | main.rs:750:5:751:13 | S | -| main.rs:773:59:773:60 | x6 | | main.rs:715:5:719:5 | MyOption | -| main.rs:773:59:773:60 | x6 | T | main.rs:715:5:719:5 | MyOption | -| main.rs:773:59:773:60 | x6 | T.T | main.rs:750:5:751:13 | S | -| main.rs:775:13:775:19 | from_if | | main.rs:715:5:719:5 | MyOption | -| main.rs:775:13:775:19 | from_if | T | main.rs:750:5:751:13 | S | -| main.rs:775:23:779:9 | if ... {...} else {...} | | main.rs:715:5:719:5 | MyOption | -| main.rs:775:23:779:9 | if ... {...} else {...} | T | main.rs:750:5:751:13 | S | -| main.rs:775:36:777:9 | { ... } | | main.rs:715:5:719:5 | MyOption | -| main.rs:775:36:777:9 | { ... } | T | main.rs:750:5:751:13 | S | -| main.rs:776:13:776:30 | ...::MyNone(...) | | main.rs:715:5:719:5 | MyOption | -| main.rs:776:13:776:30 | ...::MyNone(...) | T | main.rs:750:5:751:13 | S | -| main.rs:777:16:779:9 | { ... } | | main.rs:715:5:719:5 | MyOption | -| main.rs:777:16:779:9 | { ... } | T | main.rs:750:5:751:13 | S | -| main.rs:778:13:778:31 | ...::MySome(...) | | main.rs:715:5:719:5 | MyOption | -| main.rs:778:13:778:31 | ...::MySome(...) | T | main.rs:750:5:751:13 | S | -| main.rs:778:30:778:30 | S | | main.rs:750:5:751:13 | S | -| main.rs:780:26:780:32 | from_if | | main.rs:715:5:719:5 | MyOption | -| main.rs:780:26:780:32 | from_if | T | main.rs:750:5:751:13 | S | -| main.rs:782:13:782:22 | from_match | | main.rs:715:5:719:5 | MyOption | -| main.rs:782:13:782:22 | from_match | T | main.rs:750:5:751:13 | S | -| main.rs:782:26:785:9 | match ... { ... } | | main.rs:715:5:719:5 | MyOption | -| main.rs:782:26:785:9 | match ... { ... } | T | main.rs:750:5:751:13 | S | -| main.rs:783:21:783:38 | ...::MyNone(...) | | main.rs:715:5:719:5 | MyOption | -| main.rs:783:21:783:38 | ...::MyNone(...) | T | main.rs:750:5:751:13 | S | -| main.rs:784:22:784:40 | ...::MySome(...) | | main.rs:715:5:719:5 | MyOption | -| main.rs:784:22:784:40 | ...::MySome(...) | T | main.rs:750:5:751:13 | S | -| main.rs:784:39:784:39 | S | | main.rs:750:5:751:13 | S | -| main.rs:786:26:786:35 | from_match | | main.rs:715:5:719:5 | MyOption | -| main.rs:786:26:786:35 | from_match | T | main.rs:750:5:751:13 | S | -| main.rs:788:13:788:21 | from_loop | | main.rs:715:5:719:5 | MyOption | -| main.rs:788:13:788:21 | from_loop | T | main.rs:750:5:751:13 | S | -| main.rs:788:25:793:9 | loop { ... } | | main.rs:715:5:719:5 | MyOption | -| main.rs:788:25:793:9 | loop { ... } | T | main.rs:750:5:751:13 | S | -| main.rs:790:23:790:40 | ...::MyNone(...) | | main.rs:715:5:719:5 | MyOption | -| main.rs:790:23:790:40 | ...::MyNone(...) | T | main.rs:750:5:751:13 | S | -| main.rs:792:19:792:37 | ...::MySome(...) | | main.rs:715:5:719:5 | MyOption | -| main.rs:792:19:792:37 | ...::MySome(...) | T | main.rs:750:5:751:13 | S | -| main.rs:792:36:792:36 | S | | main.rs:750:5:751:13 | S | -| main.rs:794:26:794:34 | from_loop | | main.rs:715:5:719:5 | MyOption | -| main.rs:794:26:794:34 | from_loop | T | main.rs:750:5:751:13 | S | -| main.rs:807:15:807:18 | SelfParam | | main.rs:800:5:801:19 | S | -| main.rs:807:15:807:18 | SelfParam | T | main.rs:806:10:806:10 | T | -| main.rs:807:26:809:9 | { ... } | | main.rs:806:10:806:10 | T | -| main.rs:808:13:808:16 | self | | main.rs:800:5:801:19 | S | -| main.rs:808:13:808:16 | self | T | main.rs:806:10:806:10 | T | -| main.rs:808:13:808:18 | self.0 | | main.rs:806:10:806:10 | T | -| main.rs:811:15:811:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:811:15:811:19 | SelfParam | &T | main.rs:800:5:801:19 | S | -| main.rs:811:15:811:19 | SelfParam | &T.T | main.rs:806:10:806:10 | T | -| main.rs:811:28:813:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:811:28:813:9 | { ... } | &T | main.rs:806:10:806:10 | T | -| main.rs:812:13:812:19 | &... | | file://:0:0:0:0 | & | -| main.rs:812:13:812:19 | &... | &T | main.rs:806:10:806:10 | T | -| main.rs:812:14:812:17 | self | | file://:0:0:0:0 | & | -| main.rs:812:14:812:17 | self | &T | main.rs:800:5:801:19 | S | -| main.rs:812:14:812:17 | self | &T.T | main.rs:806:10:806:10 | T | -| main.rs:812:14:812:19 | self.0 | | main.rs:806:10:806:10 | T | -| main.rs:815:15:815:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:815:15:815:25 | SelfParam | &T | main.rs:800:5:801:19 | S | -| main.rs:815:15:815:25 | SelfParam | &T.T | main.rs:806:10:806:10 | T | -| main.rs:815:34:817:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:815:34:817:9 | { ... } | &T | main.rs:806:10:806:10 | T | -| main.rs:816:13:816:19 | &... | | file://:0:0:0:0 | & | -| main.rs:816:13:816:19 | &... | &T | main.rs:806:10:806:10 | T | -| main.rs:816:14:816:17 | self | | file://:0:0:0:0 | & | -| main.rs:816:14:816:17 | self | &T | main.rs:800:5:801:19 | S | -| main.rs:816:14:816:17 | self | &T.T | main.rs:806:10:806:10 | T | -| main.rs:816:14:816:19 | self.0 | | main.rs:806:10:806:10 | T | -| main.rs:821:13:821:14 | x1 | | main.rs:800:5:801:19 | S | -| main.rs:821:13:821:14 | x1 | T | main.rs:803:5:804:14 | S2 | -| main.rs:821:18:821:22 | S(...) | | main.rs:800:5:801:19 | S | -| main.rs:821:18:821:22 | S(...) | T | main.rs:803:5:804:14 | S2 | -| main.rs:821:20:821:21 | S2 | | main.rs:803:5:804:14 | S2 | -| main.rs:822:26:822:27 | x1 | | main.rs:800:5:801:19 | S | -| main.rs:822:26:822:27 | x1 | T | main.rs:803:5:804:14 | S2 | -| main.rs:822:26:822:32 | x1.m1() | | main.rs:803:5:804:14 | S2 | -| main.rs:824:13:824:14 | x2 | | main.rs:800:5:801:19 | S | -| main.rs:824:13:824:14 | x2 | T | main.rs:803:5:804:14 | S2 | -| main.rs:824:18:824:22 | S(...) | | main.rs:800:5:801:19 | S | -| main.rs:824:18:824:22 | S(...) | T | main.rs:803:5:804:14 | S2 | -| main.rs:824:20:824:21 | S2 | | main.rs:803:5:804:14 | S2 | -| main.rs:826:26:826:27 | x2 | | main.rs:800:5:801:19 | S | -| main.rs:826:26:826:27 | x2 | T | main.rs:803:5:804:14 | S2 | -| main.rs:826:26:826:32 | x2.m2() | | file://:0:0:0:0 | & | -| main.rs:826:26:826:32 | x2.m2() | &T | main.rs:803:5:804:14 | S2 | -| main.rs:827:26:827:27 | x2 | | main.rs:800:5:801:19 | S | -| main.rs:827:26:827:27 | x2 | T | main.rs:803:5:804:14 | S2 | -| main.rs:827:26:827:32 | x2.m3() | | file://:0:0:0:0 | & | -| main.rs:827:26:827:32 | x2.m3() | &T | main.rs:803:5:804:14 | S2 | -| main.rs:829:13:829:14 | x3 | | main.rs:800:5:801:19 | S | -| main.rs:829:13:829:14 | x3 | T | main.rs:803:5:804:14 | S2 | -| main.rs:829:18:829:22 | S(...) | | main.rs:800:5:801:19 | S | -| main.rs:829:18:829:22 | S(...) | T | main.rs:803:5:804:14 | S2 | -| main.rs:829:20:829:21 | S2 | | main.rs:803:5:804:14 | S2 | -| main.rs:831:26:831:41 | ...::m2(...) | | file://:0:0:0:0 | & | -| main.rs:831:26:831:41 | ...::m2(...) | &T | main.rs:803:5:804:14 | S2 | -| main.rs:831:38:831:40 | &x3 | | file://:0:0:0:0 | & | -| main.rs:831:38:831:40 | &x3 | &T | main.rs:800:5:801:19 | S | -| main.rs:831:38:831:40 | &x3 | &T.T | main.rs:803:5:804:14 | S2 | -| main.rs:831:39:831:40 | x3 | | main.rs:800:5:801:19 | S | -| main.rs:831:39:831:40 | x3 | T | main.rs:803:5:804:14 | S2 | -| main.rs:832:26:832:41 | ...::m3(...) | | file://:0:0:0:0 | & | -| main.rs:832:26:832:41 | ...::m3(...) | &T | main.rs:803:5:804:14 | S2 | -| main.rs:832:38:832:40 | &x3 | | file://:0:0:0:0 | & | -| main.rs:832:38:832:40 | &x3 | &T | main.rs:800:5:801:19 | S | -| main.rs:832:38:832:40 | &x3 | &T.T | main.rs:803:5:804:14 | S2 | -| main.rs:832:39:832:40 | x3 | | main.rs:800:5:801:19 | S | -| main.rs:832:39:832:40 | x3 | T | main.rs:803:5:804:14 | S2 | -| main.rs:834:13:834:14 | x4 | | file://:0:0:0:0 | & | -| main.rs:834:13:834:14 | x4 | &T | main.rs:800:5:801:19 | S | -| main.rs:834:13:834:14 | x4 | &T.T | main.rs:803:5:804:14 | S2 | -| main.rs:834:18:834:23 | &... | | file://:0:0:0:0 | & | -| main.rs:834:18:834:23 | &... | &T | main.rs:800:5:801:19 | S | -| main.rs:834:18:834:23 | &... | &T.T | main.rs:803:5:804:14 | S2 | -| main.rs:834:19:834:23 | S(...) | | main.rs:800:5:801:19 | S | -| main.rs:834:19:834:23 | S(...) | T | main.rs:803:5:804:14 | S2 | -| main.rs:834:21:834:22 | S2 | | main.rs:803:5:804:14 | S2 | -| main.rs:836:26:836:27 | x4 | | file://:0:0:0:0 | & | -| main.rs:836:26:836:27 | x4 | &T | main.rs:800:5:801:19 | S | -| main.rs:836:26:836:27 | x4 | &T.T | main.rs:803:5:804:14 | S2 | -| main.rs:836:26:836:32 | x4.m2() | | file://:0:0:0:0 | & | -| main.rs:836:26:836:32 | x4.m2() | &T | main.rs:803:5:804:14 | S2 | -| main.rs:837:26:837:27 | x4 | | file://:0:0:0:0 | & | -| main.rs:837:26:837:27 | x4 | &T | main.rs:800:5:801:19 | S | -| main.rs:837:26:837:27 | x4 | &T.T | main.rs:803:5:804:14 | S2 | -| main.rs:837:26:837:32 | x4.m3() | | file://:0:0:0:0 | & | -| main.rs:837:26:837:32 | x4.m3() | &T | main.rs:803:5:804:14 | S2 | -| main.rs:839:13:839:14 | x5 | | file://:0:0:0:0 | & | -| main.rs:839:13:839:14 | x5 | &T | main.rs:800:5:801:19 | S | -| main.rs:839:13:839:14 | x5 | &T.T | main.rs:803:5:804:14 | S2 | -| main.rs:839:18:839:23 | &... | | file://:0:0:0:0 | & | -| main.rs:839:18:839:23 | &... | &T | main.rs:800:5:801:19 | S | -| main.rs:839:18:839:23 | &... | &T.T | main.rs:803:5:804:14 | S2 | -| main.rs:839:19:839:23 | S(...) | | main.rs:800:5:801:19 | S | -| main.rs:839:19:839:23 | S(...) | T | main.rs:803:5:804:14 | S2 | -| main.rs:839:21:839:22 | S2 | | main.rs:803:5:804:14 | S2 | -| main.rs:841:26:841:27 | x5 | | file://:0:0:0:0 | & | -| main.rs:841:26:841:27 | x5 | &T | main.rs:800:5:801:19 | S | -| main.rs:841:26:841:27 | x5 | &T.T | main.rs:803:5:804:14 | S2 | -| main.rs:841:26:841:32 | x5.m1() | | main.rs:803:5:804:14 | S2 | -| main.rs:842:26:842:27 | x5 | | file://:0:0:0:0 | & | -| main.rs:842:26:842:27 | x5 | &T | main.rs:800:5:801:19 | S | -| main.rs:842:26:842:27 | x5 | &T.T | main.rs:803:5:804:14 | S2 | -| main.rs:842:26:842:29 | x5.0 | | main.rs:803:5:804:14 | S2 | -| main.rs:844:13:844:14 | x6 | | file://:0:0:0:0 | & | -| main.rs:844:13:844:14 | x6 | &T | main.rs:800:5:801:19 | S | -| main.rs:844:13:844:14 | x6 | &T.T | main.rs:803:5:804:14 | S2 | -| main.rs:844:18:844:23 | &... | | file://:0:0:0:0 | & | -| main.rs:844:18:844:23 | &... | &T | main.rs:800:5:801:19 | S | -| main.rs:844:18:844:23 | &... | &T.T | main.rs:803:5:804:14 | S2 | -| main.rs:844:19:844:23 | S(...) | | main.rs:800:5:801:19 | S | -| main.rs:844:19:844:23 | S(...) | T | main.rs:803:5:804:14 | S2 | -| main.rs:844:21:844:22 | S2 | | main.rs:803:5:804:14 | S2 | -| main.rs:846:26:846:30 | (...) | | main.rs:800:5:801:19 | S | -| main.rs:846:26:846:30 | (...) | T | main.rs:803:5:804:14 | S2 | -| main.rs:846:26:846:35 | ... .m1() | | main.rs:803:5:804:14 | S2 | -| main.rs:846:27:846:29 | * ... | | main.rs:800:5:801:19 | S | -| main.rs:846:27:846:29 | * ... | T | main.rs:803:5:804:14 | S2 | -| main.rs:846:28:846:29 | x6 | | file://:0:0:0:0 | & | -| main.rs:846:28:846:29 | x6 | &T | main.rs:800:5:801:19 | S | -| main.rs:846:28:846:29 | x6 | &T.T | main.rs:803:5:804:14 | S2 | -| main.rs:853:16:853:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:853:16:853:20 | SelfParam | &T | main.rs:851:5:859:5 | Self [trait MyTrait] | -| main.rs:856:16:856:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:856:16:856:20 | SelfParam | &T | main.rs:851:5:859:5 | Self [trait MyTrait] | -| main.rs:856:32:858:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:856:32:858:9 | { ... } | &T | main.rs:851:5:859:5 | Self [trait MyTrait] | -| main.rs:857:13:857:16 | self | | file://:0:0:0:0 | & | -| main.rs:857:13:857:16 | self | &T | main.rs:851:5:859:5 | Self [trait MyTrait] | -| main.rs:857:13:857:22 | self.foo() | | file://:0:0:0:0 | & | -| main.rs:857:13:857:22 | self.foo() | &T | main.rs:851:5:859:5 | Self [trait MyTrait] | -| main.rs:865:16:865:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:865:16:865:20 | SelfParam | &T | main.rs:861:5:861:20 | MyStruct | -| main.rs:865:36:867:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:865:36:867:9 | { ... } | &T | main.rs:861:5:861:20 | MyStruct | -| main.rs:866:13:866:16 | self | | file://:0:0:0:0 | & | -| main.rs:866:13:866:16 | self | &T | main.rs:861:5:861:20 | MyStruct | -| main.rs:871:13:871:13 | x | | main.rs:861:5:861:20 | MyStruct | -| main.rs:871:17:871:24 | MyStruct | | main.rs:861:5:861:20 | MyStruct | -| main.rs:872:9:872:9 | x | | main.rs:861:5:861:20 | MyStruct | -| main.rs:872:9:872:15 | x.bar() | | file://:0:0:0:0 | & | -| main.rs:872:9:872:15 | x.bar() | &T | main.rs:861:5:861:20 | MyStruct | -| main.rs:882:16:882:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:882:16:882:20 | SelfParam | &T | main.rs:879:5:879:26 | MyStruct | -| main.rs:882:16:882:20 | SelfParam | &T.T | main.rs:881:10:881:10 | T | -| main.rs:882:32:884:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:882:32:884:9 | { ... } | &T | main.rs:879:5:879:26 | MyStruct | -| main.rs:882:32:884:9 | { ... } | &T.T | main.rs:881:10:881:10 | T | -| main.rs:883:13:883:16 | self | | file://:0:0:0:0 | & | -| main.rs:883:13:883:16 | self | &T | main.rs:879:5:879:26 | MyStruct | -| main.rs:883:13:883:16 | self | &T.T | main.rs:881:10:881:10 | T | -| main.rs:888:13:888:13 | x | | main.rs:879:5:879:26 | MyStruct | -| main.rs:888:13:888:13 | x | T | main.rs:877:5:877:13 | S | -| main.rs:888:17:888:27 | MyStruct(...) | | main.rs:879:5:879:26 | MyStruct | -| main.rs:888:17:888:27 | MyStruct(...) | T | main.rs:877:5:877:13 | S | -| main.rs:888:26:888:26 | S | | main.rs:877:5:877:13 | S | -| main.rs:889:9:889:9 | x | | main.rs:879:5:879:26 | MyStruct | -| main.rs:889:9:889:9 | x | T | main.rs:877:5:877:13 | S | -| main.rs:889:9:889:15 | x.foo() | | file://:0:0:0:0 | & | -| main.rs:889:9:889:15 | x.foo() | &T | main.rs:879:5:879:26 | MyStruct | -| main.rs:889:9:889:15 | x.foo() | &T.T | main.rs:877:5:877:13 | S | -| main.rs:897:15:897:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:897:15:897:19 | SelfParam | &T | main.rs:894:5:894:13 | S | -| main.rs:897:31:899:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:897:31:899:9 | { ... } | &T | main.rs:894:5:894:13 | S | -| main.rs:898:13:898:19 | &... | | file://:0:0:0:0 | & | -| main.rs:898:13:898:19 | &... | &T | main.rs:894:5:894:13 | S | -| main.rs:898:14:898:19 | &... | | file://:0:0:0:0 | & | -| main.rs:898:14:898:19 | &... | &T | main.rs:894:5:894:13 | S | -| main.rs:898:15:898:19 | &self | | file://:0:0:0:0 | & | -| main.rs:898:15:898:19 | &self | &T | main.rs:894:5:894:13 | S | -| main.rs:898:16:898:19 | self | | file://:0:0:0:0 | & | -| main.rs:898:16:898:19 | self | &T | main.rs:894:5:894:13 | S | -| main.rs:901:15:901:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:901:15:901:25 | SelfParam | &T | main.rs:894:5:894:13 | S | -| main.rs:901:37:903:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:901:37:903:9 | { ... } | &T | main.rs:894:5:894:13 | S | -| main.rs:902:13:902:19 | &... | | file://:0:0:0:0 | & | -| main.rs:902:13:902:19 | &... | &T | main.rs:894:5:894:13 | S | -| main.rs:902:14:902:19 | &... | | file://:0:0:0:0 | & | -| main.rs:902:14:902:19 | &... | &T | main.rs:894:5:894:13 | S | -| main.rs:902:15:902:19 | &self | | file://:0:0:0:0 | & | -| main.rs:902:15:902:19 | &self | &T | main.rs:894:5:894:13 | S | -| main.rs:902:16:902:19 | self | | file://:0:0:0:0 | & | -| main.rs:902:16:902:19 | self | &T | main.rs:894:5:894:13 | S | -| main.rs:905:15:905:15 | x | | file://:0:0:0:0 | & | -| main.rs:905:15:905:15 | x | &T | main.rs:894:5:894:13 | S | -| main.rs:905:34:907:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:905:34:907:9 | { ... } | &T | main.rs:894:5:894:13 | S | -| main.rs:906:13:906:13 | x | | file://:0:0:0:0 | & | -| main.rs:906:13:906:13 | x | &T | main.rs:894:5:894:13 | S | -| main.rs:909:15:909:15 | x | | file://:0:0:0:0 | & | -| main.rs:909:15:909:15 | x | &T | main.rs:894:5:894:13 | S | -| main.rs:909:34:911:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:909:34:911:9 | { ... } | &T | main.rs:894:5:894:13 | S | -| main.rs:910:13:910:16 | &... | | file://:0:0:0:0 | & | -| main.rs:910:13:910:16 | &... | &T | main.rs:894:5:894:13 | S | -| main.rs:910:14:910:16 | &... | | file://:0:0:0:0 | & | -| main.rs:910:14:910:16 | &... | &T | main.rs:894:5:894:13 | S | -| main.rs:910:15:910:16 | &x | | file://:0:0:0:0 | & | -| main.rs:910:15:910:16 | &x | &T | main.rs:894:5:894:13 | S | -| main.rs:910:16:910:16 | x | | file://:0:0:0:0 | & | -| main.rs:910:16:910:16 | x | &T | main.rs:894:5:894:13 | S | -| main.rs:915:13:915:13 | x | | main.rs:894:5:894:13 | S | -| main.rs:915:17:915:20 | S {...} | | main.rs:894:5:894:13 | S | -| main.rs:916:9:916:9 | x | | main.rs:894:5:894:13 | S | -| main.rs:916:9:916:14 | x.f1() | | file://:0:0:0:0 | & | -| main.rs:916:9:916:14 | x.f1() | &T | main.rs:894:5:894:13 | S | -| main.rs:917:9:917:9 | x | | main.rs:894:5:894:13 | S | -| main.rs:917:9:917:14 | x.f2() | | file://:0:0:0:0 | & | -| main.rs:917:9:917:14 | x.f2() | &T | main.rs:894:5:894:13 | S | -| main.rs:918:9:918:17 | ...::f3(...) | | file://:0:0:0:0 | & | -| main.rs:918:9:918:17 | ...::f3(...) | &T | main.rs:894:5:894:13 | S | -| main.rs:918:15:918:16 | &x | | file://:0:0:0:0 | & | -| main.rs:918:15:918:16 | &x | &T | main.rs:894:5:894:13 | S | -| main.rs:918:16:918:16 | x | | main.rs:894:5:894:13 | S | -| main.rs:924:5:924:20 | ...::f(...) | | main.rs:67:5:67:21 | Foo | -| main.rs:925:5:925:60 | ...::g(...) | | main.rs:67:5:67:21 | Foo | -| main.rs:925:20:925:38 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | -| main.rs:925:41:925:59 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | +| main.rs:163:15:163:18 | SelfParam | | main.rs:162:5:171:5 | Self [trait MyTrait] | +| main.rs:165:15:165:18 | SelfParam | | main.rs:162:5:171:5 | Self [trait MyTrait] | +| main.rs:168:9:170:9 | { ... } | | main.rs:162:5:171:5 | Self [trait MyTrait] | +| main.rs:169:13:169:16 | self | | main.rs:162:5:171:5 | Self [trait MyTrait] | +| main.rs:175:16:175:19 | SelfParam | | main.rs:173:5:178:5 | Self [trait MyProduct] | +| main.rs:177:16:177:19 | SelfParam | | main.rs:173:5:178:5 | Self [trait MyProduct] | +| main.rs:180:43:180:43 | x | | main.rs:180:26:180:40 | T2 | +| main.rs:180:56:182:5 | { ... } | | main.rs:180:22:180:23 | T1 | +| main.rs:181:9:181:9 | x | | main.rs:180:26:180:40 | T2 | +| main.rs:181:9:181:14 | x.m1() | | main.rs:180:22:180:23 | T1 | +| main.rs:186:15:186:18 | SelfParam | | main.rs:144:5:147:5 | MyThing | +| main.rs:186:15:186:18 | SelfParam | A | main.rs:155:5:156:14 | S1 | +| main.rs:186:27:188:9 | { ... } | | main.rs:155:5:156:14 | S1 | +| main.rs:187:13:187:16 | self | | main.rs:144:5:147:5 | MyThing | +| main.rs:187:13:187:16 | self | A | main.rs:155:5:156:14 | S1 | +| main.rs:187:13:187:18 | self.a | | main.rs:155:5:156:14 | S1 | +| main.rs:193:15:193:18 | SelfParam | | main.rs:144:5:147:5 | MyThing | +| main.rs:193:15:193:18 | SelfParam | A | main.rs:157:5:158:14 | S2 | +| main.rs:193:29:195:9 | { ... } | | main.rs:144:5:147:5 | MyThing | +| main.rs:193:29:195:9 | { ... } | A | main.rs:157:5:158:14 | S2 | +| main.rs:194:13:194:30 | Self {...} | | main.rs:144:5:147:5 | MyThing | +| main.rs:194:13:194:30 | Self {...} | A | main.rs:157:5:158:14 | S2 | +| main.rs:194:23:194:26 | self | | main.rs:144:5:147:5 | MyThing | +| main.rs:194:23:194:26 | self | A | main.rs:157:5:158:14 | S2 | +| main.rs:194:23:194:28 | self.a | | main.rs:157:5:158:14 | S2 | +| main.rs:205:15:205:18 | SelfParam | | main.rs:144:5:147:5 | MyThing | +| main.rs:205:15:205:18 | SelfParam | A | main.rs:159:5:160:14 | S3 | +| main.rs:205:27:207:9 | { ... } | | main.rs:200:10:200:11 | TD | +| main.rs:206:13:206:25 | ...::default(...) | | main.rs:200:10:200:11 | TD | +| main.rs:212:15:212:18 | SelfParam | | main.rs:149:5:153:5 | MyPair | +| main.rs:212:15:212:18 | SelfParam | P1 | main.rs:210:10:210:10 | I | +| main.rs:212:15:212:18 | SelfParam | P2 | main.rs:155:5:156:14 | S1 | +| main.rs:212:26:214:9 | { ... } | | main.rs:210:10:210:10 | I | +| main.rs:213:13:213:16 | self | | main.rs:149:5:153:5 | MyPair | +| main.rs:213:13:213:16 | self | P1 | main.rs:210:10:210:10 | I | +| main.rs:213:13:213:16 | self | P2 | main.rs:155:5:156:14 | S1 | +| main.rs:213:13:213:19 | self.p1 | | main.rs:210:10:210:10 | I | +| main.rs:219:15:219:18 | SelfParam | | main.rs:149:5:153:5 | MyPair | +| main.rs:219:15:219:18 | SelfParam | P1 | main.rs:155:5:156:14 | S1 | +| main.rs:219:15:219:18 | SelfParam | P2 | main.rs:157:5:158:14 | S2 | +| main.rs:219:27:221:9 | { ... } | | main.rs:159:5:160:14 | S3 | +| main.rs:220:13:220:14 | S3 | | main.rs:159:5:160:14 | S3 | +| main.rs:226:15:226:18 | SelfParam | | main.rs:149:5:153:5 | MyPair | +| main.rs:226:15:226:18 | SelfParam | P1 | main.rs:144:5:147:5 | MyThing | +| main.rs:226:15:226:18 | SelfParam | P1.A | main.rs:224:10:224:11 | TT | +| main.rs:226:15:226:18 | SelfParam | P2 | main.rs:159:5:160:14 | S3 | +| main.rs:226:27:229:9 | { ... } | | main.rs:224:10:224:11 | TT | +| main.rs:227:17:227:21 | alpha | | main.rs:144:5:147:5 | MyThing | +| main.rs:227:17:227:21 | alpha | A | main.rs:224:10:224:11 | TT | +| main.rs:227:25:227:28 | self | | main.rs:149:5:153:5 | MyPair | +| main.rs:227:25:227:28 | self | P1 | main.rs:144:5:147:5 | MyThing | +| main.rs:227:25:227:28 | self | P1.A | main.rs:224:10:224:11 | TT | +| main.rs:227:25:227:28 | self | P2 | main.rs:159:5:160:14 | S3 | +| main.rs:227:25:227:31 | self.p1 | | main.rs:144:5:147:5 | MyThing | +| main.rs:227:25:227:31 | self.p1 | A | main.rs:224:10:224:11 | TT | +| main.rs:228:13:228:17 | alpha | | main.rs:144:5:147:5 | MyThing | +| main.rs:228:13:228:17 | alpha | A | main.rs:224:10:224:11 | TT | +| main.rs:228:13:228:19 | alpha.a | | main.rs:224:10:224:11 | TT | +| main.rs:235:16:235:19 | SelfParam | | main.rs:149:5:153:5 | MyPair | +| main.rs:235:16:235:19 | SelfParam | P1 | main.rs:233:10:233:10 | A | +| main.rs:235:16:235:19 | SelfParam | P2 | main.rs:233:10:233:10 | A | +| main.rs:235:27:237:9 | { ... } | | main.rs:233:10:233:10 | A | +| main.rs:236:13:236:16 | self | | main.rs:149:5:153:5 | MyPair | +| main.rs:236:13:236:16 | self | P1 | main.rs:233:10:233:10 | A | +| main.rs:236:13:236:16 | self | P2 | main.rs:233:10:233:10 | A | +| main.rs:236:13:236:19 | self.p1 | | main.rs:233:10:233:10 | A | +| main.rs:240:16:240:19 | SelfParam | | main.rs:149:5:153:5 | MyPair | +| main.rs:240:16:240:19 | SelfParam | P1 | main.rs:233:10:233:10 | A | +| main.rs:240:16:240:19 | SelfParam | P2 | main.rs:233:10:233:10 | A | +| main.rs:240:27:242:9 | { ... } | | main.rs:233:10:233:10 | A | +| main.rs:241:13:241:16 | self | | main.rs:149:5:153:5 | MyPair | +| main.rs:241:13:241:16 | self | P1 | main.rs:233:10:233:10 | A | +| main.rs:241:13:241:16 | self | P2 | main.rs:233:10:233:10 | A | +| main.rs:241:13:241:19 | self.p2 | | main.rs:233:10:233:10 | A | +| main.rs:248:16:248:19 | SelfParam | | main.rs:149:5:153:5 | MyPair | +| main.rs:248:16:248:19 | SelfParam | P1 | main.rs:157:5:158:14 | S2 | +| main.rs:248:16:248:19 | SelfParam | P2 | main.rs:155:5:156:14 | S1 | +| main.rs:248:28:250:9 | { ... } | | main.rs:155:5:156:14 | S1 | +| main.rs:249:13:249:16 | self | | main.rs:149:5:153:5 | MyPair | +| main.rs:249:13:249:16 | self | P1 | main.rs:157:5:158:14 | S2 | +| main.rs:249:13:249:16 | self | P2 | main.rs:155:5:156:14 | S1 | +| main.rs:249:13:249:19 | self.p2 | | main.rs:155:5:156:14 | S1 | +| main.rs:253:16:253:19 | SelfParam | | main.rs:149:5:153:5 | MyPair | +| main.rs:253:16:253:19 | SelfParam | P1 | main.rs:157:5:158:14 | S2 | +| main.rs:253:16:253:19 | SelfParam | P2 | main.rs:155:5:156:14 | S1 | +| main.rs:253:28:255:9 | { ... } | | main.rs:157:5:158:14 | S2 | +| main.rs:254:13:254:16 | self | | main.rs:149:5:153:5 | MyPair | +| main.rs:254:13:254:16 | self | P1 | main.rs:157:5:158:14 | S2 | +| main.rs:254:13:254:16 | self | P2 | main.rs:155:5:156:14 | S1 | +| main.rs:254:13:254:19 | self.p1 | | main.rs:157:5:158:14 | S2 | +| main.rs:258:46:258:46 | p | | main.rs:258:24:258:43 | P | +| main.rs:258:58:260:5 | { ... } | | main.rs:258:16:258:17 | V1 | +| main.rs:259:9:259:9 | p | | main.rs:258:24:258:43 | P | +| main.rs:259:9:259:15 | p.fst() | | main.rs:258:16:258:17 | V1 | +| main.rs:262:46:262:46 | p | | main.rs:262:24:262:43 | P | +| main.rs:262:58:264:5 | { ... } | | main.rs:262:20:262:21 | V2 | +| main.rs:263:9:263:9 | p | | main.rs:262:24:262:43 | P | +| main.rs:263:9:263:15 | p.snd() | | main.rs:262:20:262:21 | V2 | +| main.rs:266:54:266:54 | p | | main.rs:149:5:153:5 | MyPair | +| main.rs:266:54:266:54 | p | P1 | main.rs:266:20:266:21 | V0 | +| main.rs:266:54:266:54 | p | P2 | main.rs:266:32:266:51 | P | +| main.rs:266:78:268:5 | { ... } | | main.rs:266:24:266:25 | V1 | +| main.rs:267:9:267:9 | p | | main.rs:149:5:153:5 | MyPair | +| main.rs:267:9:267:9 | p | P1 | main.rs:266:20:266:21 | V0 | +| main.rs:267:9:267:9 | p | P2 | main.rs:266:32:266:51 | P | +| main.rs:267:9:267:12 | p.p2 | | main.rs:266:32:266:51 | P | +| main.rs:267:9:267:18 | ... .fst() | | main.rs:266:24:266:25 | V1 | +| main.rs:272:23:272:26 | SelfParam | | main.rs:270:5:273:5 | Self [trait ConvertTo] | +| main.rs:277:23:277:26 | SelfParam | | main.rs:275:10:275:23 | T | +| main.rs:277:35:279:9 | { ... } | | main.rs:155:5:156:14 | S1 | +| main.rs:278:13:278:16 | self | | main.rs:275:10:275:23 | T | +| main.rs:278:13:278:21 | self.m1() | | main.rs:155:5:156:14 | S1 | +| main.rs:282:41:282:45 | thing | | main.rs:282:23:282:38 | T | +| main.rs:282:57:284:5 | { ... } | | main.rs:282:19:282:20 | TS | +| main.rs:283:9:283:13 | thing | | main.rs:282:23:282:38 | T | +| main.rs:283:9:283:26 | thing.convert_to() | | main.rs:282:19:282:20 | TS | +| main.rs:286:56:286:60 | thing | | main.rs:286:39:286:53 | TP | +| main.rs:286:73:289:5 | { ... } | | main.rs:155:5:156:14 | S1 | +| main.rs:288:9:288:13 | thing | | main.rs:286:39:286:53 | TP | +| main.rs:288:9:288:26 | thing.convert_to() | | main.rs:155:5:156:14 | S1 | +| main.rs:292:13:292:20 | thing_s1 | | main.rs:144:5:147:5 | MyThing | +| main.rs:292:13:292:20 | thing_s1 | A | main.rs:155:5:156:14 | S1 | +| main.rs:292:24:292:40 | MyThing {...} | | main.rs:144:5:147:5 | MyThing | +| main.rs:292:24:292:40 | MyThing {...} | A | main.rs:155:5:156:14 | S1 | +| main.rs:292:37:292:38 | S1 | | main.rs:155:5:156:14 | S1 | +| main.rs:293:13:293:20 | thing_s2 | | main.rs:144:5:147:5 | MyThing | +| main.rs:293:13:293:20 | thing_s2 | A | main.rs:157:5:158:14 | S2 | +| main.rs:293:24:293:40 | MyThing {...} | | main.rs:144:5:147:5 | MyThing | +| main.rs:293:24:293:40 | MyThing {...} | A | main.rs:157:5:158:14 | S2 | +| main.rs:293:37:293:38 | S2 | | main.rs:157:5:158:14 | S2 | +| main.rs:294:13:294:20 | thing_s3 | | main.rs:144:5:147:5 | MyThing | +| main.rs:294:13:294:20 | thing_s3 | A | main.rs:159:5:160:14 | S3 | +| main.rs:294:24:294:40 | MyThing {...} | | main.rs:144:5:147:5 | MyThing | +| main.rs:294:24:294:40 | MyThing {...} | A | main.rs:159:5:160:14 | S3 | +| main.rs:294:37:294:38 | S3 | | main.rs:159:5:160:14 | S3 | +| main.rs:298:26:298:33 | thing_s1 | | main.rs:144:5:147:5 | MyThing | +| main.rs:298:26:298:33 | thing_s1 | A | main.rs:155:5:156:14 | S1 | +| main.rs:298:26:298:38 | thing_s1.m1() | | main.rs:155:5:156:14 | S1 | +| main.rs:299:26:299:33 | thing_s2 | | main.rs:144:5:147:5 | MyThing | +| main.rs:299:26:299:33 | thing_s2 | A | main.rs:157:5:158:14 | S2 | +| main.rs:299:26:299:38 | thing_s2.m1() | | main.rs:144:5:147:5 | MyThing | +| main.rs:299:26:299:38 | thing_s2.m1() | A | main.rs:157:5:158:14 | S2 | +| main.rs:299:26:299:40 | ... .a | | main.rs:157:5:158:14 | S2 | +| main.rs:300:13:300:14 | s3 | | main.rs:159:5:160:14 | S3 | +| main.rs:300:22:300:29 | thing_s3 | | main.rs:144:5:147:5 | MyThing | +| main.rs:300:22:300:29 | thing_s3 | A | main.rs:159:5:160:14 | S3 | +| main.rs:300:22:300:34 | thing_s3.m1() | | main.rs:159:5:160:14 | S3 | +| main.rs:301:26:301:27 | s3 | | main.rs:159:5:160:14 | S3 | +| main.rs:303:13:303:14 | p1 | | main.rs:149:5:153:5 | MyPair | +| main.rs:303:13:303:14 | p1 | P1 | main.rs:155:5:156:14 | S1 | +| main.rs:303:13:303:14 | p1 | P2 | main.rs:155:5:156:14 | S1 | +| main.rs:303:18:303:42 | MyPair {...} | | main.rs:149:5:153:5 | MyPair | +| main.rs:303:18:303:42 | MyPair {...} | P1 | main.rs:155:5:156:14 | S1 | +| main.rs:303:18:303:42 | MyPair {...} | P2 | main.rs:155:5:156:14 | S1 | +| main.rs:303:31:303:32 | S1 | | main.rs:155:5:156:14 | S1 | +| main.rs:303:39:303:40 | S1 | | main.rs:155:5:156:14 | S1 | +| main.rs:304:26:304:27 | p1 | | main.rs:149:5:153:5 | MyPair | +| main.rs:304:26:304:27 | p1 | P1 | main.rs:155:5:156:14 | S1 | +| main.rs:304:26:304:27 | p1 | P2 | main.rs:155:5:156:14 | S1 | +| main.rs:304:26:304:32 | p1.m1() | | main.rs:155:5:156:14 | S1 | +| main.rs:306:13:306:14 | p2 | | main.rs:149:5:153:5 | MyPair | +| main.rs:306:13:306:14 | p2 | P1 | main.rs:155:5:156:14 | S1 | +| main.rs:306:13:306:14 | p2 | P2 | main.rs:157:5:158:14 | S2 | +| main.rs:306:18:306:42 | MyPair {...} | | main.rs:149:5:153:5 | MyPair | +| main.rs:306:18:306:42 | MyPair {...} | P1 | main.rs:155:5:156:14 | S1 | +| main.rs:306:18:306:42 | MyPair {...} | P2 | main.rs:157:5:158:14 | S2 | +| main.rs:306:31:306:32 | S1 | | main.rs:155:5:156:14 | S1 | +| main.rs:306:39:306:40 | S2 | | main.rs:157:5:158:14 | S2 | +| main.rs:307:26:307:27 | p2 | | main.rs:149:5:153:5 | MyPair | +| main.rs:307:26:307:27 | p2 | P1 | main.rs:155:5:156:14 | S1 | +| main.rs:307:26:307:27 | p2 | P2 | main.rs:157:5:158:14 | S2 | +| main.rs:307:26:307:32 | p2.m1() | | main.rs:159:5:160:14 | S3 | +| main.rs:309:13:309:14 | p3 | | main.rs:149:5:153:5 | MyPair | +| main.rs:309:13:309:14 | p3 | P1 | main.rs:144:5:147:5 | MyThing | +| main.rs:309:13:309:14 | p3 | P1.A | main.rs:155:5:156:14 | S1 | +| main.rs:309:13:309:14 | p3 | P2 | main.rs:159:5:160:14 | S3 | +| main.rs:309:18:312:9 | MyPair {...} | | main.rs:149:5:153:5 | MyPair | +| main.rs:309:18:312:9 | MyPair {...} | P1 | main.rs:144:5:147:5 | MyThing | +| main.rs:309:18:312:9 | MyPair {...} | P1.A | main.rs:155:5:156:14 | S1 | +| main.rs:309:18:312:9 | MyPair {...} | P2 | main.rs:159:5:160:14 | S3 | +| main.rs:310:17:310:33 | MyThing {...} | | main.rs:144:5:147:5 | MyThing | +| main.rs:310:17:310:33 | MyThing {...} | A | main.rs:155:5:156:14 | S1 | +| main.rs:310:30:310:31 | S1 | | main.rs:155:5:156:14 | S1 | +| main.rs:311:17:311:18 | S3 | | main.rs:159:5:160:14 | S3 | +| main.rs:313:26:313:27 | p3 | | main.rs:149:5:153:5 | MyPair | +| main.rs:313:26:313:27 | p3 | P1 | main.rs:144:5:147:5 | MyThing | +| main.rs:313:26:313:27 | p3 | P1.A | main.rs:155:5:156:14 | S1 | +| main.rs:313:26:313:27 | p3 | P2 | main.rs:159:5:160:14 | S3 | +| main.rs:313:26:313:32 | p3.m1() | | main.rs:155:5:156:14 | S1 | +| main.rs:316:13:316:13 | a | | main.rs:149:5:153:5 | MyPair | +| main.rs:316:13:316:13 | a | P1 | main.rs:155:5:156:14 | S1 | +| main.rs:316:13:316:13 | a | P2 | main.rs:155:5:156:14 | S1 | +| main.rs:316:17:316:41 | MyPair {...} | | main.rs:149:5:153:5 | MyPair | +| main.rs:316:17:316:41 | MyPair {...} | P1 | main.rs:155:5:156:14 | S1 | +| main.rs:316:17:316:41 | MyPair {...} | P2 | main.rs:155:5:156:14 | S1 | +| main.rs:316:30:316:31 | S1 | | main.rs:155:5:156:14 | S1 | +| main.rs:316:38:316:39 | S1 | | main.rs:155:5:156:14 | S1 | +| main.rs:317:13:317:13 | x | | main.rs:155:5:156:14 | S1 | +| main.rs:317:17:317:17 | a | | main.rs:149:5:153:5 | MyPair | +| main.rs:317:17:317:17 | a | P1 | main.rs:155:5:156:14 | S1 | +| main.rs:317:17:317:17 | a | P2 | main.rs:155:5:156:14 | S1 | +| main.rs:317:17:317:23 | a.fst() | | main.rs:155:5:156:14 | S1 | +| main.rs:318:26:318:26 | x | | main.rs:155:5:156:14 | S1 | +| main.rs:319:13:319:13 | y | | main.rs:155:5:156:14 | S1 | +| main.rs:319:17:319:17 | a | | main.rs:149:5:153:5 | MyPair | +| main.rs:319:17:319:17 | a | P1 | main.rs:155:5:156:14 | S1 | +| main.rs:319:17:319:17 | a | P2 | main.rs:155:5:156:14 | S1 | +| main.rs:319:17:319:23 | a.snd() | | main.rs:155:5:156:14 | S1 | +| main.rs:320:26:320:26 | y | | main.rs:155:5:156:14 | S1 | +| main.rs:326:13:326:13 | b | | main.rs:149:5:153:5 | MyPair | +| main.rs:326:13:326:13 | b | P1 | main.rs:157:5:158:14 | S2 | +| main.rs:326:13:326:13 | b | P2 | main.rs:155:5:156:14 | S1 | +| main.rs:326:17:326:41 | MyPair {...} | | main.rs:149:5:153:5 | MyPair | +| main.rs:326:17:326:41 | MyPair {...} | P1 | main.rs:157:5:158:14 | S2 | +| main.rs:326:17:326:41 | MyPair {...} | P2 | main.rs:155:5:156:14 | S1 | +| main.rs:326:30:326:31 | S2 | | main.rs:157:5:158:14 | S2 | +| main.rs:326:38:326:39 | S1 | | main.rs:155:5:156:14 | S1 | +| main.rs:327:13:327:13 | x | | main.rs:155:5:156:14 | S1 | +| main.rs:327:17:327:17 | b | | main.rs:149:5:153:5 | MyPair | +| main.rs:327:17:327:17 | b | P1 | main.rs:157:5:158:14 | S2 | +| main.rs:327:17:327:17 | b | P2 | main.rs:155:5:156:14 | S1 | +| main.rs:327:17:327:23 | b.fst() | | main.rs:155:5:156:14 | S1 | +| main.rs:328:26:328:26 | x | | main.rs:155:5:156:14 | S1 | +| main.rs:329:13:329:13 | y | | main.rs:157:5:158:14 | S2 | +| main.rs:329:17:329:17 | b | | main.rs:149:5:153:5 | MyPair | +| main.rs:329:17:329:17 | b | P1 | main.rs:157:5:158:14 | S2 | +| main.rs:329:17:329:17 | b | P2 | main.rs:155:5:156:14 | S1 | +| main.rs:329:17:329:23 | b.snd() | | main.rs:157:5:158:14 | S2 | +| main.rs:330:26:330:26 | y | | main.rs:157:5:158:14 | S2 | +| main.rs:334:13:334:13 | x | | main.rs:155:5:156:14 | S1 | +| main.rs:334:17:334:39 | call_trait_m1(...) | | main.rs:155:5:156:14 | S1 | +| main.rs:334:31:334:38 | thing_s1 | | main.rs:144:5:147:5 | MyThing | +| main.rs:334:31:334:38 | thing_s1 | A | main.rs:155:5:156:14 | S1 | +| main.rs:335:26:335:26 | x | | main.rs:155:5:156:14 | S1 | +| main.rs:336:13:336:13 | y | | main.rs:144:5:147:5 | MyThing | +| main.rs:336:13:336:13 | y | A | main.rs:157:5:158:14 | S2 | +| main.rs:336:17:336:39 | call_trait_m1(...) | | main.rs:144:5:147:5 | MyThing | +| main.rs:336:17:336:39 | call_trait_m1(...) | A | main.rs:157:5:158:14 | S2 | +| main.rs:336:31:336:38 | thing_s2 | | main.rs:144:5:147:5 | MyThing | +| main.rs:336:31:336:38 | thing_s2 | A | main.rs:157:5:158:14 | S2 | +| main.rs:337:26:337:26 | y | | main.rs:144:5:147:5 | MyThing | +| main.rs:337:26:337:26 | y | A | main.rs:157:5:158:14 | S2 | +| main.rs:337:26:337:28 | y.a | | main.rs:157:5:158:14 | S2 | +| main.rs:340:13:340:13 | a | | main.rs:149:5:153:5 | MyPair | +| main.rs:340:13:340:13 | a | P1 | main.rs:155:5:156:14 | S1 | +| main.rs:340:13:340:13 | a | P2 | main.rs:155:5:156:14 | S1 | +| main.rs:340:17:340:41 | MyPair {...} | | main.rs:149:5:153:5 | MyPair | +| main.rs:340:17:340:41 | MyPair {...} | P1 | main.rs:155:5:156:14 | S1 | +| main.rs:340:17:340:41 | MyPair {...} | P2 | main.rs:155:5:156:14 | S1 | +| main.rs:340:30:340:31 | S1 | | main.rs:155:5:156:14 | S1 | +| main.rs:340:38:340:39 | S1 | | main.rs:155:5:156:14 | S1 | +| main.rs:341:13:341:13 | x | | main.rs:155:5:156:14 | S1 | +| main.rs:341:17:341:26 | get_fst(...) | | main.rs:155:5:156:14 | S1 | +| main.rs:341:25:341:25 | a | | main.rs:149:5:153:5 | MyPair | +| main.rs:341:25:341:25 | a | P1 | main.rs:155:5:156:14 | S1 | +| main.rs:341:25:341:25 | a | P2 | main.rs:155:5:156:14 | S1 | +| main.rs:342:26:342:26 | x | | main.rs:155:5:156:14 | S1 | +| main.rs:343:13:343:13 | y | | main.rs:155:5:156:14 | S1 | +| main.rs:343:17:343:26 | get_snd(...) | | main.rs:155:5:156:14 | S1 | +| main.rs:343:25:343:25 | a | | main.rs:149:5:153:5 | MyPair | +| main.rs:343:25:343:25 | a | P1 | main.rs:155:5:156:14 | S1 | +| main.rs:343:25:343:25 | a | P2 | main.rs:155:5:156:14 | S1 | +| main.rs:344:26:344:26 | y | | main.rs:155:5:156:14 | S1 | +| main.rs:347:13:347:13 | b | | main.rs:149:5:153:5 | MyPair | +| main.rs:347:13:347:13 | b | P1 | main.rs:157:5:158:14 | S2 | +| main.rs:347:13:347:13 | b | P2 | main.rs:155:5:156:14 | S1 | +| main.rs:347:17:347:41 | MyPair {...} | | main.rs:149:5:153:5 | MyPair | +| main.rs:347:17:347:41 | MyPair {...} | P1 | main.rs:157:5:158:14 | S2 | +| main.rs:347:17:347:41 | MyPair {...} | P2 | main.rs:155:5:156:14 | S1 | +| main.rs:347:30:347:31 | S2 | | main.rs:157:5:158:14 | S2 | +| main.rs:347:38:347:39 | S1 | | main.rs:155:5:156:14 | S1 | +| main.rs:348:13:348:13 | x | | main.rs:155:5:156:14 | S1 | +| main.rs:348:17:348:26 | get_fst(...) | | main.rs:155:5:156:14 | S1 | +| main.rs:348:25:348:25 | b | | main.rs:149:5:153:5 | MyPair | +| main.rs:348:25:348:25 | b | P1 | main.rs:157:5:158:14 | S2 | +| main.rs:348:25:348:25 | b | P2 | main.rs:155:5:156:14 | S1 | +| main.rs:349:26:349:26 | x | | main.rs:155:5:156:14 | S1 | +| main.rs:350:13:350:13 | y | | main.rs:157:5:158:14 | S2 | +| main.rs:350:17:350:26 | get_snd(...) | | main.rs:157:5:158:14 | S2 | +| main.rs:350:25:350:25 | b | | main.rs:149:5:153:5 | MyPair | +| main.rs:350:25:350:25 | b | P1 | main.rs:157:5:158:14 | S2 | +| main.rs:350:25:350:25 | b | P2 | main.rs:155:5:156:14 | S1 | +| main.rs:351:26:351:26 | y | | main.rs:157:5:158:14 | S2 | +| main.rs:353:13:353:13 | c | | main.rs:149:5:153:5 | MyPair | +| main.rs:353:13:353:13 | c | P1 | main.rs:159:5:160:14 | S3 | +| main.rs:353:13:353:13 | c | P2 | main.rs:149:5:153:5 | MyPair | +| main.rs:353:13:353:13 | c | P2.P1 | main.rs:157:5:158:14 | S2 | +| main.rs:353:13:353:13 | c | P2.P2 | main.rs:155:5:156:14 | S1 | +| main.rs:353:17:356:9 | MyPair {...} | | main.rs:149:5:153:5 | MyPair | +| main.rs:353:17:356:9 | MyPair {...} | P1 | main.rs:159:5:160:14 | S3 | +| main.rs:353:17:356:9 | MyPair {...} | P2 | main.rs:149:5:153:5 | MyPair | +| main.rs:353:17:356:9 | MyPair {...} | P2.P1 | main.rs:157:5:158:14 | S2 | +| main.rs:353:17:356:9 | MyPair {...} | P2.P2 | main.rs:155:5:156:14 | S1 | +| main.rs:354:17:354:18 | S3 | | main.rs:159:5:160:14 | S3 | +| main.rs:355:17:355:41 | MyPair {...} | | main.rs:149:5:153:5 | MyPair | +| main.rs:355:17:355:41 | MyPair {...} | P1 | main.rs:157:5:158:14 | S2 | +| main.rs:355:17:355:41 | MyPair {...} | P2 | main.rs:155:5:156:14 | S1 | +| main.rs:355:30:355:31 | S2 | | main.rs:157:5:158:14 | S2 | +| main.rs:355:38:355:39 | S1 | | main.rs:155:5:156:14 | S1 | +| main.rs:357:13:357:13 | x | | main.rs:155:5:156:14 | S1 | +| main.rs:357:17:357:30 | get_snd_fst(...) | | main.rs:155:5:156:14 | S1 | +| main.rs:357:29:357:29 | c | | main.rs:149:5:153:5 | MyPair | +| main.rs:357:29:357:29 | c | P1 | main.rs:159:5:160:14 | S3 | +| main.rs:357:29:357:29 | c | P2 | main.rs:149:5:153:5 | MyPair | +| main.rs:357:29:357:29 | c | P2.P1 | main.rs:157:5:158:14 | S2 | +| main.rs:357:29:357:29 | c | P2.P2 | main.rs:155:5:156:14 | S1 | +| main.rs:359:13:359:17 | thing | | main.rs:144:5:147:5 | MyThing | +| main.rs:359:13:359:17 | thing | A | main.rs:155:5:156:14 | S1 | +| main.rs:359:21:359:37 | MyThing {...} | | main.rs:144:5:147:5 | MyThing | +| main.rs:359:21:359:37 | MyThing {...} | A | main.rs:155:5:156:14 | S1 | +| main.rs:359:34:359:35 | S1 | | main.rs:155:5:156:14 | S1 | +| main.rs:360:17:360:21 | thing | | main.rs:144:5:147:5 | MyThing | +| main.rs:360:17:360:21 | thing | A | main.rs:155:5:156:14 | S1 | +| main.rs:361:13:361:13 | j | | main.rs:155:5:156:14 | S1 | +| main.rs:361:17:361:33 | convert_to(...) | | main.rs:155:5:156:14 | S1 | +| main.rs:361:28:361:32 | thing | | main.rs:144:5:147:5 | MyThing | +| main.rs:361:28:361:32 | thing | A | main.rs:155:5:156:14 | S1 | +| main.rs:378:19:378:22 | SelfParam | | main.rs:376:5:379:5 | Self [trait FirstTrait] | +| main.rs:383:19:383:22 | SelfParam | | main.rs:381:5:384:5 | Self [trait SecondTrait] | +| main.rs:386:64:386:64 | x | | main.rs:386:45:386:61 | T | +| main.rs:388:13:388:14 | s1 | | main.rs:386:35:386:42 | I | +| main.rs:388:18:388:18 | x | | main.rs:386:45:386:61 | T | +| main.rs:388:18:388:27 | x.method() | | main.rs:386:35:386:42 | I | +| main.rs:389:26:389:27 | s1 | | main.rs:386:35:386:42 | I | +| main.rs:392:65:392:65 | x | | main.rs:392:46:392:62 | T | +| main.rs:394:13:394:14 | s2 | | main.rs:392:36:392:43 | I | +| main.rs:394:18:394:18 | x | | main.rs:392:46:392:62 | T | +| main.rs:394:18:394:27 | x.method() | | main.rs:392:36:392:43 | I | +| main.rs:395:26:395:27 | s2 | | main.rs:392:36:392:43 | I | +| main.rs:398:49:398:49 | x | | main.rs:398:30:398:46 | T | +| main.rs:399:13:399:13 | s | | main.rs:368:5:369:14 | S1 | +| main.rs:399:17:399:17 | x | | main.rs:398:30:398:46 | T | +| main.rs:399:17:399:26 | x.method() | | main.rs:368:5:369:14 | S1 | +| main.rs:400:26:400:26 | s | | main.rs:368:5:369:14 | S1 | +| main.rs:403:53:403:53 | x | | main.rs:403:34:403:50 | T | +| main.rs:404:13:404:13 | s | | main.rs:368:5:369:14 | S1 | +| main.rs:404:17:404:17 | x | | main.rs:403:34:403:50 | T | +| main.rs:404:17:404:26 | x.method() | | main.rs:368:5:369:14 | S1 | +| main.rs:405:26:405:26 | s | | main.rs:368:5:369:14 | S1 | +| main.rs:409:16:409:19 | SelfParam | | main.rs:408:5:412:5 | Self [trait Pair] | +| main.rs:411:16:411:19 | SelfParam | | main.rs:408:5:412:5 | Self [trait Pair] | +| main.rs:414:58:414:58 | x | | main.rs:414:41:414:55 | T | +| main.rs:414:64:414:64 | y | | main.rs:414:41:414:55 | T | +| main.rs:416:13:416:14 | s1 | | main.rs:368:5:369:14 | S1 | +| main.rs:416:18:416:18 | x | | main.rs:414:41:414:55 | T | +| main.rs:416:18:416:24 | x.fst() | | main.rs:368:5:369:14 | S1 | +| main.rs:417:13:417:14 | s2 | | main.rs:371:5:372:14 | S2 | +| main.rs:417:18:417:18 | y | | main.rs:414:41:414:55 | T | +| main.rs:417:18:417:24 | y.snd() | | main.rs:371:5:372:14 | S2 | +| main.rs:418:32:418:33 | s1 | | main.rs:368:5:369:14 | S1 | +| main.rs:418:36:418:37 | s2 | | main.rs:371:5:372:14 | S2 | +| main.rs:421:69:421:69 | x | | main.rs:421:52:421:66 | T | +| main.rs:421:75:421:75 | y | | main.rs:421:52:421:66 | T | +| main.rs:423:13:423:14 | s1 | | main.rs:368:5:369:14 | S1 | +| main.rs:423:18:423:18 | x | | main.rs:421:52:421:66 | T | +| main.rs:423:18:423:24 | x.fst() | | main.rs:368:5:369:14 | S1 | +| main.rs:424:13:424:14 | s2 | | main.rs:421:41:421:49 | T2 | +| main.rs:424:18:424:18 | y | | main.rs:421:52:421:66 | T | +| main.rs:424:18:424:24 | y.snd() | | main.rs:421:41:421:49 | T2 | +| main.rs:425:32:425:33 | s1 | | main.rs:368:5:369:14 | S1 | +| main.rs:425:36:425:37 | s2 | | main.rs:421:41:421:49 | T2 | +| main.rs:441:15:441:18 | SelfParam | | main.rs:440:5:449:5 | Self [trait MyTrait] | +| main.rs:443:15:443:18 | SelfParam | | main.rs:440:5:449:5 | Self [trait MyTrait] | +| main.rs:446:9:448:9 | { ... } | | main.rs:440:19:440:19 | A | +| main.rs:447:13:447:16 | self | | main.rs:440:5:449:5 | Self [trait MyTrait] | +| main.rs:447:13:447:21 | self.m1() | | main.rs:440:19:440:19 | A | +| main.rs:452:43:452:43 | x | | main.rs:452:26:452:40 | T2 | +| main.rs:452:56:454:5 | { ... } | | main.rs:452:22:452:23 | T1 | +| main.rs:453:9:453:9 | x | | main.rs:452:26:452:40 | T2 | +| main.rs:453:9:453:14 | x.m1() | | main.rs:452:22:452:23 | T1 | +| main.rs:457:49:457:49 | x | | main.rs:430:5:433:5 | MyThing | +| main.rs:457:49:457:49 | x | T | main.rs:457:32:457:46 | T2 | +| main.rs:457:71:459:5 | { ... } | | main.rs:457:28:457:29 | T1 | +| main.rs:458:9:458:9 | x | | main.rs:430:5:433:5 | MyThing | +| main.rs:458:9:458:9 | x | T | main.rs:457:32:457:46 | T2 | +| main.rs:458:9:458:11 | x.a | | main.rs:457:32:457:46 | T2 | +| main.rs:458:9:458:16 | ... .m1() | | main.rs:457:28:457:29 | T1 | +| main.rs:462:15:462:18 | SelfParam | | main.rs:430:5:433:5 | MyThing | +| main.rs:462:15:462:18 | SelfParam | T | main.rs:461:10:461:10 | T | +| main.rs:462:26:464:9 | { ... } | | main.rs:461:10:461:10 | T | +| main.rs:463:13:463:16 | self | | main.rs:430:5:433:5 | MyThing | +| main.rs:463:13:463:16 | self | T | main.rs:461:10:461:10 | T | +| main.rs:463:13:463:18 | self.a | | main.rs:461:10:461:10 | T | +| main.rs:468:13:468:13 | x | | main.rs:430:5:433:5 | MyThing | +| main.rs:468:13:468:13 | x | T | main.rs:435:5:436:14 | S1 | +| main.rs:468:17:468:33 | MyThing {...} | | main.rs:430:5:433:5 | MyThing | +| main.rs:468:17:468:33 | MyThing {...} | T | main.rs:435:5:436:14 | S1 | +| main.rs:468:30:468:31 | S1 | | main.rs:435:5:436:14 | S1 | +| main.rs:469:13:469:13 | y | | main.rs:430:5:433:5 | MyThing | +| main.rs:469:13:469:13 | y | T | main.rs:437:5:438:14 | S2 | +| main.rs:469:17:469:33 | MyThing {...} | | main.rs:430:5:433:5 | MyThing | +| main.rs:469:17:469:33 | MyThing {...} | T | main.rs:437:5:438:14 | S2 | +| main.rs:469:30:469:31 | S2 | | main.rs:437:5:438:14 | S2 | +| main.rs:471:26:471:26 | x | | main.rs:430:5:433:5 | MyThing | +| main.rs:471:26:471:26 | x | T | main.rs:435:5:436:14 | S1 | +| main.rs:471:26:471:31 | x.m1() | | main.rs:435:5:436:14 | S1 | +| main.rs:472:26:472:26 | y | | main.rs:430:5:433:5 | MyThing | +| main.rs:472:26:472:26 | y | T | main.rs:437:5:438:14 | S2 | +| main.rs:472:26:472:31 | y.m1() | | main.rs:437:5:438:14 | S2 | +| main.rs:474:13:474:13 | x | | main.rs:430:5:433:5 | MyThing | +| main.rs:474:13:474:13 | x | T | main.rs:435:5:436:14 | S1 | +| main.rs:474:17:474:33 | MyThing {...} | | main.rs:430:5:433:5 | MyThing | +| main.rs:474:17:474:33 | MyThing {...} | T | main.rs:435:5:436:14 | S1 | +| main.rs:474:30:474:31 | S1 | | main.rs:435:5:436:14 | S1 | +| main.rs:475:13:475:13 | y | | main.rs:430:5:433:5 | MyThing | +| main.rs:475:13:475:13 | y | T | main.rs:437:5:438:14 | S2 | +| main.rs:475:17:475:33 | MyThing {...} | | main.rs:430:5:433:5 | MyThing | +| main.rs:475:17:475:33 | MyThing {...} | T | main.rs:437:5:438:14 | S2 | +| main.rs:475:30:475:31 | S2 | | main.rs:437:5:438:14 | S2 | +| main.rs:477:26:477:26 | x | | main.rs:430:5:433:5 | MyThing | +| main.rs:477:26:477:26 | x | T | main.rs:435:5:436:14 | S1 | +| main.rs:477:26:477:31 | x.m2() | | main.rs:435:5:436:14 | S1 | +| main.rs:478:26:478:26 | y | | main.rs:430:5:433:5 | MyThing | +| main.rs:478:26:478:26 | y | T | main.rs:437:5:438:14 | S2 | +| main.rs:478:26:478:31 | y.m2() | | main.rs:437:5:438:14 | S2 | +| main.rs:480:13:480:14 | x2 | | main.rs:430:5:433:5 | MyThing | +| main.rs:480:13:480:14 | x2 | T | main.rs:435:5:436:14 | S1 | +| main.rs:480:18:480:34 | MyThing {...} | | main.rs:430:5:433:5 | MyThing | +| main.rs:480:18:480:34 | MyThing {...} | T | main.rs:435:5:436:14 | S1 | +| main.rs:480:31:480:32 | S1 | | main.rs:435:5:436:14 | S1 | +| main.rs:481:13:481:14 | y2 | | main.rs:430:5:433:5 | MyThing | +| main.rs:481:13:481:14 | y2 | T | main.rs:437:5:438:14 | S2 | +| main.rs:481:18:481:34 | MyThing {...} | | main.rs:430:5:433:5 | MyThing | +| main.rs:481:18:481:34 | MyThing {...} | T | main.rs:437:5:438:14 | S2 | +| main.rs:481:31:481:32 | S2 | | main.rs:437:5:438:14 | S2 | +| main.rs:483:26:483:42 | call_trait_m1(...) | | main.rs:435:5:436:14 | S1 | +| main.rs:483:40:483:41 | x2 | | main.rs:430:5:433:5 | MyThing | +| main.rs:483:40:483:41 | x2 | T | main.rs:435:5:436:14 | S1 | +| main.rs:484:26:484:42 | call_trait_m1(...) | | main.rs:437:5:438:14 | S2 | +| main.rs:484:40:484:41 | y2 | | main.rs:430:5:433:5 | MyThing | +| main.rs:484:40:484:41 | y2 | T | main.rs:437:5:438:14 | S2 | +| main.rs:486:13:486:14 | x3 | | main.rs:430:5:433:5 | MyThing | +| main.rs:486:13:486:14 | x3 | T | main.rs:430:5:433:5 | MyThing | +| main.rs:486:13:486:14 | x3 | T.T | main.rs:435:5:436:14 | S1 | +| main.rs:486:18:488:9 | MyThing {...} | | main.rs:430:5:433:5 | MyThing | +| main.rs:486:18:488:9 | MyThing {...} | T | main.rs:430:5:433:5 | MyThing | +| main.rs:486:18:488:9 | MyThing {...} | T.T | main.rs:435:5:436:14 | S1 | +| main.rs:487:16:487:32 | MyThing {...} | | main.rs:430:5:433:5 | MyThing | +| main.rs:487:16:487:32 | MyThing {...} | T | main.rs:435:5:436:14 | S1 | +| main.rs:487:29:487:30 | S1 | | main.rs:435:5:436:14 | S1 | +| main.rs:489:13:489:14 | y3 | | main.rs:430:5:433:5 | MyThing | +| main.rs:489:13:489:14 | y3 | T | main.rs:430:5:433:5 | MyThing | +| main.rs:489:13:489:14 | y3 | T.T | main.rs:437:5:438:14 | S2 | +| main.rs:489:18:491:9 | MyThing {...} | | main.rs:430:5:433:5 | MyThing | +| main.rs:489:18:491:9 | MyThing {...} | T | main.rs:430:5:433:5 | MyThing | +| main.rs:489:18:491:9 | MyThing {...} | T.T | main.rs:437:5:438:14 | S2 | +| main.rs:490:16:490:32 | MyThing {...} | | main.rs:430:5:433:5 | MyThing | +| main.rs:490:16:490:32 | MyThing {...} | T | main.rs:437:5:438:14 | S2 | +| main.rs:490:29:490:30 | S2 | | main.rs:437:5:438:14 | S2 | +| main.rs:493:13:493:13 | a | | main.rs:435:5:436:14 | S1 | +| main.rs:493:17:493:39 | call_trait_thing_m1(...) | | main.rs:435:5:436:14 | S1 | +| main.rs:493:37:493:38 | x3 | | main.rs:430:5:433:5 | MyThing | +| main.rs:493:37:493:38 | x3 | T | main.rs:430:5:433:5 | MyThing | +| main.rs:493:37:493:38 | x3 | T.T | main.rs:435:5:436:14 | S1 | +| main.rs:494:26:494:26 | a | | main.rs:435:5:436:14 | S1 | +| main.rs:495:13:495:13 | b | | main.rs:437:5:438:14 | S2 | +| main.rs:495:17:495:39 | call_trait_thing_m1(...) | | main.rs:437:5:438:14 | S2 | +| main.rs:495:37:495:38 | y3 | | main.rs:430:5:433:5 | MyThing | +| main.rs:495:37:495:38 | y3 | T | main.rs:430:5:433:5 | MyThing | +| main.rs:495:37:495:38 | y3 | T.T | main.rs:437:5:438:14 | S2 | +| main.rs:496:26:496:26 | b | | main.rs:437:5:438:14 | S2 | +| main.rs:507:19:507:22 | SelfParam | | main.rs:501:5:504:5 | Wrapper | +| main.rs:507:19:507:22 | SelfParam | A | main.rs:506:10:506:10 | A | +| main.rs:507:30:509:9 | { ... } | | main.rs:506:10:506:10 | A | +| main.rs:508:13:508:16 | self | | main.rs:501:5:504:5 | Wrapper | +| main.rs:508:13:508:16 | self | A | main.rs:506:10:506:10 | A | +| main.rs:508:13:508:22 | self.field | | main.rs:506:10:506:10 | A | +| main.rs:516:15:516:18 | SelfParam | | main.rs:512:5:526:5 | Self [trait MyTrait] | +| main.rs:518:15:518:18 | SelfParam | | main.rs:512:5:526:5 | Self [trait MyTrait] | +| main.rs:522:9:525:9 | { ... } | | main.rs:513:9:513:28 | AssociatedType | +| main.rs:523:13:523:16 | self | | main.rs:512:5:526:5 | Self [trait MyTrait] | +| main.rs:523:13:523:21 | self.m1() | | main.rs:513:9:513:28 | AssociatedType | +| main.rs:524:13:524:43 | ...::default(...) | | main.rs:513:9:513:28 | AssociatedType | +| main.rs:532:19:532:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:532:19:532:23 | SelfParam | &T | main.rs:528:5:538:5 | Self [trait MyTraitAssoc2] | +| main.rs:532:26:532:26 | a | | main.rs:532:16:532:16 | A | +| main.rs:534:22:534:26 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:534:22:534:26 | SelfParam | &T | main.rs:528:5:538:5 | Self [trait MyTraitAssoc2] | +| main.rs:534:29:534:29 | a | | main.rs:534:19:534:19 | A | +| main.rs:534:35:534:35 | b | | main.rs:534:19:534:19 | A | +| main.rs:534:75:537:9 | { ... } | | main.rs:529:9:529:52 | GenericAssociatedType | +| main.rs:535:13:535:16 | self | | file://:0:0:0:0 | & | +| main.rs:535:13:535:16 | self | &T | main.rs:528:5:538:5 | Self [trait MyTraitAssoc2] | +| main.rs:535:13:535:23 | self.put(...) | | main.rs:529:9:529:52 | GenericAssociatedType | +| main.rs:535:22:535:22 | a | | main.rs:534:19:534:19 | A | +| main.rs:536:13:536:16 | self | | file://:0:0:0:0 | & | +| main.rs:536:13:536:16 | self | &T | main.rs:528:5:538:5 | Self [trait MyTraitAssoc2] | +| main.rs:536:13:536:23 | self.put(...) | | main.rs:529:9:529:52 | GenericAssociatedType | +| main.rs:536:22:536:22 | b | | main.rs:534:19:534:19 | A | +| main.rs:545:21:545:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:545:21:545:25 | SelfParam | &T | main.rs:540:5:550:5 | Self [trait TraitMultipleAssoc] | +| main.rs:547:20:547:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:547:20:547:24 | SelfParam | &T | main.rs:540:5:550:5 | Self [trait TraitMultipleAssoc] | +| main.rs:549:20:549:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:549:20:549:24 | SelfParam | &T | main.rs:540:5:550:5 | Self [trait TraitMultipleAssoc] | +| main.rs:565:15:565:18 | SelfParam | | main.rs:552:5:553:13 | S | +| main.rs:565:45:567:9 | { ... } | | main.rs:558:5:559:14 | AT | +| main.rs:566:13:566:14 | AT | | main.rs:558:5:559:14 | AT | +| main.rs:575:19:575:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:575:19:575:23 | SelfParam | &T | main.rs:552:5:553:13 | S | +| main.rs:575:26:575:26 | a | | main.rs:575:16:575:16 | A | +| main.rs:575:46:577:9 | { ... } | | main.rs:501:5:504:5 | Wrapper | +| main.rs:575:46:577:9 | { ... } | A | main.rs:575:16:575:16 | A | +| main.rs:576:13:576:32 | Wrapper {...} | | main.rs:501:5:504:5 | Wrapper | +| main.rs:576:13:576:32 | Wrapper {...} | A | main.rs:575:16:575:16 | A | +| main.rs:576:30:576:30 | a | | main.rs:575:16:575:16 | A | +| main.rs:584:15:584:18 | SelfParam | | main.rs:555:5:556:14 | S2 | +| main.rs:584:45:586:9 | { ... } | | main.rs:501:5:504:5 | Wrapper | +| main.rs:584:45:586:9 | { ... } | A | main.rs:555:5:556:14 | S2 | +| main.rs:585:13:585:35 | Wrapper {...} | | main.rs:501:5:504:5 | Wrapper | +| main.rs:585:13:585:35 | Wrapper {...} | A | main.rs:555:5:556:14 | S2 | +| main.rs:585:30:585:33 | self | | main.rs:555:5:556:14 | S2 | +| main.rs:591:30:593:9 | { ... } | | main.rs:501:5:504:5 | Wrapper | +| main.rs:591:30:593:9 | { ... } | A | main.rs:555:5:556:14 | S2 | +| main.rs:592:13:592:33 | Wrapper {...} | | main.rs:501:5:504:5 | Wrapper | +| main.rs:592:13:592:33 | Wrapper {...} | A | main.rs:555:5:556:14 | S2 | +| main.rs:592:30:592:31 | S2 | | main.rs:555:5:556:14 | S2 | +| main.rs:597:22:597:26 | thing | | main.rs:597:10:597:19 | T | +| main.rs:598:9:598:13 | thing | | main.rs:597:10:597:19 | T | +| main.rs:605:21:605:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:605:21:605:25 | SelfParam | &T | main.rs:558:5:559:14 | AT | +| main.rs:605:34:607:9 | { ... } | | main.rs:558:5:559:14 | AT | +| main.rs:606:13:606:14 | AT | | main.rs:558:5:559:14 | AT | +| main.rs:609:20:609:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:609:20:609:24 | SelfParam | &T | main.rs:558:5:559:14 | AT | +| main.rs:609:43:611:9 | { ... } | | main.rs:552:5:553:13 | S | +| main.rs:610:13:610:13 | S | | main.rs:552:5:553:13 | S | +| main.rs:613:20:613:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:613:20:613:24 | SelfParam | &T | main.rs:558:5:559:14 | AT | +| main.rs:613:43:615:9 | { ... } | | main.rs:555:5:556:14 | S2 | +| main.rs:614:13:614:14 | S2 | | main.rs:555:5:556:14 | S2 | +| main.rs:619:13:619:14 | x1 | | main.rs:552:5:553:13 | S | +| main.rs:619:18:619:18 | S | | main.rs:552:5:553:13 | S | +| main.rs:621:26:621:27 | x1 | | main.rs:552:5:553:13 | S | +| main.rs:621:26:621:32 | x1.m1() | | main.rs:558:5:559:14 | AT | +| main.rs:623:13:623:14 | x2 | | main.rs:552:5:553:13 | S | +| main.rs:623:18:623:18 | S | | main.rs:552:5:553:13 | S | +| main.rs:625:13:625:13 | y | | main.rs:558:5:559:14 | AT | +| main.rs:625:17:625:18 | x2 | | main.rs:552:5:553:13 | S | +| main.rs:625:17:625:23 | x2.m2() | | main.rs:558:5:559:14 | AT | +| main.rs:626:26:626:26 | y | | main.rs:558:5:559:14 | AT | +| main.rs:628:13:628:14 | x3 | | main.rs:552:5:553:13 | S | +| main.rs:628:18:628:18 | S | | main.rs:552:5:553:13 | S | +| main.rs:630:26:630:27 | x3 | | main.rs:552:5:553:13 | S | +| main.rs:630:26:630:34 | x3.put(...) | | main.rs:501:5:504:5 | Wrapper | +| main.rs:633:26:633:27 | x3 | | main.rs:552:5:553:13 | S | +| main.rs:635:20:635:20 | S | | main.rs:552:5:553:13 | S | +| main.rs:638:13:638:14 | x5 | | main.rs:555:5:556:14 | S2 | +| main.rs:638:18:638:19 | S2 | | main.rs:555:5:556:14 | S2 | +| main.rs:639:26:639:27 | x5 | | main.rs:555:5:556:14 | S2 | +| main.rs:639:26:639:32 | x5.m1() | | main.rs:501:5:504:5 | Wrapper | +| main.rs:639:26:639:32 | x5.m1() | A | main.rs:555:5:556:14 | S2 | +| main.rs:640:13:640:14 | x6 | | main.rs:555:5:556:14 | S2 | +| main.rs:640:18:640:19 | S2 | | main.rs:555:5:556:14 | S2 | +| main.rs:641:26:641:27 | x6 | | main.rs:555:5:556:14 | S2 | +| main.rs:641:26:641:32 | x6.m2() | | main.rs:501:5:504:5 | Wrapper | +| main.rs:641:26:641:32 | x6.m2() | A | main.rs:555:5:556:14 | S2 | +| main.rs:643:13:643:22 | assoc_zero | | main.rs:558:5:559:14 | AT | +| main.rs:643:26:643:27 | AT | | main.rs:558:5:559:14 | AT | +| main.rs:643:26:643:38 | AT.get_zero() | | main.rs:558:5:559:14 | AT | +| main.rs:644:13:644:21 | assoc_one | | main.rs:552:5:553:13 | S | +| main.rs:644:25:644:26 | AT | | main.rs:558:5:559:14 | AT | +| main.rs:644:25:644:36 | AT.get_one() | | main.rs:552:5:553:13 | S | +| main.rs:645:13:645:21 | assoc_two | | main.rs:555:5:556:14 | S2 | +| main.rs:645:25:645:26 | AT | | main.rs:558:5:559:14 | AT | +| main.rs:645:25:645:36 | AT.get_two() | | main.rs:555:5:556:14 | S2 | +| main.rs:662:15:662:18 | SelfParam | | main.rs:650:5:654:5 | MyEnum | +| main.rs:662:15:662:18 | SelfParam | A | main.rs:661:10:661:10 | T | +| main.rs:662:26:667:9 | { ... } | | main.rs:661:10:661:10 | T | +| main.rs:663:13:666:13 | match self { ... } | | main.rs:661:10:661:10 | T | +| main.rs:663:19:663:22 | self | | main.rs:650:5:654:5 | MyEnum | +| main.rs:663:19:663:22 | self | A | main.rs:661:10:661:10 | T | +| main.rs:664:28:664:28 | a | | main.rs:661:10:661:10 | T | +| main.rs:664:34:664:34 | a | | main.rs:661:10:661:10 | T | +| main.rs:665:30:665:30 | a | | main.rs:661:10:661:10 | T | +| main.rs:665:37:665:37 | a | | main.rs:661:10:661:10 | T | +| main.rs:671:13:671:13 | x | | main.rs:650:5:654:5 | MyEnum | +| main.rs:671:13:671:13 | x | A | main.rs:656:5:657:14 | S1 | +| main.rs:671:17:671:30 | ...::C1(...) | | main.rs:650:5:654:5 | MyEnum | +| main.rs:671:17:671:30 | ...::C1(...) | A | main.rs:656:5:657:14 | S1 | +| main.rs:671:28:671:29 | S1 | | main.rs:656:5:657:14 | S1 | +| main.rs:672:13:672:13 | y | | main.rs:650:5:654:5 | MyEnum | +| main.rs:672:13:672:13 | y | A | main.rs:658:5:659:14 | S2 | +| main.rs:672:17:672:36 | ...::C2 {...} | | main.rs:650:5:654:5 | MyEnum | +| main.rs:672:17:672:36 | ...::C2 {...} | A | main.rs:658:5:659:14 | S2 | +| main.rs:672:33:672:34 | S2 | | main.rs:658:5:659:14 | S2 | +| main.rs:674:26:674:26 | x | | main.rs:650:5:654:5 | MyEnum | +| main.rs:674:26:674:26 | x | A | main.rs:656:5:657:14 | S1 | +| main.rs:674:26:674:31 | x.m1() | | main.rs:656:5:657:14 | S1 | +| main.rs:675:26:675:26 | y | | main.rs:650:5:654:5 | MyEnum | +| main.rs:675:26:675:26 | y | A | main.rs:658:5:659:14 | S2 | +| main.rs:675:26:675:31 | y.m1() | | main.rs:658:5:659:14 | S2 | +| main.rs:697:15:697:18 | SelfParam | | main.rs:695:5:698:5 | Self [trait MyTrait1] | +| main.rs:701:15:701:18 | SelfParam | | main.rs:700:5:711:5 | Self [trait MyTrait2] | +| main.rs:704:9:710:9 | { ... } | | main.rs:700:20:700:22 | Tr2 | +| main.rs:705:13:709:13 | if ... {...} else {...} | | main.rs:700:20:700:22 | Tr2 | +| main.rs:705:26:707:13 | { ... } | | main.rs:700:20:700:22 | Tr2 | +| main.rs:706:17:706:20 | self | | main.rs:700:5:711:5 | Self [trait MyTrait2] | +| main.rs:706:17:706:25 | self.m1() | | main.rs:700:20:700:22 | Tr2 | +| main.rs:707:20:709:13 | { ... } | | main.rs:700:20:700:22 | Tr2 | +| main.rs:708:17:708:30 | ...::m1(...) | | main.rs:700:20:700:22 | Tr2 | +| main.rs:708:26:708:29 | self | | main.rs:700:5:711:5 | Self [trait MyTrait2] | +| main.rs:714:15:714:18 | SelfParam | | main.rs:713:5:724:5 | Self [trait MyTrait3] | +| main.rs:717:9:723:9 | { ... } | | main.rs:713:20:713:22 | Tr3 | +| main.rs:718:13:722:13 | if ... {...} else {...} | | main.rs:713:20:713:22 | Tr3 | +| main.rs:718:26:720:13 | { ... } | | main.rs:713:20:713:22 | Tr3 | +| main.rs:719:17:719:20 | self | | main.rs:713:5:724:5 | Self [trait MyTrait3] | +| main.rs:719:17:719:25 | self.m2() | | main.rs:680:5:683:5 | MyThing | +| main.rs:719:17:719:25 | self.m2() | A | main.rs:713:20:713:22 | Tr3 | +| main.rs:719:17:719:27 | ... .a | | main.rs:713:20:713:22 | Tr3 | +| main.rs:720:20:722:13 | { ... } | | main.rs:713:20:713:22 | Tr3 | +| main.rs:721:17:721:30 | ...::m2(...) | | main.rs:680:5:683:5 | MyThing | +| main.rs:721:17:721:30 | ...::m2(...) | A | main.rs:713:20:713:22 | Tr3 | +| main.rs:721:17:721:32 | ... .a | | main.rs:713:20:713:22 | Tr3 | +| main.rs:721:26:721:29 | self | | main.rs:713:5:724:5 | Self [trait MyTrait3] | +| main.rs:728:15:728:18 | SelfParam | | main.rs:680:5:683:5 | MyThing | +| main.rs:728:15:728:18 | SelfParam | A | main.rs:726:10:726:10 | T | +| main.rs:728:26:730:9 | { ... } | | main.rs:726:10:726:10 | T | +| main.rs:729:13:729:16 | self | | main.rs:680:5:683:5 | MyThing | +| main.rs:729:13:729:16 | self | A | main.rs:726:10:726:10 | T | +| main.rs:729:13:729:18 | self.a | | main.rs:726:10:726:10 | T | +| main.rs:737:15:737:18 | SelfParam | | main.rs:685:5:688:5 | MyThing2 | +| main.rs:737:15:737:18 | SelfParam | A | main.rs:735:10:735:10 | T | +| main.rs:737:35:739:9 | { ... } | | main.rs:680:5:683:5 | MyThing | +| main.rs:737:35:739:9 | { ... } | A | main.rs:735:10:735:10 | T | +| main.rs:738:13:738:33 | MyThing {...} | | main.rs:680:5:683:5 | MyThing | +| main.rs:738:13:738:33 | MyThing {...} | A | main.rs:735:10:735:10 | T | +| main.rs:738:26:738:29 | self | | main.rs:685:5:688:5 | MyThing2 | +| main.rs:738:26:738:29 | self | A | main.rs:735:10:735:10 | T | +| main.rs:738:26:738:31 | self.a | | main.rs:735:10:735:10 | T | +| main.rs:747:13:747:13 | x | | main.rs:680:5:683:5 | MyThing | +| main.rs:747:13:747:13 | x | A | main.rs:690:5:691:14 | S1 | +| main.rs:747:17:747:33 | MyThing {...} | | main.rs:680:5:683:5 | MyThing | +| main.rs:747:17:747:33 | MyThing {...} | A | main.rs:690:5:691:14 | S1 | +| main.rs:747:30:747:31 | S1 | | main.rs:690:5:691:14 | S1 | +| main.rs:748:13:748:13 | y | | main.rs:680:5:683:5 | MyThing | +| main.rs:748:13:748:13 | y | A | main.rs:692:5:693:14 | S2 | +| main.rs:748:17:748:33 | MyThing {...} | | main.rs:680:5:683:5 | MyThing | +| main.rs:748:17:748:33 | MyThing {...} | A | main.rs:692:5:693:14 | S2 | +| main.rs:748:30:748:31 | S2 | | main.rs:692:5:693:14 | S2 | +| main.rs:750:26:750:26 | x | | main.rs:680:5:683:5 | MyThing | +| main.rs:750:26:750:26 | x | A | main.rs:690:5:691:14 | S1 | +| main.rs:750:26:750:31 | x.m1() | | main.rs:690:5:691:14 | S1 | +| main.rs:751:26:751:26 | y | | main.rs:680:5:683:5 | MyThing | +| main.rs:751:26:751:26 | y | A | main.rs:692:5:693:14 | S2 | +| main.rs:751:26:751:31 | y.m1() | | main.rs:692:5:693:14 | S2 | +| main.rs:753:13:753:13 | x | | main.rs:680:5:683:5 | MyThing | +| main.rs:753:13:753:13 | x | A | main.rs:690:5:691:14 | S1 | +| main.rs:753:17:753:33 | MyThing {...} | | main.rs:680:5:683:5 | MyThing | +| main.rs:753:17:753:33 | MyThing {...} | A | main.rs:690:5:691:14 | S1 | +| main.rs:753:30:753:31 | S1 | | main.rs:690:5:691:14 | S1 | +| main.rs:754:13:754:13 | y | | main.rs:680:5:683:5 | MyThing | +| main.rs:754:13:754:13 | y | A | main.rs:692:5:693:14 | S2 | +| main.rs:754:17:754:33 | MyThing {...} | | main.rs:680:5:683:5 | MyThing | +| main.rs:754:17:754:33 | MyThing {...} | A | main.rs:692:5:693:14 | S2 | +| main.rs:754:30:754:31 | S2 | | main.rs:692:5:693:14 | S2 | +| main.rs:756:26:756:26 | x | | main.rs:680:5:683:5 | MyThing | +| main.rs:756:26:756:26 | x | A | main.rs:690:5:691:14 | S1 | +| main.rs:756:26:756:31 | x.m2() | | main.rs:690:5:691:14 | S1 | +| main.rs:757:26:757:26 | y | | main.rs:680:5:683:5 | MyThing | +| main.rs:757:26:757:26 | y | A | main.rs:692:5:693:14 | S2 | +| main.rs:757:26:757:31 | y.m2() | | main.rs:692:5:693:14 | S2 | +| main.rs:759:13:759:13 | x | | main.rs:685:5:688:5 | MyThing2 | +| main.rs:759:13:759:13 | x | A | main.rs:690:5:691:14 | S1 | +| main.rs:759:17:759:34 | MyThing2 {...} | | main.rs:685:5:688:5 | MyThing2 | +| main.rs:759:17:759:34 | MyThing2 {...} | A | main.rs:690:5:691:14 | S1 | +| main.rs:759:31:759:32 | S1 | | main.rs:690:5:691:14 | S1 | +| main.rs:760:13:760:13 | y | | main.rs:685:5:688:5 | MyThing2 | +| main.rs:760:13:760:13 | y | A | main.rs:692:5:693:14 | S2 | +| main.rs:760:17:760:34 | MyThing2 {...} | | main.rs:685:5:688:5 | MyThing2 | +| main.rs:760:17:760:34 | MyThing2 {...} | A | main.rs:692:5:693:14 | S2 | +| main.rs:760:31:760:32 | S2 | | main.rs:692:5:693:14 | S2 | +| main.rs:762:26:762:26 | x | | main.rs:685:5:688:5 | MyThing2 | +| main.rs:762:26:762:26 | x | A | main.rs:690:5:691:14 | S1 | +| main.rs:762:26:762:31 | x.m3() | | main.rs:690:5:691:14 | S1 | +| main.rs:763:26:763:26 | y | | main.rs:685:5:688:5 | MyThing2 | +| main.rs:763:26:763:26 | y | A | main.rs:692:5:693:14 | S2 | +| main.rs:763:26:763:31 | y.m3() | | main.rs:692:5:693:14 | S2 | +| main.rs:781:22:781:22 | x | | file://:0:0:0:0 | & | +| main.rs:781:22:781:22 | x | &T | main.rs:781:11:781:19 | T | +| main.rs:781:35:783:5 | { ... } | | file://:0:0:0:0 | & | +| main.rs:781:35:783:5 | { ... } | &T | main.rs:781:11:781:19 | T | +| main.rs:782:9:782:9 | x | | file://:0:0:0:0 | & | +| main.rs:782:9:782:9 | x | &T | main.rs:781:11:781:19 | T | +| main.rs:786:17:786:20 | SelfParam | | main.rs:771:5:772:14 | S1 | +| main.rs:786:29:788:9 | { ... } | | main.rs:774:5:775:14 | S2 | +| main.rs:787:13:787:14 | S2 | | main.rs:774:5:775:14 | S2 | +| main.rs:791:21:791:21 | x | | main.rs:791:13:791:14 | T1 | +| main.rs:794:5:796:5 | { ... } | | main.rs:791:17:791:18 | T2 | +| main.rs:795:9:795:9 | x | | main.rs:791:13:791:14 | T1 | +| main.rs:795:9:795:16 | x.into() | | main.rs:791:17:791:18 | T2 | +| main.rs:799:13:799:13 | x | | main.rs:771:5:772:14 | S1 | +| main.rs:799:17:799:18 | S1 | | main.rs:771:5:772:14 | S1 | +| main.rs:800:26:800:31 | id(...) | | file://:0:0:0:0 | & | +| main.rs:800:26:800:31 | id(...) | &T | main.rs:771:5:772:14 | S1 | +| main.rs:800:29:800:30 | &x | | file://:0:0:0:0 | & | +| main.rs:800:29:800:30 | &x | &T | main.rs:771:5:772:14 | S1 | +| main.rs:800:30:800:30 | x | | main.rs:771:5:772:14 | S1 | +| main.rs:802:13:802:13 | x | | main.rs:771:5:772:14 | S1 | +| main.rs:802:17:802:18 | S1 | | main.rs:771:5:772:14 | S1 | +| main.rs:803:26:803:37 | id::<...>(...) | | file://:0:0:0:0 | & | +| main.rs:803:26:803:37 | id::<...>(...) | &T | main.rs:771:5:772:14 | S1 | +| main.rs:803:35:803:36 | &x | | file://:0:0:0:0 | & | +| main.rs:803:35:803:36 | &x | &T | main.rs:771:5:772:14 | S1 | +| main.rs:803:36:803:36 | x | | main.rs:771:5:772:14 | S1 | +| main.rs:805:13:805:13 | x | | main.rs:771:5:772:14 | S1 | +| main.rs:805:17:805:18 | S1 | | main.rs:771:5:772:14 | S1 | +| main.rs:806:26:806:44 | id::<...>(...) | | file://:0:0:0:0 | & | +| main.rs:806:26:806:44 | id::<...>(...) | &T | main.rs:771:5:772:14 | S1 | +| main.rs:806:42:806:43 | &x | | file://:0:0:0:0 | & | +| main.rs:806:42:806:43 | &x | &T | main.rs:771:5:772:14 | S1 | +| main.rs:806:43:806:43 | x | | main.rs:771:5:772:14 | S1 | +| main.rs:808:13:808:13 | x | | main.rs:771:5:772:14 | S1 | +| main.rs:808:17:808:18 | S1 | | main.rs:771:5:772:14 | S1 | +| main.rs:809:9:809:25 | into::<...>(...) | | main.rs:774:5:775:14 | S2 | +| main.rs:809:24:809:24 | x | | main.rs:771:5:772:14 | S1 | +| main.rs:811:13:811:13 | x | | main.rs:771:5:772:14 | S1 | +| main.rs:811:17:811:18 | S1 | | main.rs:771:5:772:14 | S1 | +| main.rs:812:13:812:13 | y | | main.rs:774:5:775:14 | S2 | +| main.rs:812:21:812:27 | into(...) | | main.rs:774:5:775:14 | S2 | +| main.rs:812:26:812:26 | x | | main.rs:771:5:772:14 | S1 | +| main.rs:826:22:826:25 | SelfParam | | main.rs:817:5:823:5 | PairOption | +| main.rs:826:22:826:25 | SelfParam | Fst | main.rs:825:10:825:12 | Fst | +| main.rs:826:22:826:25 | SelfParam | Snd | main.rs:825:15:825:17 | Snd | +| main.rs:826:35:833:9 | { ... } | | main.rs:825:15:825:17 | Snd | +| main.rs:827:13:832:13 | match self { ... } | | main.rs:825:15:825:17 | Snd | +| main.rs:827:19:827:22 | self | | main.rs:817:5:823:5 | PairOption | +| main.rs:827:19:827:22 | self | Fst | main.rs:825:10:825:12 | Fst | +| main.rs:827:19:827:22 | self | Snd | main.rs:825:15:825:17 | Snd | +| main.rs:828:43:828:82 | MacroExpr | | main.rs:825:15:825:17 | Snd | +| main.rs:829:43:829:81 | MacroExpr | | main.rs:825:15:825:17 | Snd | +| main.rs:830:37:830:39 | snd | | main.rs:825:15:825:17 | Snd | +| main.rs:830:45:830:47 | snd | | main.rs:825:15:825:17 | Snd | +| main.rs:831:41:831:43 | snd | | main.rs:825:15:825:17 | Snd | +| main.rs:831:49:831:51 | snd | | main.rs:825:15:825:17 | Snd | +| main.rs:857:10:857:10 | t | | main.rs:817:5:823:5 | PairOption | +| main.rs:857:10:857:10 | t | Fst | main.rs:839:5:840:14 | S2 | +| main.rs:857:10:857:10 | t | Snd | main.rs:817:5:823:5 | PairOption | +| main.rs:857:10:857:10 | t | Snd.Fst | main.rs:839:5:840:14 | S2 | +| main.rs:857:10:857:10 | t | Snd.Snd | main.rs:842:5:843:14 | S3 | +| main.rs:858:13:858:13 | x | | main.rs:842:5:843:14 | S3 | +| main.rs:858:17:858:17 | t | | main.rs:817:5:823:5 | PairOption | +| main.rs:858:17:858:17 | t | Fst | main.rs:839:5:840:14 | S2 | +| main.rs:858:17:858:17 | t | Snd | main.rs:817:5:823:5 | PairOption | +| main.rs:858:17:858:17 | t | Snd.Fst | main.rs:839:5:840:14 | S2 | +| main.rs:858:17:858:17 | t | Snd.Snd | main.rs:842:5:843:14 | S3 | +| main.rs:858:17:858:29 | t.unwrapSnd() | | main.rs:817:5:823:5 | PairOption | +| main.rs:858:17:858:29 | t.unwrapSnd() | Fst | main.rs:839:5:840:14 | S2 | +| main.rs:858:17:858:29 | t.unwrapSnd() | Snd | main.rs:842:5:843:14 | S3 | +| main.rs:858:17:858:41 | ... .unwrapSnd() | | main.rs:842:5:843:14 | S3 | +| main.rs:859:26:859:26 | x | | main.rs:842:5:843:14 | S3 | +| main.rs:864:13:864:14 | p1 | | main.rs:817:5:823:5 | PairOption | +| main.rs:864:13:864:14 | p1 | Fst | main.rs:836:5:837:14 | S1 | +| main.rs:864:13:864:14 | p1 | Snd | main.rs:839:5:840:14 | S2 | +| main.rs:864:26:864:53 | ...::PairBoth(...) | | main.rs:817:5:823:5 | PairOption | +| main.rs:864:26:864:53 | ...::PairBoth(...) | Fst | main.rs:836:5:837:14 | S1 | +| main.rs:864:26:864:53 | ...::PairBoth(...) | Snd | main.rs:839:5:840:14 | S2 | +| main.rs:864:47:864:48 | S1 | | main.rs:836:5:837:14 | S1 | +| main.rs:864:51:864:52 | S2 | | main.rs:839:5:840:14 | S2 | +| main.rs:865:26:865:27 | p1 | | main.rs:817:5:823:5 | PairOption | +| main.rs:865:26:865:27 | p1 | Fst | main.rs:836:5:837:14 | S1 | +| main.rs:865:26:865:27 | p1 | Snd | main.rs:839:5:840:14 | S2 | +| main.rs:868:13:868:14 | p2 | | main.rs:817:5:823:5 | PairOption | +| main.rs:868:13:868:14 | p2 | Fst | main.rs:836:5:837:14 | S1 | +| main.rs:868:13:868:14 | p2 | Snd | main.rs:839:5:840:14 | S2 | +| main.rs:868:26:868:47 | ...::PairNone(...) | | main.rs:817:5:823:5 | PairOption | +| main.rs:868:26:868:47 | ...::PairNone(...) | Fst | main.rs:836:5:837:14 | S1 | +| main.rs:868:26:868:47 | ...::PairNone(...) | Snd | main.rs:839:5:840:14 | S2 | +| main.rs:869:26:869:27 | p2 | | main.rs:817:5:823:5 | PairOption | +| main.rs:869:26:869:27 | p2 | Fst | main.rs:836:5:837:14 | S1 | +| main.rs:869:26:869:27 | p2 | Snd | main.rs:839:5:840:14 | S2 | +| main.rs:872:13:872:14 | p3 | | main.rs:817:5:823:5 | PairOption | +| main.rs:872:13:872:14 | p3 | Fst | main.rs:839:5:840:14 | S2 | +| main.rs:872:13:872:14 | p3 | Snd | main.rs:842:5:843:14 | S3 | +| main.rs:872:34:872:56 | ...::PairSnd(...) | | main.rs:817:5:823:5 | PairOption | +| main.rs:872:34:872:56 | ...::PairSnd(...) | Fst | main.rs:839:5:840:14 | S2 | +| main.rs:872:34:872:56 | ...::PairSnd(...) | Snd | main.rs:842:5:843:14 | S3 | +| main.rs:872:54:872:55 | S3 | | main.rs:842:5:843:14 | S3 | +| main.rs:873:26:873:27 | p3 | | main.rs:817:5:823:5 | PairOption | +| main.rs:873:26:873:27 | p3 | Fst | main.rs:839:5:840:14 | S2 | +| main.rs:873:26:873:27 | p3 | Snd | main.rs:842:5:843:14 | S3 | +| main.rs:876:13:876:14 | p3 | | main.rs:817:5:823:5 | PairOption | +| main.rs:876:13:876:14 | p3 | Fst | main.rs:839:5:840:14 | S2 | +| main.rs:876:13:876:14 | p3 | Snd | main.rs:842:5:843:14 | S3 | +| main.rs:876:35:876:56 | ...::PairNone(...) | | main.rs:817:5:823:5 | PairOption | +| main.rs:876:35:876:56 | ...::PairNone(...) | Fst | main.rs:839:5:840:14 | S2 | +| main.rs:876:35:876:56 | ...::PairNone(...) | Snd | main.rs:842:5:843:14 | S3 | +| main.rs:877:26:877:27 | p3 | | main.rs:817:5:823:5 | PairOption | +| main.rs:877:26:877:27 | p3 | Fst | main.rs:839:5:840:14 | S2 | +| main.rs:877:26:877:27 | p3 | Snd | main.rs:842:5:843:14 | S3 | +| main.rs:879:11:879:54 | ...::PairSnd(...) | | main.rs:817:5:823:5 | PairOption | +| main.rs:879:11:879:54 | ...::PairSnd(...) | Fst | main.rs:839:5:840:14 | S2 | +| main.rs:879:11:879:54 | ...::PairSnd(...) | Snd | main.rs:817:5:823:5 | PairOption | +| main.rs:879:11:879:54 | ...::PairSnd(...) | Snd.Fst | main.rs:839:5:840:14 | S2 | +| main.rs:879:11:879:54 | ...::PairSnd(...) | Snd.Snd | main.rs:842:5:843:14 | S3 | +| main.rs:879:31:879:53 | ...::PairSnd(...) | | main.rs:817:5:823:5 | PairOption | +| main.rs:879:31:879:53 | ...::PairSnd(...) | Fst | main.rs:839:5:840:14 | S2 | +| main.rs:879:31:879:53 | ...::PairSnd(...) | Snd | main.rs:842:5:843:14 | S3 | +| main.rs:879:51:879:52 | S3 | | main.rs:842:5:843:14 | S3 | +| main.rs:892:16:892:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:892:16:892:24 | SelfParam | &T | main.rs:890:5:897:5 | Self [trait MyTrait] | +| main.rs:892:27:892:31 | value | | main.rs:890:19:890:19 | S | +| main.rs:894:21:894:29 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:894:21:894:29 | SelfParam | &T | main.rs:890:5:897:5 | Self [trait MyTrait] | +| main.rs:894:32:894:36 | value | | main.rs:890:19:890:19 | S | +| main.rs:895:13:895:16 | self | | file://:0:0:0:0 | & | +| main.rs:895:13:895:16 | self | &T | main.rs:890:5:897:5 | Self [trait MyTrait] | +| main.rs:895:22:895:26 | value | | main.rs:890:19:890:19 | S | +| main.rs:901:16:901:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:901:16:901:24 | SelfParam | &T | main.rs:884:5:888:5 | MyOption | +| main.rs:901:16:901:24 | SelfParam | &T.T | main.rs:899:10:899:10 | T | +| main.rs:901:27:901:31 | value | | main.rs:899:10:899:10 | T | +| main.rs:905:26:907:9 | { ... } | | main.rs:884:5:888:5 | MyOption | +| main.rs:905:26:907:9 | { ... } | T | main.rs:904:10:904:10 | T | +| main.rs:906:13:906:30 | ...::MyNone(...) | | main.rs:884:5:888:5 | MyOption | +| main.rs:906:13:906:30 | ...::MyNone(...) | T | main.rs:904:10:904:10 | T | +| main.rs:911:20:911:23 | SelfParam | | main.rs:884:5:888:5 | MyOption | +| main.rs:911:20:911:23 | SelfParam | T | main.rs:884:5:888:5 | MyOption | +| main.rs:911:20:911:23 | SelfParam | T.T | main.rs:910:10:910:10 | T | +| main.rs:911:41:916:9 | { ... } | | main.rs:884:5:888:5 | MyOption | +| main.rs:911:41:916:9 | { ... } | T | main.rs:910:10:910:10 | T | +| main.rs:912:13:915:13 | match self { ... } | | main.rs:884:5:888:5 | MyOption | +| main.rs:912:13:915:13 | match self { ... } | T | main.rs:910:10:910:10 | T | +| main.rs:912:19:912:22 | self | | main.rs:884:5:888:5 | MyOption | +| main.rs:912:19:912:22 | self | T | main.rs:884:5:888:5 | MyOption | +| main.rs:912:19:912:22 | self | T.T | main.rs:910:10:910:10 | T | +| main.rs:913:39:913:56 | ...::MyNone(...) | | main.rs:884:5:888:5 | MyOption | +| main.rs:913:39:913:56 | ...::MyNone(...) | T | main.rs:910:10:910:10 | T | +| main.rs:914:34:914:34 | x | | main.rs:884:5:888:5 | MyOption | +| main.rs:914:34:914:34 | x | T | main.rs:910:10:910:10 | T | +| main.rs:914:40:914:40 | x | | main.rs:884:5:888:5 | MyOption | +| main.rs:914:40:914:40 | x | T | main.rs:910:10:910:10 | T | +| main.rs:923:13:923:14 | x1 | | main.rs:884:5:888:5 | MyOption | +| main.rs:923:18:923:37 | ...::new(...) | | main.rs:884:5:888:5 | MyOption | +| main.rs:924:26:924:27 | x1 | | main.rs:884:5:888:5 | MyOption | +| main.rs:926:13:926:18 | mut x2 | | main.rs:884:5:888:5 | MyOption | +| main.rs:926:13:926:18 | mut x2 | T | main.rs:919:5:920:13 | S | +| main.rs:926:22:926:36 | ...::new(...) | | main.rs:884:5:888:5 | MyOption | +| main.rs:926:22:926:36 | ...::new(...) | T | main.rs:919:5:920:13 | S | +| main.rs:927:9:927:10 | x2 | | main.rs:884:5:888:5 | MyOption | +| main.rs:927:9:927:10 | x2 | T | main.rs:919:5:920:13 | S | +| main.rs:927:16:927:16 | S | | main.rs:919:5:920:13 | S | +| main.rs:928:26:928:27 | x2 | | main.rs:884:5:888:5 | MyOption | +| main.rs:928:26:928:27 | x2 | T | main.rs:919:5:920:13 | S | +| main.rs:930:13:930:18 | mut x3 | | main.rs:884:5:888:5 | MyOption | +| main.rs:930:22:930:36 | ...::new(...) | | main.rs:884:5:888:5 | MyOption | +| main.rs:931:9:931:10 | x3 | | main.rs:884:5:888:5 | MyOption | +| main.rs:931:21:931:21 | S | | main.rs:919:5:920:13 | S | +| main.rs:932:26:932:27 | x3 | | main.rs:884:5:888:5 | MyOption | +| main.rs:934:13:934:18 | mut x4 | | main.rs:884:5:888:5 | MyOption | +| main.rs:934:13:934:18 | mut x4 | T | main.rs:919:5:920:13 | S | +| main.rs:934:22:934:36 | ...::new(...) | | main.rs:884:5:888:5 | MyOption | +| main.rs:934:22:934:36 | ...::new(...) | T | main.rs:919:5:920:13 | S | +| main.rs:935:23:935:29 | &mut x4 | | file://:0:0:0:0 | & | +| main.rs:935:23:935:29 | &mut x4 | &T | main.rs:884:5:888:5 | MyOption | +| main.rs:935:23:935:29 | &mut x4 | &T.T | main.rs:919:5:920:13 | S | +| main.rs:935:28:935:29 | x4 | | main.rs:884:5:888:5 | MyOption | +| main.rs:935:28:935:29 | x4 | T | main.rs:919:5:920:13 | S | +| main.rs:935:32:935:32 | S | | main.rs:919:5:920:13 | S | +| main.rs:936:26:936:27 | x4 | | main.rs:884:5:888:5 | MyOption | +| main.rs:936:26:936:27 | x4 | T | main.rs:919:5:920:13 | S | +| main.rs:938:13:938:14 | x5 | | main.rs:884:5:888:5 | MyOption | +| main.rs:938:13:938:14 | x5 | T | main.rs:884:5:888:5 | MyOption | +| main.rs:938:13:938:14 | x5 | T.T | main.rs:919:5:920:13 | S | +| main.rs:938:18:938:58 | ...::MySome(...) | | main.rs:884:5:888:5 | MyOption | +| main.rs:938:18:938:58 | ...::MySome(...) | T | main.rs:884:5:888:5 | MyOption | +| main.rs:938:18:938:58 | ...::MySome(...) | T.T | main.rs:919:5:920:13 | S | +| main.rs:938:35:938:57 | ...::MyNone(...) | | main.rs:884:5:888:5 | MyOption | +| main.rs:938:35:938:57 | ...::MyNone(...) | T | main.rs:919:5:920:13 | S | +| main.rs:939:26:939:27 | x5 | | main.rs:884:5:888:5 | MyOption | +| main.rs:939:26:939:27 | x5 | T | main.rs:884:5:888:5 | MyOption | +| main.rs:939:26:939:27 | x5 | T.T | main.rs:919:5:920:13 | S | +| main.rs:939:26:939:37 | x5.flatten() | | main.rs:884:5:888:5 | MyOption | +| main.rs:939:26:939:37 | x5.flatten() | T | main.rs:919:5:920:13 | S | +| main.rs:941:13:941:14 | x6 | | main.rs:884:5:888:5 | MyOption | +| main.rs:941:13:941:14 | x6 | T | main.rs:884:5:888:5 | MyOption | +| main.rs:941:13:941:14 | x6 | T.T | main.rs:919:5:920:13 | S | +| main.rs:941:18:941:58 | ...::MySome(...) | | main.rs:884:5:888:5 | MyOption | +| main.rs:941:18:941:58 | ...::MySome(...) | T | main.rs:884:5:888:5 | MyOption | +| main.rs:941:18:941:58 | ...::MySome(...) | T.T | main.rs:919:5:920:13 | S | +| main.rs:941:35:941:57 | ...::MyNone(...) | | main.rs:884:5:888:5 | MyOption | +| main.rs:941:35:941:57 | ...::MyNone(...) | T | main.rs:919:5:920:13 | S | +| main.rs:942:26:942:61 | ...::flatten(...) | | main.rs:884:5:888:5 | MyOption | +| main.rs:942:26:942:61 | ...::flatten(...) | T | main.rs:919:5:920:13 | S | +| main.rs:942:59:942:60 | x6 | | main.rs:884:5:888:5 | MyOption | +| main.rs:942:59:942:60 | x6 | T | main.rs:884:5:888:5 | MyOption | +| main.rs:942:59:942:60 | x6 | T.T | main.rs:919:5:920:13 | S | +| main.rs:944:13:944:19 | from_if | | main.rs:884:5:888:5 | MyOption | +| main.rs:944:13:944:19 | from_if | T | main.rs:919:5:920:13 | S | +| main.rs:944:23:948:9 | if ... {...} else {...} | | main.rs:884:5:888:5 | MyOption | +| main.rs:944:23:948:9 | if ... {...} else {...} | T | main.rs:919:5:920:13 | S | +| main.rs:944:36:946:9 | { ... } | | main.rs:884:5:888:5 | MyOption | +| main.rs:944:36:946:9 | { ... } | T | main.rs:919:5:920:13 | S | +| main.rs:945:13:945:30 | ...::MyNone(...) | | main.rs:884:5:888:5 | MyOption | +| main.rs:945:13:945:30 | ...::MyNone(...) | T | main.rs:919:5:920:13 | S | +| main.rs:946:16:948:9 | { ... } | | main.rs:884:5:888:5 | MyOption | +| main.rs:946:16:948:9 | { ... } | T | main.rs:919:5:920:13 | S | +| main.rs:947:13:947:31 | ...::MySome(...) | | main.rs:884:5:888:5 | MyOption | +| main.rs:947:13:947:31 | ...::MySome(...) | T | main.rs:919:5:920:13 | S | +| main.rs:947:30:947:30 | S | | main.rs:919:5:920:13 | S | +| main.rs:949:26:949:32 | from_if | | main.rs:884:5:888:5 | MyOption | +| main.rs:949:26:949:32 | from_if | T | main.rs:919:5:920:13 | S | +| main.rs:951:13:951:22 | from_match | | main.rs:884:5:888:5 | MyOption | +| main.rs:951:13:951:22 | from_match | T | main.rs:919:5:920:13 | S | +| main.rs:951:26:954:9 | match ... { ... } | | main.rs:884:5:888:5 | MyOption | +| main.rs:951:26:954:9 | match ... { ... } | T | main.rs:919:5:920:13 | S | +| main.rs:952:21:952:38 | ...::MyNone(...) | | main.rs:884:5:888:5 | MyOption | +| main.rs:952:21:952:38 | ...::MyNone(...) | T | main.rs:919:5:920:13 | S | +| main.rs:953:22:953:40 | ...::MySome(...) | | main.rs:884:5:888:5 | MyOption | +| main.rs:953:22:953:40 | ...::MySome(...) | T | main.rs:919:5:920:13 | S | +| main.rs:953:39:953:39 | S | | main.rs:919:5:920:13 | S | +| main.rs:955:26:955:35 | from_match | | main.rs:884:5:888:5 | MyOption | +| main.rs:955:26:955:35 | from_match | T | main.rs:919:5:920:13 | S | +| main.rs:957:13:957:21 | from_loop | | main.rs:884:5:888:5 | MyOption | +| main.rs:957:13:957:21 | from_loop | T | main.rs:919:5:920:13 | S | +| main.rs:957:25:962:9 | loop { ... } | | main.rs:884:5:888:5 | MyOption | +| main.rs:957:25:962:9 | loop { ... } | T | main.rs:919:5:920:13 | S | +| main.rs:959:23:959:40 | ...::MyNone(...) | | main.rs:884:5:888:5 | MyOption | +| main.rs:959:23:959:40 | ...::MyNone(...) | T | main.rs:919:5:920:13 | S | +| main.rs:961:19:961:37 | ...::MySome(...) | | main.rs:884:5:888:5 | MyOption | +| main.rs:961:19:961:37 | ...::MySome(...) | T | main.rs:919:5:920:13 | S | +| main.rs:961:36:961:36 | S | | main.rs:919:5:920:13 | S | +| main.rs:963:26:963:34 | from_loop | | main.rs:884:5:888:5 | MyOption | +| main.rs:963:26:963:34 | from_loop | T | main.rs:919:5:920:13 | S | +| main.rs:976:15:976:18 | SelfParam | | main.rs:969:5:970:19 | S | +| main.rs:976:15:976:18 | SelfParam | T | main.rs:975:10:975:10 | T | +| main.rs:976:26:978:9 | { ... } | | main.rs:975:10:975:10 | T | +| main.rs:977:13:977:16 | self | | main.rs:969:5:970:19 | S | +| main.rs:977:13:977:16 | self | T | main.rs:975:10:975:10 | T | +| main.rs:977:13:977:18 | self.0 | | main.rs:975:10:975:10 | T | +| main.rs:980:15:980:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:980:15:980:19 | SelfParam | &T | main.rs:969:5:970:19 | S | +| main.rs:980:15:980:19 | SelfParam | &T.T | main.rs:975:10:975:10 | T | +| main.rs:980:28:982:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:980:28:982:9 | { ... } | &T | main.rs:975:10:975:10 | T | +| main.rs:981:13:981:19 | &... | | file://:0:0:0:0 | & | +| main.rs:981:13:981:19 | &... | &T | main.rs:975:10:975:10 | T | +| main.rs:981:14:981:17 | self | | file://:0:0:0:0 | & | +| main.rs:981:14:981:17 | self | &T | main.rs:969:5:970:19 | S | +| main.rs:981:14:981:17 | self | &T.T | main.rs:975:10:975:10 | T | +| main.rs:981:14:981:19 | self.0 | | main.rs:975:10:975:10 | T | +| main.rs:984:15:984:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:984:15:984:25 | SelfParam | &T | main.rs:969:5:970:19 | S | +| main.rs:984:15:984:25 | SelfParam | &T.T | main.rs:975:10:975:10 | T | +| main.rs:984:34:986:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:984:34:986:9 | { ... } | &T | main.rs:975:10:975:10 | T | +| main.rs:985:13:985:19 | &... | | file://:0:0:0:0 | & | +| main.rs:985:13:985:19 | &... | &T | main.rs:975:10:975:10 | T | +| main.rs:985:14:985:17 | self | | file://:0:0:0:0 | & | +| main.rs:985:14:985:17 | self | &T | main.rs:969:5:970:19 | S | +| main.rs:985:14:985:17 | self | &T.T | main.rs:975:10:975:10 | T | +| main.rs:985:14:985:19 | self.0 | | main.rs:975:10:975:10 | T | +| main.rs:990:13:990:14 | x1 | | main.rs:969:5:970:19 | S | +| main.rs:990:13:990:14 | x1 | T | main.rs:972:5:973:14 | S2 | +| main.rs:990:18:990:22 | S(...) | | main.rs:969:5:970:19 | S | +| main.rs:990:18:990:22 | S(...) | T | main.rs:972:5:973:14 | S2 | +| main.rs:990:20:990:21 | S2 | | main.rs:972:5:973:14 | S2 | +| main.rs:991:26:991:27 | x1 | | main.rs:969:5:970:19 | S | +| main.rs:991:26:991:27 | x1 | T | main.rs:972:5:973:14 | S2 | +| main.rs:991:26:991:32 | x1.m1() | | main.rs:972:5:973:14 | S2 | +| main.rs:993:13:993:14 | x2 | | main.rs:969:5:970:19 | S | +| main.rs:993:13:993:14 | x2 | T | main.rs:972:5:973:14 | S2 | +| main.rs:993:18:993:22 | S(...) | | main.rs:969:5:970:19 | S | +| main.rs:993:18:993:22 | S(...) | T | main.rs:972:5:973:14 | S2 | +| main.rs:993:20:993:21 | S2 | | main.rs:972:5:973:14 | S2 | +| main.rs:995:26:995:27 | x2 | | main.rs:969:5:970:19 | S | +| main.rs:995:26:995:27 | x2 | T | main.rs:972:5:973:14 | S2 | +| main.rs:995:26:995:32 | x2.m2() | | file://:0:0:0:0 | & | +| main.rs:995:26:995:32 | x2.m2() | &T | main.rs:972:5:973:14 | S2 | +| main.rs:996:26:996:27 | x2 | | main.rs:969:5:970:19 | S | +| main.rs:996:26:996:27 | x2 | T | main.rs:972:5:973:14 | S2 | +| main.rs:996:26:996:32 | x2.m3() | | file://:0:0:0:0 | & | +| main.rs:996:26:996:32 | x2.m3() | &T | main.rs:972:5:973:14 | S2 | +| main.rs:998:13:998:14 | x3 | | main.rs:969:5:970:19 | S | +| main.rs:998:13:998:14 | x3 | T | main.rs:972:5:973:14 | S2 | +| main.rs:998:18:998:22 | S(...) | | main.rs:969:5:970:19 | S | +| main.rs:998:18:998:22 | S(...) | T | main.rs:972:5:973:14 | S2 | +| main.rs:998:20:998:21 | S2 | | main.rs:972:5:973:14 | S2 | +| main.rs:1000:26:1000:41 | ...::m2(...) | | file://:0:0:0:0 | & | +| main.rs:1000:26:1000:41 | ...::m2(...) | &T | main.rs:972:5:973:14 | S2 | +| main.rs:1000:38:1000:40 | &x3 | | file://:0:0:0:0 | & | +| main.rs:1000:38:1000:40 | &x3 | &T | main.rs:969:5:970:19 | S | +| main.rs:1000:38:1000:40 | &x3 | &T.T | main.rs:972:5:973:14 | S2 | +| main.rs:1000:39:1000:40 | x3 | | main.rs:969:5:970:19 | S | +| main.rs:1000:39:1000:40 | x3 | T | main.rs:972:5:973:14 | S2 | +| main.rs:1001:26:1001:41 | ...::m3(...) | | file://:0:0:0:0 | & | +| main.rs:1001:26:1001:41 | ...::m3(...) | &T | main.rs:972:5:973:14 | S2 | +| main.rs:1001:38:1001:40 | &x3 | | file://:0:0:0:0 | & | +| main.rs:1001:38:1001:40 | &x3 | &T | main.rs:969:5:970:19 | S | +| main.rs:1001:38:1001:40 | &x3 | &T.T | main.rs:972:5:973:14 | S2 | +| main.rs:1001:39:1001:40 | x3 | | main.rs:969:5:970:19 | S | +| main.rs:1001:39:1001:40 | x3 | T | main.rs:972:5:973:14 | S2 | +| main.rs:1003:13:1003:14 | x4 | | file://:0:0:0:0 | & | +| main.rs:1003:13:1003:14 | x4 | &T | main.rs:969:5:970:19 | S | +| main.rs:1003:13:1003:14 | x4 | &T.T | main.rs:972:5:973:14 | S2 | +| main.rs:1003:18:1003:23 | &... | | file://:0:0:0:0 | & | +| main.rs:1003:18:1003:23 | &... | &T | main.rs:969:5:970:19 | S | +| main.rs:1003:18:1003:23 | &... | &T.T | main.rs:972:5:973:14 | S2 | +| main.rs:1003:19:1003:23 | S(...) | | main.rs:969:5:970:19 | S | +| main.rs:1003:19:1003:23 | S(...) | T | main.rs:972:5:973:14 | S2 | +| main.rs:1003:21:1003:22 | S2 | | main.rs:972:5:973:14 | S2 | +| main.rs:1005:26:1005:27 | x4 | | file://:0:0:0:0 | & | +| main.rs:1005:26:1005:27 | x4 | &T | main.rs:969:5:970:19 | S | +| main.rs:1005:26:1005:27 | x4 | &T.T | main.rs:972:5:973:14 | S2 | +| main.rs:1005:26:1005:32 | x4.m2() | | file://:0:0:0:0 | & | +| main.rs:1005:26:1005:32 | x4.m2() | &T | main.rs:972:5:973:14 | S2 | +| main.rs:1006:26:1006:27 | x4 | | file://:0:0:0:0 | & | +| main.rs:1006:26:1006:27 | x4 | &T | main.rs:969:5:970:19 | S | +| main.rs:1006:26:1006:27 | x4 | &T.T | main.rs:972:5:973:14 | S2 | +| main.rs:1006:26:1006:32 | x4.m3() | | file://:0:0:0:0 | & | +| main.rs:1006:26:1006:32 | x4.m3() | &T | main.rs:972:5:973:14 | S2 | +| main.rs:1008:13:1008:14 | x5 | | file://:0:0:0:0 | & | +| main.rs:1008:13:1008:14 | x5 | &T | main.rs:969:5:970:19 | S | +| main.rs:1008:13:1008:14 | x5 | &T.T | main.rs:972:5:973:14 | S2 | +| main.rs:1008:18:1008:23 | &... | | file://:0:0:0:0 | & | +| main.rs:1008:18:1008:23 | &... | &T | main.rs:969:5:970:19 | S | +| main.rs:1008:18:1008:23 | &... | &T.T | main.rs:972:5:973:14 | S2 | +| main.rs:1008:19:1008:23 | S(...) | | main.rs:969:5:970:19 | S | +| main.rs:1008:19:1008:23 | S(...) | T | main.rs:972:5:973:14 | S2 | +| main.rs:1008:21:1008:22 | S2 | | main.rs:972:5:973:14 | S2 | +| main.rs:1010:26:1010:27 | x5 | | file://:0:0:0:0 | & | +| main.rs:1010:26:1010:27 | x5 | &T | main.rs:969:5:970:19 | S | +| main.rs:1010:26:1010:27 | x5 | &T.T | main.rs:972:5:973:14 | S2 | +| main.rs:1010:26:1010:32 | x5.m1() | | main.rs:972:5:973:14 | S2 | +| main.rs:1011:26:1011:27 | x5 | | file://:0:0:0:0 | & | +| main.rs:1011:26:1011:27 | x5 | &T | main.rs:969:5:970:19 | S | +| main.rs:1011:26:1011:27 | x5 | &T.T | main.rs:972:5:973:14 | S2 | +| main.rs:1011:26:1011:29 | x5.0 | | main.rs:972:5:973:14 | S2 | +| main.rs:1013:13:1013:14 | x6 | | file://:0:0:0:0 | & | +| main.rs:1013:13:1013:14 | x6 | &T | main.rs:969:5:970:19 | S | +| main.rs:1013:13:1013:14 | x6 | &T.T | main.rs:972:5:973:14 | S2 | +| main.rs:1013:18:1013:23 | &... | | file://:0:0:0:0 | & | +| main.rs:1013:18:1013:23 | &... | &T | main.rs:969:5:970:19 | S | +| main.rs:1013:18:1013:23 | &... | &T.T | main.rs:972:5:973:14 | S2 | +| main.rs:1013:19:1013:23 | S(...) | | main.rs:969:5:970:19 | S | +| main.rs:1013:19:1013:23 | S(...) | T | main.rs:972:5:973:14 | S2 | +| main.rs:1013:21:1013:22 | S2 | | main.rs:972:5:973:14 | S2 | +| main.rs:1015:26:1015:30 | (...) | | main.rs:969:5:970:19 | S | +| main.rs:1015:26:1015:30 | (...) | T | main.rs:972:5:973:14 | S2 | +| main.rs:1015:26:1015:35 | ... .m1() | | main.rs:972:5:973:14 | S2 | +| main.rs:1015:27:1015:29 | * ... | | main.rs:969:5:970:19 | S | +| main.rs:1015:27:1015:29 | * ... | T | main.rs:972:5:973:14 | S2 | +| main.rs:1015:28:1015:29 | x6 | | file://:0:0:0:0 | & | +| main.rs:1015:28:1015:29 | x6 | &T | main.rs:969:5:970:19 | S | +| main.rs:1015:28:1015:29 | x6 | &T.T | main.rs:972:5:973:14 | S2 | +| main.rs:1022:16:1022:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1022:16:1022:20 | SelfParam | &T | main.rs:1020:5:1028:5 | Self [trait MyTrait] | +| main.rs:1025:16:1025:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1025:16:1025:20 | SelfParam | &T | main.rs:1020:5:1028:5 | Self [trait MyTrait] | +| main.rs:1025:32:1027:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1025:32:1027:9 | { ... } | &T | main.rs:1020:5:1028:5 | Self [trait MyTrait] | +| main.rs:1026:13:1026:16 | self | | file://:0:0:0:0 | & | +| main.rs:1026:13:1026:16 | self | &T | main.rs:1020:5:1028:5 | Self [trait MyTrait] | +| main.rs:1026:13:1026:22 | self.foo() | | file://:0:0:0:0 | & | +| main.rs:1026:13:1026:22 | self.foo() | &T | main.rs:1020:5:1028:5 | Self [trait MyTrait] | +| main.rs:1034:16:1034:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1034:16:1034:20 | SelfParam | &T | main.rs:1030:5:1030:20 | MyStruct | +| main.rs:1034:36:1036:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1034:36:1036:9 | { ... } | &T | main.rs:1030:5:1030:20 | MyStruct | +| main.rs:1035:13:1035:16 | self | | file://:0:0:0:0 | & | +| main.rs:1035:13:1035:16 | self | &T | main.rs:1030:5:1030:20 | MyStruct | +| main.rs:1040:13:1040:13 | x | | main.rs:1030:5:1030:20 | MyStruct | +| main.rs:1040:17:1040:24 | MyStruct | | main.rs:1030:5:1030:20 | MyStruct | +| main.rs:1041:9:1041:9 | x | | main.rs:1030:5:1030:20 | MyStruct | +| main.rs:1041:9:1041:15 | x.bar() | | file://:0:0:0:0 | & | +| main.rs:1041:9:1041:15 | x.bar() | &T | main.rs:1030:5:1030:20 | MyStruct | +| main.rs:1051:16:1051:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1051:16:1051:20 | SelfParam | &T | main.rs:1048:5:1048:26 | MyStruct | +| main.rs:1051:16:1051:20 | SelfParam | &T.T | main.rs:1050:10:1050:10 | T | +| main.rs:1051:32:1053:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1051:32:1053:9 | { ... } | &T | main.rs:1048:5:1048:26 | MyStruct | +| main.rs:1051:32:1053:9 | { ... } | &T.T | main.rs:1050:10:1050:10 | T | +| main.rs:1052:13:1052:16 | self | | file://:0:0:0:0 | & | +| main.rs:1052:13:1052:16 | self | &T | main.rs:1048:5:1048:26 | MyStruct | +| main.rs:1052:13:1052:16 | self | &T.T | main.rs:1050:10:1050:10 | T | +| main.rs:1057:13:1057:13 | x | | main.rs:1048:5:1048:26 | MyStruct | +| main.rs:1057:13:1057:13 | x | T | main.rs:1046:5:1046:13 | S | +| main.rs:1057:17:1057:27 | MyStruct(...) | | main.rs:1048:5:1048:26 | MyStruct | +| main.rs:1057:17:1057:27 | MyStruct(...) | T | main.rs:1046:5:1046:13 | S | +| main.rs:1057:26:1057:26 | S | | main.rs:1046:5:1046:13 | S | +| main.rs:1058:9:1058:9 | x | | main.rs:1048:5:1048:26 | MyStruct | +| main.rs:1058:9:1058:9 | x | T | main.rs:1046:5:1046:13 | S | +| main.rs:1058:9:1058:15 | x.foo() | | file://:0:0:0:0 | & | +| main.rs:1058:9:1058:15 | x.foo() | &T | main.rs:1048:5:1048:26 | MyStruct | +| main.rs:1058:9:1058:15 | x.foo() | &T.T | main.rs:1046:5:1046:13 | S | +| main.rs:1066:15:1066:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1066:15:1066:19 | SelfParam | &T | main.rs:1063:5:1063:13 | S | +| main.rs:1066:31:1068:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1066:31:1068:9 | { ... } | &T | main.rs:1063:5:1063:13 | S | +| main.rs:1067:13:1067:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1067:13:1067:19 | &... | &T | main.rs:1063:5:1063:13 | S | +| main.rs:1067:14:1067:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1067:14:1067:19 | &... | &T | main.rs:1063:5:1063:13 | S | +| main.rs:1067:15:1067:19 | &self | | file://:0:0:0:0 | & | +| main.rs:1067:15:1067:19 | &self | &T | main.rs:1063:5:1063:13 | S | +| main.rs:1067:16:1067:19 | self | | file://:0:0:0:0 | & | +| main.rs:1067:16:1067:19 | self | &T | main.rs:1063:5:1063:13 | S | +| main.rs:1070:15:1070:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1070:15:1070:25 | SelfParam | &T | main.rs:1063:5:1063:13 | S | +| main.rs:1070:37:1072:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1070:37:1072:9 | { ... } | &T | main.rs:1063:5:1063:13 | S | +| main.rs:1071:13:1071:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1071:13:1071:19 | &... | &T | main.rs:1063:5:1063:13 | S | +| main.rs:1071:14:1071:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1071:14:1071:19 | &... | &T | main.rs:1063:5:1063:13 | S | +| main.rs:1071:15:1071:19 | &self | | file://:0:0:0:0 | & | +| main.rs:1071:15:1071:19 | &self | &T | main.rs:1063:5:1063:13 | S | +| main.rs:1071:16:1071:19 | self | | file://:0:0:0:0 | & | +| main.rs:1071:16:1071:19 | self | &T | main.rs:1063:5:1063:13 | S | +| main.rs:1074:15:1074:15 | x | | file://:0:0:0:0 | & | +| main.rs:1074:15:1074:15 | x | &T | main.rs:1063:5:1063:13 | S | +| main.rs:1074:34:1076:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1074:34:1076:9 | { ... } | &T | main.rs:1063:5:1063:13 | S | +| main.rs:1075:13:1075:13 | x | | file://:0:0:0:0 | & | +| main.rs:1075:13:1075:13 | x | &T | main.rs:1063:5:1063:13 | S | +| main.rs:1078:15:1078:15 | x | | file://:0:0:0:0 | & | +| main.rs:1078:15:1078:15 | x | &T | main.rs:1063:5:1063:13 | S | +| main.rs:1078:34:1080:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1078:34:1080:9 | { ... } | &T | main.rs:1063:5:1063:13 | S | +| main.rs:1079:13:1079:16 | &... | | file://:0:0:0:0 | & | +| main.rs:1079:13:1079:16 | &... | &T | main.rs:1063:5:1063:13 | S | +| main.rs:1079:14:1079:16 | &... | | file://:0:0:0:0 | & | +| main.rs:1079:14:1079:16 | &... | &T | main.rs:1063:5:1063:13 | S | +| main.rs:1079:15:1079:16 | &x | | file://:0:0:0:0 | & | +| main.rs:1079:15:1079:16 | &x | &T | main.rs:1063:5:1063:13 | S | +| main.rs:1079:16:1079:16 | x | | file://:0:0:0:0 | & | +| main.rs:1079:16:1079:16 | x | &T | main.rs:1063:5:1063:13 | S | +| main.rs:1084:13:1084:13 | x | | main.rs:1063:5:1063:13 | S | +| main.rs:1084:17:1084:20 | S {...} | | main.rs:1063:5:1063:13 | S | +| main.rs:1085:9:1085:9 | x | | main.rs:1063:5:1063:13 | S | +| main.rs:1085:9:1085:14 | x.f1() | | file://:0:0:0:0 | & | +| main.rs:1085:9:1085:14 | x.f1() | &T | main.rs:1063:5:1063:13 | S | +| main.rs:1086:9:1086:9 | x | | main.rs:1063:5:1063:13 | S | +| main.rs:1086:9:1086:14 | x.f2() | | file://:0:0:0:0 | & | +| main.rs:1086:9:1086:14 | x.f2() | &T | main.rs:1063:5:1063:13 | S | +| main.rs:1087:9:1087:17 | ...::f3(...) | | file://:0:0:0:0 | & | +| main.rs:1087:9:1087:17 | ...::f3(...) | &T | main.rs:1063:5:1063:13 | S | +| main.rs:1087:15:1087:16 | &x | | file://:0:0:0:0 | & | +| main.rs:1087:15:1087:16 | &x | &T | main.rs:1063:5:1063:13 | S | +| main.rs:1087:16:1087:16 | x | | main.rs:1063:5:1063:13 | S | +| main.rs:1093:5:1093:20 | ...::f(...) | | main.rs:67:5:67:21 | Foo | +| main.rs:1094:5:1094:60 | ...::g(...) | | main.rs:67:5:67:21 | Foo | +| main.rs:1094:20:1094:38 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | +| main.rs:1094:41:1094:59 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index c8eabda8872b..7e89671da544 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -32,6 +32,33 @@ signature module InputSig1 { /** A type parameter. */ class TypeParameter extends Type; + /** + * A type abstraction. I.e., a place in the program where type variables are + * introduced. + * + * Example in C#: + * ```csharp + * class C : D { } + * // ^^^^^^ a type abstraction + * ``` + * + * Example in Rust: + * ```rust + * impl Foo { } + * // ^^^^^^ a type abstraction + * ``` + */ + class TypeAbstraction { + /** Gets a type parameter introduced by this abstraction. */ + TypeParameter getATypeParameter(); + + /** Gets a textual representation of this type abstraction. */ + string toString(); + + /** Gets the location of this type abstraction. */ + Location getLocation(); + } + /** * Gets the unique identifier of type parameter `tp`. * @@ -91,11 +118,9 @@ module Make1 Input1> { predicate getRank = getTypeParameterId/1; } - private int getTypeParameterRank(TypeParameter tp) { - tp = DenseRank::denseRank(result) - } + int getRank(TypeParameter tp) { tp = DenseRank::denseRank(result) } - string encode(TypeParameter tp) { result = getTypeParameterRank(tp).toString() } + string encode(TypeParameter tp) { result = getRank(tp).toString() } bindingset[s] TypeParameter decode(string s) { encode(result) = s } @@ -212,6 +237,17 @@ module Make1 Input1> { TypePath cons(TypeParameter tp, TypePath suffix) { result = singleton(tp).append(suffix) } } + /** A class that represents a type tree. */ + signature class TypeTreeSig { + Type resolveTypeAt(TypePath path); + + /** Gets a textual representation of this type abstraction. */ + string toString(); + + /** Gets the location of this type abstraction. */ + Location getLocation(); + } + /** Provides the input to `Make2`. */ signature module InputSig2 { /** A type mention, for example a type annotation in a local variable declaration. */ @@ -253,6 +289,62 @@ module Make1 Input1> { * ``` */ TypeMention getABaseTypeMention(Type t); + + /** + * Gets a type constraint on the type parameter `tp`, if any. All + * instantiations of the type parameter must satisfy the constraint. + * + * For example, in + * ```csharp + * class GenericClass : IComparable> + * // ^ `tp` + * where T : IComparable { } + * // ^^^^^^^^^^^^^^ `result` + * ``` + * the type parameter `T` has the constraint `IComparable`. + */ + TypeMention getTypeParameterConstraint(TypeParameter tp); + + /** + * Holds if + * - `abs` is a type abstraction that introduces type variables that are + * free in `condition` and `constraint`, + * - and for every instantiation of the type parameters the resulting + * `condition` satisifies the constraint given by `constraint`. + * + * Example in C#: + * ```csharp + * class C : IComparable> { } + * // ^^^ `abs` + * // ^^^^ `condition` + * // ^^^^^^^^^^^^^^^^^ `constraint` + * ``` + * + * Example in Rust: + * ```rust + * impl Trait for Type { } + * // ^^^ `abs` ^^^^^^^^^^^^^^^ `condition` + * // ^^^^^^^^^^^^^ `constraint` + * ``` + * + * Note that the type parameters in `abs` significantly change the meaning + * of type parameters that occur in `condition`. For instance, in the Rust + * example + * ```rust + * fn foo() { } + * ``` + * we have that the type parameter `T` satisfies the constraint `Trait`. But, + * only that specific `T` satisfy the constraint. Hence we would not have + * `T` in `abs`. On the other hand, in the Rust example + * ```rust + * impl Trait for T { } + * ``` + * the constraint `Trait` is in fact satisfied for all types, and we would + * have `T` in `abs` to make it free in the condition. + */ + predicate conditionSatisfiesConstraint( + TypeAbstraction abs, TypeMention condition, TypeMention constraint + ); } module Make2 { @@ -265,8 +357,239 @@ module Make1 Input1> { result = tm.resolveTypeAt(TypePath::nil()) } + signature module IsInstantiationOfSig { + /** + * Holds if `abs` is a type abstraction under which `tm` occurs and if + * `app` is potentially the result of applying the abstraction to type + * some type argument. + */ + predicate potentialInstantiationOf(App app, TypeAbstraction abs, TypeMention tm); + } + + module IsInstantiationOf Input> { + private import Input + + /** Gets the `i`th path in `tm` per some arbitrary order. */ + private TypePath getNthPath(TypeMention tm, int i) { + result = rank[i + 1](TypePath path | exists(tm.resolveTypeAt(path)) | path) + } + + /** + * Holds if `app` is a possible instantiation of `tm` at `path`. That is + * the type at `path` in `tm` is either a type parameter or equal to the + * type at the same path in `app`. + */ + bindingset[app, abs, tm, path] + private predicate satisfiesConcreteTypeAt( + App app, TypeAbstraction abs, TypeMention tm, TypePath path + ) { + exists(Type t | + tm.resolveTypeAt(path) = t and + if t = abs.getATypeParameter() then any() else app.resolveTypeAt(path) = t + ) + } + + private predicate satisfiesConcreteTypesFromIndex( + App app, TypeAbstraction abs, TypeMention tm, int i + ) { + potentialInstantiationOf(app, abs, tm) and + satisfiesConcreteTypeAt(app, abs, tm, getNthPath(tm, i)) and + // Recurse unless we are at the first path + if i = 0 then any() else satisfiesConcreteTypesFromIndex(app, abs, tm, i - 1) + } + + pragma[inline] + private predicate satisfiesConcreteTypes(App app, TypeAbstraction abs, TypeMention tm) { + satisfiesConcreteTypesFromIndex(app, abs, tm, max(int i | exists(getNthPath(tm, i)))) + } + + private TypeParameter getNthTypeParameter(TypeAbstraction abs, int i) { + result = + rank[i + 1](TypeParameter tp | + tp = abs.getATypeParameter() + | + tp order by TypeParameter::getRank(tp) + ) + } + + /** + * Gets the path to the `i`th occurrence of `tp` within `tm` per some + * arbitrary order, if any. + */ + private TypePath getNthTypeParameterPath(TypeMention tm, TypeParameter tp, int i) { + result = rank[i + 1](TypePath path | tp = tm.resolveTypeAt(path) | path) + } + + private predicate typeParametersEqualFromIndex( + App app, TypeAbstraction abs, TypeMention tm, TypeParameter tp, int i + ) { + potentialInstantiationOf(app, abs, tm) and + exists(TypePath path, TypePath nextPath | + path = getNthTypeParameterPath(tm, tp, i) and + nextPath = getNthTypeParameterPath(tm, tp, i - 1) and + app.resolveTypeAt(path) = app.resolveTypeAt(nextPath) and + if i = 1 then any() else typeParametersEqualFromIndex(app, abs, tm, tp, i - 1) + ) + } + + private predicate typeParametersEqual( + App app, TypeAbstraction abs, TypeMention tm, TypeParameter tp + ) { + potentialInstantiationOf(app, abs, tm) and + tp = getNthTypeParameter(abs, _) and + ( + not exists(getNthTypeParameterPath(tm, tp, _)) + or + exists(int n | n = max(int i | exists(getNthTypeParameterPath(tm, tp, i))) | + // If the largest index is 0, then there are no equalities to check as + // the type parameter only occurs once. + if n = 0 then any() else typeParametersEqualFromIndex(app, abs, tm, tp, n) + ) + ) + } + + /** Holds if all the concrete types in `tm` also occur in `app`. */ + private predicate typeParametersHaveEqualInstantiationFromIndex( + App app, TypeAbstraction abs, TypeMention tm, int i + ) { + exists(TypeParameter tp | tp = getNthTypeParameter(abs, i) | + typeParametersEqual(app, abs, tm, tp) and + if i = 0 + then any() + else typeParametersHaveEqualInstantiationFromIndex(app, abs, tm, i - 1) + ) + } + + /** All the places where the same type parameter occurs in `tm` are equal in `app. */ + pragma[inline] + private predicate typeParametersHaveEqualInstantiation( + App app, TypeAbstraction abs, TypeMention tm + ) { + potentialInstantiationOf(app, abs, tm) and + ( + not exists(getNthTypeParameter(abs, _)) + or + exists(int n | n = max(int i | exists(getNthTypeParameter(abs, i))) | + typeParametersHaveEqualInstantiationFromIndex(app, abs, tm, n) + ) + ) + } + + /** + * Holds if `app` is a possible instantiation of `tm`. That is, by making + * appropriate substitutions for the free type parameters in `tm` given by + * `abs`, it is possible to obtain `app`. + * + * For instance, if `A` and `B` are free type parameters we have: + * - `Pair` is an instantiation of `A` + * - `Pair` is an instantiation of `Pair` + * - `Pair` is an instantiation of `Pair` + * - `Pair` is _not_ an instantiation of `Pair` + * - `Pair` is _not_ an instantiation of `Pair` + */ + predicate isInstantiationOf(App app, TypeAbstraction abs, TypeMention tm) { + potentialInstantiationOf(app, abs, tm) and + satisfiesConcreteTypes(app, abs, tm) and + typeParametersHaveEqualInstantiation(app, abs, tm) + } + } + /** Provides logic related to base types. */ private module BaseTypes { + /** + * Holds if, when `tm1` is considered an instantiation of `tm2`, then at + * the type parameter `tp` is has the type `t` at `path`. + * + * For instance, if the type `Map>` is considered an + * instantion of `Map` then it has the type `int` at `K` and the + * type `List` at `V`. + */ + bindingset[tm1, tm2] + predicate instantiatesWith( + TypeMention tm1, TypeMention tm2, TypeParameter tp, TypePath path, Type t + ) { + exists(TypePath prefix | + tm2.resolveTypeAt(prefix) = tp and t = tm1.resolveTypeAt(prefix.append(path)) + ) + } + + module IsInstantiationOfInput implements IsInstantiationOfSig { + pragma[nomagic] + private predicate typeCondition(Type type, TypeAbstraction abs, TypeMention lhs) { + conditionSatisfiesConstraint(abs, lhs, _) and type = resolveTypeMentionRoot(lhs) + } + + pragma[nomagic] + private predicate typeConstraint(Type type, TypeMention rhs) { + conditionSatisfiesConstraint(_, _, rhs) and type = resolveTypeMentionRoot(rhs) + } + + predicate potentialInstantiationOf( + TypeMention condition, TypeAbstraction abs, TypeMention constraint + ) { + exists(Type type | + typeConstraint(type, condition) and typeCondition(type, abs, constraint) + ) + } + } + + // The type mention `condition` satisfies `constraint` with the type `t` at the path `path`. + predicate conditionSatisfiesConstraintTypeAt( + TypeAbstraction abs, TypeMention condition, TypeMention constraint, TypePath path, Type t + ) { + // base case + conditionSatisfiesConstraint(abs, condition, constraint) and + constraint.resolveTypeAt(path) = t + or + // recursive case + exists(TypeAbstraction midAbs, TypeMention midSup, TypeMention midSub | + conditionSatisfiesConstraint(abs, condition, midSup) and + // NOTE: `midAbs` describe the free type variables in `midSub`, hence + // we use that for instantiation check. + IsInstantiationOf::isInstantiationOf(midSup, midAbs, + midSub) and + ( + conditionSatisfiesConstraintTypeAt(midAbs, midSub, constraint, path, t) and + not t = abs.getATypeParameter() + or + exists(TypePath prefix, TypePath suffix, TypeParameter tp | + tp = abs.getATypeParameter() and + conditionSatisfiesConstraintTypeAt(midAbs, midSub, constraint, prefix, tp) and + instantiatesWith(midSup, midSub, tp, suffix, t) and + path = prefix.append(suffix) + ) + ) + ) + } + + /** + * Holds if its possible for a type with `conditionRoot` at the root to + * satisfy a constraint with `constraintRoot` at the root through `abs`, + * `condition`, and `constraint`. + */ + predicate rootTypesSatisfaction( + Type conditionRoot, Type constraintRoot, TypeAbstraction abs, TypeMention condition, + TypeMention constraint + ) { + conditionSatisfiesConstraintTypeAt(abs, condition, constraint, _, _) and + conditionRoot = resolveTypeMentionRoot(condition) and + constraintRoot = resolveTypeMentionRoot(constraint) + } + + /** + * Gets the number of ways in which it is possible for a type with + * `conditionRoot` at the root to satisfy a constraint with + * `constraintRoot` at the root. + */ + int countConstraintImplementations(Type conditionRoot, Type constraintRoot) { + result = + strictcount(TypeAbstraction abs, TypeMention tm, TypeMention constraint | + rootTypesSatisfaction(conditionRoot, constraintRoot, abs, tm, constraint) + | + constraint + ) + } + /** * Holds if `baseMention` is a (transitive) base type mention of `sub`, * and `t` is mentioned (implicitly) at `path` inside `baseMention`. For @@ -528,24 +851,19 @@ module Make1 Input1> { * Holds if inferring types at `a` might depend on the type at `path` of * `apos` having `base` as a transitive base type. */ - private predicate relevantAccess(Access a, AccessPosition apos, TypePath path, Type base) { + private predicate relevantAccess(Access a, AccessPosition apos, Type base) { exists(Declaration target, DeclarationPosition dpos | adjustedAccessType(a, apos, target, _, _) and - accessDeclarationPositionMatch(apos, dpos) - | - path.isEmpty() and declarationBaseType(target, dpos, base, _, _) - or - typeParameterConstraintHasTypeParameter(target, dpos, path, _, base, _, _) + accessDeclarationPositionMatch(apos, dpos) and + declarationBaseType(target, dpos, base, _, _) ) } pragma[nomagic] - private Type inferTypeAt( - Access a, AccessPosition apos, TypePath prefix, TypeParameter tp, TypePath suffix - ) { - relevantAccess(a, apos, prefix, _) and + private Type inferTypeAt(Access a, AccessPosition apos, TypeParameter tp, TypePath suffix) { + relevantAccess(a, apos, _) and exists(TypePath path0 | - result = a.getInferredType(apos, prefix.append(path0)) and + result = a.getInferredType(apos, path0) and path0.isCons(tp, suffix) ) } @@ -581,24 +899,128 @@ module Make1 Input1> { * `Base>` | `"T2.T1"` | ``C`1`` * `Base>` | `"T2.T1.T1"` | `int` */ - pragma[nomagic] predicate hasBaseTypeMention( - Access a, AccessPosition apos, TypePath pathToSub, TypeMention baseMention, TypePath path, - Type t + Access a, AccessPosition apos, TypeMention baseMention, TypePath path, Type t ) { - relevantAccess(a, apos, pathToSub, resolveTypeMentionRoot(baseMention)) and - exists(Type sub | sub = a.getInferredType(apos, pathToSub) | + relevantAccess(a, apos, resolveTypeMentionRoot(baseMention)) and + exists(Type sub | sub = a.getInferredType(apos, TypePath::nil()) | baseTypeMentionHasNonTypeParameterAt(sub, baseMention, path, t) or exists(TypePath prefix, TypePath suffix, TypeParameter tp | baseTypeMentionHasTypeParameterAt(sub, baseMention, prefix, tp) and - t = inferTypeAt(a, apos, pathToSub, tp, suffix) and + t = inferTypeAt(a, apos, tp, suffix) and path = prefix.append(suffix) ) ) } } + private module AccessConstraint { + private newtype TTRelevantAccess = + TRelevantAccess(Access a, AccessPosition apos, TypePath path, Type constraint) { + exists(DeclarationPosition dpos | + accessDeclarationPositionMatch(apos, dpos) and + typeParameterConstraintHasTypeParameter(a.getTarget(), dpos, path, _, constraint, _, _) + ) + } + + /** + * If the access `a` for `apos` and `path` has the inferred root type + * `type` and type inference requires it to satisfy the constraint + * `constraint`. + */ + private class RelevantAccess extends TTRelevantAccess { + Access a; + AccessPosition apos; + TypePath path; + Type constraint0; + + RelevantAccess() { this = TRelevantAccess(a, apos, path, constraint0) } + + Type resolveTypeAt(TypePath suffix) { + a.getInferredType(apos, path.append(suffix)) = result + } + + /** Holds if this relevant access has the type `type` and should satisfy `constraint`. */ + predicate hasTypeConstraint(Type type, Type constraint) { + type = a.getInferredType(apos, path) and + constraint = constraint0 + } + + string toString() { + result = a.toString() + ", " + apos.toString() + ", " + path.toString() + } + + Location getLocation() { result = a.getLocation() } + } + + private module IsInstantiationOfInput implements IsInstantiationOfSig { + predicate potentialInstantiationOf( + RelevantAccess at, TypeAbstraction abs, TypeMention cond + ) { + exists(Type constraint, Type type | + at.hasTypeConstraint(type, constraint) and + rootTypesSatisfaction(type, constraint, abs, cond, _) and + // We only need to check instantiations where there are multiple candidates. + countConstraintImplementations(type, constraint) > 1 + ) + } + } + + /** + * Holds if `at` satisfies `constraint` through `abs`, `sub`, and `constraintMention`. + */ + private predicate hasConstraintMention( + RelevantAccess at, TypeAbstraction abs, TypeMention sub, TypeMention constraintMention + ) { + exists(Type type, Type constraint | at.hasTypeConstraint(type, constraint) | + not exists(countConstraintImplementations(type, constraint)) and + conditionSatisfiesConstraintTypeAt(abs, sub, constraintMention, _, _) and + resolveTypeMentionRoot(sub) = abs.getATypeParameter() and + constraint = resolveTypeMentionRoot(constraintMention) + or + countConstraintImplementations(type, constraint) > 0 and + rootTypesSatisfaction(type, constraint, abs, sub, constraintMention) and + // When there are multiple ways the type could implement the + // constraint we need to find the right implementation, which is the + // one where the type instantiates the precondition. + if countConstraintImplementations(type, constraint) > 1 + then + IsInstantiationOf::isInstantiationOf(at, abs, + sub) + else any() + ) + } + + /** + * Holds if the type at `a`, `apos`, and `path` satisfies the constraint + * `constraint` with the type `t` at `path`. + */ + pragma[nomagic] + predicate satisfiesConstraintTypeMention( + Access a, AccessPosition apos, TypePath prefix, Type constraint, TypePath path, Type t + ) { + exists( + RelevantAccess at, TypeAbstraction abs, TypeMention sub, Type t0, TypePath prefix0, + TypeMention constraintMention + | + at = TRelevantAccess(a, apos, prefix, constraint) and + hasConstraintMention(at, abs, sub, constraintMention) and + conditionSatisfiesConstraintTypeAt(abs, sub, constraintMention, prefix0, t0) and + ( + not t0 = abs.getATypeParameter() and t = t0 and path = prefix0 + or + t0 = abs.getATypeParameter() and + exists(TypePath path3, TypePath suffix | + sub.resolveTypeAt(path3) = t0 and + at.resolveTypeAt(path3.append(suffix)) = t and + path = prefix0.append(suffix) + ) + ) + ) + } + } + /** * Holds if the type of `a` at `apos` has the base type `base`, and when * viewed as an element of that type has the type `t` at `path`. @@ -608,7 +1030,7 @@ module Make1 Input1> { Access a, AccessPosition apos, Type base, TypePath path, Type t ) { exists(TypeMention tm | - AccessBaseType::hasBaseTypeMention(a, apos, TypePath::nil(), tm, path, t) and + AccessBaseType::hasBaseTypeMention(a, apos, tm, path, t) and base = resolveTypeMentionRoot(tm) ) } @@ -712,7 +1134,7 @@ module Make1 Input1> { tp1 != tp2 and tp1 = target.getDeclaredType(dpos, path1) and exists(TypeMention tm | - tm = getABaseTypeMention(tp1) and + tm = getTypeParameterConstraint(tp1) and tm.resolveTypeAt(path2) = tp2 and constraint = resolveTypeMentionRoot(tm) ) @@ -725,13 +1147,14 @@ module Make1 Input1> { not exists(getTypeArgument(a, target, tp, _)) and target = a.getTarget() and exists( - TypeMention base, AccessPosition apos, DeclarationPosition dpos, TypePath pathToTp, + Type constraint, AccessPosition apos, DeclarationPosition dpos, TypePath pathToTp, TypePath pathToTp2 | accessDeclarationPositionMatch(apos, dpos) and - typeParameterConstraintHasTypeParameter(target, dpos, pathToTp2, _, - resolveTypeMentionRoot(base), pathToTp, tp) and - AccessBaseType::hasBaseTypeMention(a, apos, pathToTp2, base, pathToTp.append(path), t) + typeParameterConstraintHasTypeParameter(target, dpos, pathToTp2, _, constraint, pathToTp, + tp) and + AccessConstraint::satisfiesConstraintTypeMention(a, apos, pathToTp2, constraint, + pathToTp.append(path), t) ) } @@ -749,7 +1172,7 @@ module Make1 Input1> { // We can infer the type of `tp` by going up the type hiearchy baseTypeMatch(a, target, path, t, tp) or - // We can infer the type of `tp` by a type bound + // We can infer the type of `tp` by a type constraint typeConstraintBaseTypeMatch(a, target, path, t, tp) } @@ -811,7 +1234,7 @@ module Make1 Input1> { } } - /** Provides consitency checks. */ + /** Provides consistency checks. */ module Consistency { query predicate missingTypeParameterId(TypeParameter tp) { not exists(getTypeParameterId(tp)) From ea288320f5242b5d0b98209453ad5a1883857993 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Tue, 29 Apr 2025 13:22:41 +0200 Subject: [PATCH 3/6] Rust: Add type inference test for inherent implementation shadowing trait implementation --- .../PathResolutionConsistency.expected | 5 + .../test/library-tests/type-inference/main.rs | 41 + .../type-inference/type-inference.expected | 1674 +++++++++-------- 3 files changed, 893 insertions(+), 827 deletions(-) create mode 100644 rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected diff --git a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 000000000000..a16a01ba2e9e --- /dev/null +++ b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected @@ -0,0 +1,5 @@ +multipleMethodCallTargets +| main.rs:401:26:401:42 | x.common_method() | main.rs:376:9:379:9 | fn common_method | +| main.rs:401:26:401:42 | x.common_method() | main.rs:388:9:391:9 | fn common_method | +| main.rs:402:26:402:44 | x.common_method_2() | main.rs:381:9:384:9 | fn common_method_2 | +| main.rs:402:26:402:44 | x.common_method_2() | main.rs:393:9:396:9 | fn common_method_2 | diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index b20acd432c39..6b093174f8be 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -362,6 +362,47 @@ mod method_non_parametric_trait_impl { } } +mod impl_overlap { + #[derive(Debug, Clone, Copy)] + struct S1; + + trait OverlappingTrait { + fn common_method(self) -> S1; + + fn common_method_2(self, s1: S1) -> S1; + } + + impl OverlappingTrait for S1 { + // ::common_method + fn common_method(self) -> S1 { + panic!("not called"); + } + + // ::common_method_2 + fn common_method_2(self, s1: S1) -> S1 { + panic!("not called"); + } + } + + impl S1 { + // S1::common_method + fn common_method(self) -> S1 { + self + } + + // S1::common_method_2 + fn common_method_2(self) -> S1 { + self + } + } + + pub fn f() { + let x = S1; + println!("{:?}", x.common_method()); // $ method=S1::common_method SPURIOUS: method=::common_method + println!("{:?}", x.common_method_2()); // $ method=S1::common_method_2 SPURIOUS: method=::common_method_2 + } +} + mod type_parameter_bounds { use std::fmt::Debug; 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 ef2538deef90..09f4bb78599a 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -458,830 +458,850 @@ inferType | main.rs:361:17:361:33 | convert_to(...) | | main.rs:155:5:156:14 | S1 | | main.rs:361:28:361:32 | thing | | main.rs:144:5:147:5 | MyThing | | main.rs:361:28:361:32 | thing | A | main.rs:155:5:156:14 | S1 | -| main.rs:378:19:378:22 | SelfParam | | main.rs:376:5:379:5 | Self [trait FirstTrait] | -| main.rs:383:19:383:22 | SelfParam | | main.rs:381:5:384:5 | Self [trait SecondTrait] | -| main.rs:386:64:386:64 | x | | main.rs:386:45:386:61 | T | -| main.rs:388:13:388:14 | s1 | | main.rs:386:35:386:42 | I | -| main.rs:388:18:388:18 | x | | main.rs:386:45:386:61 | T | -| main.rs:388:18:388:27 | x.method() | | main.rs:386:35:386:42 | I | -| main.rs:389:26:389:27 | s1 | | main.rs:386:35:386:42 | I | -| main.rs:392:65:392:65 | x | | main.rs:392:46:392:62 | T | -| main.rs:394:13:394:14 | s2 | | main.rs:392:36:392:43 | I | -| main.rs:394:18:394:18 | x | | main.rs:392:46:392:62 | T | -| main.rs:394:18:394:27 | x.method() | | main.rs:392:36:392:43 | I | -| main.rs:395:26:395:27 | s2 | | main.rs:392:36:392:43 | I | -| main.rs:398:49:398:49 | x | | main.rs:398:30:398:46 | T | -| main.rs:399:13:399:13 | s | | main.rs:368:5:369:14 | S1 | -| main.rs:399:17:399:17 | x | | main.rs:398:30:398:46 | T | -| main.rs:399:17:399:26 | x.method() | | main.rs:368:5:369:14 | S1 | -| main.rs:400:26:400:26 | s | | main.rs:368:5:369:14 | S1 | -| main.rs:403:53:403:53 | x | | main.rs:403:34:403:50 | T | -| main.rs:404:13:404:13 | s | | main.rs:368:5:369:14 | S1 | -| main.rs:404:17:404:17 | x | | main.rs:403:34:403:50 | T | -| main.rs:404:17:404:26 | x.method() | | main.rs:368:5:369:14 | S1 | -| main.rs:405:26:405:26 | s | | main.rs:368:5:369:14 | S1 | -| main.rs:409:16:409:19 | SelfParam | | main.rs:408:5:412:5 | Self [trait Pair] | -| main.rs:411:16:411:19 | SelfParam | | main.rs:408:5:412:5 | Self [trait Pair] | -| main.rs:414:58:414:58 | x | | main.rs:414:41:414:55 | T | -| main.rs:414:64:414:64 | y | | main.rs:414:41:414:55 | T | -| main.rs:416:13:416:14 | s1 | | main.rs:368:5:369:14 | S1 | -| main.rs:416:18:416:18 | x | | main.rs:414:41:414:55 | T | -| main.rs:416:18:416:24 | x.fst() | | main.rs:368:5:369:14 | S1 | -| main.rs:417:13:417:14 | s2 | | main.rs:371:5:372:14 | S2 | -| main.rs:417:18:417:18 | y | | main.rs:414:41:414:55 | T | -| main.rs:417:18:417:24 | y.snd() | | main.rs:371:5:372:14 | S2 | -| main.rs:418:32:418:33 | s1 | | main.rs:368:5:369:14 | S1 | -| main.rs:418:36:418:37 | s2 | | main.rs:371:5:372:14 | S2 | -| main.rs:421:69:421:69 | x | | main.rs:421:52:421:66 | T | -| main.rs:421:75:421:75 | y | | main.rs:421:52:421:66 | T | -| main.rs:423:13:423:14 | s1 | | main.rs:368:5:369:14 | S1 | -| main.rs:423:18:423:18 | x | | main.rs:421:52:421:66 | T | -| main.rs:423:18:423:24 | x.fst() | | main.rs:368:5:369:14 | S1 | -| main.rs:424:13:424:14 | s2 | | main.rs:421:41:421:49 | T2 | -| main.rs:424:18:424:18 | y | | main.rs:421:52:421:66 | T | -| main.rs:424:18:424:24 | y.snd() | | main.rs:421:41:421:49 | T2 | -| main.rs:425:32:425:33 | s1 | | main.rs:368:5:369:14 | S1 | -| main.rs:425:36:425:37 | s2 | | main.rs:421:41:421:49 | T2 | -| main.rs:441:15:441:18 | SelfParam | | main.rs:440:5:449:5 | Self [trait MyTrait] | -| main.rs:443:15:443:18 | SelfParam | | main.rs:440:5:449:5 | Self [trait MyTrait] | -| main.rs:446:9:448:9 | { ... } | | main.rs:440:19:440:19 | A | -| main.rs:447:13:447:16 | self | | main.rs:440:5:449:5 | Self [trait MyTrait] | -| main.rs:447:13:447:21 | self.m1() | | main.rs:440:19:440:19 | A | -| main.rs:452:43:452:43 | x | | main.rs:452:26:452:40 | T2 | -| main.rs:452:56:454:5 | { ... } | | main.rs:452:22:452:23 | T1 | -| main.rs:453:9:453:9 | x | | main.rs:452:26:452:40 | T2 | -| main.rs:453:9:453:14 | x.m1() | | main.rs:452:22:452:23 | T1 | -| main.rs:457:49:457:49 | x | | main.rs:430:5:433:5 | MyThing | -| main.rs:457:49:457:49 | x | T | main.rs:457:32:457:46 | T2 | -| main.rs:457:71:459:5 | { ... } | | main.rs:457:28:457:29 | T1 | -| main.rs:458:9:458:9 | x | | main.rs:430:5:433:5 | MyThing | -| main.rs:458:9:458:9 | x | T | main.rs:457:32:457:46 | T2 | -| main.rs:458:9:458:11 | x.a | | main.rs:457:32:457:46 | T2 | -| main.rs:458:9:458:16 | ... .m1() | | main.rs:457:28:457:29 | T1 | -| main.rs:462:15:462:18 | SelfParam | | main.rs:430:5:433:5 | MyThing | -| main.rs:462:15:462:18 | SelfParam | T | main.rs:461:10:461:10 | T | -| main.rs:462:26:464:9 | { ... } | | main.rs:461:10:461:10 | T | -| main.rs:463:13:463:16 | self | | main.rs:430:5:433:5 | MyThing | -| main.rs:463:13:463:16 | self | T | main.rs:461:10:461:10 | T | -| main.rs:463:13:463:18 | self.a | | main.rs:461:10:461:10 | T | -| main.rs:468:13:468:13 | x | | main.rs:430:5:433:5 | MyThing | -| main.rs:468:13:468:13 | x | T | main.rs:435:5:436:14 | S1 | -| main.rs:468:17:468:33 | MyThing {...} | | main.rs:430:5:433:5 | MyThing | -| main.rs:468:17:468:33 | MyThing {...} | T | main.rs:435:5:436:14 | S1 | -| main.rs:468:30:468:31 | S1 | | main.rs:435:5:436:14 | S1 | -| main.rs:469:13:469:13 | y | | main.rs:430:5:433:5 | MyThing | -| main.rs:469:13:469:13 | y | T | main.rs:437:5:438:14 | S2 | -| main.rs:469:17:469:33 | MyThing {...} | | main.rs:430:5:433:5 | MyThing | -| main.rs:469:17:469:33 | MyThing {...} | T | main.rs:437:5:438:14 | S2 | -| main.rs:469:30:469:31 | S2 | | main.rs:437:5:438:14 | S2 | -| main.rs:471:26:471:26 | x | | main.rs:430:5:433:5 | MyThing | -| main.rs:471:26:471:26 | x | T | main.rs:435:5:436:14 | S1 | -| main.rs:471:26:471:31 | x.m1() | | main.rs:435:5:436:14 | S1 | -| main.rs:472:26:472:26 | y | | main.rs:430:5:433:5 | MyThing | -| main.rs:472:26:472:26 | y | T | main.rs:437:5:438:14 | S2 | -| main.rs:472:26:472:31 | y.m1() | | main.rs:437:5:438:14 | S2 | -| main.rs:474:13:474:13 | x | | main.rs:430:5:433:5 | MyThing | -| main.rs:474:13:474:13 | x | T | main.rs:435:5:436:14 | S1 | -| main.rs:474:17:474:33 | MyThing {...} | | main.rs:430:5:433:5 | MyThing | -| main.rs:474:17:474:33 | MyThing {...} | T | main.rs:435:5:436:14 | S1 | -| main.rs:474:30:474:31 | S1 | | main.rs:435:5:436:14 | S1 | -| main.rs:475:13:475:13 | y | | main.rs:430:5:433:5 | MyThing | -| main.rs:475:13:475:13 | y | T | main.rs:437:5:438:14 | S2 | -| main.rs:475:17:475:33 | MyThing {...} | | main.rs:430:5:433:5 | MyThing | -| main.rs:475:17:475:33 | MyThing {...} | T | main.rs:437:5:438:14 | S2 | -| main.rs:475:30:475:31 | S2 | | main.rs:437:5:438:14 | S2 | -| main.rs:477:26:477:26 | x | | main.rs:430:5:433:5 | MyThing | -| main.rs:477:26:477:26 | x | T | main.rs:435:5:436:14 | S1 | -| main.rs:477:26:477:31 | x.m2() | | main.rs:435:5:436:14 | S1 | -| main.rs:478:26:478:26 | y | | main.rs:430:5:433:5 | MyThing | -| main.rs:478:26:478:26 | y | T | main.rs:437:5:438:14 | S2 | -| main.rs:478:26:478:31 | y.m2() | | main.rs:437:5:438:14 | S2 | -| main.rs:480:13:480:14 | x2 | | main.rs:430:5:433:5 | MyThing | -| main.rs:480:13:480:14 | x2 | T | main.rs:435:5:436:14 | S1 | -| main.rs:480:18:480:34 | MyThing {...} | | main.rs:430:5:433:5 | MyThing | -| main.rs:480:18:480:34 | MyThing {...} | T | main.rs:435:5:436:14 | S1 | -| main.rs:480:31:480:32 | S1 | | main.rs:435:5:436:14 | S1 | -| main.rs:481:13:481:14 | y2 | | main.rs:430:5:433:5 | MyThing | -| main.rs:481:13:481:14 | y2 | T | main.rs:437:5:438:14 | S2 | -| main.rs:481:18:481:34 | MyThing {...} | | main.rs:430:5:433:5 | MyThing | -| main.rs:481:18:481:34 | MyThing {...} | T | main.rs:437:5:438:14 | S2 | -| main.rs:481:31:481:32 | S2 | | main.rs:437:5:438:14 | S2 | -| main.rs:483:26:483:42 | call_trait_m1(...) | | main.rs:435:5:436:14 | S1 | -| main.rs:483:40:483:41 | x2 | | main.rs:430:5:433:5 | MyThing | -| main.rs:483:40:483:41 | x2 | T | main.rs:435:5:436:14 | S1 | -| main.rs:484:26:484:42 | call_trait_m1(...) | | main.rs:437:5:438:14 | S2 | -| main.rs:484:40:484:41 | y2 | | main.rs:430:5:433:5 | MyThing | -| main.rs:484:40:484:41 | y2 | T | main.rs:437:5:438:14 | S2 | -| main.rs:486:13:486:14 | x3 | | main.rs:430:5:433:5 | MyThing | -| main.rs:486:13:486:14 | x3 | T | main.rs:430:5:433:5 | MyThing | -| main.rs:486:13:486:14 | x3 | T.T | main.rs:435:5:436:14 | S1 | -| main.rs:486:18:488:9 | MyThing {...} | | main.rs:430:5:433:5 | MyThing | -| main.rs:486:18:488:9 | MyThing {...} | T | main.rs:430:5:433:5 | MyThing | -| main.rs:486:18:488:9 | MyThing {...} | T.T | main.rs:435:5:436:14 | S1 | -| main.rs:487:16:487:32 | MyThing {...} | | main.rs:430:5:433:5 | MyThing | -| main.rs:487:16:487:32 | MyThing {...} | T | main.rs:435:5:436:14 | S1 | -| main.rs:487:29:487:30 | S1 | | main.rs:435:5:436:14 | S1 | -| main.rs:489:13:489:14 | y3 | | main.rs:430:5:433:5 | MyThing | -| main.rs:489:13:489:14 | y3 | T | main.rs:430:5:433:5 | MyThing | -| main.rs:489:13:489:14 | y3 | T.T | main.rs:437:5:438:14 | S2 | -| main.rs:489:18:491:9 | MyThing {...} | | main.rs:430:5:433:5 | MyThing | -| main.rs:489:18:491:9 | MyThing {...} | T | main.rs:430:5:433:5 | MyThing | -| main.rs:489:18:491:9 | MyThing {...} | T.T | main.rs:437:5:438:14 | S2 | -| main.rs:490:16:490:32 | MyThing {...} | | main.rs:430:5:433:5 | MyThing | -| main.rs:490:16:490:32 | MyThing {...} | T | main.rs:437:5:438:14 | S2 | -| main.rs:490:29:490:30 | S2 | | main.rs:437:5:438:14 | S2 | -| main.rs:493:13:493:13 | a | | main.rs:435:5:436:14 | S1 | -| main.rs:493:17:493:39 | call_trait_thing_m1(...) | | main.rs:435:5:436:14 | S1 | -| main.rs:493:37:493:38 | x3 | | main.rs:430:5:433:5 | MyThing | -| main.rs:493:37:493:38 | x3 | T | main.rs:430:5:433:5 | MyThing | -| main.rs:493:37:493:38 | x3 | T.T | main.rs:435:5:436:14 | S1 | -| main.rs:494:26:494:26 | a | | main.rs:435:5:436:14 | S1 | -| main.rs:495:13:495:13 | b | | main.rs:437:5:438:14 | S2 | -| main.rs:495:17:495:39 | call_trait_thing_m1(...) | | main.rs:437:5:438:14 | S2 | -| main.rs:495:37:495:38 | y3 | | main.rs:430:5:433:5 | MyThing | -| main.rs:495:37:495:38 | y3 | T | main.rs:430:5:433:5 | MyThing | -| main.rs:495:37:495:38 | y3 | T.T | main.rs:437:5:438:14 | S2 | -| main.rs:496:26:496:26 | b | | main.rs:437:5:438:14 | S2 | -| main.rs:507:19:507:22 | SelfParam | | main.rs:501:5:504:5 | Wrapper | -| main.rs:507:19:507:22 | SelfParam | A | main.rs:506:10:506:10 | A | -| main.rs:507:30:509:9 | { ... } | | main.rs:506:10:506:10 | A | -| main.rs:508:13:508:16 | self | | main.rs:501:5:504:5 | Wrapper | -| main.rs:508:13:508:16 | self | A | main.rs:506:10:506:10 | A | -| main.rs:508:13:508:22 | self.field | | main.rs:506:10:506:10 | A | -| main.rs:516:15:516:18 | SelfParam | | main.rs:512:5:526:5 | Self [trait MyTrait] | -| main.rs:518:15:518:18 | SelfParam | | main.rs:512:5:526:5 | Self [trait MyTrait] | -| main.rs:522:9:525:9 | { ... } | | main.rs:513:9:513:28 | AssociatedType | -| main.rs:523:13:523:16 | self | | main.rs:512:5:526:5 | Self [trait MyTrait] | -| main.rs:523:13:523:21 | self.m1() | | main.rs:513:9:513:28 | AssociatedType | -| main.rs:524:13:524:43 | ...::default(...) | | main.rs:513:9:513:28 | AssociatedType | -| main.rs:532:19:532:23 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:532:19:532:23 | SelfParam | &T | main.rs:528:5:538:5 | Self [trait MyTraitAssoc2] | -| main.rs:532:26:532:26 | a | | main.rs:532:16:532:16 | A | -| main.rs:534:22:534:26 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:534:22:534:26 | SelfParam | &T | main.rs:528:5:538:5 | Self [trait MyTraitAssoc2] | -| main.rs:534:29:534:29 | a | | main.rs:534:19:534:19 | A | -| main.rs:534:35:534:35 | b | | main.rs:534:19:534:19 | A | -| main.rs:534:75:537:9 | { ... } | | main.rs:529:9:529:52 | GenericAssociatedType | -| main.rs:535:13:535:16 | self | | file://:0:0:0:0 | & | -| main.rs:535:13:535:16 | self | &T | main.rs:528:5:538:5 | Self [trait MyTraitAssoc2] | -| main.rs:535:13:535:23 | self.put(...) | | main.rs:529:9:529:52 | GenericAssociatedType | -| main.rs:535:22:535:22 | a | | main.rs:534:19:534:19 | A | -| main.rs:536:13:536:16 | self | | file://:0:0:0:0 | & | -| main.rs:536:13:536:16 | self | &T | main.rs:528:5:538:5 | Self [trait MyTraitAssoc2] | -| main.rs:536:13:536:23 | self.put(...) | | main.rs:529:9:529:52 | GenericAssociatedType | -| main.rs:536:22:536:22 | b | | main.rs:534:19:534:19 | A | -| main.rs:545:21:545:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:545:21:545:25 | SelfParam | &T | main.rs:540:5:550:5 | Self [trait TraitMultipleAssoc] | -| main.rs:547:20:547:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:547:20:547:24 | SelfParam | &T | main.rs:540:5:550:5 | Self [trait TraitMultipleAssoc] | -| main.rs:549:20:549:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:549:20:549:24 | SelfParam | &T | main.rs:540:5:550:5 | Self [trait TraitMultipleAssoc] | -| main.rs:565:15:565:18 | SelfParam | | main.rs:552:5:553:13 | S | -| main.rs:565:45:567:9 | { ... } | | main.rs:558:5:559:14 | AT | -| main.rs:566:13:566:14 | AT | | main.rs:558:5:559:14 | AT | -| main.rs:575:19:575:23 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:575:19:575:23 | SelfParam | &T | main.rs:552:5:553:13 | S | -| main.rs:575:26:575:26 | a | | main.rs:575:16:575:16 | A | -| main.rs:575:46:577:9 | { ... } | | main.rs:501:5:504:5 | Wrapper | -| main.rs:575:46:577:9 | { ... } | A | main.rs:575:16:575:16 | A | -| main.rs:576:13:576:32 | Wrapper {...} | | main.rs:501:5:504:5 | Wrapper | -| main.rs:576:13:576:32 | Wrapper {...} | A | main.rs:575:16:575:16 | A | -| main.rs:576:30:576:30 | a | | main.rs:575:16:575:16 | A | -| main.rs:584:15:584:18 | SelfParam | | main.rs:555:5:556:14 | S2 | -| main.rs:584:45:586:9 | { ... } | | main.rs:501:5:504:5 | Wrapper | -| main.rs:584:45:586:9 | { ... } | A | main.rs:555:5:556:14 | S2 | -| main.rs:585:13:585:35 | Wrapper {...} | | main.rs:501:5:504:5 | Wrapper | -| main.rs:585:13:585:35 | Wrapper {...} | A | main.rs:555:5:556:14 | S2 | -| main.rs:585:30:585:33 | self | | main.rs:555:5:556:14 | S2 | -| main.rs:591:30:593:9 | { ... } | | main.rs:501:5:504:5 | Wrapper | -| main.rs:591:30:593:9 | { ... } | A | main.rs:555:5:556:14 | S2 | -| main.rs:592:13:592:33 | Wrapper {...} | | main.rs:501:5:504:5 | Wrapper | -| main.rs:592:13:592:33 | Wrapper {...} | A | main.rs:555:5:556:14 | S2 | -| main.rs:592:30:592:31 | S2 | | main.rs:555:5:556:14 | S2 | -| main.rs:597:22:597:26 | thing | | main.rs:597:10:597:19 | T | -| main.rs:598:9:598:13 | thing | | main.rs:597:10:597:19 | T | -| main.rs:605:21:605:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:605:21:605:25 | SelfParam | &T | main.rs:558:5:559:14 | AT | -| main.rs:605:34:607:9 | { ... } | | main.rs:558:5:559:14 | AT | -| main.rs:606:13:606:14 | AT | | main.rs:558:5:559:14 | AT | -| main.rs:609:20:609:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:609:20:609:24 | SelfParam | &T | main.rs:558:5:559:14 | AT | -| main.rs:609:43:611:9 | { ... } | | main.rs:552:5:553:13 | S | -| main.rs:610:13:610:13 | S | | main.rs:552:5:553:13 | S | -| main.rs:613:20:613:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:613:20:613:24 | SelfParam | &T | main.rs:558:5:559:14 | AT | -| main.rs:613:43:615:9 | { ... } | | main.rs:555:5:556:14 | S2 | -| main.rs:614:13:614:14 | S2 | | main.rs:555:5:556:14 | S2 | -| main.rs:619:13:619:14 | x1 | | main.rs:552:5:553:13 | S | -| main.rs:619:18:619:18 | S | | main.rs:552:5:553:13 | S | -| main.rs:621:26:621:27 | x1 | | main.rs:552:5:553:13 | S | -| main.rs:621:26:621:32 | x1.m1() | | main.rs:558:5:559:14 | AT | -| main.rs:623:13:623:14 | x2 | | main.rs:552:5:553:13 | S | -| main.rs:623:18:623:18 | S | | main.rs:552:5:553:13 | S | -| main.rs:625:13:625:13 | y | | main.rs:558:5:559:14 | AT | -| main.rs:625:17:625:18 | x2 | | main.rs:552:5:553:13 | S | -| main.rs:625:17:625:23 | x2.m2() | | main.rs:558:5:559:14 | AT | -| main.rs:626:26:626:26 | y | | main.rs:558:5:559:14 | AT | -| main.rs:628:13:628:14 | x3 | | main.rs:552:5:553:13 | S | -| main.rs:628:18:628:18 | S | | main.rs:552:5:553:13 | S | -| main.rs:630:26:630:27 | x3 | | main.rs:552:5:553:13 | S | -| main.rs:630:26:630:34 | x3.put(...) | | main.rs:501:5:504:5 | Wrapper | -| main.rs:633:26:633:27 | x3 | | main.rs:552:5:553:13 | S | -| main.rs:635:20:635:20 | S | | main.rs:552:5:553:13 | S | -| main.rs:638:13:638:14 | x5 | | main.rs:555:5:556:14 | S2 | -| main.rs:638:18:638:19 | S2 | | main.rs:555:5:556:14 | S2 | -| main.rs:639:26:639:27 | x5 | | main.rs:555:5:556:14 | S2 | -| main.rs:639:26:639:32 | x5.m1() | | main.rs:501:5:504:5 | Wrapper | -| main.rs:639:26:639:32 | x5.m1() | A | main.rs:555:5:556:14 | S2 | -| main.rs:640:13:640:14 | x6 | | main.rs:555:5:556:14 | S2 | -| main.rs:640:18:640:19 | S2 | | main.rs:555:5:556:14 | S2 | -| main.rs:641:26:641:27 | x6 | | main.rs:555:5:556:14 | S2 | -| main.rs:641:26:641:32 | x6.m2() | | main.rs:501:5:504:5 | Wrapper | -| main.rs:641:26:641:32 | x6.m2() | A | main.rs:555:5:556:14 | S2 | -| main.rs:643:13:643:22 | assoc_zero | | main.rs:558:5:559:14 | AT | -| main.rs:643:26:643:27 | AT | | main.rs:558:5:559:14 | AT | -| main.rs:643:26:643:38 | AT.get_zero() | | main.rs:558:5:559:14 | AT | -| main.rs:644:13:644:21 | assoc_one | | main.rs:552:5:553:13 | S | -| main.rs:644:25:644:26 | AT | | main.rs:558:5:559:14 | AT | -| main.rs:644:25:644:36 | AT.get_one() | | main.rs:552:5:553:13 | S | -| main.rs:645:13:645:21 | assoc_two | | main.rs:555:5:556:14 | S2 | -| main.rs:645:25:645:26 | AT | | main.rs:558:5:559:14 | AT | -| main.rs:645:25:645:36 | AT.get_two() | | main.rs:555:5:556:14 | S2 | -| main.rs:662:15:662:18 | SelfParam | | main.rs:650:5:654:5 | MyEnum | -| main.rs:662:15:662:18 | SelfParam | A | main.rs:661:10:661:10 | T | -| main.rs:662:26:667:9 | { ... } | | main.rs:661:10:661:10 | T | -| main.rs:663:13:666:13 | match self { ... } | | main.rs:661:10:661:10 | T | -| main.rs:663:19:663:22 | self | | main.rs:650:5:654:5 | MyEnum | -| main.rs:663:19:663:22 | self | A | main.rs:661:10:661:10 | T | -| main.rs:664:28:664:28 | a | | main.rs:661:10:661:10 | T | -| main.rs:664:34:664:34 | a | | main.rs:661:10:661:10 | T | -| main.rs:665:30:665:30 | a | | main.rs:661:10:661:10 | T | -| main.rs:665:37:665:37 | a | | main.rs:661:10:661:10 | T | -| main.rs:671:13:671:13 | x | | main.rs:650:5:654:5 | MyEnum | -| main.rs:671:13:671:13 | x | A | main.rs:656:5:657:14 | S1 | -| main.rs:671:17:671:30 | ...::C1(...) | | main.rs:650:5:654:5 | MyEnum | -| main.rs:671:17:671:30 | ...::C1(...) | A | main.rs:656:5:657:14 | S1 | -| main.rs:671:28:671:29 | S1 | | main.rs:656:5:657:14 | S1 | -| main.rs:672:13:672:13 | y | | main.rs:650:5:654:5 | MyEnum | -| main.rs:672:13:672:13 | y | A | main.rs:658:5:659:14 | S2 | -| main.rs:672:17:672:36 | ...::C2 {...} | | main.rs:650:5:654:5 | MyEnum | -| main.rs:672:17:672:36 | ...::C2 {...} | A | main.rs:658:5:659:14 | S2 | -| main.rs:672:33:672:34 | S2 | | main.rs:658:5:659:14 | S2 | -| main.rs:674:26:674:26 | x | | main.rs:650:5:654:5 | MyEnum | -| main.rs:674:26:674:26 | x | A | main.rs:656:5:657:14 | S1 | -| main.rs:674:26:674:31 | x.m1() | | main.rs:656:5:657:14 | S1 | -| main.rs:675:26:675:26 | y | | main.rs:650:5:654:5 | MyEnum | -| main.rs:675:26:675:26 | y | A | main.rs:658:5:659:14 | S2 | -| main.rs:675:26:675:31 | y.m1() | | main.rs:658:5:659:14 | S2 | -| main.rs:697:15:697:18 | SelfParam | | main.rs:695:5:698:5 | Self [trait MyTrait1] | -| main.rs:701:15:701:18 | SelfParam | | main.rs:700:5:711:5 | Self [trait MyTrait2] | -| main.rs:704:9:710:9 | { ... } | | main.rs:700:20:700:22 | Tr2 | -| main.rs:705:13:709:13 | if ... {...} else {...} | | main.rs:700:20:700:22 | Tr2 | -| main.rs:705:26:707:13 | { ... } | | main.rs:700:20:700:22 | Tr2 | -| main.rs:706:17:706:20 | self | | main.rs:700:5:711:5 | Self [trait MyTrait2] | -| main.rs:706:17:706:25 | self.m1() | | main.rs:700:20:700:22 | Tr2 | -| main.rs:707:20:709:13 | { ... } | | main.rs:700:20:700:22 | Tr2 | -| main.rs:708:17:708:30 | ...::m1(...) | | main.rs:700:20:700:22 | Tr2 | -| main.rs:708:26:708:29 | self | | main.rs:700:5:711:5 | Self [trait MyTrait2] | -| main.rs:714:15:714:18 | SelfParam | | main.rs:713:5:724:5 | Self [trait MyTrait3] | -| main.rs:717:9:723:9 | { ... } | | main.rs:713:20:713:22 | Tr3 | -| main.rs:718:13:722:13 | if ... {...} else {...} | | main.rs:713:20:713:22 | Tr3 | -| main.rs:718:26:720:13 | { ... } | | main.rs:713:20:713:22 | Tr3 | -| main.rs:719:17:719:20 | self | | main.rs:713:5:724:5 | Self [trait MyTrait3] | -| main.rs:719:17:719:25 | self.m2() | | main.rs:680:5:683:5 | MyThing | -| main.rs:719:17:719:25 | self.m2() | A | main.rs:713:20:713:22 | Tr3 | -| main.rs:719:17:719:27 | ... .a | | main.rs:713:20:713:22 | Tr3 | -| main.rs:720:20:722:13 | { ... } | | main.rs:713:20:713:22 | Tr3 | -| main.rs:721:17:721:30 | ...::m2(...) | | main.rs:680:5:683:5 | MyThing | -| main.rs:721:17:721:30 | ...::m2(...) | A | main.rs:713:20:713:22 | Tr3 | -| main.rs:721:17:721:32 | ... .a | | main.rs:713:20:713:22 | Tr3 | -| main.rs:721:26:721:29 | self | | main.rs:713:5:724:5 | Self [trait MyTrait3] | -| main.rs:728:15:728:18 | SelfParam | | main.rs:680:5:683:5 | MyThing | -| main.rs:728:15:728:18 | SelfParam | A | main.rs:726:10:726:10 | T | -| main.rs:728:26:730:9 | { ... } | | main.rs:726:10:726:10 | T | -| main.rs:729:13:729:16 | self | | main.rs:680:5:683:5 | MyThing | -| main.rs:729:13:729:16 | self | A | main.rs:726:10:726:10 | T | -| main.rs:729:13:729:18 | self.a | | main.rs:726:10:726:10 | T | -| main.rs:737:15:737:18 | SelfParam | | main.rs:685:5:688:5 | MyThing2 | -| main.rs:737:15:737:18 | SelfParam | A | main.rs:735:10:735:10 | T | -| main.rs:737:35:739:9 | { ... } | | main.rs:680:5:683:5 | MyThing | -| main.rs:737:35:739:9 | { ... } | A | main.rs:735:10:735:10 | T | -| main.rs:738:13:738:33 | MyThing {...} | | main.rs:680:5:683:5 | MyThing | -| main.rs:738:13:738:33 | MyThing {...} | A | main.rs:735:10:735:10 | T | -| main.rs:738:26:738:29 | self | | main.rs:685:5:688:5 | MyThing2 | -| main.rs:738:26:738:29 | self | A | main.rs:735:10:735:10 | T | -| main.rs:738:26:738:31 | self.a | | main.rs:735:10:735:10 | T | -| main.rs:747:13:747:13 | x | | main.rs:680:5:683:5 | MyThing | -| main.rs:747:13:747:13 | x | A | main.rs:690:5:691:14 | S1 | -| main.rs:747:17:747:33 | MyThing {...} | | main.rs:680:5:683:5 | MyThing | -| main.rs:747:17:747:33 | MyThing {...} | A | main.rs:690:5:691:14 | S1 | -| main.rs:747:30:747:31 | S1 | | main.rs:690:5:691:14 | S1 | -| main.rs:748:13:748:13 | y | | main.rs:680:5:683:5 | MyThing | -| main.rs:748:13:748:13 | y | A | main.rs:692:5:693:14 | S2 | -| main.rs:748:17:748:33 | MyThing {...} | | main.rs:680:5:683:5 | MyThing | -| main.rs:748:17:748:33 | MyThing {...} | A | main.rs:692:5:693:14 | S2 | -| main.rs:748:30:748:31 | S2 | | main.rs:692:5:693:14 | S2 | -| main.rs:750:26:750:26 | x | | main.rs:680:5:683:5 | MyThing | -| main.rs:750:26:750:26 | x | A | main.rs:690:5:691:14 | S1 | -| main.rs:750:26:750:31 | x.m1() | | main.rs:690:5:691:14 | S1 | -| main.rs:751:26:751:26 | y | | main.rs:680:5:683:5 | MyThing | -| main.rs:751:26:751:26 | y | A | main.rs:692:5:693:14 | S2 | -| main.rs:751:26:751:31 | y.m1() | | main.rs:692:5:693:14 | S2 | -| main.rs:753:13:753:13 | x | | main.rs:680:5:683:5 | MyThing | -| main.rs:753:13:753:13 | x | A | main.rs:690:5:691:14 | S1 | -| main.rs:753:17:753:33 | MyThing {...} | | main.rs:680:5:683:5 | MyThing | -| main.rs:753:17:753:33 | MyThing {...} | A | main.rs:690:5:691:14 | S1 | -| main.rs:753:30:753:31 | S1 | | main.rs:690:5:691:14 | S1 | -| main.rs:754:13:754:13 | y | | main.rs:680:5:683:5 | MyThing | -| main.rs:754:13:754:13 | y | A | main.rs:692:5:693:14 | S2 | -| main.rs:754:17:754:33 | MyThing {...} | | main.rs:680:5:683:5 | MyThing | -| main.rs:754:17:754:33 | MyThing {...} | A | main.rs:692:5:693:14 | S2 | -| main.rs:754:30:754:31 | S2 | | main.rs:692:5:693:14 | S2 | -| main.rs:756:26:756:26 | x | | main.rs:680:5:683:5 | MyThing | -| main.rs:756:26:756:26 | x | A | main.rs:690:5:691:14 | S1 | -| main.rs:756:26:756:31 | x.m2() | | main.rs:690:5:691:14 | S1 | -| main.rs:757:26:757:26 | y | | main.rs:680:5:683:5 | MyThing | -| main.rs:757:26:757:26 | y | A | main.rs:692:5:693:14 | S2 | -| main.rs:757:26:757:31 | y.m2() | | main.rs:692:5:693:14 | S2 | -| main.rs:759:13:759:13 | x | | main.rs:685:5:688:5 | MyThing2 | -| main.rs:759:13:759:13 | x | A | main.rs:690:5:691:14 | S1 | -| main.rs:759:17:759:34 | MyThing2 {...} | | main.rs:685:5:688:5 | MyThing2 | -| main.rs:759:17:759:34 | MyThing2 {...} | A | main.rs:690:5:691:14 | S1 | -| main.rs:759:31:759:32 | S1 | | main.rs:690:5:691:14 | S1 | -| main.rs:760:13:760:13 | y | | main.rs:685:5:688:5 | MyThing2 | -| main.rs:760:13:760:13 | y | A | main.rs:692:5:693:14 | S2 | -| main.rs:760:17:760:34 | MyThing2 {...} | | main.rs:685:5:688:5 | MyThing2 | -| main.rs:760:17:760:34 | MyThing2 {...} | A | main.rs:692:5:693:14 | S2 | -| main.rs:760:31:760:32 | S2 | | main.rs:692:5:693:14 | S2 | -| main.rs:762:26:762:26 | x | | main.rs:685:5:688:5 | MyThing2 | -| main.rs:762:26:762:26 | x | A | main.rs:690:5:691:14 | S1 | -| main.rs:762:26:762:31 | x.m3() | | main.rs:690:5:691:14 | S1 | -| main.rs:763:26:763:26 | y | | main.rs:685:5:688:5 | MyThing2 | -| main.rs:763:26:763:26 | y | A | main.rs:692:5:693:14 | S2 | -| main.rs:763:26:763:31 | y.m3() | | main.rs:692:5:693:14 | S2 | -| main.rs:781:22:781:22 | x | | file://:0:0:0:0 | & | -| main.rs:781:22:781:22 | x | &T | main.rs:781:11:781:19 | T | -| main.rs:781:35:783:5 | { ... } | | file://:0:0:0:0 | & | -| main.rs:781:35:783:5 | { ... } | &T | main.rs:781:11:781:19 | T | -| main.rs:782:9:782:9 | x | | file://:0:0:0:0 | & | -| main.rs:782:9:782:9 | x | &T | main.rs:781:11:781:19 | T | -| main.rs:786:17:786:20 | SelfParam | | main.rs:771:5:772:14 | S1 | -| main.rs:786:29:788:9 | { ... } | | main.rs:774:5:775:14 | S2 | -| main.rs:787:13:787:14 | S2 | | main.rs:774:5:775:14 | S2 | -| main.rs:791:21:791:21 | x | | main.rs:791:13:791:14 | T1 | -| main.rs:794:5:796:5 | { ... } | | main.rs:791:17:791:18 | T2 | -| main.rs:795:9:795:9 | x | | main.rs:791:13:791:14 | T1 | -| main.rs:795:9:795:16 | x.into() | | main.rs:791:17:791:18 | T2 | -| main.rs:799:13:799:13 | x | | main.rs:771:5:772:14 | S1 | -| main.rs:799:17:799:18 | S1 | | main.rs:771:5:772:14 | S1 | -| main.rs:800:26:800:31 | id(...) | | file://:0:0:0:0 | & | -| main.rs:800:26:800:31 | id(...) | &T | main.rs:771:5:772:14 | S1 | -| main.rs:800:29:800:30 | &x | | file://:0:0:0:0 | & | -| main.rs:800:29:800:30 | &x | &T | main.rs:771:5:772:14 | S1 | -| main.rs:800:30:800:30 | x | | main.rs:771:5:772:14 | S1 | -| main.rs:802:13:802:13 | x | | main.rs:771:5:772:14 | S1 | -| main.rs:802:17:802:18 | S1 | | main.rs:771:5:772:14 | S1 | -| main.rs:803:26:803:37 | id::<...>(...) | | file://:0:0:0:0 | & | -| main.rs:803:26:803:37 | id::<...>(...) | &T | main.rs:771:5:772:14 | S1 | -| main.rs:803:35:803:36 | &x | | file://:0:0:0:0 | & | -| main.rs:803:35:803:36 | &x | &T | main.rs:771:5:772:14 | S1 | -| main.rs:803:36:803:36 | x | | main.rs:771:5:772:14 | S1 | -| main.rs:805:13:805:13 | x | | main.rs:771:5:772:14 | S1 | -| main.rs:805:17:805:18 | S1 | | main.rs:771:5:772:14 | S1 | -| main.rs:806:26:806:44 | id::<...>(...) | | file://:0:0:0:0 | & | -| main.rs:806:26:806:44 | id::<...>(...) | &T | main.rs:771:5:772:14 | S1 | -| main.rs:806:42:806:43 | &x | | file://:0:0:0:0 | & | -| main.rs:806:42:806:43 | &x | &T | main.rs:771:5:772:14 | S1 | -| main.rs:806:43:806:43 | x | | main.rs:771:5:772:14 | S1 | -| main.rs:808:13:808:13 | x | | main.rs:771:5:772:14 | S1 | -| main.rs:808:17:808:18 | S1 | | main.rs:771:5:772:14 | S1 | -| main.rs:809:9:809:25 | into::<...>(...) | | main.rs:774:5:775:14 | S2 | -| main.rs:809:24:809:24 | x | | main.rs:771:5:772:14 | S1 | -| main.rs:811:13:811:13 | x | | main.rs:771:5:772:14 | S1 | -| main.rs:811:17:811:18 | S1 | | main.rs:771:5:772:14 | S1 | -| main.rs:812:13:812:13 | y | | main.rs:774:5:775:14 | S2 | -| main.rs:812:21:812:27 | into(...) | | main.rs:774:5:775:14 | S2 | -| main.rs:812:26:812:26 | x | | main.rs:771:5:772:14 | S1 | -| main.rs:826:22:826:25 | SelfParam | | main.rs:817:5:823:5 | PairOption | -| main.rs:826:22:826:25 | SelfParam | Fst | main.rs:825:10:825:12 | Fst | -| main.rs:826:22:826:25 | SelfParam | Snd | main.rs:825:15:825:17 | Snd | -| main.rs:826:35:833:9 | { ... } | | main.rs:825:15:825:17 | Snd | -| main.rs:827:13:832:13 | match self { ... } | | main.rs:825:15:825:17 | Snd | -| main.rs:827:19:827:22 | self | | main.rs:817:5:823:5 | PairOption | -| main.rs:827:19:827:22 | self | Fst | main.rs:825:10:825:12 | Fst | -| main.rs:827:19:827:22 | self | Snd | main.rs:825:15:825:17 | Snd | -| main.rs:828:43:828:82 | MacroExpr | | main.rs:825:15:825:17 | Snd | -| main.rs:829:43:829:81 | MacroExpr | | main.rs:825:15:825:17 | Snd | -| main.rs:830:37:830:39 | snd | | main.rs:825:15:825:17 | Snd | -| main.rs:830:45:830:47 | snd | | main.rs:825:15:825:17 | Snd | -| main.rs:831:41:831:43 | snd | | main.rs:825:15:825:17 | Snd | -| main.rs:831:49:831:51 | snd | | main.rs:825:15:825:17 | Snd | -| main.rs:857:10:857:10 | t | | main.rs:817:5:823:5 | PairOption | -| main.rs:857:10:857:10 | t | Fst | main.rs:839:5:840:14 | S2 | -| main.rs:857:10:857:10 | t | Snd | main.rs:817:5:823:5 | PairOption | -| main.rs:857:10:857:10 | t | Snd.Fst | main.rs:839:5:840:14 | S2 | -| main.rs:857:10:857:10 | t | Snd.Snd | main.rs:842:5:843:14 | S3 | -| main.rs:858:13:858:13 | x | | main.rs:842:5:843:14 | S3 | -| main.rs:858:17:858:17 | t | | main.rs:817:5:823:5 | PairOption | -| main.rs:858:17:858:17 | t | Fst | main.rs:839:5:840:14 | S2 | -| main.rs:858:17:858:17 | t | Snd | main.rs:817:5:823:5 | PairOption | -| main.rs:858:17:858:17 | t | Snd.Fst | main.rs:839:5:840:14 | S2 | -| main.rs:858:17:858:17 | t | Snd.Snd | main.rs:842:5:843:14 | S3 | -| main.rs:858:17:858:29 | t.unwrapSnd() | | main.rs:817:5:823:5 | PairOption | -| main.rs:858:17:858:29 | t.unwrapSnd() | Fst | main.rs:839:5:840:14 | S2 | -| main.rs:858:17:858:29 | t.unwrapSnd() | Snd | main.rs:842:5:843:14 | S3 | -| main.rs:858:17:858:41 | ... .unwrapSnd() | | main.rs:842:5:843:14 | S3 | -| main.rs:859:26:859:26 | x | | main.rs:842:5:843:14 | S3 | -| main.rs:864:13:864:14 | p1 | | main.rs:817:5:823:5 | PairOption | -| main.rs:864:13:864:14 | p1 | Fst | main.rs:836:5:837:14 | S1 | -| main.rs:864:13:864:14 | p1 | Snd | main.rs:839:5:840:14 | S2 | -| main.rs:864:26:864:53 | ...::PairBoth(...) | | main.rs:817:5:823:5 | PairOption | -| main.rs:864:26:864:53 | ...::PairBoth(...) | Fst | main.rs:836:5:837:14 | S1 | -| main.rs:864:26:864:53 | ...::PairBoth(...) | Snd | main.rs:839:5:840:14 | S2 | -| main.rs:864:47:864:48 | S1 | | main.rs:836:5:837:14 | S1 | -| main.rs:864:51:864:52 | S2 | | main.rs:839:5:840:14 | S2 | -| main.rs:865:26:865:27 | p1 | | main.rs:817:5:823:5 | PairOption | -| main.rs:865:26:865:27 | p1 | Fst | main.rs:836:5:837:14 | S1 | -| main.rs:865:26:865:27 | p1 | Snd | main.rs:839:5:840:14 | S2 | -| main.rs:868:13:868:14 | p2 | | main.rs:817:5:823:5 | PairOption | -| main.rs:868:13:868:14 | p2 | Fst | main.rs:836:5:837:14 | S1 | -| main.rs:868:13:868:14 | p2 | Snd | main.rs:839:5:840:14 | S2 | -| main.rs:868:26:868:47 | ...::PairNone(...) | | main.rs:817:5:823:5 | PairOption | -| main.rs:868:26:868:47 | ...::PairNone(...) | Fst | main.rs:836:5:837:14 | S1 | -| main.rs:868:26:868:47 | ...::PairNone(...) | Snd | main.rs:839:5:840:14 | S2 | -| main.rs:869:26:869:27 | p2 | | main.rs:817:5:823:5 | PairOption | -| main.rs:869:26:869:27 | p2 | Fst | main.rs:836:5:837:14 | S1 | -| main.rs:869:26:869:27 | p2 | Snd | main.rs:839:5:840:14 | S2 | -| main.rs:872:13:872:14 | p3 | | main.rs:817:5:823:5 | PairOption | -| main.rs:872:13:872:14 | p3 | Fst | main.rs:839:5:840:14 | S2 | -| main.rs:872:13:872:14 | p3 | Snd | main.rs:842:5:843:14 | S3 | -| main.rs:872:34:872:56 | ...::PairSnd(...) | | main.rs:817:5:823:5 | PairOption | -| main.rs:872:34:872:56 | ...::PairSnd(...) | Fst | main.rs:839:5:840:14 | S2 | -| main.rs:872:34:872:56 | ...::PairSnd(...) | Snd | main.rs:842:5:843:14 | S3 | -| main.rs:872:54:872:55 | S3 | | main.rs:842:5:843:14 | S3 | -| main.rs:873:26:873:27 | p3 | | main.rs:817:5:823:5 | PairOption | -| main.rs:873:26:873:27 | p3 | Fst | main.rs:839:5:840:14 | S2 | -| main.rs:873:26:873:27 | p3 | Snd | main.rs:842:5:843:14 | S3 | -| main.rs:876:13:876:14 | p3 | | main.rs:817:5:823:5 | PairOption | -| main.rs:876:13:876:14 | p3 | Fst | main.rs:839:5:840:14 | S2 | -| main.rs:876:13:876:14 | p3 | Snd | main.rs:842:5:843:14 | S3 | -| main.rs:876:35:876:56 | ...::PairNone(...) | | main.rs:817:5:823:5 | PairOption | -| main.rs:876:35:876:56 | ...::PairNone(...) | Fst | main.rs:839:5:840:14 | S2 | -| main.rs:876:35:876:56 | ...::PairNone(...) | Snd | main.rs:842:5:843:14 | S3 | -| main.rs:877:26:877:27 | p3 | | main.rs:817:5:823:5 | PairOption | -| main.rs:877:26:877:27 | p3 | Fst | main.rs:839:5:840:14 | S2 | -| main.rs:877:26:877:27 | p3 | Snd | main.rs:842:5:843:14 | S3 | -| main.rs:879:11:879:54 | ...::PairSnd(...) | | main.rs:817:5:823:5 | PairOption | -| main.rs:879:11:879:54 | ...::PairSnd(...) | Fst | main.rs:839:5:840:14 | S2 | -| main.rs:879:11:879:54 | ...::PairSnd(...) | Snd | main.rs:817:5:823:5 | PairOption | -| main.rs:879:11:879:54 | ...::PairSnd(...) | Snd.Fst | main.rs:839:5:840:14 | S2 | -| main.rs:879:11:879:54 | ...::PairSnd(...) | Snd.Snd | main.rs:842:5:843:14 | S3 | -| main.rs:879:31:879:53 | ...::PairSnd(...) | | main.rs:817:5:823:5 | PairOption | -| main.rs:879:31:879:53 | ...::PairSnd(...) | Fst | main.rs:839:5:840:14 | S2 | -| main.rs:879:31:879:53 | ...::PairSnd(...) | Snd | main.rs:842:5:843:14 | S3 | -| main.rs:879:51:879:52 | S3 | | main.rs:842:5:843:14 | S3 | -| main.rs:892:16:892:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:892:16:892:24 | SelfParam | &T | main.rs:890:5:897:5 | Self [trait MyTrait] | -| main.rs:892:27:892:31 | value | | main.rs:890:19:890:19 | S | -| main.rs:894:21:894:29 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:894:21:894:29 | SelfParam | &T | main.rs:890:5:897:5 | Self [trait MyTrait] | -| main.rs:894:32:894:36 | value | | main.rs:890:19:890:19 | S | -| main.rs:895:13:895:16 | self | | file://:0:0:0:0 | & | -| main.rs:895:13:895:16 | self | &T | main.rs:890:5:897:5 | Self [trait MyTrait] | -| main.rs:895:22:895:26 | value | | main.rs:890:19:890:19 | S | -| main.rs:901:16:901:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:901:16:901:24 | SelfParam | &T | main.rs:884:5:888:5 | MyOption | -| main.rs:901:16:901:24 | SelfParam | &T.T | main.rs:899:10:899:10 | T | -| main.rs:901:27:901:31 | value | | main.rs:899:10:899:10 | T | -| main.rs:905:26:907:9 | { ... } | | main.rs:884:5:888:5 | MyOption | -| main.rs:905:26:907:9 | { ... } | T | main.rs:904:10:904:10 | T | -| main.rs:906:13:906:30 | ...::MyNone(...) | | main.rs:884:5:888:5 | MyOption | -| main.rs:906:13:906:30 | ...::MyNone(...) | T | main.rs:904:10:904:10 | T | -| main.rs:911:20:911:23 | SelfParam | | main.rs:884:5:888:5 | MyOption | -| main.rs:911:20:911:23 | SelfParam | T | main.rs:884:5:888:5 | MyOption | -| main.rs:911:20:911:23 | SelfParam | T.T | main.rs:910:10:910:10 | T | -| main.rs:911:41:916:9 | { ... } | | main.rs:884:5:888:5 | MyOption | -| main.rs:911:41:916:9 | { ... } | T | main.rs:910:10:910:10 | T | -| main.rs:912:13:915:13 | match self { ... } | | main.rs:884:5:888:5 | MyOption | -| main.rs:912:13:915:13 | match self { ... } | T | main.rs:910:10:910:10 | T | -| main.rs:912:19:912:22 | self | | main.rs:884:5:888:5 | MyOption | -| main.rs:912:19:912:22 | self | T | main.rs:884:5:888:5 | MyOption | -| main.rs:912:19:912:22 | self | T.T | main.rs:910:10:910:10 | T | -| main.rs:913:39:913:56 | ...::MyNone(...) | | main.rs:884:5:888:5 | MyOption | -| main.rs:913:39:913:56 | ...::MyNone(...) | T | main.rs:910:10:910:10 | T | -| main.rs:914:34:914:34 | x | | main.rs:884:5:888:5 | MyOption | -| main.rs:914:34:914:34 | x | T | main.rs:910:10:910:10 | T | -| main.rs:914:40:914:40 | x | | main.rs:884:5:888:5 | MyOption | -| main.rs:914:40:914:40 | x | T | main.rs:910:10:910:10 | T | -| main.rs:923:13:923:14 | x1 | | main.rs:884:5:888:5 | MyOption | -| main.rs:923:18:923:37 | ...::new(...) | | main.rs:884:5:888:5 | MyOption | -| main.rs:924:26:924:27 | x1 | | main.rs:884:5:888:5 | MyOption | -| main.rs:926:13:926:18 | mut x2 | | main.rs:884:5:888:5 | MyOption | -| main.rs:926:13:926:18 | mut x2 | T | main.rs:919:5:920:13 | S | -| main.rs:926:22:926:36 | ...::new(...) | | main.rs:884:5:888:5 | MyOption | -| main.rs:926:22:926:36 | ...::new(...) | T | main.rs:919:5:920:13 | S | -| main.rs:927:9:927:10 | x2 | | main.rs:884:5:888:5 | MyOption | -| main.rs:927:9:927:10 | x2 | T | main.rs:919:5:920:13 | S | -| main.rs:927:16:927:16 | S | | main.rs:919:5:920:13 | S | -| main.rs:928:26:928:27 | x2 | | main.rs:884:5:888:5 | MyOption | -| main.rs:928:26:928:27 | x2 | T | main.rs:919:5:920:13 | S | -| main.rs:930:13:930:18 | mut x3 | | main.rs:884:5:888:5 | MyOption | -| main.rs:930:22:930:36 | ...::new(...) | | main.rs:884:5:888:5 | MyOption | -| main.rs:931:9:931:10 | x3 | | main.rs:884:5:888:5 | MyOption | -| main.rs:931:21:931:21 | S | | main.rs:919:5:920:13 | S | -| main.rs:932:26:932:27 | x3 | | main.rs:884:5:888:5 | MyOption | -| main.rs:934:13:934:18 | mut x4 | | main.rs:884:5:888:5 | MyOption | -| main.rs:934:13:934:18 | mut x4 | T | main.rs:919:5:920:13 | S | -| main.rs:934:22:934:36 | ...::new(...) | | main.rs:884:5:888:5 | MyOption | -| main.rs:934:22:934:36 | ...::new(...) | T | main.rs:919:5:920:13 | S | -| main.rs:935:23:935:29 | &mut x4 | | file://:0:0:0:0 | & | -| main.rs:935:23:935:29 | &mut x4 | &T | main.rs:884:5:888:5 | MyOption | -| main.rs:935:23:935:29 | &mut x4 | &T.T | main.rs:919:5:920:13 | S | -| main.rs:935:28:935:29 | x4 | | main.rs:884:5:888:5 | MyOption | -| main.rs:935:28:935:29 | x4 | T | main.rs:919:5:920:13 | S | -| main.rs:935:32:935:32 | S | | main.rs:919:5:920:13 | S | -| main.rs:936:26:936:27 | x4 | | main.rs:884:5:888:5 | MyOption | -| main.rs:936:26:936:27 | x4 | T | main.rs:919:5:920:13 | S | -| main.rs:938:13:938:14 | x5 | | main.rs:884:5:888:5 | MyOption | -| main.rs:938:13:938:14 | x5 | T | main.rs:884:5:888:5 | MyOption | -| main.rs:938:13:938:14 | x5 | T.T | main.rs:919:5:920:13 | S | -| main.rs:938:18:938:58 | ...::MySome(...) | | main.rs:884:5:888:5 | MyOption | -| main.rs:938:18:938:58 | ...::MySome(...) | T | main.rs:884:5:888:5 | MyOption | -| main.rs:938:18:938:58 | ...::MySome(...) | T.T | main.rs:919:5:920:13 | S | -| main.rs:938:35:938:57 | ...::MyNone(...) | | main.rs:884:5:888:5 | MyOption | -| main.rs:938:35:938:57 | ...::MyNone(...) | T | main.rs:919:5:920:13 | S | -| main.rs:939:26:939:27 | x5 | | main.rs:884:5:888:5 | MyOption | -| main.rs:939:26:939:27 | x5 | T | main.rs:884:5:888:5 | MyOption | -| main.rs:939:26:939:27 | x5 | T.T | main.rs:919:5:920:13 | S | -| main.rs:939:26:939:37 | x5.flatten() | | main.rs:884:5:888:5 | MyOption | -| main.rs:939:26:939:37 | x5.flatten() | T | main.rs:919:5:920:13 | S | -| main.rs:941:13:941:14 | x6 | | main.rs:884:5:888:5 | MyOption | -| main.rs:941:13:941:14 | x6 | T | main.rs:884:5:888:5 | MyOption | -| main.rs:941:13:941:14 | x6 | T.T | main.rs:919:5:920:13 | S | -| main.rs:941:18:941:58 | ...::MySome(...) | | main.rs:884:5:888:5 | MyOption | -| main.rs:941:18:941:58 | ...::MySome(...) | T | main.rs:884:5:888:5 | MyOption | -| main.rs:941:18:941:58 | ...::MySome(...) | T.T | main.rs:919:5:920:13 | S | -| main.rs:941:35:941:57 | ...::MyNone(...) | | main.rs:884:5:888:5 | MyOption | -| main.rs:941:35:941:57 | ...::MyNone(...) | T | main.rs:919:5:920:13 | S | -| main.rs:942:26:942:61 | ...::flatten(...) | | main.rs:884:5:888:5 | MyOption | -| main.rs:942:26:942:61 | ...::flatten(...) | T | main.rs:919:5:920:13 | S | -| main.rs:942:59:942:60 | x6 | | main.rs:884:5:888:5 | MyOption | -| main.rs:942:59:942:60 | x6 | T | main.rs:884:5:888:5 | MyOption | -| main.rs:942:59:942:60 | x6 | T.T | main.rs:919:5:920:13 | S | -| main.rs:944:13:944:19 | from_if | | main.rs:884:5:888:5 | MyOption | -| main.rs:944:13:944:19 | from_if | T | main.rs:919:5:920:13 | S | -| main.rs:944:23:948:9 | if ... {...} else {...} | | main.rs:884:5:888:5 | MyOption | -| main.rs:944:23:948:9 | if ... {...} else {...} | T | main.rs:919:5:920:13 | S | -| main.rs:944:36:946:9 | { ... } | | main.rs:884:5:888:5 | MyOption | -| main.rs:944:36:946:9 | { ... } | T | main.rs:919:5:920:13 | S | -| main.rs:945:13:945:30 | ...::MyNone(...) | | main.rs:884:5:888:5 | MyOption | -| main.rs:945:13:945:30 | ...::MyNone(...) | T | main.rs:919:5:920:13 | S | -| main.rs:946:16:948:9 | { ... } | | main.rs:884:5:888:5 | MyOption | -| main.rs:946:16:948:9 | { ... } | T | main.rs:919:5:920:13 | S | -| main.rs:947:13:947:31 | ...::MySome(...) | | main.rs:884:5:888:5 | MyOption | -| main.rs:947:13:947:31 | ...::MySome(...) | T | main.rs:919:5:920:13 | S | -| main.rs:947:30:947:30 | S | | main.rs:919:5:920:13 | S | -| main.rs:949:26:949:32 | from_if | | main.rs:884:5:888:5 | MyOption | -| main.rs:949:26:949:32 | from_if | T | main.rs:919:5:920:13 | S | -| main.rs:951:13:951:22 | from_match | | main.rs:884:5:888:5 | MyOption | -| main.rs:951:13:951:22 | from_match | T | main.rs:919:5:920:13 | S | -| main.rs:951:26:954:9 | match ... { ... } | | main.rs:884:5:888:5 | MyOption | -| main.rs:951:26:954:9 | match ... { ... } | T | main.rs:919:5:920:13 | S | -| main.rs:952:21:952:38 | ...::MyNone(...) | | main.rs:884:5:888:5 | MyOption | -| main.rs:952:21:952:38 | ...::MyNone(...) | T | main.rs:919:5:920:13 | S | -| main.rs:953:22:953:40 | ...::MySome(...) | | main.rs:884:5:888:5 | MyOption | -| main.rs:953:22:953:40 | ...::MySome(...) | T | main.rs:919:5:920:13 | S | -| main.rs:953:39:953:39 | S | | main.rs:919:5:920:13 | S | -| main.rs:955:26:955:35 | from_match | | main.rs:884:5:888:5 | MyOption | -| main.rs:955:26:955:35 | from_match | T | main.rs:919:5:920:13 | S | -| main.rs:957:13:957:21 | from_loop | | main.rs:884:5:888:5 | MyOption | -| main.rs:957:13:957:21 | from_loop | T | main.rs:919:5:920:13 | S | -| main.rs:957:25:962:9 | loop { ... } | | main.rs:884:5:888:5 | MyOption | -| main.rs:957:25:962:9 | loop { ... } | T | main.rs:919:5:920:13 | S | -| main.rs:959:23:959:40 | ...::MyNone(...) | | main.rs:884:5:888:5 | MyOption | -| main.rs:959:23:959:40 | ...::MyNone(...) | T | main.rs:919:5:920:13 | S | -| main.rs:961:19:961:37 | ...::MySome(...) | | main.rs:884:5:888:5 | MyOption | -| main.rs:961:19:961:37 | ...::MySome(...) | T | main.rs:919:5:920:13 | S | -| main.rs:961:36:961:36 | S | | main.rs:919:5:920:13 | S | -| main.rs:963:26:963:34 | from_loop | | main.rs:884:5:888:5 | MyOption | -| main.rs:963:26:963:34 | from_loop | T | main.rs:919:5:920:13 | S | -| main.rs:976:15:976:18 | SelfParam | | main.rs:969:5:970:19 | S | -| main.rs:976:15:976:18 | SelfParam | T | main.rs:975:10:975:10 | T | -| main.rs:976:26:978:9 | { ... } | | main.rs:975:10:975:10 | T | -| main.rs:977:13:977:16 | self | | main.rs:969:5:970:19 | S | -| main.rs:977:13:977:16 | self | T | main.rs:975:10:975:10 | T | -| main.rs:977:13:977:18 | self.0 | | main.rs:975:10:975:10 | T | -| main.rs:980:15:980:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:980:15:980:19 | SelfParam | &T | main.rs:969:5:970:19 | S | -| main.rs:980:15:980:19 | SelfParam | &T.T | main.rs:975:10:975:10 | T | -| main.rs:980:28:982:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:980:28:982:9 | { ... } | &T | main.rs:975:10:975:10 | T | -| main.rs:981:13:981:19 | &... | | file://:0:0:0:0 | & | -| main.rs:981:13:981:19 | &... | &T | main.rs:975:10:975:10 | T | -| main.rs:981:14:981:17 | self | | file://:0:0:0:0 | & | -| main.rs:981:14:981:17 | self | &T | main.rs:969:5:970:19 | S | -| main.rs:981:14:981:17 | self | &T.T | main.rs:975:10:975:10 | T | -| main.rs:981:14:981:19 | self.0 | | main.rs:975:10:975:10 | T | -| main.rs:984:15:984:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:984:15:984:25 | SelfParam | &T | main.rs:969:5:970:19 | S | -| main.rs:984:15:984:25 | SelfParam | &T.T | main.rs:975:10:975:10 | T | -| main.rs:984:34:986:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:984:34:986:9 | { ... } | &T | main.rs:975:10:975:10 | T | -| main.rs:985:13:985:19 | &... | | file://:0:0:0:0 | & | -| main.rs:985:13:985:19 | &... | &T | main.rs:975:10:975:10 | T | -| main.rs:985:14:985:17 | self | | file://:0:0:0:0 | & | -| main.rs:985:14:985:17 | self | &T | main.rs:969:5:970:19 | S | -| main.rs:985:14:985:17 | self | &T.T | main.rs:975:10:975:10 | T | -| main.rs:985:14:985:19 | self.0 | | main.rs:975:10:975:10 | T | -| main.rs:990:13:990:14 | x1 | | main.rs:969:5:970:19 | S | -| main.rs:990:13:990:14 | x1 | T | main.rs:972:5:973:14 | S2 | -| main.rs:990:18:990:22 | S(...) | | main.rs:969:5:970:19 | S | -| main.rs:990:18:990:22 | S(...) | T | main.rs:972:5:973:14 | S2 | -| main.rs:990:20:990:21 | S2 | | main.rs:972:5:973:14 | S2 | -| main.rs:991:26:991:27 | x1 | | main.rs:969:5:970:19 | S | -| main.rs:991:26:991:27 | x1 | T | main.rs:972:5:973:14 | S2 | -| main.rs:991:26:991:32 | x1.m1() | | main.rs:972:5:973:14 | S2 | -| main.rs:993:13:993:14 | x2 | | main.rs:969:5:970:19 | S | -| main.rs:993:13:993:14 | x2 | T | main.rs:972:5:973:14 | S2 | -| main.rs:993:18:993:22 | S(...) | | main.rs:969:5:970:19 | S | -| main.rs:993:18:993:22 | S(...) | T | main.rs:972:5:973:14 | S2 | -| main.rs:993:20:993:21 | S2 | | main.rs:972:5:973:14 | S2 | -| main.rs:995:26:995:27 | x2 | | main.rs:969:5:970:19 | S | -| main.rs:995:26:995:27 | x2 | T | main.rs:972:5:973:14 | S2 | -| main.rs:995:26:995:32 | x2.m2() | | file://:0:0:0:0 | & | -| main.rs:995:26:995:32 | x2.m2() | &T | main.rs:972:5:973:14 | S2 | -| main.rs:996:26:996:27 | x2 | | main.rs:969:5:970:19 | S | -| main.rs:996:26:996:27 | x2 | T | main.rs:972:5:973:14 | S2 | -| main.rs:996:26:996:32 | x2.m3() | | file://:0:0:0:0 | & | -| main.rs:996:26:996:32 | x2.m3() | &T | main.rs:972:5:973:14 | S2 | -| main.rs:998:13:998:14 | x3 | | main.rs:969:5:970:19 | S | -| main.rs:998:13:998:14 | x3 | T | main.rs:972:5:973:14 | S2 | -| main.rs:998:18:998:22 | S(...) | | main.rs:969:5:970:19 | S | -| main.rs:998:18:998:22 | S(...) | T | main.rs:972:5:973:14 | S2 | -| main.rs:998:20:998:21 | S2 | | main.rs:972:5:973:14 | S2 | -| main.rs:1000:26:1000:41 | ...::m2(...) | | file://:0:0:0:0 | & | -| main.rs:1000:26:1000:41 | ...::m2(...) | &T | main.rs:972:5:973:14 | S2 | -| main.rs:1000:38:1000:40 | &x3 | | file://:0:0:0:0 | & | -| main.rs:1000:38:1000:40 | &x3 | &T | main.rs:969:5:970:19 | S | -| main.rs:1000:38:1000:40 | &x3 | &T.T | main.rs:972:5:973:14 | S2 | -| main.rs:1000:39:1000:40 | x3 | | main.rs:969:5:970:19 | S | -| main.rs:1000:39:1000:40 | x3 | T | main.rs:972:5:973:14 | S2 | -| main.rs:1001:26:1001:41 | ...::m3(...) | | file://:0:0:0:0 | & | -| main.rs:1001:26:1001:41 | ...::m3(...) | &T | main.rs:972:5:973:14 | S2 | -| main.rs:1001:38:1001:40 | &x3 | | file://:0:0:0:0 | & | -| main.rs:1001:38:1001:40 | &x3 | &T | main.rs:969:5:970:19 | S | -| main.rs:1001:38:1001:40 | &x3 | &T.T | main.rs:972:5:973:14 | S2 | -| main.rs:1001:39:1001:40 | x3 | | main.rs:969:5:970:19 | S | -| main.rs:1001:39:1001:40 | x3 | T | main.rs:972:5:973:14 | S2 | -| main.rs:1003:13:1003:14 | x4 | | file://:0:0:0:0 | & | -| main.rs:1003:13:1003:14 | x4 | &T | main.rs:969:5:970:19 | S | -| main.rs:1003:13:1003:14 | x4 | &T.T | main.rs:972:5:973:14 | S2 | -| main.rs:1003:18:1003:23 | &... | | file://:0:0:0:0 | & | -| main.rs:1003:18:1003:23 | &... | &T | main.rs:969:5:970:19 | S | -| main.rs:1003:18:1003:23 | &... | &T.T | main.rs:972:5:973:14 | S2 | -| main.rs:1003:19:1003:23 | S(...) | | main.rs:969:5:970:19 | S | -| main.rs:1003:19:1003:23 | S(...) | T | main.rs:972:5:973:14 | S2 | -| main.rs:1003:21:1003:22 | S2 | | main.rs:972:5:973:14 | S2 | -| main.rs:1005:26:1005:27 | x4 | | file://:0:0:0:0 | & | -| main.rs:1005:26:1005:27 | x4 | &T | main.rs:969:5:970:19 | S | -| main.rs:1005:26:1005:27 | x4 | &T.T | main.rs:972:5:973:14 | S2 | -| main.rs:1005:26:1005:32 | x4.m2() | | file://:0:0:0:0 | & | -| main.rs:1005:26:1005:32 | x4.m2() | &T | main.rs:972:5:973:14 | S2 | -| main.rs:1006:26:1006:27 | x4 | | file://:0:0:0:0 | & | -| main.rs:1006:26:1006:27 | x4 | &T | main.rs:969:5:970:19 | S | -| main.rs:1006:26:1006:27 | x4 | &T.T | main.rs:972:5:973:14 | S2 | -| main.rs:1006:26:1006:32 | x4.m3() | | file://:0:0:0:0 | & | -| main.rs:1006:26:1006:32 | x4.m3() | &T | main.rs:972:5:973:14 | S2 | -| main.rs:1008:13:1008:14 | x5 | | file://:0:0:0:0 | & | -| main.rs:1008:13:1008:14 | x5 | &T | main.rs:969:5:970:19 | S | -| main.rs:1008:13:1008:14 | x5 | &T.T | main.rs:972:5:973:14 | S2 | -| main.rs:1008:18:1008:23 | &... | | file://:0:0:0:0 | & | -| main.rs:1008:18:1008:23 | &... | &T | main.rs:969:5:970:19 | S | -| main.rs:1008:18:1008:23 | &... | &T.T | main.rs:972:5:973:14 | S2 | -| main.rs:1008:19:1008:23 | S(...) | | main.rs:969:5:970:19 | S | -| main.rs:1008:19:1008:23 | S(...) | T | main.rs:972:5:973:14 | S2 | -| main.rs:1008:21:1008:22 | S2 | | main.rs:972:5:973:14 | S2 | -| main.rs:1010:26:1010:27 | x5 | | file://:0:0:0:0 | & | -| main.rs:1010:26:1010:27 | x5 | &T | main.rs:969:5:970:19 | S | -| main.rs:1010:26:1010:27 | x5 | &T.T | main.rs:972:5:973:14 | S2 | -| main.rs:1010:26:1010:32 | x5.m1() | | main.rs:972:5:973:14 | S2 | -| main.rs:1011:26:1011:27 | x5 | | file://:0:0:0:0 | & | -| main.rs:1011:26:1011:27 | x5 | &T | main.rs:969:5:970:19 | S | -| main.rs:1011:26:1011:27 | x5 | &T.T | main.rs:972:5:973:14 | S2 | -| main.rs:1011:26:1011:29 | x5.0 | | main.rs:972:5:973:14 | S2 | -| main.rs:1013:13:1013:14 | x6 | | file://:0:0:0:0 | & | -| main.rs:1013:13:1013:14 | x6 | &T | main.rs:969:5:970:19 | S | -| main.rs:1013:13:1013:14 | x6 | &T.T | main.rs:972:5:973:14 | S2 | -| main.rs:1013:18:1013:23 | &... | | file://:0:0:0:0 | & | -| main.rs:1013:18:1013:23 | &... | &T | main.rs:969:5:970:19 | S | -| main.rs:1013:18:1013:23 | &... | &T.T | main.rs:972:5:973:14 | S2 | -| main.rs:1013:19:1013:23 | S(...) | | main.rs:969:5:970:19 | S | -| main.rs:1013:19:1013:23 | S(...) | T | main.rs:972:5:973:14 | S2 | -| main.rs:1013:21:1013:22 | S2 | | main.rs:972:5:973:14 | S2 | -| main.rs:1015:26:1015:30 | (...) | | main.rs:969:5:970:19 | S | -| main.rs:1015:26:1015:30 | (...) | T | main.rs:972:5:973:14 | S2 | -| main.rs:1015:26:1015:35 | ... .m1() | | main.rs:972:5:973:14 | S2 | -| main.rs:1015:27:1015:29 | * ... | | main.rs:969:5:970:19 | S | -| main.rs:1015:27:1015:29 | * ... | T | main.rs:972:5:973:14 | S2 | -| main.rs:1015:28:1015:29 | x6 | | file://:0:0:0:0 | & | -| main.rs:1015:28:1015:29 | x6 | &T | main.rs:969:5:970:19 | S | -| main.rs:1015:28:1015:29 | x6 | &T.T | main.rs:972:5:973:14 | S2 | -| main.rs:1022:16:1022:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1022:16:1022:20 | SelfParam | &T | main.rs:1020:5:1028:5 | Self [trait MyTrait] | -| main.rs:1025:16:1025:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1025:16:1025:20 | SelfParam | &T | main.rs:1020:5:1028:5 | Self [trait MyTrait] | -| main.rs:1025:32:1027:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1025:32:1027:9 | { ... } | &T | main.rs:1020:5:1028:5 | Self [trait MyTrait] | -| main.rs:1026:13:1026:16 | self | | file://:0:0:0:0 | & | -| main.rs:1026:13:1026:16 | self | &T | main.rs:1020:5:1028:5 | Self [trait MyTrait] | -| main.rs:1026:13:1026:22 | self.foo() | | file://:0:0:0:0 | & | -| main.rs:1026:13:1026:22 | self.foo() | &T | main.rs:1020:5:1028:5 | Self [trait MyTrait] | -| main.rs:1034:16:1034:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1034:16:1034:20 | SelfParam | &T | main.rs:1030:5:1030:20 | MyStruct | -| main.rs:1034:36:1036:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1034:36:1036:9 | { ... } | &T | main.rs:1030:5:1030:20 | MyStruct | -| main.rs:1035:13:1035:16 | self | | file://:0:0:0:0 | & | -| main.rs:1035:13:1035:16 | self | &T | main.rs:1030:5:1030:20 | MyStruct | -| main.rs:1040:13:1040:13 | x | | main.rs:1030:5:1030:20 | MyStruct | -| main.rs:1040:17:1040:24 | MyStruct | | main.rs:1030:5:1030:20 | MyStruct | -| main.rs:1041:9:1041:9 | x | | main.rs:1030:5:1030:20 | MyStruct | -| main.rs:1041:9:1041:15 | x.bar() | | file://:0:0:0:0 | & | -| main.rs:1041:9:1041:15 | x.bar() | &T | main.rs:1030:5:1030:20 | MyStruct | -| main.rs:1051:16:1051:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1051:16:1051:20 | SelfParam | &T | main.rs:1048:5:1048:26 | MyStruct | -| main.rs:1051:16:1051:20 | SelfParam | &T.T | main.rs:1050:10:1050:10 | T | -| main.rs:1051:32:1053:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1051:32:1053:9 | { ... } | &T | main.rs:1048:5:1048:26 | MyStruct | -| main.rs:1051:32:1053:9 | { ... } | &T.T | main.rs:1050:10:1050:10 | T | -| main.rs:1052:13:1052:16 | self | | file://:0:0:0:0 | & | -| main.rs:1052:13:1052:16 | self | &T | main.rs:1048:5:1048:26 | MyStruct | -| main.rs:1052:13:1052:16 | self | &T.T | main.rs:1050:10:1050:10 | T | -| main.rs:1057:13:1057:13 | x | | main.rs:1048:5:1048:26 | MyStruct | -| main.rs:1057:13:1057:13 | x | T | main.rs:1046:5:1046:13 | S | -| main.rs:1057:17:1057:27 | MyStruct(...) | | main.rs:1048:5:1048:26 | MyStruct | -| main.rs:1057:17:1057:27 | MyStruct(...) | T | main.rs:1046:5:1046:13 | S | -| main.rs:1057:26:1057:26 | S | | main.rs:1046:5:1046:13 | S | -| main.rs:1058:9:1058:9 | x | | main.rs:1048:5:1048:26 | MyStruct | -| main.rs:1058:9:1058:9 | x | T | main.rs:1046:5:1046:13 | S | -| main.rs:1058:9:1058:15 | x.foo() | | file://:0:0:0:0 | & | -| main.rs:1058:9:1058:15 | x.foo() | &T | main.rs:1048:5:1048:26 | MyStruct | -| main.rs:1058:9:1058:15 | x.foo() | &T.T | main.rs:1046:5:1046:13 | S | -| main.rs:1066:15:1066:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1066:15:1066:19 | SelfParam | &T | main.rs:1063:5:1063:13 | S | -| main.rs:1066:31:1068:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1066:31:1068:9 | { ... } | &T | main.rs:1063:5:1063:13 | S | -| main.rs:1067:13:1067:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1067:13:1067:19 | &... | &T | main.rs:1063:5:1063:13 | S | -| main.rs:1067:14:1067:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1067:14:1067:19 | &... | &T | main.rs:1063:5:1063:13 | S | -| main.rs:1067:15:1067:19 | &self | | file://:0:0:0:0 | & | -| main.rs:1067:15:1067:19 | &self | &T | main.rs:1063:5:1063:13 | S | -| main.rs:1067:16:1067:19 | self | | file://:0:0:0:0 | & | -| main.rs:1067:16:1067:19 | self | &T | main.rs:1063:5:1063:13 | S | -| main.rs:1070:15:1070:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1070:15:1070:25 | SelfParam | &T | main.rs:1063:5:1063:13 | S | -| main.rs:1070:37:1072:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1070:37:1072:9 | { ... } | &T | main.rs:1063:5:1063:13 | S | -| main.rs:1071:13:1071:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1071:13:1071:19 | &... | &T | main.rs:1063:5:1063:13 | S | -| main.rs:1071:14:1071:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1071:14:1071:19 | &... | &T | main.rs:1063:5:1063:13 | S | -| main.rs:1071:15:1071:19 | &self | | file://:0:0:0:0 | & | -| main.rs:1071:15:1071:19 | &self | &T | main.rs:1063:5:1063:13 | S | -| main.rs:1071:16:1071:19 | self | | file://:0:0:0:0 | & | -| main.rs:1071:16:1071:19 | self | &T | main.rs:1063:5:1063:13 | S | -| main.rs:1074:15:1074:15 | x | | file://:0:0:0:0 | & | -| main.rs:1074:15:1074:15 | x | &T | main.rs:1063:5:1063:13 | S | -| main.rs:1074:34:1076:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1074:34:1076:9 | { ... } | &T | main.rs:1063:5:1063:13 | S | -| main.rs:1075:13:1075:13 | x | | file://:0:0:0:0 | & | -| main.rs:1075:13:1075:13 | x | &T | main.rs:1063:5:1063:13 | S | -| main.rs:1078:15:1078:15 | x | | file://:0:0:0:0 | & | -| main.rs:1078:15:1078:15 | x | &T | main.rs:1063:5:1063:13 | S | -| main.rs:1078:34:1080:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1078:34:1080:9 | { ... } | &T | main.rs:1063:5:1063:13 | S | -| main.rs:1079:13:1079:16 | &... | | file://:0:0:0:0 | & | -| main.rs:1079:13:1079:16 | &... | &T | main.rs:1063:5:1063:13 | S | -| main.rs:1079:14:1079:16 | &... | | file://:0:0:0:0 | & | -| main.rs:1079:14:1079:16 | &... | &T | main.rs:1063:5:1063:13 | S | -| main.rs:1079:15:1079:16 | &x | | file://:0:0:0:0 | & | -| main.rs:1079:15:1079:16 | &x | &T | main.rs:1063:5:1063:13 | S | -| main.rs:1079:16:1079:16 | x | | file://:0:0:0:0 | & | -| main.rs:1079:16:1079:16 | x | &T | main.rs:1063:5:1063:13 | S | -| main.rs:1084:13:1084:13 | x | | main.rs:1063:5:1063:13 | S | -| main.rs:1084:17:1084:20 | S {...} | | main.rs:1063:5:1063:13 | S | -| main.rs:1085:9:1085:9 | x | | main.rs:1063:5:1063:13 | S | -| main.rs:1085:9:1085:14 | x.f1() | | file://:0:0:0:0 | & | -| main.rs:1085:9:1085:14 | x.f1() | &T | main.rs:1063:5:1063:13 | S | -| main.rs:1086:9:1086:9 | x | | main.rs:1063:5:1063:13 | S | -| main.rs:1086:9:1086:14 | x.f2() | | file://:0:0:0:0 | & | -| main.rs:1086:9:1086:14 | x.f2() | &T | main.rs:1063:5:1063:13 | S | -| main.rs:1087:9:1087:17 | ...::f3(...) | | file://:0:0:0:0 | & | -| main.rs:1087:9:1087:17 | ...::f3(...) | &T | main.rs:1063:5:1063:13 | S | -| main.rs:1087:15:1087:16 | &x | | file://:0:0:0:0 | & | -| main.rs:1087:15:1087:16 | &x | &T | main.rs:1063:5:1063:13 | S | -| main.rs:1087:16:1087:16 | x | | main.rs:1063:5:1063:13 | S | -| main.rs:1093:5:1093:20 | ...::f(...) | | main.rs:67:5:67:21 | Foo | -| main.rs:1094:5:1094:60 | ...::g(...) | | main.rs:67:5:67:21 | Foo | -| main.rs:1094:20:1094:38 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | -| main.rs:1094:41:1094:59 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | +| main.rs:370:26:370:29 | SelfParam | | main.rs:369:5:373:5 | Self [trait OverlappingTrait] | +| main.rs:372:28:372:31 | SelfParam | | main.rs:369:5:373:5 | Self [trait OverlappingTrait] | +| main.rs:372:34:372:35 | s1 | | main.rs:366:5:367:14 | S1 | +| main.rs:377:26:377:29 | SelfParam | | main.rs:366:5:367:14 | S1 | +| main.rs:377:38:379:9 | { ... } | | main.rs:366:5:367:14 | S1 | +| main.rs:382:28:382:31 | SelfParam | | main.rs:366:5:367:14 | S1 | +| main.rs:382:34:382:35 | s1 | | main.rs:366:5:367:14 | S1 | +| main.rs:382:48:384:9 | { ... } | | main.rs:366:5:367:14 | S1 | +| main.rs:389:26:389:29 | SelfParam | | main.rs:366:5:367:14 | S1 | +| main.rs:389:38:391:9 | { ... } | | main.rs:366:5:367:14 | S1 | +| main.rs:390:13:390:16 | self | | main.rs:366:5:367:14 | S1 | +| main.rs:394:28:394:31 | SelfParam | | main.rs:366:5:367:14 | S1 | +| main.rs:394:40:396:9 | { ... } | | main.rs:366:5:367:14 | S1 | +| main.rs:395:13:395:16 | self | | main.rs:366:5:367:14 | S1 | +| main.rs:400:13:400:13 | x | | main.rs:366:5:367:14 | S1 | +| main.rs:400:17:400:18 | S1 | | main.rs:366:5:367:14 | S1 | +| main.rs:401:26:401:26 | x | | main.rs:366:5:367:14 | S1 | +| main.rs:401:26:401:42 | x.common_method() | | main.rs:366:5:367:14 | S1 | +| main.rs:402:26:402:26 | x | | main.rs:366:5:367:14 | S1 | +| main.rs:402:26:402:44 | x.common_method_2() | | main.rs:366:5:367:14 | S1 | +| main.rs:419:19:419:22 | SelfParam | | main.rs:417:5:420:5 | Self [trait FirstTrait] | +| main.rs:424:19:424:22 | SelfParam | | main.rs:422:5:425:5 | Self [trait SecondTrait] | +| main.rs:427:64:427:64 | x | | main.rs:427:45:427:61 | T | +| main.rs:429:13:429:14 | s1 | | main.rs:427:35:427:42 | I | +| main.rs:429:18:429:18 | x | | main.rs:427:45:427:61 | T | +| main.rs:429:18:429:27 | x.method() | | main.rs:427:35:427:42 | I | +| main.rs:430:26:430:27 | s1 | | main.rs:427:35:427:42 | I | +| main.rs:433:65:433:65 | x | | main.rs:433:46:433:62 | T | +| main.rs:435:13:435:14 | s2 | | main.rs:433:36:433:43 | I | +| main.rs:435:18:435:18 | x | | main.rs:433:46:433:62 | T | +| main.rs:435:18:435:27 | x.method() | | main.rs:433:36:433:43 | I | +| main.rs:436:26:436:27 | s2 | | main.rs:433:36:433:43 | I | +| main.rs:439:49:439:49 | x | | main.rs:439:30:439:46 | T | +| main.rs:440:13:440:13 | s | | main.rs:409:5:410:14 | S1 | +| main.rs:440:17:440:17 | x | | main.rs:439:30:439:46 | T | +| main.rs:440:17:440:26 | x.method() | | main.rs:409:5:410:14 | S1 | +| main.rs:441:26:441:26 | s | | main.rs:409:5:410:14 | S1 | +| main.rs:444:53:444:53 | x | | main.rs:444:34:444:50 | T | +| main.rs:445:13:445:13 | s | | main.rs:409:5:410:14 | S1 | +| main.rs:445:17:445:17 | x | | main.rs:444:34:444:50 | T | +| main.rs:445:17:445:26 | x.method() | | main.rs:409:5:410:14 | S1 | +| main.rs:446:26:446:26 | s | | main.rs:409:5:410:14 | S1 | +| main.rs:450:16:450:19 | SelfParam | | main.rs:449:5:453:5 | Self [trait Pair] | +| main.rs:452:16:452:19 | SelfParam | | main.rs:449:5:453:5 | Self [trait Pair] | +| main.rs:455:58:455:58 | x | | main.rs:455:41:455:55 | T | +| main.rs:455:64:455:64 | y | | main.rs:455:41:455:55 | T | +| main.rs:457:13:457:14 | s1 | | main.rs:409:5:410:14 | S1 | +| main.rs:457:18:457:18 | x | | main.rs:455:41:455:55 | T | +| main.rs:457:18:457:24 | x.fst() | | main.rs:409:5:410:14 | S1 | +| main.rs:458:13:458:14 | s2 | | main.rs:412:5:413:14 | S2 | +| main.rs:458:18:458:18 | y | | main.rs:455:41:455:55 | T | +| main.rs:458:18:458:24 | y.snd() | | main.rs:412:5:413:14 | S2 | +| main.rs:459:32:459:33 | s1 | | main.rs:409:5:410:14 | S1 | +| main.rs:459:36:459:37 | s2 | | main.rs:412:5:413:14 | S2 | +| main.rs:462:69:462:69 | x | | main.rs:462:52:462:66 | T | +| main.rs:462:75:462:75 | y | | main.rs:462:52:462:66 | T | +| main.rs:464:13:464:14 | s1 | | main.rs:409:5:410:14 | S1 | +| main.rs:464:18:464:18 | x | | main.rs:462:52:462:66 | T | +| main.rs:464:18:464:24 | x.fst() | | main.rs:409:5:410:14 | S1 | +| main.rs:465:13:465:14 | s2 | | main.rs:462:41:462:49 | T2 | +| main.rs:465:18:465:18 | y | | main.rs:462:52:462:66 | T | +| main.rs:465:18:465:24 | y.snd() | | main.rs:462:41:462:49 | T2 | +| main.rs:466:32:466:33 | s1 | | main.rs:409:5:410:14 | S1 | +| main.rs:466:36:466:37 | s2 | | main.rs:462:41:462:49 | T2 | +| main.rs:482:15:482:18 | SelfParam | | main.rs:481:5:490:5 | Self [trait MyTrait] | +| main.rs:484:15:484:18 | SelfParam | | main.rs:481:5:490:5 | Self [trait MyTrait] | +| main.rs:487:9:489:9 | { ... } | | main.rs:481:19:481:19 | A | +| main.rs:488:13:488:16 | self | | main.rs:481:5:490:5 | Self [trait MyTrait] | +| main.rs:488:13:488:21 | self.m1() | | main.rs:481:19:481:19 | A | +| main.rs:493:43:493:43 | x | | main.rs:493:26:493:40 | T2 | +| main.rs:493:56:495:5 | { ... } | | main.rs:493:22:493:23 | T1 | +| main.rs:494:9:494:9 | x | | main.rs:493:26:493:40 | T2 | +| main.rs:494:9:494:14 | x.m1() | | main.rs:493:22:493:23 | T1 | +| main.rs:498:49:498:49 | x | | main.rs:471:5:474:5 | MyThing | +| main.rs:498:49:498:49 | x | T | main.rs:498:32:498:46 | T2 | +| main.rs:498:71:500:5 | { ... } | | main.rs:498:28:498:29 | T1 | +| main.rs:499:9:499:9 | x | | main.rs:471:5:474:5 | MyThing | +| main.rs:499:9:499:9 | x | T | main.rs:498:32:498:46 | T2 | +| main.rs:499:9:499:11 | x.a | | main.rs:498:32:498:46 | T2 | +| main.rs:499:9:499:16 | ... .m1() | | main.rs:498:28:498:29 | T1 | +| main.rs:503:15:503:18 | SelfParam | | main.rs:471:5:474:5 | MyThing | +| main.rs:503:15:503:18 | SelfParam | T | main.rs:502:10:502:10 | T | +| main.rs:503:26:505:9 | { ... } | | main.rs:502:10:502:10 | T | +| main.rs:504:13:504:16 | self | | main.rs:471:5:474:5 | MyThing | +| main.rs:504:13:504:16 | self | T | main.rs:502:10:502:10 | T | +| main.rs:504:13:504:18 | self.a | | main.rs:502:10:502:10 | T | +| main.rs:509:13:509:13 | x | | main.rs:471:5:474:5 | MyThing | +| main.rs:509:13:509:13 | x | T | main.rs:476:5:477:14 | S1 | +| main.rs:509:17:509:33 | MyThing {...} | | main.rs:471:5:474:5 | MyThing | +| main.rs:509:17:509:33 | MyThing {...} | T | main.rs:476:5:477:14 | S1 | +| main.rs:509:30:509:31 | S1 | | main.rs:476:5:477:14 | S1 | +| main.rs:510:13:510:13 | y | | main.rs:471:5:474:5 | MyThing | +| main.rs:510:13:510:13 | y | T | main.rs:478:5:479:14 | S2 | +| main.rs:510:17:510:33 | MyThing {...} | | main.rs:471:5:474:5 | MyThing | +| main.rs:510:17:510:33 | MyThing {...} | T | main.rs:478:5:479:14 | S2 | +| main.rs:510:30:510:31 | S2 | | main.rs:478:5:479:14 | S2 | +| main.rs:512:26:512:26 | x | | main.rs:471:5:474:5 | MyThing | +| main.rs:512:26:512:26 | x | T | main.rs:476:5:477:14 | S1 | +| main.rs:512:26:512:31 | x.m1() | | main.rs:476:5:477:14 | S1 | +| main.rs:513:26:513:26 | y | | main.rs:471:5:474:5 | MyThing | +| main.rs:513:26:513:26 | y | T | main.rs:478:5:479:14 | S2 | +| main.rs:513:26:513:31 | y.m1() | | main.rs:478:5:479:14 | S2 | +| main.rs:515:13:515:13 | x | | main.rs:471:5:474:5 | MyThing | +| main.rs:515:13:515:13 | x | T | main.rs:476:5:477:14 | S1 | +| main.rs:515:17:515:33 | MyThing {...} | | main.rs:471:5:474:5 | MyThing | +| main.rs:515:17:515:33 | MyThing {...} | T | main.rs:476:5:477:14 | S1 | +| main.rs:515:30:515:31 | S1 | | main.rs:476:5:477:14 | S1 | +| main.rs:516:13:516:13 | y | | main.rs:471:5:474:5 | MyThing | +| main.rs:516:13:516:13 | y | T | main.rs:478:5:479:14 | S2 | +| main.rs:516:17:516:33 | MyThing {...} | | main.rs:471:5:474:5 | MyThing | +| main.rs:516:17:516:33 | MyThing {...} | T | main.rs:478:5:479:14 | S2 | +| main.rs:516:30:516:31 | S2 | | main.rs:478:5:479:14 | S2 | +| main.rs:518:26:518:26 | x | | main.rs:471:5:474:5 | MyThing | +| main.rs:518:26:518:26 | x | T | main.rs:476:5:477:14 | S1 | +| main.rs:518:26:518:31 | x.m2() | | main.rs:476:5:477:14 | S1 | +| main.rs:519:26:519:26 | y | | main.rs:471:5:474:5 | MyThing | +| main.rs:519:26:519:26 | y | T | main.rs:478:5:479:14 | S2 | +| main.rs:519:26:519:31 | y.m2() | | main.rs:478:5:479:14 | S2 | +| main.rs:521:13:521:14 | x2 | | main.rs:471:5:474:5 | MyThing | +| main.rs:521:13:521:14 | x2 | T | main.rs:476:5:477:14 | S1 | +| main.rs:521:18:521:34 | MyThing {...} | | main.rs:471:5:474:5 | MyThing | +| main.rs:521:18:521:34 | MyThing {...} | T | main.rs:476:5:477:14 | S1 | +| main.rs:521:31:521:32 | S1 | | main.rs:476:5:477:14 | S1 | +| main.rs:522:13:522:14 | y2 | | main.rs:471:5:474:5 | MyThing | +| main.rs:522:13:522:14 | y2 | T | main.rs:478:5:479:14 | S2 | +| main.rs:522:18:522:34 | MyThing {...} | | main.rs:471:5:474:5 | MyThing | +| main.rs:522:18:522:34 | MyThing {...} | T | main.rs:478:5:479:14 | S2 | +| main.rs:522:31:522:32 | S2 | | main.rs:478:5:479:14 | S2 | +| main.rs:524:26:524:42 | call_trait_m1(...) | | main.rs:476:5:477:14 | S1 | +| main.rs:524:40:524:41 | x2 | | main.rs:471:5:474:5 | MyThing | +| main.rs:524:40:524:41 | x2 | T | main.rs:476:5:477:14 | S1 | +| main.rs:525:26:525:42 | call_trait_m1(...) | | main.rs:478:5:479:14 | S2 | +| main.rs:525:40:525:41 | y2 | | main.rs:471:5:474:5 | MyThing | +| main.rs:525:40:525:41 | y2 | T | main.rs:478:5:479:14 | S2 | +| main.rs:527:13:527:14 | x3 | | main.rs:471:5:474:5 | MyThing | +| main.rs:527:13:527:14 | x3 | T | main.rs:471:5:474:5 | MyThing | +| main.rs:527:13:527:14 | x3 | T.T | main.rs:476:5:477:14 | S1 | +| main.rs:527:18:529:9 | MyThing {...} | | main.rs:471:5:474:5 | MyThing | +| main.rs:527:18:529:9 | MyThing {...} | T | main.rs:471:5:474:5 | MyThing | +| main.rs:527:18:529:9 | MyThing {...} | T.T | main.rs:476:5:477:14 | S1 | +| main.rs:528:16:528:32 | MyThing {...} | | main.rs:471:5:474:5 | MyThing | +| main.rs:528:16:528:32 | MyThing {...} | T | main.rs:476:5:477:14 | S1 | +| main.rs:528:29:528:30 | S1 | | main.rs:476:5:477:14 | S1 | +| main.rs:530:13:530:14 | y3 | | main.rs:471:5:474:5 | MyThing | +| main.rs:530:13:530:14 | y3 | T | main.rs:471:5:474:5 | MyThing | +| main.rs:530:13:530:14 | y3 | T.T | main.rs:478:5:479:14 | S2 | +| main.rs:530:18:532:9 | MyThing {...} | | main.rs:471:5:474:5 | MyThing | +| main.rs:530:18:532:9 | MyThing {...} | T | main.rs:471:5:474:5 | MyThing | +| main.rs:530:18:532:9 | MyThing {...} | T.T | main.rs:478:5:479:14 | S2 | +| main.rs:531:16:531:32 | MyThing {...} | | main.rs:471:5:474:5 | MyThing | +| main.rs:531:16:531:32 | MyThing {...} | T | main.rs:478:5:479:14 | S2 | +| main.rs:531:29:531:30 | S2 | | main.rs:478:5:479:14 | S2 | +| main.rs:534:13:534:13 | a | | main.rs:476:5:477:14 | S1 | +| main.rs:534:17:534:39 | call_trait_thing_m1(...) | | main.rs:476:5:477:14 | S1 | +| main.rs:534:37:534:38 | x3 | | main.rs:471:5:474:5 | MyThing | +| main.rs:534:37:534:38 | x3 | T | main.rs:471:5:474:5 | MyThing | +| main.rs:534:37:534:38 | x3 | T.T | main.rs:476:5:477:14 | S1 | +| main.rs:535:26:535:26 | a | | main.rs:476:5:477:14 | S1 | +| main.rs:536:13:536:13 | b | | main.rs:478:5:479:14 | S2 | +| main.rs:536:17:536:39 | call_trait_thing_m1(...) | | main.rs:478:5:479:14 | S2 | +| main.rs:536:37:536:38 | y3 | | main.rs:471:5:474:5 | MyThing | +| main.rs:536:37:536:38 | y3 | T | main.rs:471:5:474:5 | MyThing | +| main.rs:536:37:536:38 | y3 | T.T | main.rs:478:5:479:14 | S2 | +| main.rs:537:26:537:26 | b | | main.rs:478:5:479:14 | S2 | +| main.rs:548:19:548:22 | SelfParam | | main.rs:542:5:545:5 | Wrapper | +| main.rs:548:19:548:22 | SelfParam | A | main.rs:547:10:547:10 | A | +| main.rs:548:30:550:9 | { ... } | | main.rs:547:10:547:10 | A | +| main.rs:549:13:549:16 | self | | main.rs:542:5:545:5 | Wrapper | +| main.rs:549:13:549:16 | self | A | main.rs:547:10:547:10 | A | +| main.rs:549:13:549:22 | self.field | | main.rs:547:10:547:10 | A | +| main.rs:557:15:557:18 | SelfParam | | main.rs:553:5:567:5 | Self [trait MyTrait] | +| main.rs:559:15:559:18 | SelfParam | | main.rs:553:5:567:5 | Self [trait MyTrait] | +| main.rs:563:9:566:9 | { ... } | | main.rs:554:9:554:28 | AssociatedType | +| main.rs:564:13:564:16 | self | | main.rs:553:5:567:5 | Self [trait MyTrait] | +| main.rs:564:13:564:21 | self.m1() | | main.rs:554:9:554:28 | AssociatedType | +| main.rs:565:13:565:43 | ...::default(...) | | main.rs:554:9:554:28 | AssociatedType | +| main.rs:573:19:573:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:573:19:573:23 | SelfParam | &T | main.rs:569:5:579:5 | Self [trait MyTraitAssoc2] | +| main.rs:573:26:573:26 | a | | main.rs:573:16:573:16 | A | +| main.rs:575:22:575:26 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:575:22:575:26 | SelfParam | &T | main.rs:569:5:579:5 | Self [trait MyTraitAssoc2] | +| main.rs:575:29:575:29 | a | | main.rs:575:19:575:19 | A | +| main.rs:575:35:575:35 | b | | main.rs:575:19:575:19 | A | +| main.rs:575:75:578:9 | { ... } | | main.rs:570:9:570:52 | GenericAssociatedType | +| main.rs:576:13:576:16 | self | | file://:0:0:0:0 | & | +| main.rs:576:13:576:16 | self | &T | main.rs:569:5:579:5 | Self [trait MyTraitAssoc2] | +| main.rs:576:13:576:23 | self.put(...) | | main.rs:570:9:570:52 | GenericAssociatedType | +| main.rs:576:22:576:22 | a | | main.rs:575:19:575:19 | A | +| main.rs:577:13:577:16 | self | | file://:0:0:0:0 | & | +| main.rs:577:13:577:16 | self | &T | main.rs:569:5:579:5 | Self [trait MyTraitAssoc2] | +| main.rs:577:13:577:23 | self.put(...) | | main.rs:570:9:570:52 | GenericAssociatedType | +| main.rs:577:22:577:22 | b | | main.rs:575:19:575:19 | A | +| main.rs:586:21:586:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:586:21:586:25 | SelfParam | &T | main.rs:581:5:591:5 | Self [trait TraitMultipleAssoc] | +| main.rs:588:20:588:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:588:20:588:24 | SelfParam | &T | main.rs:581:5:591:5 | Self [trait TraitMultipleAssoc] | +| main.rs:590:20:590:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:590:20:590:24 | SelfParam | &T | main.rs:581:5:591:5 | Self [trait TraitMultipleAssoc] | +| main.rs:606:15:606:18 | SelfParam | | main.rs:593:5:594:13 | S | +| main.rs:606:45:608:9 | { ... } | | main.rs:599:5:600:14 | AT | +| main.rs:607:13:607:14 | AT | | main.rs:599:5:600:14 | AT | +| main.rs:616:19:616:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:616:19:616:23 | SelfParam | &T | main.rs:593:5:594:13 | S | +| main.rs:616:26:616:26 | a | | main.rs:616:16:616:16 | A | +| main.rs:616:46:618:9 | { ... } | | main.rs:542:5:545:5 | Wrapper | +| main.rs:616:46:618:9 | { ... } | A | main.rs:616:16:616:16 | A | +| main.rs:617:13:617:32 | Wrapper {...} | | main.rs:542:5:545:5 | Wrapper | +| main.rs:617:13:617:32 | Wrapper {...} | A | main.rs:616:16:616:16 | A | +| main.rs:617:30:617:30 | a | | main.rs:616:16:616:16 | A | +| main.rs:625:15:625:18 | SelfParam | | main.rs:596:5:597:14 | S2 | +| main.rs:625:45:627:9 | { ... } | | main.rs:542:5:545:5 | Wrapper | +| main.rs:625:45:627:9 | { ... } | A | main.rs:596:5:597:14 | S2 | +| main.rs:626:13:626:35 | Wrapper {...} | | main.rs:542:5:545:5 | Wrapper | +| main.rs:626:13:626:35 | Wrapper {...} | A | main.rs:596:5:597:14 | S2 | +| main.rs:626:30:626:33 | self | | main.rs:596:5:597:14 | S2 | +| main.rs:632:30:634:9 | { ... } | | main.rs:542:5:545:5 | Wrapper | +| main.rs:632:30:634:9 | { ... } | A | main.rs:596:5:597:14 | S2 | +| main.rs:633:13:633:33 | Wrapper {...} | | main.rs:542:5:545:5 | Wrapper | +| main.rs:633:13:633:33 | Wrapper {...} | A | main.rs:596:5:597:14 | S2 | +| main.rs:633:30:633:31 | S2 | | main.rs:596:5:597:14 | S2 | +| main.rs:638:22:638:26 | thing | | main.rs:638:10:638:19 | T | +| main.rs:639:9:639:13 | thing | | main.rs:638:10:638:19 | T | +| main.rs:646:21:646:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:646:21:646:25 | SelfParam | &T | main.rs:599:5:600:14 | AT | +| main.rs:646:34:648:9 | { ... } | | main.rs:599:5:600:14 | AT | +| main.rs:647:13:647:14 | AT | | main.rs:599:5:600:14 | AT | +| main.rs:650:20:650:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:650:20:650:24 | SelfParam | &T | main.rs:599:5:600:14 | AT | +| main.rs:650:43:652:9 | { ... } | | main.rs:593:5:594:13 | S | +| main.rs:651:13:651:13 | S | | main.rs:593:5:594:13 | S | +| main.rs:654:20:654:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:654:20:654:24 | SelfParam | &T | main.rs:599:5:600:14 | AT | +| main.rs:654:43:656:9 | { ... } | | main.rs:596:5:597:14 | S2 | +| main.rs:655:13:655:14 | S2 | | main.rs:596:5:597:14 | S2 | +| main.rs:660:13:660:14 | x1 | | main.rs:593:5:594:13 | S | +| main.rs:660:18:660:18 | S | | main.rs:593:5:594:13 | S | +| main.rs:662:26:662:27 | x1 | | main.rs:593:5:594:13 | S | +| main.rs:662:26:662:32 | x1.m1() | | main.rs:599:5:600:14 | AT | +| main.rs:664:13:664:14 | x2 | | main.rs:593:5:594:13 | S | +| main.rs:664:18:664:18 | S | | main.rs:593:5:594:13 | S | +| main.rs:666:13:666:13 | y | | main.rs:599:5:600:14 | AT | +| main.rs:666:17:666:18 | x2 | | main.rs:593:5:594:13 | S | +| main.rs:666:17:666:23 | x2.m2() | | main.rs:599:5:600:14 | AT | +| main.rs:667:26:667:26 | y | | main.rs:599:5:600:14 | AT | +| main.rs:669:13:669:14 | x3 | | main.rs:593:5:594:13 | S | +| main.rs:669:18:669:18 | S | | main.rs:593:5:594:13 | S | +| main.rs:671:26:671:27 | x3 | | main.rs:593:5:594:13 | S | +| main.rs:671:26:671:34 | x3.put(...) | | main.rs:542:5:545:5 | Wrapper | +| main.rs:674:26:674:27 | x3 | | main.rs:593:5:594:13 | S | +| main.rs:676:20:676:20 | S | | main.rs:593:5:594:13 | S | +| main.rs:679:13:679:14 | x5 | | main.rs:596:5:597:14 | S2 | +| main.rs:679:18:679:19 | S2 | | main.rs:596:5:597:14 | S2 | +| main.rs:680:26:680:27 | x5 | | main.rs:596:5:597:14 | S2 | +| main.rs:680:26:680:32 | x5.m1() | | main.rs:542:5:545:5 | Wrapper | +| main.rs:680:26:680:32 | x5.m1() | A | main.rs:596:5:597:14 | S2 | +| main.rs:681:13:681:14 | x6 | | main.rs:596:5:597:14 | S2 | +| main.rs:681:18:681:19 | S2 | | main.rs:596:5:597:14 | S2 | +| main.rs:682:26:682:27 | x6 | | main.rs:596:5:597:14 | S2 | +| main.rs:682:26:682:32 | x6.m2() | | main.rs:542:5:545:5 | Wrapper | +| main.rs:682:26:682:32 | x6.m2() | A | main.rs:596:5:597:14 | S2 | +| main.rs:684:13:684:22 | assoc_zero | | main.rs:599:5:600:14 | AT | +| main.rs:684:26:684:27 | AT | | main.rs:599:5:600:14 | AT | +| main.rs:684:26:684:38 | AT.get_zero() | | main.rs:599:5:600:14 | AT | +| main.rs:685:13:685:21 | assoc_one | | main.rs:593:5:594:13 | S | +| main.rs:685:25:685:26 | AT | | main.rs:599:5:600:14 | AT | +| main.rs:685:25:685:36 | AT.get_one() | | main.rs:593:5:594:13 | S | +| main.rs:686:13:686:21 | assoc_two | | main.rs:596:5:597:14 | S2 | +| main.rs:686:25:686:26 | AT | | main.rs:599:5:600:14 | AT | +| main.rs:686:25:686:36 | AT.get_two() | | main.rs:596:5:597:14 | S2 | +| main.rs:703:15:703:18 | SelfParam | | main.rs:691:5:695:5 | MyEnum | +| main.rs:703:15:703:18 | SelfParam | A | main.rs:702:10:702:10 | T | +| main.rs:703:26:708:9 | { ... } | | main.rs:702:10:702:10 | T | +| main.rs:704:13:707:13 | match self { ... } | | main.rs:702:10:702:10 | T | +| main.rs:704:19:704:22 | self | | main.rs:691:5:695:5 | MyEnum | +| main.rs:704:19:704:22 | self | A | main.rs:702:10:702:10 | T | +| main.rs:705:28:705:28 | a | | main.rs:702:10:702:10 | T | +| main.rs:705:34:705:34 | a | | main.rs:702:10:702:10 | T | +| main.rs:706:30:706:30 | a | | main.rs:702:10:702:10 | T | +| main.rs:706:37:706:37 | a | | main.rs:702:10:702:10 | T | +| main.rs:712:13:712:13 | x | | main.rs:691:5:695:5 | MyEnum | +| main.rs:712:13:712:13 | x | A | main.rs:697:5:698:14 | S1 | +| main.rs:712:17:712:30 | ...::C1(...) | | main.rs:691:5:695:5 | MyEnum | +| main.rs:712:17:712:30 | ...::C1(...) | A | main.rs:697:5:698:14 | S1 | +| main.rs:712:28:712:29 | S1 | | main.rs:697:5:698:14 | S1 | +| main.rs:713:13:713:13 | y | | main.rs:691:5:695:5 | MyEnum | +| main.rs:713:13:713:13 | y | A | main.rs:699:5:700:14 | S2 | +| main.rs:713:17:713:36 | ...::C2 {...} | | main.rs:691:5:695:5 | MyEnum | +| main.rs:713:17:713:36 | ...::C2 {...} | A | main.rs:699:5:700:14 | S2 | +| main.rs:713:33:713:34 | S2 | | main.rs:699:5:700:14 | S2 | +| main.rs:715:26:715:26 | x | | main.rs:691:5:695:5 | MyEnum | +| main.rs:715:26:715:26 | x | A | main.rs:697:5:698:14 | S1 | +| main.rs:715:26:715:31 | x.m1() | | main.rs:697:5:698:14 | S1 | +| main.rs:716:26:716:26 | y | | main.rs:691:5:695:5 | MyEnum | +| main.rs:716:26:716:26 | y | A | main.rs:699:5:700:14 | S2 | +| main.rs:716:26:716:31 | y.m1() | | main.rs:699:5:700:14 | S2 | +| main.rs:738:15:738:18 | SelfParam | | main.rs:736:5:739:5 | Self [trait MyTrait1] | +| main.rs:742:15:742:18 | SelfParam | | main.rs:741:5:752:5 | Self [trait MyTrait2] | +| main.rs:745:9:751:9 | { ... } | | main.rs:741:20:741:22 | Tr2 | +| main.rs:746:13:750:13 | if ... {...} else {...} | | main.rs:741:20:741:22 | Tr2 | +| main.rs:746:26:748:13 | { ... } | | main.rs:741:20:741:22 | Tr2 | +| main.rs:747:17:747:20 | self | | main.rs:741:5:752:5 | Self [trait MyTrait2] | +| main.rs:747:17:747:25 | self.m1() | | main.rs:741:20:741:22 | Tr2 | +| main.rs:748:20:750:13 | { ... } | | main.rs:741:20:741:22 | Tr2 | +| main.rs:749:17:749:30 | ...::m1(...) | | main.rs:741:20:741:22 | Tr2 | +| main.rs:749:26:749:29 | self | | main.rs:741:5:752:5 | Self [trait MyTrait2] | +| main.rs:755:15:755:18 | SelfParam | | main.rs:754:5:765:5 | Self [trait MyTrait3] | +| main.rs:758:9:764:9 | { ... } | | main.rs:754:20:754:22 | Tr3 | +| main.rs:759:13:763:13 | if ... {...} else {...} | | main.rs:754:20:754:22 | Tr3 | +| main.rs:759:26:761:13 | { ... } | | main.rs:754:20:754:22 | Tr3 | +| main.rs:760:17:760:20 | self | | main.rs:754:5:765:5 | Self [trait MyTrait3] | +| main.rs:760:17:760:25 | self.m2() | | main.rs:721:5:724:5 | MyThing | +| main.rs:760:17:760:25 | self.m2() | A | main.rs:754:20:754:22 | Tr3 | +| main.rs:760:17:760:27 | ... .a | | main.rs:754:20:754:22 | Tr3 | +| main.rs:761:20:763:13 | { ... } | | main.rs:754:20:754:22 | Tr3 | +| main.rs:762:17:762:30 | ...::m2(...) | | main.rs:721:5:724:5 | MyThing | +| main.rs:762:17:762:30 | ...::m2(...) | A | main.rs:754:20:754:22 | Tr3 | +| main.rs:762:17:762:32 | ... .a | | main.rs:754:20:754:22 | Tr3 | +| main.rs:762:26:762:29 | self | | main.rs:754:5:765:5 | Self [trait MyTrait3] | +| main.rs:769:15:769:18 | SelfParam | | main.rs:721:5:724:5 | MyThing | +| main.rs:769:15:769:18 | SelfParam | A | main.rs:767:10:767:10 | T | +| main.rs:769:26:771:9 | { ... } | | main.rs:767:10:767:10 | T | +| main.rs:770:13:770:16 | self | | main.rs:721:5:724:5 | MyThing | +| main.rs:770:13:770:16 | self | A | main.rs:767:10:767:10 | T | +| main.rs:770:13:770:18 | self.a | | main.rs:767:10:767:10 | T | +| main.rs:778:15:778:18 | SelfParam | | main.rs:726:5:729:5 | MyThing2 | +| main.rs:778:15:778:18 | SelfParam | A | main.rs:776:10:776:10 | T | +| main.rs:778:35:780:9 | { ... } | | main.rs:721:5:724:5 | MyThing | +| main.rs:778:35:780:9 | { ... } | A | main.rs:776:10:776:10 | T | +| main.rs:779:13:779:33 | MyThing {...} | | main.rs:721:5:724:5 | MyThing | +| main.rs:779:13:779:33 | MyThing {...} | A | main.rs:776:10:776:10 | T | +| main.rs:779:26:779:29 | self | | main.rs:726:5:729:5 | MyThing2 | +| main.rs:779:26:779:29 | self | A | main.rs:776:10:776:10 | T | +| main.rs:779:26:779:31 | self.a | | main.rs:776:10:776:10 | T | +| main.rs:788:13:788:13 | x | | main.rs:721:5:724:5 | MyThing | +| main.rs:788:13:788:13 | x | A | main.rs:731:5:732:14 | S1 | +| main.rs:788:17:788:33 | MyThing {...} | | main.rs:721:5:724:5 | MyThing | +| main.rs:788:17:788:33 | MyThing {...} | A | main.rs:731:5:732:14 | S1 | +| main.rs:788:30:788:31 | S1 | | main.rs:731:5:732:14 | S1 | +| main.rs:789:13:789:13 | y | | main.rs:721:5:724:5 | MyThing | +| main.rs:789:13:789:13 | y | A | main.rs:733:5:734:14 | S2 | +| main.rs:789:17:789:33 | MyThing {...} | | main.rs:721:5:724:5 | MyThing | +| main.rs:789:17:789:33 | MyThing {...} | A | main.rs:733:5:734:14 | S2 | +| main.rs:789:30:789:31 | S2 | | main.rs:733:5:734:14 | S2 | +| main.rs:791:26:791:26 | x | | main.rs:721:5:724:5 | MyThing | +| main.rs:791:26:791:26 | x | A | main.rs:731:5:732:14 | S1 | +| main.rs:791:26:791:31 | x.m1() | | main.rs:731:5:732:14 | S1 | +| main.rs:792:26:792:26 | y | | main.rs:721:5:724:5 | MyThing | +| main.rs:792:26:792:26 | y | A | main.rs:733:5:734:14 | S2 | +| main.rs:792:26:792:31 | y.m1() | | main.rs:733:5:734:14 | S2 | +| main.rs:794:13:794:13 | x | | main.rs:721:5:724:5 | MyThing | +| main.rs:794:13:794:13 | x | A | main.rs:731:5:732:14 | S1 | +| main.rs:794:17:794:33 | MyThing {...} | | main.rs:721:5:724:5 | MyThing | +| main.rs:794:17:794:33 | MyThing {...} | A | main.rs:731:5:732:14 | S1 | +| main.rs:794:30:794:31 | S1 | | main.rs:731:5:732:14 | S1 | +| main.rs:795:13:795:13 | y | | main.rs:721:5:724:5 | MyThing | +| main.rs:795:13:795:13 | y | A | main.rs:733:5:734:14 | S2 | +| main.rs:795:17:795:33 | MyThing {...} | | main.rs:721:5:724:5 | MyThing | +| main.rs:795:17:795:33 | MyThing {...} | A | main.rs:733:5:734:14 | S2 | +| main.rs:795:30:795:31 | S2 | | main.rs:733:5:734:14 | S2 | +| main.rs:797:26:797:26 | x | | main.rs:721:5:724:5 | MyThing | +| main.rs:797:26:797:26 | x | A | main.rs:731:5:732:14 | S1 | +| main.rs:797:26:797:31 | x.m2() | | main.rs:731:5:732:14 | S1 | +| main.rs:798:26:798:26 | y | | main.rs:721:5:724:5 | MyThing | +| main.rs:798:26:798:26 | y | A | main.rs:733:5:734:14 | S2 | +| main.rs:798:26:798:31 | y.m2() | | main.rs:733:5:734:14 | S2 | +| main.rs:800:13:800:13 | x | | main.rs:726:5:729:5 | MyThing2 | +| main.rs:800:13:800:13 | x | A | main.rs:731:5:732:14 | S1 | +| main.rs:800:17:800:34 | MyThing2 {...} | | main.rs:726:5:729:5 | MyThing2 | +| main.rs:800:17:800:34 | MyThing2 {...} | A | main.rs:731:5:732:14 | S1 | +| main.rs:800:31:800:32 | S1 | | main.rs:731:5:732:14 | S1 | +| main.rs:801:13:801:13 | y | | main.rs:726:5:729:5 | MyThing2 | +| main.rs:801:13:801:13 | y | A | main.rs:733:5:734:14 | S2 | +| main.rs:801:17:801:34 | MyThing2 {...} | | main.rs:726:5:729:5 | MyThing2 | +| main.rs:801:17:801:34 | MyThing2 {...} | A | main.rs:733:5:734:14 | S2 | +| main.rs:801:31:801:32 | S2 | | main.rs:733:5:734:14 | S2 | +| main.rs:803:26:803:26 | x | | main.rs:726:5:729:5 | MyThing2 | +| main.rs:803:26:803:26 | x | A | main.rs:731:5:732:14 | S1 | +| main.rs:803:26:803:31 | x.m3() | | main.rs:731:5:732:14 | S1 | +| main.rs:804:26:804:26 | y | | main.rs:726:5:729:5 | MyThing2 | +| main.rs:804:26:804:26 | y | A | main.rs:733:5:734:14 | S2 | +| main.rs:804:26:804:31 | y.m3() | | main.rs:733:5:734:14 | S2 | +| main.rs:822:22:822:22 | x | | file://:0:0:0:0 | & | +| main.rs:822:22:822:22 | x | &T | main.rs:822:11:822:19 | T | +| main.rs:822:35:824:5 | { ... } | | file://:0:0:0:0 | & | +| main.rs:822:35:824:5 | { ... } | &T | main.rs:822:11:822:19 | T | +| main.rs:823:9:823:9 | x | | file://:0:0:0:0 | & | +| main.rs:823:9:823:9 | x | &T | main.rs:822:11:822:19 | T | +| main.rs:827:17:827:20 | SelfParam | | main.rs:812:5:813:14 | S1 | +| main.rs:827:29:829:9 | { ... } | | main.rs:815:5:816:14 | S2 | +| main.rs:828:13:828:14 | S2 | | main.rs:815:5:816:14 | S2 | +| main.rs:832:21:832:21 | x | | main.rs:832:13:832:14 | T1 | +| main.rs:835:5:837:5 | { ... } | | main.rs:832:17:832:18 | T2 | +| main.rs:836:9:836:9 | x | | main.rs:832:13:832:14 | T1 | +| main.rs:836:9:836:16 | x.into() | | main.rs:832:17:832:18 | T2 | +| main.rs:840:13:840:13 | x | | main.rs:812:5:813:14 | S1 | +| main.rs:840:17:840:18 | S1 | | main.rs:812:5:813:14 | S1 | +| main.rs:841:26:841:31 | id(...) | | file://:0:0:0:0 | & | +| main.rs:841:26:841:31 | id(...) | &T | main.rs:812:5:813:14 | S1 | +| main.rs:841:29:841:30 | &x | | file://:0:0:0:0 | & | +| main.rs:841:29:841:30 | &x | &T | main.rs:812:5:813:14 | S1 | +| main.rs:841:30:841:30 | x | | main.rs:812:5:813:14 | S1 | +| main.rs:843:13:843:13 | x | | main.rs:812:5:813:14 | S1 | +| main.rs:843:17:843:18 | S1 | | main.rs:812:5:813:14 | S1 | +| main.rs:844:26:844:37 | id::<...>(...) | | file://:0:0:0:0 | & | +| main.rs:844:26:844:37 | id::<...>(...) | &T | main.rs:812:5:813:14 | S1 | +| main.rs:844:35:844:36 | &x | | file://:0:0:0:0 | & | +| main.rs:844:35:844:36 | &x | &T | main.rs:812:5:813:14 | S1 | +| main.rs:844:36:844:36 | x | | main.rs:812:5:813:14 | S1 | +| main.rs:846:13:846:13 | x | | main.rs:812:5:813:14 | S1 | +| main.rs:846:17:846:18 | S1 | | main.rs:812:5:813:14 | S1 | +| main.rs:847:26:847:44 | id::<...>(...) | | file://:0:0:0:0 | & | +| main.rs:847:26:847:44 | id::<...>(...) | &T | main.rs:812:5:813:14 | S1 | +| main.rs:847:42:847:43 | &x | | file://:0:0:0:0 | & | +| main.rs:847:42:847:43 | &x | &T | main.rs:812:5:813:14 | S1 | +| main.rs:847:43:847:43 | x | | main.rs:812:5:813:14 | S1 | +| main.rs:849:13:849:13 | x | | main.rs:812:5:813:14 | S1 | +| main.rs:849:17:849:18 | S1 | | main.rs:812:5:813:14 | S1 | +| main.rs:850:9:850:25 | into::<...>(...) | | main.rs:815:5:816:14 | S2 | +| main.rs:850:24:850:24 | x | | main.rs:812:5:813:14 | S1 | +| main.rs:852:13:852:13 | x | | main.rs:812:5:813:14 | S1 | +| main.rs:852:17:852:18 | S1 | | main.rs:812:5:813:14 | S1 | +| main.rs:853:13:853:13 | y | | main.rs:815:5:816:14 | S2 | +| main.rs:853:21:853:27 | into(...) | | main.rs:815:5:816:14 | S2 | +| main.rs:853:26:853:26 | x | | main.rs:812:5:813:14 | S1 | +| main.rs:867:22:867:25 | SelfParam | | main.rs:858:5:864:5 | PairOption | +| main.rs:867:22:867:25 | SelfParam | Fst | main.rs:866:10:866:12 | Fst | +| main.rs:867:22:867:25 | SelfParam | Snd | main.rs:866:15:866:17 | Snd | +| main.rs:867:35:874:9 | { ... } | | main.rs:866:15:866:17 | Snd | +| main.rs:868:13:873:13 | match self { ... } | | main.rs:866:15:866:17 | Snd | +| main.rs:868:19:868:22 | self | | main.rs:858:5:864:5 | PairOption | +| main.rs:868:19:868:22 | self | Fst | main.rs:866:10:866:12 | Fst | +| main.rs:868:19:868:22 | self | Snd | main.rs:866:15:866:17 | Snd | +| main.rs:869:43:869:82 | MacroExpr | | main.rs:866:15:866:17 | Snd | +| main.rs:870:43:870:81 | MacroExpr | | main.rs:866:15:866:17 | Snd | +| main.rs:871:37:871:39 | snd | | main.rs:866:15:866:17 | Snd | +| main.rs:871:45:871:47 | snd | | main.rs:866:15:866:17 | Snd | +| main.rs:872:41:872:43 | snd | | main.rs:866:15:866:17 | Snd | +| main.rs:872:49:872:51 | snd | | main.rs:866:15:866:17 | Snd | +| main.rs:898:10:898:10 | t | | main.rs:858:5:864:5 | PairOption | +| main.rs:898:10:898:10 | t | Fst | main.rs:880:5:881:14 | S2 | +| main.rs:898:10:898:10 | t | Snd | main.rs:858:5:864:5 | PairOption | +| main.rs:898:10:898:10 | t | Snd.Fst | main.rs:880:5:881:14 | S2 | +| main.rs:898:10:898:10 | t | Snd.Snd | main.rs:883:5:884:14 | S3 | +| main.rs:899:13:899:13 | x | | main.rs:883:5:884:14 | S3 | +| main.rs:899:17:899:17 | t | | main.rs:858:5:864:5 | PairOption | +| main.rs:899:17:899:17 | t | Fst | main.rs:880:5:881:14 | S2 | +| main.rs:899:17:899:17 | t | Snd | main.rs:858:5:864:5 | PairOption | +| main.rs:899:17:899:17 | t | Snd.Fst | main.rs:880:5:881:14 | S2 | +| main.rs:899:17:899:17 | t | Snd.Snd | main.rs:883:5:884:14 | S3 | +| main.rs:899:17:899:29 | t.unwrapSnd() | | main.rs:858:5:864:5 | PairOption | +| main.rs:899:17:899:29 | t.unwrapSnd() | Fst | main.rs:880:5:881:14 | S2 | +| main.rs:899:17:899:29 | t.unwrapSnd() | Snd | main.rs:883:5:884:14 | S3 | +| main.rs:899:17:899:41 | ... .unwrapSnd() | | main.rs:883:5:884:14 | S3 | +| main.rs:900:26:900:26 | x | | main.rs:883:5:884:14 | S3 | +| main.rs:905:13:905:14 | p1 | | main.rs:858:5:864:5 | PairOption | +| main.rs:905:13:905:14 | p1 | Fst | main.rs:877:5:878:14 | S1 | +| main.rs:905:13:905:14 | p1 | Snd | main.rs:880:5:881:14 | S2 | +| main.rs:905:26:905:53 | ...::PairBoth(...) | | main.rs:858:5:864:5 | PairOption | +| main.rs:905:26:905:53 | ...::PairBoth(...) | Fst | main.rs:877:5:878:14 | S1 | +| main.rs:905:26:905:53 | ...::PairBoth(...) | Snd | main.rs:880:5:881:14 | S2 | +| main.rs:905:47:905:48 | S1 | | main.rs:877:5:878:14 | S1 | +| main.rs:905:51:905:52 | S2 | | main.rs:880:5:881:14 | S2 | +| main.rs:906:26:906:27 | p1 | | main.rs:858:5:864:5 | PairOption | +| main.rs:906:26:906:27 | p1 | Fst | main.rs:877:5:878:14 | S1 | +| main.rs:906:26:906:27 | p1 | Snd | main.rs:880:5:881:14 | S2 | +| main.rs:909:13:909:14 | p2 | | main.rs:858:5:864:5 | PairOption | +| main.rs:909:13:909:14 | p2 | Fst | main.rs:877:5:878:14 | S1 | +| main.rs:909:13:909:14 | p2 | Snd | main.rs:880:5:881:14 | S2 | +| main.rs:909:26:909:47 | ...::PairNone(...) | | main.rs:858:5:864:5 | PairOption | +| main.rs:909:26:909:47 | ...::PairNone(...) | Fst | main.rs:877:5:878:14 | S1 | +| main.rs:909:26:909:47 | ...::PairNone(...) | Snd | main.rs:880:5:881:14 | S2 | +| main.rs:910:26:910:27 | p2 | | main.rs:858:5:864:5 | PairOption | +| main.rs:910:26:910:27 | p2 | Fst | main.rs:877:5:878:14 | S1 | +| main.rs:910:26:910:27 | p2 | Snd | main.rs:880:5:881:14 | S2 | +| main.rs:913:13:913:14 | p3 | | main.rs:858:5:864:5 | PairOption | +| main.rs:913:13:913:14 | p3 | Fst | main.rs:880:5:881:14 | S2 | +| main.rs:913:13:913:14 | p3 | Snd | main.rs:883:5:884:14 | S3 | +| main.rs:913:34:913:56 | ...::PairSnd(...) | | main.rs:858:5:864:5 | PairOption | +| main.rs:913:34:913:56 | ...::PairSnd(...) | Fst | main.rs:880:5:881:14 | S2 | +| main.rs:913:34:913:56 | ...::PairSnd(...) | Snd | main.rs:883:5:884:14 | S3 | +| main.rs:913:54:913:55 | S3 | | main.rs:883:5:884:14 | S3 | +| main.rs:914:26:914:27 | p3 | | main.rs:858:5:864:5 | PairOption | +| main.rs:914:26:914:27 | p3 | Fst | main.rs:880:5:881:14 | S2 | +| main.rs:914:26:914:27 | p3 | Snd | main.rs:883:5:884:14 | S3 | +| main.rs:917:13:917:14 | p3 | | main.rs:858:5:864:5 | PairOption | +| main.rs:917:13:917:14 | p3 | Fst | main.rs:880:5:881:14 | S2 | +| main.rs:917:13:917:14 | p3 | Snd | main.rs:883:5:884:14 | S3 | +| main.rs:917:35:917:56 | ...::PairNone(...) | | main.rs:858:5:864:5 | PairOption | +| main.rs:917:35:917:56 | ...::PairNone(...) | Fst | main.rs:880:5:881:14 | S2 | +| main.rs:917:35:917:56 | ...::PairNone(...) | Snd | main.rs:883:5:884:14 | S3 | +| main.rs:918:26:918:27 | p3 | | main.rs:858:5:864:5 | PairOption | +| main.rs:918:26:918:27 | p3 | Fst | main.rs:880:5:881:14 | S2 | +| main.rs:918:26:918:27 | p3 | Snd | main.rs:883:5:884:14 | S3 | +| main.rs:920:11:920:54 | ...::PairSnd(...) | | main.rs:858:5:864:5 | PairOption | +| main.rs:920:11:920:54 | ...::PairSnd(...) | Fst | main.rs:880:5:881:14 | S2 | +| main.rs:920:11:920:54 | ...::PairSnd(...) | Snd | main.rs:858:5:864:5 | PairOption | +| main.rs:920:11:920:54 | ...::PairSnd(...) | Snd.Fst | main.rs:880:5:881:14 | S2 | +| main.rs:920:11:920:54 | ...::PairSnd(...) | Snd.Snd | main.rs:883:5:884:14 | S3 | +| main.rs:920:31:920:53 | ...::PairSnd(...) | | main.rs:858:5:864:5 | PairOption | +| main.rs:920:31:920:53 | ...::PairSnd(...) | Fst | main.rs:880:5:881:14 | S2 | +| main.rs:920:31:920:53 | ...::PairSnd(...) | Snd | main.rs:883:5:884:14 | S3 | +| main.rs:920:51:920:52 | S3 | | main.rs:883:5:884:14 | S3 | +| main.rs:933:16:933:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:933:16:933:24 | SelfParam | &T | main.rs:931:5:938:5 | Self [trait MyTrait] | +| main.rs:933:27:933:31 | value | | main.rs:931:19:931:19 | S | +| main.rs:935:21:935:29 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:935:21:935:29 | SelfParam | &T | main.rs:931:5:938:5 | Self [trait MyTrait] | +| main.rs:935:32:935:36 | value | | main.rs:931:19:931:19 | S | +| main.rs:936:13:936:16 | self | | file://:0:0:0:0 | & | +| main.rs:936:13:936:16 | self | &T | main.rs:931:5:938:5 | Self [trait MyTrait] | +| main.rs:936:22:936:26 | value | | main.rs:931:19:931:19 | S | +| main.rs:942:16:942:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:942:16:942:24 | SelfParam | &T | main.rs:925:5:929:5 | MyOption | +| main.rs:942:16:942:24 | SelfParam | &T.T | main.rs:940:10:940:10 | T | +| main.rs:942:27:942:31 | value | | main.rs:940:10:940:10 | T | +| main.rs:946:26:948:9 | { ... } | | main.rs:925:5:929:5 | MyOption | +| main.rs:946:26:948:9 | { ... } | T | main.rs:945:10:945:10 | T | +| main.rs:947:13:947:30 | ...::MyNone(...) | | main.rs:925:5:929:5 | MyOption | +| main.rs:947:13:947:30 | ...::MyNone(...) | T | main.rs:945:10:945:10 | T | +| main.rs:952:20:952:23 | SelfParam | | main.rs:925:5:929:5 | MyOption | +| main.rs:952:20:952:23 | SelfParam | T | main.rs:925:5:929:5 | MyOption | +| main.rs:952:20:952:23 | SelfParam | T.T | main.rs:951:10:951:10 | T | +| main.rs:952:41:957:9 | { ... } | | main.rs:925:5:929:5 | MyOption | +| main.rs:952:41:957:9 | { ... } | T | main.rs:951:10:951:10 | T | +| main.rs:953:13:956:13 | match self { ... } | | main.rs:925:5:929:5 | MyOption | +| main.rs:953:13:956:13 | match self { ... } | T | main.rs:951:10:951:10 | T | +| main.rs:953:19:953:22 | self | | main.rs:925:5:929:5 | MyOption | +| main.rs:953:19:953:22 | self | T | main.rs:925:5:929:5 | MyOption | +| main.rs:953:19:953:22 | self | T.T | main.rs:951:10:951:10 | T | +| main.rs:954:39:954:56 | ...::MyNone(...) | | main.rs:925:5:929:5 | MyOption | +| main.rs:954:39:954:56 | ...::MyNone(...) | T | main.rs:951:10:951:10 | T | +| main.rs:955:34:955:34 | x | | main.rs:925:5:929:5 | MyOption | +| main.rs:955:34:955:34 | x | T | main.rs:951:10:951:10 | T | +| main.rs:955:40:955:40 | x | | main.rs:925:5:929:5 | MyOption | +| main.rs:955:40:955:40 | x | T | main.rs:951:10:951:10 | T | +| main.rs:964:13:964:14 | x1 | | main.rs:925:5:929:5 | MyOption | +| main.rs:964:18:964:37 | ...::new(...) | | main.rs:925:5:929:5 | MyOption | +| main.rs:965:26:965:27 | x1 | | main.rs:925:5:929:5 | MyOption | +| main.rs:967:13:967:18 | mut x2 | | main.rs:925:5:929:5 | MyOption | +| main.rs:967:13:967:18 | mut x2 | T | main.rs:960:5:961:13 | S | +| main.rs:967:22:967:36 | ...::new(...) | | main.rs:925:5:929:5 | MyOption | +| main.rs:967:22:967:36 | ...::new(...) | T | main.rs:960:5:961:13 | S | +| main.rs:968:9:968:10 | x2 | | main.rs:925:5:929:5 | MyOption | +| main.rs:968:9:968:10 | x2 | T | main.rs:960:5:961:13 | S | +| main.rs:968:16:968:16 | S | | main.rs:960:5:961:13 | S | +| main.rs:969:26:969:27 | x2 | | main.rs:925:5:929:5 | MyOption | +| main.rs:969:26:969:27 | x2 | T | main.rs:960:5:961:13 | S | +| main.rs:971:13:971:18 | mut x3 | | main.rs:925:5:929:5 | MyOption | +| main.rs:971:22:971:36 | ...::new(...) | | main.rs:925:5:929:5 | MyOption | +| main.rs:972:9:972:10 | x3 | | main.rs:925:5:929:5 | MyOption | +| main.rs:972:21:972:21 | S | | main.rs:960:5:961:13 | S | +| main.rs:973:26:973:27 | x3 | | main.rs:925:5:929:5 | MyOption | +| main.rs:975:13:975:18 | mut x4 | | main.rs:925:5:929:5 | MyOption | +| main.rs:975:13:975:18 | mut x4 | T | main.rs:960:5:961:13 | S | +| main.rs:975:22:975:36 | ...::new(...) | | main.rs:925:5:929:5 | MyOption | +| main.rs:975:22:975:36 | ...::new(...) | T | main.rs:960:5:961:13 | S | +| main.rs:976:23:976:29 | &mut x4 | | file://:0:0:0:0 | & | +| main.rs:976:23:976:29 | &mut x4 | &T | main.rs:925:5:929:5 | MyOption | +| main.rs:976:23:976:29 | &mut x4 | &T.T | main.rs:960:5:961:13 | S | +| main.rs:976:28:976:29 | x4 | | main.rs:925:5:929:5 | MyOption | +| main.rs:976:28:976:29 | x4 | T | main.rs:960:5:961:13 | S | +| main.rs:976:32:976:32 | S | | main.rs:960:5:961:13 | S | +| main.rs:977:26:977:27 | x4 | | main.rs:925:5:929:5 | MyOption | +| main.rs:977:26:977:27 | x4 | T | main.rs:960:5:961:13 | S | +| main.rs:979:13:979:14 | x5 | | main.rs:925:5:929:5 | MyOption | +| main.rs:979:13:979:14 | x5 | T | main.rs:925:5:929:5 | MyOption | +| main.rs:979:13:979:14 | x5 | T.T | main.rs:960:5:961:13 | S | +| main.rs:979:18:979:58 | ...::MySome(...) | | main.rs:925:5:929:5 | MyOption | +| main.rs:979:18:979:58 | ...::MySome(...) | T | main.rs:925:5:929:5 | MyOption | +| main.rs:979:18:979:58 | ...::MySome(...) | T.T | main.rs:960:5:961:13 | S | +| main.rs:979:35:979:57 | ...::MyNone(...) | | main.rs:925:5:929:5 | MyOption | +| main.rs:979:35:979:57 | ...::MyNone(...) | T | main.rs:960:5:961:13 | S | +| main.rs:980:26:980:27 | x5 | | main.rs:925:5:929:5 | MyOption | +| main.rs:980:26:980:27 | x5 | T | main.rs:925:5:929:5 | MyOption | +| main.rs:980:26:980:27 | x5 | T.T | main.rs:960:5:961:13 | S | +| main.rs:980:26:980:37 | x5.flatten() | | main.rs:925:5:929:5 | MyOption | +| main.rs:980:26:980:37 | x5.flatten() | T | main.rs:960:5:961:13 | S | +| main.rs:982:13:982:14 | x6 | | main.rs:925:5:929:5 | MyOption | +| main.rs:982:13:982:14 | x6 | T | main.rs:925:5:929:5 | MyOption | +| main.rs:982:13:982:14 | x6 | T.T | main.rs:960:5:961:13 | S | +| main.rs:982:18:982:58 | ...::MySome(...) | | main.rs:925:5:929:5 | MyOption | +| main.rs:982:18:982:58 | ...::MySome(...) | T | main.rs:925:5:929:5 | MyOption | +| main.rs:982:18:982:58 | ...::MySome(...) | T.T | main.rs:960:5:961:13 | S | +| main.rs:982:35:982:57 | ...::MyNone(...) | | main.rs:925:5:929:5 | MyOption | +| main.rs:982:35:982:57 | ...::MyNone(...) | T | main.rs:960:5:961:13 | S | +| main.rs:983:26:983:61 | ...::flatten(...) | | main.rs:925:5:929:5 | MyOption | +| main.rs:983:26:983:61 | ...::flatten(...) | T | main.rs:960:5:961:13 | S | +| main.rs:983:59:983:60 | x6 | | main.rs:925:5:929:5 | MyOption | +| main.rs:983:59:983:60 | x6 | T | main.rs:925:5:929:5 | MyOption | +| main.rs:983:59:983:60 | x6 | T.T | main.rs:960:5:961:13 | S | +| main.rs:985:13:985:19 | from_if | | main.rs:925:5:929:5 | MyOption | +| main.rs:985:13:985:19 | from_if | T | main.rs:960:5:961:13 | S | +| main.rs:985:23:989:9 | if ... {...} else {...} | | main.rs:925:5:929:5 | MyOption | +| main.rs:985:23:989:9 | if ... {...} else {...} | T | main.rs:960:5:961:13 | S | +| main.rs:985:36:987:9 | { ... } | | main.rs:925:5:929:5 | MyOption | +| main.rs:985:36:987:9 | { ... } | T | main.rs:960:5:961:13 | S | +| main.rs:986:13:986:30 | ...::MyNone(...) | | main.rs:925:5:929:5 | MyOption | +| main.rs:986:13:986:30 | ...::MyNone(...) | T | main.rs:960:5:961:13 | S | +| main.rs:987:16:989:9 | { ... } | | main.rs:925:5:929:5 | MyOption | +| main.rs:987:16:989:9 | { ... } | T | main.rs:960:5:961:13 | S | +| main.rs:988:13:988:31 | ...::MySome(...) | | main.rs:925:5:929:5 | MyOption | +| main.rs:988:13:988:31 | ...::MySome(...) | T | main.rs:960:5:961:13 | S | +| main.rs:988:30:988:30 | S | | main.rs:960:5:961:13 | S | +| main.rs:990:26:990:32 | from_if | | main.rs:925:5:929:5 | MyOption | +| main.rs:990:26:990:32 | from_if | T | main.rs:960:5:961:13 | S | +| main.rs:992:13:992:22 | from_match | | main.rs:925:5:929:5 | MyOption | +| main.rs:992:13:992:22 | from_match | T | main.rs:960:5:961:13 | S | +| main.rs:992:26:995:9 | match ... { ... } | | main.rs:925:5:929:5 | MyOption | +| main.rs:992:26:995:9 | match ... { ... } | T | main.rs:960:5:961:13 | S | +| main.rs:993:21:993:38 | ...::MyNone(...) | | main.rs:925:5:929:5 | MyOption | +| main.rs:993:21:993:38 | ...::MyNone(...) | T | main.rs:960:5:961:13 | S | +| main.rs:994:22:994:40 | ...::MySome(...) | | main.rs:925:5:929:5 | MyOption | +| main.rs:994:22:994:40 | ...::MySome(...) | T | main.rs:960:5:961:13 | S | +| main.rs:994:39:994:39 | S | | main.rs:960:5:961:13 | S | +| main.rs:996:26:996:35 | from_match | | main.rs:925:5:929:5 | MyOption | +| main.rs:996:26:996:35 | from_match | T | main.rs:960:5:961:13 | S | +| main.rs:998:13:998:21 | from_loop | | main.rs:925:5:929:5 | MyOption | +| main.rs:998:13:998:21 | from_loop | T | main.rs:960:5:961:13 | S | +| main.rs:998:25:1003:9 | loop { ... } | | main.rs:925:5:929:5 | MyOption | +| main.rs:998:25:1003:9 | loop { ... } | T | main.rs:960:5:961:13 | S | +| main.rs:1000:23:1000:40 | ...::MyNone(...) | | main.rs:925:5:929:5 | MyOption | +| main.rs:1000:23:1000:40 | ...::MyNone(...) | T | main.rs:960:5:961:13 | S | +| main.rs:1002:19:1002:37 | ...::MySome(...) | | main.rs:925:5:929:5 | MyOption | +| main.rs:1002:19:1002:37 | ...::MySome(...) | T | main.rs:960:5:961:13 | S | +| main.rs:1002:36:1002:36 | S | | main.rs:960:5:961:13 | S | +| main.rs:1004:26:1004:34 | from_loop | | main.rs:925:5:929:5 | MyOption | +| main.rs:1004:26:1004:34 | from_loop | T | main.rs:960:5:961:13 | S | +| main.rs:1017:15:1017:18 | SelfParam | | main.rs:1010:5:1011:19 | S | +| main.rs:1017:15:1017:18 | SelfParam | T | main.rs:1016:10:1016:10 | T | +| main.rs:1017:26:1019:9 | { ... } | | main.rs:1016:10:1016:10 | T | +| main.rs:1018:13:1018:16 | self | | main.rs:1010:5:1011:19 | S | +| main.rs:1018:13:1018:16 | self | T | main.rs:1016:10:1016:10 | T | +| main.rs:1018:13:1018:18 | self.0 | | main.rs:1016:10:1016:10 | T | +| main.rs:1021:15:1021:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1021:15:1021:19 | SelfParam | &T | main.rs:1010:5:1011:19 | S | +| main.rs:1021:15:1021:19 | SelfParam | &T.T | main.rs:1016:10:1016:10 | T | +| main.rs:1021:28:1023:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1021:28:1023:9 | { ... } | &T | main.rs:1016:10:1016:10 | T | +| main.rs:1022:13:1022:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1022:13:1022:19 | &... | &T | main.rs:1016:10:1016:10 | T | +| main.rs:1022:14:1022:17 | self | | file://:0:0:0:0 | & | +| main.rs:1022:14:1022:17 | self | &T | main.rs:1010:5:1011:19 | S | +| main.rs:1022:14:1022:17 | self | &T.T | main.rs:1016:10:1016:10 | T | +| main.rs:1022:14:1022:19 | self.0 | | main.rs:1016:10:1016:10 | T | +| main.rs:1025:15:1025:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1025:15:1025:25 | SelfParam | &T | main.rs:1010:5:1011:19 | S | +| main.rs:1025:15:1025:25 | SelfParam | &T.T | main.rs:1016:10:1016:10 | T | +| main.rs:1025:34:1027:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1025:34:1027:9 | { ... } | &T | main.rs:1016:10:1016:10 | T | +| main.rs:1026:13:1026:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1026:13:1026:19 | &... | &T | main.rs:1016:10:1016:10 | T | +| main.rs:1026:14:1026:17 | self | | file://:0:0:0:0 | & | +| main.rs:1026:14:1026:17 | self | &T | main.rs:1010:5:1011:19 | S | +| main.rs:1026:14:1026:17 | self | &T.T | main.rs:1016:10:1016:10 | T | +| main.rs:1026:14:1026:19 | self.0 | | main.rs:1016:10:1016:10 | T | +| main.rs:1031:13:1031:14 | x1 | | main.rs:1010:5:1011:19 | S | +| main.rs:1031:13:1031:14 | x1 | T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1031:18:1031:22 | S(...) | | main.rs:1010:5:1011:19 | S | +| main.rs:1031:18:1031:22 | S(...) | T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1031:20:1031:21 | S2 | | main.rs:1013:5:1014:14 | S2 | +| main.rs:1032:26:1032:27 | x1 | | main.rs:1010:5:1011:19 | S | +| main.rs:1032:26:1032:27 | x1 | T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1032:26:1032:32 | x1.m1() | | main.rs:1013:5:1014:14 | S2 | +| main.rs:1034:13:1034:14 | x2 | | main.rs:1010:5:1011:19 | S | +| main.rs:1034:13:1034:14 | x2 | T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1034:18:1034:22 | S(...) | | main.rs:1010:5:1011:19 | S | +| main.rs:1034:18:1034:22 | S(...) | T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1034:20:1034:21 | S2 | | main.rs:1013:5:1014:14 | S2 | +| main.rs:1036:26:1036:27 | x2 | | main.rs:1010:5:1011:19 | S | +| main.rs:1036:26:1036:27 | x2 | T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1036:26:1036:32 | x2.m2() | | file://:0:0:0:0 | & | +| main.rs:1036:26:1036:32 | x2.m2() | &T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1037:26:1037:27 | x2 | | main.rs:1010:5:1011:19 | S | +| main.rs:1037:26:1037:27 | x2 | T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1037:26:1037:32 | x2.m3() | | file://:0:0:0:0 | & | +| main.rs:1037:26:1037:32 | x2.m3() | &T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1039:13:1039:14 | x3 | | main.rs:1010:5:1011:19 | S | +| main.rs:1039:13:1039:14 | x3 | T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1039:18:1039:22 | S(...) | | main.rs:1010:5:1011:19 | S | +| main.rs:1039:18:1039:22 | S(...) | T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1039:20:1039:21 | S2 | | main.rs:1013:5:1014:14 | S2 | +| main.rs:1041:26:1041:41 | ...::m2(...) | | file://:0:0:0:0 | & | +| main.rs:1041:26:1041:41 | ...::m2(...) | &T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1041:38:1041:40 | &x3 | | file://:0:0:0:0 | & | +| main.rs:1041:38:1041:40 | &x3 | &T | main.rs:1010:5:1011:19 | S | +| main.rs:1041:38:1041:40 | &x3 | &T.T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1041:39:1041:40 | x3 | | main.rs:1010:5:1011:19 | S | +| main.rs:1041:39:1041:40 | x3 | T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1042:26:1042:41 | ...::m3(...) | | file://:0:0:0:0 | & | +| main.rs:1042:26:1042:41 | ...::m3(...) | &T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1042:38:1042:40 | &x3 | | file://:0:0:0:0 | & | +| main.rs:1042:38:1042:40 | &x3 | &T | main.rs:1010:5:1011:19 | S | +| main.rs:1042:38:1042:40 | &x3 | &T.T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1042:39:1042:40 | x3 | | main.rs:1010:5:1011:19 | S | +| main.rs:1042:39:1042:40 | x3 | T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1044:13:1044:14 | x4 | | file://:0:0:0:0 | & | +| main.rs:1044:13:1044:14 | x4 | &T | main.rs:1010:5:1011:19 | S | +| main.rs:1044:13:1044:14 | x4 | &T.T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1044:18:1044:23 | &... | | file://:0:0:0:0 | & | +| main.rs:1044:18:1044:23 | &... | &T | main.rs:1010:5:1011:19 | S | +| main.rs:1044:18:1044:23 | &... | &T.T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1044:19:1044:23 | S(...) | | main.rs:1010:5:1011:19 | S | +| main.rs:1044:19:1044:23 | S(...) | T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1044:21:1044:22 | S2 | | main.rs:1013:5:1014:14 | S2 | +| main.rs:1046:26:1046:27 | x4 | | file://:0:0:0:0 | & | +| main.rs:1046:26:1046:27 | x4 | &T | main.rs:1010:5:1011:19 | S | +| main.rs:1046:26:1046:27 | x4 | &T.T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1046:26:1046:32 | x4.m2() | | file://:0:0:0:0 | & | +| main.rs:1046:26:1046:32 | x4.m2() | &T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1047:26:1047:27 | x4 | | file://:0:0:0:0 | & | +| main.rs:1047:26:1047:27 | x4 | &T | main.rs:1010:5:1011:19 | S | +| main.rs:1047:26:1047:27 | x4 | &T.T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1047:26:1047:32 | x4.m3() | | file://:0:0:0:0 | & | +| main.rs:1047:26:1047:32 | x4.m3() | &T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1049:13:1049:14 | x5 | | file://:0:0:0:0 | & | +| main.rs:1049:13:1049:14 | x5 | &T | main.rs:1010:5:1011:19 | S | +| main.rs:1049:13:1049:14 | x5 | &T.T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1049:18:1049:23 | &... | | file://:0:0:0:0 | & | +| main.rs:1049:18:1049:23 | &... | &T | main.rs:1010:5:1011:19 | S | +| main.rs:1049:18:1049:23 | &... | &T.T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1049:19:1049:23 | S(...) | | main.rs:1010:5:1011:19 | S | +| main.rs:1049:19:1049:23 | S(...) | T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1049:21:1049:22 | S2 | | main.rs:1013:5:1014:14 | S2 | +| main.rs:1051:26:1051:27 | x5 | | file://:0:0:0:0 | & | +| main.rs:1051:26:1051:27 | x5 | &T | main.rs:1010:5:1011:19 | S | +| main.rs:1051:26:1051:27 | x5 | &T.T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1051:26:1051:32 | x5.m1() | | main.rs:1013:5:1014:14 | S2 | +| main.rs:1052:26:1052:27 | x5 | | file://:0:0:0:0 | & | +| main.rs:1052:26:1052:27 | x5 | &T | main.rs:1010:5:1011:19 | S | +| main.rs:1052:26:1052:27 | x5 | &T.T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1052:26:1052:29 | x5.0 | | main.rs:1013:5:1014:14 | S2 | +| main.rs:1054:13:1054:14 | x6 | | file://:0:0:0:0 | & | +| main.rs:1054:13:1054:14 | x6 | &T | main.rs:1010:5:1011:19 | S | +| main.rs:1054:13:1054:14 | x6 | &T.T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1054:18:1054:23 | &... | | file://:0:0:0:0 | & | +| main.rs:1054:18:1054:23 | &... | &T | main.rs:1010:5:1011:19 | S | +| main.rs:1054:18:1054:23 | &... | &T.T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1054:19:1054:23 | S(...) | | main.rs:1010:5:1011:19 | S | +| main.rs:1054:19:1054:23 | S(...) | T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1054:21:1054:22 | S2 | | main.rs:1013:5:1014:14 | S2 | +| main.rs:1056:26:1056:30 | (...) | | main.rs:1010:5:1011:19 | S | +| main.rs:1056:26:1056:30 | (...) | T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1056:26:1056:35 | ... .m1() | | main.rs:1013:5:1014:14 | S2 | +| main.rs:1056:27:1056:29 | * ... | | main.rs:1010:5:1011:19 | S | +| main.rs:1056:27:1056:29 | * ... | T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1056:28:1056:29 | x6 | | file://:0:0:0:0 | & | +| main.rs:1056:28:1056:29 | x6 | &T | main.rs:1010:5:1011:19 | S | +| main.rs:1056:28:1056:29 | x6 | &T.T | main.rs:1013:5:1014:14 | S2 | +| main.rs:1063:16:1063:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1063:16:1063:20 | SelfParam | &T | main.rs:1061:5:1069:5 | Self [trait MyTrait] | +| main.rs:1066:16:1066:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1066:16:1066:20 | SelfParam | &T | main.rs:1061:5:1069:5 | Self [trait MyTrait] | +| main.rs:1066:32:1068:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1066:32:1068:9 | { ... } | &T | main.rs:1061:5:1069:5 | Self [trait MyTrait] | +| main.rs:1067:13:1067:16 | self | | file://:0:0:0:0 | & | +| main.rs:1067:13:1067:16 | self | &T | main.rs:1061:5:1069:5 | Self [trait MyTrait] | +| main.rs:1067:13:1067:22 | self.foo() | | file://:0:0:0:0 | & | +| main.rs:1067:13:1067:22 | self.foo() | &T | main.rs:1061:5:1069:5 | Self [trait MyTrait] | +| main.rs:1075:16:1075:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1075:16:1075:20 | SelfParam | &T | main.rs:1071:5:1071:20 | MyStruct | +| main.rs:1075:36:1077:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1075:36:1077:9 | { ... } | &T | main.rs:1071:5:1071:20 | MyStruct | +| main.rs:1076:13:1076:16 | self | | file://:0:0:0:0 | & | +| main.rs:1076:13:1076:16 | self | &T | main.rs:1071:5:1071:20 | MyStruct | +| main.rs:1081:13:1081:13 | x | | main.rs:1071:5:1071:20 | MyStruct | +| main.rs:1081:17:1081:24 | MyStruct | | main.rs:1071:5:1071:20 | MyStruct | +| main.rs:1082:9:1082:9 | x | | main.rs:1071:5:1071:20 | MyStruct | +| main.rs:1082:9:1082:15 | x.bar() | | file://:0:0:0:0 | & | +| main.rs:1082:9:1082:15 | x.bar() | &T | main.rs:1071:5:1071:20 | MyStruct | +| main.rs:1092:16:1092:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1092:16:1092:20 | SelfParam | &T | main.rs:1089:5:1089:26 | MyStruct | +| main.rs:1092:16:1092:20 | SelfParam | &T.T | main.rs:1091:10:1091:10 | T | +| main.rs:1092:32:1094:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1092:32:1094:9 | { ... } | &T | main.rs:1089:5:1089:26 | MyStruct | +| main.rs:1092:32:1094:9 | { ... } | &T.T | main.rs:1091:10:1091:10 | T | +| main.rs:1093:13:1093:16 | self | | file://:0:0:0:0 | & | +| main.rs:1093:13:1093:16 | self | &T | main.rs:1089:5:1089:26 | MyStruct | +| main.rs:1093:13:1093:16 | self | &T.T | main.rs:1091:10:1091:10 | T | +| main.rs:1098:13:1098:13 | x | | main.rs:1089:5:1089:26 | MyStruct | +| main.rs:1098:13:1098:13 | x | T | main.rs:1087:5:1087:13 | S | +| main.rs:1098:17:1098:27 | MyStruct(...) | | main.rs:1089:5:1089:26 | MyStruct | +| main.rs:1098:17:1098:27 | MyStruct(...) | T | main.rs:1087:5:1087:13 | S | +| main.rs:1098:26:1098:26 | S | | main.rs:1087:5:1087:13 | S | +| main.rs:1099:9:1099:9 | x | | main.rs:1089:5:1089:26 | MyStruct | +| main.rs:1099:9:1099:9 | x | T | main.rs:1087:5:1087:13 | S | +| main.rs:1099:9:1099:15 | x.foo() | | file://:0:0:0:0 | & | +| main.rs:1099:9:1099:15 | x.foo() | &T | main.rs:1089:5:1089:26 | MyStruct | +| main.rs:1099:9:1099:15 | x.foo() | &T.T | main.rs:1087:5:1087:13 | S | +| main.rs:1107:15:1107:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1107:15:1107:19 | SelfParam | &T | main.rs:1104:5:1104:13 | S | +| main.rs:1107:31:1109:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1107:31:1109:9 | { ... } | &T | main.rs:1104:5:1104:13 | S | +| main.rs:1108:13:1108:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1108:13:1108:19 | &... | &T | main.rs:1104:5:1104:13 | S | +| main.rs:1108:14:1108:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1108:14:1108:19 | &... | &T | main.rs:1104:5:1104:13 | S | +| main.rs:1108:15:1108:19 | &self | | file://:0:0:0:0 | & | +| main.rs:1108:15:1108:19 | &self | &T | main.rs:1104:5:1104:13 | S | +| main.rs:1108:16:1108:19 | self | | file://:0:0:0:0 | & | +| main.rs:1108:16:1108:19 | self | &T | main.rs:1104:5:1104:13 | S | +| main.rs:1111:15:1111:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1111:15:1111:25 | SelfParam | &T | main.rs:1104:5:1104:13 | S | +| main.rs:1111:37:1113:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1111:37:1113:9 | { ... } | &T | main.rs:1104:5:1104:13 | S | +| main.rs:1112:13:1112:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1112:13:1112:19 | &... | &T | main.rs:1104:5:1104:13 | S | +| main.rs:1112:14:1112:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1112:14:1112:19 | &... | &T | main.rs:1104:5:1104:13 | S | +| main.rs:1112:15:1112:19 | &self | | file://:0:0:0:0 | & | +| main.rs:1112:15:1112:19 | &self | &T | main.rs:1104:5:1104:13 | S | +| main.rs:1112:16:1112:19 | self | | file://:0:0:0:0 | & | +| main.rs:1112:16:1112:19 | self | &T | main.rs:1104:5:1104:13 | S | +| main.rs:1115:15:1115:15 | x | | file://:0:0:0:0 | & | +| main.rs:1115:15:1115:15 | x | &T | main.rs:1104:5:1104:13 | S | +| main.rs:1115:34:1117:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1115:34:1117:9 | { ... } | &T | main.rs:1104:5:1104:13 | S | +| main.rs:1116:13:1116:13 | x | | file://:0:0:0:0 | & | +| main.rs:1116:13:1116:13 | x | &T | main.rs:1104:5:1104:13 | S | +| main.rs:1119:15:1119:15 | x | | file://:0:0:0:0 | & | +| main.rs:1119:15:1119:15 | x | &T | main.rs:1104:5:1104:13 | S | +| main.rs:1119:34:1121:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1119:34:1121:9 | { ... } | &T | main.rs:1104:5:1104:13 | S | +| main.rs:1120:13:1120:16 | &... | | file://:0:0:0:0 | & | +| main.rs:1120:13:1120:16 | &... | &T | main.rs:1104:5:1104:13 | S | +| main.rs:1120:14:1120:16 | &... | | file://:0:0:0:0 | & | +| main.rs:1120:14:1120:16 | &... | &T | main.rs:1104:5:1104:13 | S | +| main.rs:1120:15:1120:16 | &x | | file://:0:0:0:0 | & | +| main.rs:1120:15:1120:16 | &x | &T | main.rs:1104:5:1104:13 | S | +| main.rs:1120:16:1120:16 | x | | file://:0:0:0:0 | & | +| main.rs:1120:16:1120:16 | x | &T | main.rs:1104:5:1104:13 | S | +| main.rs:1125:13:1125:13 | x | | main.rs:1104:5:1104:13 | S | +| main.rs:1125:17:1125:20 | S {...} | | main.rs:1104:5:1104:13 | S | +| main.rs:1126:9:1126:9 | x | | main.rs:1104:5:1104:13 | S | +| main.rs:1126:9:1126:14 | x.f1() | | file://:0:0:0:0 | & | +| main.rs:1126:9:1126:14 | x.f1() | &T | main.rs:1104:5:1104:13 | S | +| main.rs:1127:9:1127:9 | x | | main.rs:1104:5:1104:13 | S | +| main.rs:1127:9:1127:14 | x.f2() | | file://:0:0:0:0 | & | +| main.rs:1127:9:1127:14 | x.f2() | &T | main.rs:1104:5:1104:13 | S | +| main.rs:1128:9:1128:17 | ...::f3(...) | | file://:0:0:0:0 | & | +| main.rs:1128:9:1128:17 | ...::f3(...) | &T | main.rs:1104:5:1104:13 | S | +| main.rs:1128:15:1128:16 | &x | | file://:0:0:0:0 | & | +| main.rs:1128:15:1128:16 | &x | &T | main.rs:1104:5:1104:13 | S | +| main.rs:1128:16:1128:16 | x | | main.rs:1104:5:1104:13 | S | +| main.rs:1134:5:1134:20 | ...::f(...) | | main.rs:67:5:67:21 | Foo | +| main.rs:1135:5:1135:60 | ...::g(...) | | main.rs:67:5:67:21 | Foo | +| main.rs:1135:20:1135:38 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | +| main.rs:1135:41:1135:59 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | From 4a9841d47d12a3ca37d3ab514f813a1f3a66fd71 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Tue, 29 Apr 2025 13:26:55 +0200 Subject: [PATCH 4/6] Rust: Handle inherent implementations shadowing trait implementations --- .../elements/internal/MethodCallExprImpl.qll | 28 +++++++++++++------ .../codeql/rust/internal/TypeInference.qll | 19 +++++++++++-- .../PathResolutionConsistency.expected | 5 ---- .../test/library-tests/type-inference/main.rs | 2 +- 4 files changed, 37 insertions(+), 17 deletions(-) delete mode 100644 rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected diff --git a/rust/ql/lib/codeql/rust/elements/internal/MethodCallExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MethodCallExprImpl.qll index fb7bcfbdaa4e..8db2bb81dff5 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MethodCallExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MethodCallExprImpl.qll @@ -14,7 +14,13 @@ private import codeql.rust.internal.TypeInference * be referenced directly. */ module Impl { - private predicate isImplFunction(Function f) { f = any(ImplItemNode impl).getAnAssocItem() } + private predicate isInherentImplFunction(Function f) { + f = any(Impl impl | not impl.hasTrait()).(ImplItemNode).getAnAssocItem() + } + + private predicate isTraitImplFunction(Function f) { + f = any(Impl impl | impl.hasTrait()).(ImplItemNode).getAnAssocItem() + } // the following QLdoc is generated: if you need to edit it, do it in the schema file /** @@ -28,16 +34,22 @@ module Impl { override Function getStaticTarget() { result = resolveMethodCallExpr(this) and ( - // prioritize `impl` methods first - isImplFunction(result) + // prioritize inherent implementation methods first + isInherentImplFunction(result) or - not isImplFunction(resolveMethodCallExpr(this)) and + not isInherentImplFunction(resolveMethodCallExpr(this)) and ( - // then trait methods with default implementations - result.hasBody() + // then trait implementation methods + isTraitImplFunction(result) or - // and finally trait methods without default implementations - not resolveMethodCallExpr(this).hasBody() + not isTraitImplFunction(resolveMethodCallExpr(this)) and + ( + // then trait methods with default implementations + result.hasBody() + or + // and finally trait methods without default implementations + not resolveMethodCallExpr(this).hasBody() + ) ) ) } diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index c346aedcc178..f7f3a33a2d24 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -958,14 +958,27 @@ private module Cached { string getField() { result = mce.getIdentifier().getText() } + int getNumberOfArgs() { result = mce.getArgList().getNumberOfArgs() } + Type resolveTypeAt(TypePath path) { result = inferReceiverType(this, path) } } + /** Holds if a method for `type` with the name `name` and the arity `arity` exists in `impl`. */ + pragma[nomagic] + private predicate methodCandidate(Type type, string name, int arity, Impl impl) { + type = impl.(ImplTypeAbstraction).getSelfTy().(TypeReprMention).resolveType() and + exists(Function f | + f = impl.(ImplItemNode).getASuccessor(name) and + f.getParamList().hasSelfParam() and + arity = f.getParamList().getNumberOfParams() + ) + } + private module IsInstantiationOfInput implements IsInstantiationOfSig { predicate potentialInstantiationOf(ReceiverExpr receiver, TypeAbstraction impl, TypeMention sub) { - sub.resolveType() = receiver.resolveTypeAt(TypePath::nil()) and - sub = impl.(ImplTypeAbstraction).getSelfTy().(TypeReprMention) and - exists(impl.(ImplItemNode).getASuccessor(receiver.getField())) + methodCandidate(receiver.resolveTypeAt(TypePath::nil()), receiver.getField(), + receiver.getNumberOfArgs(), impl) and + sub = impl.(ImplTypeAbstraction).getSelfTy() } } diff --git a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index a16a01ba2e9e..000000000000 --- a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,5 +0,0 @@ -multipleMethodCallTargets -| main.rs:401:26:401:42 | x.common_method() | main.rs:376:9:379:9 | fn common_method | -| main.rs:401:26:401:42 | x.common_method() | main.rs:388:9:391:9 | fn common_method | -| main.rs:402:26:402:44 | x.common_method_2() | main.rs:381:9:384:9 | fn common_method_2 | -| main.rs:402:26:402:44 | x.common_method_2() | main.rs:393:9:396:9 | fn common_method_2 | diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index 6b093174f8be..800b89df8593 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -399,7 +399,7 @@ mod impl_overlap { pub fn f() { let x = S1; println!("{:?}", x.common_method()); // $ method=S1::common_method SPURIOUS: method=::common_method - println!("{:?}", x.common_method_2()); // $ method=S1::common_method_2 SPURIOUS: method=::common_method_2 + println!("{:?}", x.common_method_2()); // $ method=S1::common_method_2 } } From d498eb0c2f31f0f1728253d1531fc465631e9998 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Tue, 29 Apr 2025 14:00:45 +0200 Subject: [PATCH 5/6] Rust: Accept test changes --- .../CONSISTENCY/PathResolutionConsistency.expected | 3 --- .../CONSISTENCY/PathResolutionConsistency.expected | 3 --- rust/ql/test/library-tests/path-resolution/main.rs | 4 ++-- 3 files changed, 2 insertions(+), 8 deletions(-) delete mode 100644 rust/ql/test/extractor-tests/canonical_path/CONSISTENCY/PathResolutionConsistency.expected delete mode 100644 rust/ql/test/extractor-tests/canonical_path_disabled/CONSISTENCY/PathResolutionConsistency.expected diff --git a/rust/ql/test/extractor-tests/canonical_path/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/extractor-tests/canonical_path/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index fbc771e88519..000000000000 --- a/rust/ql/test/extractor-tests/canonical_path/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,3 +0,0 @@ -multipleMethodCallTargets -| regular.rs:29:5:29:9 | s.g() | anonymous.rs:15:9:15:22 | fn g | -| regular.rs:29:5:29:9 | s.g() | regular.rs:13:5:13:18 | fn g | diff --git a/rust/ql/test/extractor-tests/canonical_path_disabled/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/extractor-tests/canonical_path_disabled/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index 849d19acbf0e..000000000000 --- a/rust/ql/test/extractor-tests/canonical_path_disabled/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,3 +0,0 @@ -multipleMethodCallTargets -| regular.rs:32:5:32:9 | s.g() | anonymous.rs:18:9:18:22 | fn g | -| regular.rs:32:5:32:9 | s.g() | regular.rs:16:5:16:18 | fn g | diff --git a/rust/ql/test/library-tests/path-resolution/main.rs b/rust/ql/test/library-tests/path-resolution/main.rs index 1179f2f7b589..eb0ef06f6e9a 100644 --- a/rust/ql/test/library-tests/path-resolution/main.rs +++ b/rust/ql/test/library-tests/path-resolution/main.rs @@ -606,8 +606,8 @@ mod m24 { let impl_obj = Implementor; // $ item=I118 let generic = GenericStruct { data: impl_obj }; // $ item=I115 - generic.call_trait_a(); // $ MISSING: item=I116 - generic.call_both(); // $ MISSING: item=I117 + generic.call_trait_a(); // $ item=I116 + generic.call_both(); // $ item=I117 // Access through where clause type parameter constraint GenericStruct::::call_trait_a(&generic); // $ item=I116 item=I118 From 069902888b3b64e02e23309c68ddf0dce939c6c3 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Tue, 29 Apr 2025 17:10:52 +0200 Subject: [PATCH 6/6] Rust: Handle functions in dependencies not having parameters --- .../codeql/rust/internal/TypeInference.qll | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index f7f3a33a2d24..d4d41d6b8163 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -965,20 +965,25 @@ private module Cached { /** Holds if a method for `type` with the name `name` and the arity `arity` exists in `impl`. */ pragma[nomagic] - private predicate methodCandidate(Type type, string name, int arity, Impl impl) { + private predicate methodCandidate(Type type, string name, Impl impl, Function f) { type = impl.(ImplTypeAbstraction).getSelfTy().(TypeReprMention).resolveType() and - exists(Function f | - f = impl.(ImplItemNode).getASuccessor(name) and - f.getParamList().hasSelfParam() and - arity = f.getParamList().getNumberOfParams() - ) + f = impl.(ImplItemNode).getASuccessor(name) } private module IsInstantiationOfInput implements IsInstantiationOfSig { predicate potentialInstantiationOf(ReceiverExpr receiver, TypeAbstraction impl, TypeMention sub) { - methodCandidate(receiver.resolveTypeAt(TypePath::nil()), receiver.getField(), - receiver.getNumberOfArgs(), impl) and - sub = impl.(ImplTypeAbstraction).getSelfTy() + exists(Function method | + methodCandidate(receiver.resolveTypeAt(TypePath::nil()), receiver.getField(), impl, method) and + ( + method.getParamList().getNumberOfParams() = receiver.getNumberOfArgs() and + method.getParamList().hasSelfParam() + or + // TODO: Once parameter lists for functions in dependencies are + // extracted correctly we should check arity for those as well. + not method.fromSource() + ) and + sub = impl.(ImplTypeAbstraction).getSelfTy() + ) } }