From 72d02fd07119069b5726ac14134f685b499c69b1 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 18 Aug 2025 11:37:38 +0200 Subject: [PATCH 1/7] Rust: Add more type inference tests --- .../PathResolutionConsistency.expected | 17 +- .../type-inference/blanket_impl.rs | 71 +- .../type-inference/dereference.rs | 90 + .../type-inference/invalid/main.rs | 93 + .../{loop => invalid}/options.yml | 0 .../library-tests/type-inference/loop/main.rs | 14 - .../test/library-tests/type-inference/main.rs | 133 +- .../type-inference/type-inference.expected | 8428 +++++++++-------- 8 files changed, 4827 insertions(+), 4019 deletions(-) create mode 100644 rust/ql/test/library-tests/type-inference/invalid/main.rs rename rust/ql/test/library-tests/type-inference/{loop => invalid}/options.yml (100%) delete mode 100644 rust/ql/test/library-tests/type-inference/loop/main.rs diff --git a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected index d2aa2f396c73..6e687e06e423 100644 --- a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected @@ -1,8 +1,11 @@ multipleCallTargets -| dereference.rs:61:15:61:24 | e1.deref() | -| main.rs:2357:13:2357:31 | ...::from(...) | -| main.rs:2358:13:2358:31 | ...::from(...) | -| main.rs:2359:13:2359:31 | ...::from(...) | -| main.rs:2365:13:2365:31 | ...::from(...) | -| main.rs:2366:13:2366:31 | ...::from(...) | -| main.rs:2367:13:2367:31 | ...::from(...) | +| dereference.rs:69:15:69:24 | e1.deref() | +| dereference.rs:186:17:186:25 | S.bar(...) | +| dereference.rs:187:17:187:29 | S.bar(...) | +| invalid/main.rs:91:17:91:30 | S1.duplicate() | +| main.rs:2437:13:2437:31 | ...::from(...) | +| main.rs:2438:13:2438:31 | ...::from(...) | +| main.rs:2439:13:2439:31 | ...::from(...) | +| main.rs:2445:13:2445:31 | ...::from(...) | +| main.rs:2446:13:2446:31 | ...::from(...) | +| main.rs:2447:13:2447:31 | ...::from(...) | diff --git a/rust/ql/test/library-tests/type-inference/blanket_impl.rs b/rust/ql/test/library-tests/type-inference/blanket_impl.rs index aa642854268c..f4e91152d5e2 100644 --- a/rust/ql/test/library-tests/type-inference/blanket_impl.rs +++ b/rust/ql/test/library-tests/type-inference/blanket_impl.rs @@ -1,9 +1,22 @@ // Tests for method resolution targeting blanket trait implementations mod basic_blanket_impl { + use std::ops::Deref; + #[derive(Debug, Copy, Clone)] struct S1; + #[derive(Debug, Copy, Clone)] + struct S2; + + impl Deref for S2 { + type Target = S1; + + fn deref(&self) -> &Self::Target { + &S1 + } + } + trait Clone1 { fn clone1(&self) -> Self; } @@ -21,7 +34,7 @@ mod basic_blanket_impl { } } - // Blanket implementation for all types that implement Display and Clone + // Blanket implementation for all types that implement Clone1 impl Duplicatable for T { // Clone1duplicate fn duplicate(&self) -> Self { @@ -30,10 +43,58 @@ mod basic_blanket_impl { } pub fn test_basic_blanket() { - let x = S1.clone1(); // $ target=S1::clone1 - println!("{x:?}"); - let y = S1.duplicate(); // $ target=Clone1duplicate - println!("{y:?}"); + let x1 = S1.clone1(); // $ target=S1::clone1 + println!("{x1:?}"); + let x2 = (&S1).clone1(); // $ target=S1::clone1 + println!("{x2:?}"); + let x3 = S1.duplicate(); // $ target=Clone1duplicate + println!("{x3:?}"); + let x4 = (&S1).duplicate(); // $ target=Clone1duplicate + println!("{x4:?}"); + let x5 = S1::duplicate(&S1); // $ MISSING: target=Clone1duplicate + println!("{x5:?}"); + let x6 = S2.duplicate(); // $ MISSING: target=Clone1duplicate + println!("{x6:?}"); + let x7 = (&S2).duplicate(); // $ MISSING: target=Clone1duplicate + println!("{x7:?}"); + } +} + +mod assoc_blanket_impl { + #[derive(Debug, Copy, Clone)] + struct S1; + + trait Trait1 { + fn assoc_func1(x: i64, y: Self) -> Self; + } + + trait Trait2 { + fn assoc_func2(x: i64, y: Self) -> Self; + } + + impl Trait1 for S1 { + // S1::assoc_func1 + fn assoc_func1(x: i64, y: Self) -> Self { + y + } + } + + impl Trait2 for T { + // Blanket_assoc_func2 + fn assoc_func2(x: i64, y: Self) -> Self { + T::assoc_func1(x, y) // $ target=assoc_func1 + } + } + + pub fn test_assoc_blanket() { + let x1 = S1::assoc_func1(1, S1); // $ target=S1::assoc_func1 + println!("{x1:?}"); + let x2 = Trait1::assoc_func1(1, S1); // $ target=S1::assoc_func1 + println!("{x2:?}"); + let x3 = S1::assoc_func2(1, S1); // $ MISSING: target=Blanket_assoc_func2 + println!("{x3:?}"); + let x4 = Trait2::assoc_func2(1, S1); // $ target=Blanket_assoc_func2 + println!("{x4:?}"); } } diff --git a/rust/ql/test/library-tests/type-inference/dereference.rs b/rust/ql/test/library-tests/type-inference/dereference.rs index f4d9d68a0995..6e57fc20c19a 100644 --- a/rust/ql/test/library-tests/type-inference/dereference.rs +++ b/rust/ql/test/library-tests/type-inference/dereference.rs @@ -27,6 +27,14 @@ impl Deref for MySmartPointer { } } +struct S(T); + +impl S { + fn foo(&self) -> &T { + &self.0 // $ fieldof=S + } +} + fn explicit_monomorphic_dereference() { // Dereference with method call let a1 = MyIntPointer { value: 34i64 }; @@ -91,6 +99,9 @@ fn implicit_dereference() { // Call method on implicitly dereferenced value let x = MySmartPointer { value: 34i64 }; let _y = x.is_positive(); // $ MISSING: target=is_positive type=_y:bool + + let z = MySmartPointer { value: S(0i64) }; + let z_ = z.foo(); // $ MISSING: target=foo type=z_:&T.i64 } mod implicit_deref_coercion_cycle { @@ -128,6 +139,83 @@ mod implicit_deref_coercion_cycle { } } +mod ref_vs_mut_ref { + trait MyTrait1 { + fn foo(self) -> T; + } + + struct S; + + impl MyTrait1 for &S { + // MyTrait1::foo1 + fn foo(self) -> S { + S + } + } + + impl MyTrait1 for &mut S { + // MyTrait1::foo2 + fn foo(self) -> i64 { + 42 + } + } + + trait MyTrait2 { + fn bar(self, arg: T1) -> T2; + } + + impl MyTrait2<&S, S> for S { + // MyTrait2::bar1 + fn bar(self, arg: &S) -> S { + S + } + } + + impl MyTrait2<&mut S, i64> for S { + // MyTrait2::bar2 + fn bar(self, arg: &mut S) -> i64 { + 42 + } + } + + pub fn test() { + let x = (&S).foo(); // $ MISSING: target=MyTrait1::foo1 type=x:S + let y = S.foo(); // $ MISSING: target=MyTrait1::foo1 type=y:S + let z = (&mut S).foo(); // $ MISSING: target=MyTrait1::foo2 type=z:i64 + + let x = S.bar(&S); // $ target=MyTrait2::bar1 type=x:S $ SPURIOUS: target=MyTrait2::bar2 + let y = S.bar(&mut S); // $ target=MyTrait2::bar2 type=y:i64 $ SPURIOUS: target=MyTrait2::bar1 + } +} + +// from https://doc.rust-lang.org/reference/expressions/method-call-expr.html#r-expr.method.candidate-search +mod rust_reference_example { + struct Foo {} + + trait Bar { + fn bar(&self); + } + + impl Foo { + // bar1 + fn bar(&mut self) { + println!("In struct impl!") + } + } + + impl Bar for Foo { + // bar2 + fn bar(&self) { + println!("In trait impl!") + } + } + + pub fn main() { + let mut f = Foo {}; + f.bar(); // $ SPURIOUS: target=bar1 $ MISSING: target=bar2 + } +} + pub fn test() { explicit_monomorphic_dereference(); // $ target=explicit_monomorphic_dereference explicit_polymorphic_dereference(); // $ target=explicit_polymorphic_dereference @@ -135,4 +223,6 @@ pub fn test() { explicit_box_dereference(); // $ target=explicit_box_dereference implicit_dereference(); // $ target=implicit_dereference implicit_deref_coercion_cycle::test(); // $ target=test + ref_vs_mut_ref::test(); // $ target=test + rust_reference_example::main(); // $ target=main } diff --git a/rust/ql/test/library-tests/type-inference/invalid/main.rs b/rust/ql/test/library-tests/type-inference/invalid/main.rs new file mode 100644 index 000000000000..83bd031d1716 --- /dev/null +++ b/rust/ql/test/library-tests/type-inference/invalid/main.rs @@ -0,0 +1,93 @@ +// The code in this file is not valid Rust code + +// test that our type inference implementation does not run into an infinite loop. +mod type_loop { + struct S(T); + + trait T1: T2> { + fn foo(self) {} + } + + trait T2: T1> { + fn bar(self) { + self.foo() // $ target=foo + } + } +} + +mod op_blanket_impl { + use std::ops::Add; + + #[derive(Debug, Copy, Clone)] + struct Num(i32); + + trait AddAlias { + fn add_alias(self, other: Self) -> Self; + } + + impl AddAlias for Num { + fn add_alias(self, other: Self) -> Self { + Num(self.0 + other.0) // $ fieldof=Num $ target=add + } + } + + // this is not valid in Rust, because of coherence + impl Add for T { + type Output = Self; + + // BlanketAdd + fn add(self, other: Self) -> Self { + self.add_alias(other) // $ target=add_alias + } + } + + pub fn test_op_blanket() { + let a = Num(5); + let b = Num(10); + let c = a + b; // $ target=BlanketAdd + println!("{c:?}"); + } +} + +mod impl_specialization { + #[derive(Debug, Copy, Clone)] + struct S1; + + trait Clone1 { + fn clone1(&self) -> Self; + } + + trait Duplicatable { + fn duplicate(&self) -> Self + where + Self: Sized; + } + + impl Clone1 for S1 { + // S1::clone1 + fn clone1(&self) -> Self { + *self // $ target=deref + } + } + + impl Duplicatable for S1 { + // S1::duplicate + fn duplicate(&self) -> Self { + *self // $ target=deref + } + } + + // Blanket implementation for all types that implement Clone1 + impl Duplicatable for T { + // Clone1duplicate + fn duplicate(&self) -> Self { + self.clone1() // $ target=clone1 + } + } + + pub fn test_basic_blanket() { + // this call should target the specialized implementation of Duplicatable for S1, + // not the blanket implementation + let x = S1.duplicate(); // $ target=S1::duplicate $ SPURIOUS: target=Clone1duplicate + } +} diff --git a/rust/ql/test/library-tests/type-inference/loop/options.yml b/rust/ql/test/library-tests/type-inference/invalid/options.yml similarity index 100% rename from rust/ql/test/library-tests/type-inference/loop/options.yml rename to rust/ql/test/library-tests/type-inference/invalid/options.yml diff --git a/rust/ql/test/library-tests/type-inference/loop/main.rs b/rust/ql/test/library-tests/type-inference/loop/main.rs deleted file mode 100644 index 103b1a5cab05..000000000000 --- a/rust/ql/test/library-tests/type-inference/loop/main.rs +++ /dev/null @@ -1,14 +0,0 @@ -// The code in this file is not valid Rust code, but it is used to test that -// our type inference implementation does not run into an infinite loop. - -struct S(T); - -trait T1: T2> { - fn foo(self) {} -} - -trait T2: T1> { - fn bar(self) { - self.foo() // $ target=foo - } -} diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index 107a133fa222..20b8a2d1b34a 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -538,16 +538,22 @@ mod impl_overlap { pub fn f() { let x = S1; println!("{:?}", x.common_method()); // $ target=S1::common_method + println!("{:?}", S1::common_method(x)); // $ target=S1::common_method println!("{:?}", x.common_method_2()); // $ target=S1::common_method_2 + println!("{:?}", S1::common_method_2(x)); // $ target=S1::common_method_2 let y = S2(S1); println!("{:?}", y.common_method()); // $ target=_as_OverlappingTrait>::common_method + println!("{:?}", S2::::common_method(S2(S1))); // $ target=_as_OverlappingTrait>::common_method let z = S2(0); println!("{:?}", z.common_method()); // $ target=S2::common_method + println!("{:?}", S2::common_method(S2(0))); // $ target=S2::common_method + println!("{:?}", S2::::common_method(S2(0))); // $ target=S2::common_method let w = S3(S1); println!("{:?}", w.m(x)); // $ target=S3::m + println!("{:?}", S3::m(&w, x)); // $ target=S3::m } } @@ -647,14 +653,14 @@ mod type_parameter_bounds { } mod function_trait_bounds { - #[derive(Debug)] + #[derive(Debug, Clone, Copy)] struct MyThing { a: T, } - #[derive(Debug)] + #[derive(Debug, Clone, Copy)] struct S1; - #[derive(Debug)] + #[derive(Debug, Clone, Copy)] struct S2; trait MyTrait { @@ -666,12 +672,35 @@ mod function_trait_bounds { { self.m1() // $ target=m1 } + + fn assoc(x: Self) -> A; } // Type parameter with bound occurs in the root of a parameter type. - fn call_trait_m1>(x: T2) -> T1 { - x.m1() // $ target=m1 type=x.m1():T1 + fn call_trait_m1 + Copy>(x: T2) -> T1 { + x.m1(); // $ target=m1 type=x.m1():T1 + x.m1() // $ target=m1 + } + fn call_trait_m1_2 + Copy>(x: T2) -> T1 { + let y = T2::m1(x); // $ target=m1 + y; // $ type=y:T1 + T2::m1(x) // $ target=m1 + } + fn call_trait_m1_3 + Copy>(x: T2) -> T1 { + let y = MyTrait::m1(x); // $ target=m1 + y; // $ type=y:T1 + MyTrait::m1(x) // $ target=m1 + } + fn call_trait_assoc_1 + Copy>(x: T2) -> T1 { + let y = T2::assoc(x); // $ target=assoc + y; // $ type=y:T1 + T2::assoc(x) // $ target=assoc + } + fn call_trait_assoc_2 + Copy>(x: T2) -> T1 { + let y = MyTrait::assoc(x); // $ MISSING: target=assoc + y; // $ MISSING: type=y:T1 + MyTrait::assoc(x) // $ MISSING: target=assoc } // Type parameter with bound occurs nested within another type. @@ -679,11 +708,21 @@ mod function_trait_bounds { fn call_trait_thing_m1>(x: MyThing) -> T1 { x.a.m1() // $ fieldof=MyThing target=m1 } + fn call_trait_thing_m1_2>(x: MyThing) -> T1 { + T2::m1(x.a) // $ fieldof=MyThing target=m1 + } + fn call_trait_thing_m1_3>(x: MyThing) -> T1 { + MyTrait::m1(x.a) // $ fieldof=MyThing target=m1 + } impl MyTrait for MyThing { fn m1(self) -> T { self.a // $ fieldof=MyThing } + + fn assoc(x: Self) -> T { + x.a // $ fieldof=MyThing + } } pub fn f() { @@ -702,8 +741,26 @@ mod function_trait_bounds { let x2 = MyThing { a: S1 }; let y2 = MyThing { a: S2 }; - println!("{:?}", call_trait_m1(x2)); // $ target=call_trait_m1 - println!("{:?}", call_trait_m1(y2)); // $ target=call_trait_m1 + let a = call_trait_m1(x2); // $ type=a:S1 target=call_trait_m1 + println!("{:?}", a); + let a = call_trait_m1_2(x2); // $ type=a:S1 target=call_trait_m1_2 + println!("{:?}", a); + let a = call_trait_m1_3(x2); // $ type=a:S1 target=call_trait_m1_3 + println!("{:?}", a); + let a = call_trait_m1(y2); // $ type=a:S2 target=call_trait_m1 + println!("{:?}", a); + let a = call_trait_m1_2(y2); // $ type=a:S2 target=call_trait_m1_2 + println!("{:?}", a); + let a = call_trait_m1_3(y2); // $ type=a:S2 target=call_trait_m1_3 + println!("{:?}", a); + let a = call_trait_assoc_1(x2); // $ type=a:S1 target=call_trait_assoc_1 + println!("{:?}", a); + let a = call_trait_assoc_2(x2); // $ type=a:S1 target=call_trait_assoc_2 + println!("{:?}", a); + let a = call_trait_assoc_1(y2); // $ type=a:S2 target=call_trait_assoc_1 + println!("{:?}", a); + let a = call_trait_assoc_2(y2); // $ type=a:S2 target=call_trait_assoc_2 + println!("{:?}", a); let x3 = MyThing { a: MyThing { a: S1 }, @@ -714,8 +771,16 @@ mod function_trait_bounds { let a = call_trait_thing_m1(x3); // $ type=a:S1 target=call_trait_thing_m1 println!("{:?}", a); + let a = call_trait_thing_m1_2(x3); // $ type=a:S1 target=call_trait_thing_m1_2 + println!("{:?}", a); + let a = call_trait_thing_m1_3(x3); // $ type=a:S1 target=call_trait_thing_m1_3 + println!("{:?}", a); let b = call_trait_thing_m1(y3); // $ type=b:S2 target=call_trait_thing_m1 println!("{:?}", b); + let b = call_trait_thing_m1_2(y3); // $ type=b:S2 target=call_trait_thing_m1_2 + println!("{:?}", b); + let b = call_trait_thing_m1_3(y3); // $ type=b:S2 target=call_trait_thing_m1_3 + println!("{:?}", b); } } @@ -958,19 +1023,19 @@ mod generic_enum { } mod method_supertraits { - #[derive(Debug)] + #[derive(Debug, Clone, Copy)] struct MyThing { a: A, } - #[derive(Debug)] + #[derive(Debug, Clone, Copy)] struct MyThing2 { a: A, } - #[derive(Debug)] + #[derive(Debug, Clone, Copy)] struct S1; - #[derive(Debug)] + #[derive(Debug, Clone, Copy)] struct S2; trait MyTrait1 { @@ -978,16 +1043,16 @@ mod method_supertraits { fn m1(self) -> Tr1; } - trait MyTrait2: MyTrait1 { + trait MyTrait2: MyTrait1 + Copy { #[rustfmt::skip] - fn m2(self) -> Tr2 + fn m2(&self) -> Tr2 where Self: Sized, { if 3 > 2 { // $ target=gt self.m1() // $ target=MyTrait1::m1 } else { - Self::m1(self) // $ target=MyTrait1::m1 + Self::m1(*self) // $ target=deref target=MyTrait1::m1 } } } @@ -1001,7 +1066,7 @@ mod method_supertraits { if 3 > 2 { // $ target=gt self.m2().a // $ target=m2 $ fieldof=MyThing } else { - Self::m2(self).a // $ target=m2 fieldof=MyThing + Self::m2(&self).a // $ target=m2 fieldof=MyThing } } } @@ -1013,7 +1078,7 @@ mod method_supertraits { } } - impl MyTrait2 for MyThing {} + impl MyTrait2 for MyThing {} impl MyTrait1> for MyThing2 { // MyThing2::m1 @@ -1022,9 +1087,9 @@ mod method_supertraits { } } - impl MyTrait2> for MyThing2 {} + impl MyTrait2> for MyThing2 {} - impl MyTrait3 for MyThing2 {} + impl MyTrait3 for MyThing2 {} fn call_trait_m1>(x: T2) -> T1 { x.m1() // $ target=MyTrait1::m1 @@ -1819,6 +1884,11 @@ mod overloadable_operators { self.x >= other.x && self.y >= other.y // $ fieldof=Vec2 target=ge } } + + fn param_add(a: T, b: T) -> T::Output { + a + b // $ target=add + } + pub fn f() { // Test for all overloadable operators on `i64` @@ -1836,6 +1906,7 @@ mod overloadable_operators { let i64_mul = 17i64 * 18i64; // $ type=i64_mul:i64 target=mul let i64_div = 19i64 / 20i64; // $ type=i64_div:i64 target=div let i64_rem = 21i64 % 22i64; // $ type=i64_rem:i64 target=rem + let i64_param_add = param_add(1i64, 2i64); // $ target=param_add $ MISSING: type=i64_param_add:i64 // Arithmetic assignment operators let mut i64_add_assign = 23i64; @@ -2083,7 +2154,7 @@ mod impl_trait { mod indexers { use std::ops::Index; - #[derive(Debug)] + #[derive(Debug, Copy, Clone)] struct S; impl S { @@ -2120,6 +2191,13 @@ mod indexers { let x = slice[0].foo(); // $ target=foo type=x:S target=index } + fn param_index>(a: T, b: usize) -> T::Output + where + >::Output: Sized + Copy, + { + a[b] // $ target=index + } + pub fn f() { let mut vec = MyVec::new(); // $ type=vec:T.S target=new vec.push(S); // $ target=push @@ -2128,6 +2206,8 @@ mod indexers { let xs: [S; 1] = [S]; let x = xs[0].foo(); // $ target=foo type=x:S target=index + let y = param_index(vec, 0); // $ target=param_index $ MISSING: type=y:S + analyze_slice(&xs); // $ target=analyze_slice } } @@ -2366,9 +2446,9 @@ mod loops { String::from("bar"), // $ target=from String::from("baz"), // $ target=from ]; - for s in strings3 {} // $ MISSING: type=s:String + for s in strings3 {} // $ type=s:&T.String - let callables = [MyCallable::new(), MyCallable::new(), MyCallable::new()]; // $ target=new $ MISSING: type=callables:[T;...].MyCallable; 3 + let callables = [MyCallable::new(), MyCallable::new(), MyCallable::new()]; // $ target=new $ type=callables:[T;...].MyCallable for c // $ type=c:MyCallable in callables { @@ -2422,10 +2502,10 @@ mod loops { let mut map1 = std::collections::HashMap::new(); // $ target=new type=map1:K.i32 type=map1:V.Box $ MISSING: type=map1:Hashmap type1=map1:V.T.&T.str map1.insert(1, Box::new("one")); // $ target=insert target=new map1.insert(2, Box::new("two")); // $ target=insert target=new - for key in map1.keys() {} // $ target=keys MISSING: type=key:i32 - for value in map1.values() {} // $ target=values MISSING: type=value:Box type=value:T.&T.str - for (key, value) in map1.iter() {} // $ target=iter MISSING: type=key:i32 type=value:Box type=value:T.&T.str - for (key, value) in &map1 {} // $ MISSING: type=key:i32 type=value:Box type=value:T.&T.str + for key in map1.keys() {} // $ target=keys type=key:&T.i32 + for value in map1.values() {} // $ target=values type=value:&T.Box type=value:&T.T.&T.str + for (key, value) in map1.iter() {} // $ target=iter type=key:&T.i32 type=value:&T.Box type=value:&T.T.&T.str + for (key, value) in &map1 {} // $ type=key:&T.i32 type=value:&T.Box type=value:&T.T.&T.str // while loops @@ -2491,6 +2571,7 @@ mod explicit_type_args { field: S2::default(), // $ target=default }; let x14 = foo::(Default::default()); // $ certainType=x14:i32 target=default target=foo + let x15 = S1::::default(); // $ certainType=x15:T.S2 target=default } } @@ -2615,10 +2696,10 @@ pub mod path_buf { } } +mod blanket_impl; mod closure; mod dereference; mod dyn_type; -mod blanket_impl; fn main() { field_access::f(); // $ target=f 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 09fbdf17a8b9..11e3f76c4a86 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -1,143 +1,249 @@ inferType -| blanket_impl.rs:8:19:8:23 | SelfParam | | file://:0:0:0:0 | & | -| blanket_impl.rs:8:19:8:23 | SelfParam | &T | blanket_impl.rs:7:5:9:5 | Self [trait Clone1] | -| blanket_impl.rs:12:22:12:26 | SelfParam | | file://:0:0:0:0 | & | -| blanket_impl.rs:12:22:12:26 | SelfParam | &T | blanket_impl.rs:11:5:15:5 | Self [trait Duplicatable] | -| blanket_impl.rs:19:19:19:23 | SelfParam | | file://:0:0:0:0 | & | -| blanket_impl.rs:19:19:19:23 | SelfParam | &T | blanket_impl.rs:4:5:5:14 | S1 | -| blanket_impl.rs:19:34:21:9 | { ... } | | blanket_impl.rs:4:5:5:14 | S1 | -| blanket_impl.rs:20:13:20:17 | * ... | | blanket_impl.rs:4:5:5:14 | S1 | -| blanket_impl.rs:20:14:20:17 | self | | file://:0:0:0:0 | & | -| blanket_impl.rs:20:14:20:17 | self | &T | blanket_impl.rs:4:5:5:14 | S1 | -| blanket_impl.rs:27:22:27:26 | SelfParam | | file://:0:0:0:0 | & | -| blanket_impl.rs:27:22:27:26 | SelfParam | &T | blanket_impl.rs:25:10:25:18 | T | -| blanket_impl.rs:27:37:29:9 | { ... } | | blanket_impl.rs:25:10:25:18 | T | -| blanket_impl.rs:28:13:28:16 | self | | file://:0:0:0:0 | & | -| blanket_impl.rs:28:13:28:16 | self | &T | blanket_impl.rs:25:10:25:18 | T | -| blanket_impl.rs:28:13:28:25 | self.clone1() | | blanket_impl.rs:25:10:25:18 | T | -| blanket_impl.rs:33:13:33:13 | x | | blanket_impl.rs:4:5:5:14 | S1 | -| blanket_impl.rs:33:17:33:18 | S1 | | blanket_impl.rs:4:5:5:14 | S1 | -| blanket_impl.rs:33:17:33:27 | S1.clone1() | | blanket_impl.rs:4:5:5:14 | S1 | -| blanket_impl.rs:34:18:34:24 | "{x:?}\\n" | | file://:0:0:0:0 | & | -| blanket_impl.rs:34:18:34:24 | "{x:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| blanket_impl.rs:34:18:34:24 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| blanket_impl.rs:34:18:34:24 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| blanket_impl.rs:34:20:34:20 | x | | blanket_impl.rs:4:5:5:14 | S1 | -| blanket_impl.rs:35:13:35:13 | y | | blanket_impl.rs:4:5:5:14 | S1 | -| blanket_impl.rs:35:17:35:18 | S1 | | blanket_impl.rs:4:5:5:14 | S1 | -| blanket_impl.rs:35:17:35:30 | S1.duplicate() | | blanket_impl.rs:4:5:5:14 | S1 | -| blanket_impl.rs:36:18:36:24 | "{y:?}\\n" | | file://:0:0:0:0 | & | -| blanket_impl.rs:36:18:36:24 | "{y:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| blanket_impl.rs:36:18:36:24 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| blanket_impl.rs:36:18:36:24 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| blanket_impl.rs:36:20:36:20 | y | | blanket_impl.rs:4:5:5:14 | S1 | -| blanket_impl.rs:47:22:47:26 | SelfParam | | file://:0:0:0:0 | & | -| blanket_impl.rs:47:22:47:26 | SelfParam | &T | blanket_impl.rs:46:5:48:5 | Self [trait Flag] | -| blanket_impl.rs:51:26:51:30 | SelfParam | | file://:0:0:0:0 | & | -| blanket_impl.rs:51:26:51:30 | SelfParam | &T | blanket_impl.rs:50:5:52:5 | Self [trait TryFlag] | -| blanket_impl.rs:58:26:58:30 | SelfParam | | file://:0:0:0:0 | & | -| blanket_impl.rs:58:26:58:30 | SelfParam | &T | blanket_impl.rs:54:10:54:11 | Fl | -| blanket_impl.rs:58:49:60:9 | { ... } | | {EXTERNAL LOCATION} | Option | -| blanket_impl.rs:58:49:60:9 | { ... } | T | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:59:13:59:34 | Some(...) | | {EXTERNAL LOCATION} | Option | -| blanket_impl.rs:59:13:59:34 | Some(...) | T | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:59:18:59:21 | self | | file://:0:0:0:0 | & | -| blanket_impl.rs:59:18:59:21 | self | &T | blanket_impl.rs:54:10:54:11 | Fl | -| blanket_impl.rs:59:18:59:33 | self.read_flag() | | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:65:32:65:36 | SelfParam | | file://:0:0:0:0 | & | -| blanket_impl.rs:65:32:65:36 | SelfParam | &T | blanket_impl.rs:63:5:68:5 | Self [trait TryFlagExt] | -| blanket_impl.rs:65:55:67:9 | { ... } | | {EXTERNAL LOCATION} | Option | -| blanket_impl.rs:65:55:67:9 | { ... } | T | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:66:13:66:16 | self | | file://:0:0:0:0 | & | -| blanket_impl.rs:66:13:66:16 | self | &T | blanket_impl.rs:63:5:68:5 | Self [trait TryFlagExt] | -| blanket_impl.rs:66:13:66:32 | self.try_read_flag() | | {EXTERNAL LOCATION} | Option | -| blanket_impl.rs:66:13:66:32 | self.try_read_flag() | T | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:74:32:74:36 | SelfParam | | file://:0:0:0:0 | & | -| blanket_impl.rs:74:32:74:36 | SelfParam | &T | blanket_impl.rs:72:5:75:5 | Self [trait AnotherTryFlag] | -| blanket_impl.rs:83:26:83:30 | SelfParam | | file://:0:0:0:0 | & | -| blanket_impl.rs:83:26:83:30 | SelfParam | &T | blanket_impl.rs:77:5:79:5 | MyTryFlag | -| blanket_impl.rs:83:49:85:9 | { ... } | | {EXTERNAL LOCATION} | Option | -| blanket_impl.rs:83:49:85:9 | { ... } | T | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:84:13:84:27 | Some(...) | | {EXTERNAL LOCATION} | Option | -| blanket_impl.rs:84:13:84:27 | Some(...) | T | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:84:18:84:21 | self | | file://:0:0:0:0 | & | -| blanket_impl.rs:84:18:84:21 | self | &T | blanket_impl.rs:77:5:79:5 | MyTryFlag | -| blanket_impl.rs:84:18:84:26 | self.flag | | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:94:22:94:26 | SelfParam | | file://:0:0:0:0 | & | -| blanket_impl.rs:94:22:94:26 | SelfParam | &T | blanket_impl.rs:88:5:90:5 | MyFlag | -| blanket_impl.rs:94:37:96:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:95:13:95:16 | self | | file://:0:0:0:0 | & | -| blanket_impl.rs:95:13:95:16 | self | &T | blanket_impl.rs:88:5:90:5 | MyFlag | -| blanket_impl.rs:95:13:95:21 | self.flag | | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:105:32:105:36 | SelfParam | | file://:0:0:0:0 | & | -| blanket_impl.rs:105:32:105:36 | SelfParam | &T | blanket_impl.rs:99:5:101:5 | MyOtherFlag | -| blanket_impl.rs:105:55:107:9 | { ... } | | {EXTERNAL LOCATION} | Option | -| blanket_impl.rs:105:55:107:9 | { ... } | T | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:106:13:106:27 | Some(...) | | {EXTERNAL LOCATION} | Option | -| blanket_impl.rs:106:13:106:27 | Some(...) | T | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:106:18:106:21 | self | | file://:0:0:0:0 | & | -| blanket_impl.rs:106:18:106:21 | self | &T | blanket_impl.rs:99:5:101:5 | MyOtherFlag | -| blanket_impl.rs:106:18:106:26 | self.flag | | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:111:13:111:23 | my_try_flag | | blanket_impl.rs:77:5:79:5 | MyTryFlag | -| blanket_impl.rs:111:27:111:50 | MyTryFlag {...} | | blanket_impl.rs:77:5:79:5 | MyTryFlag | -| blanket_impl.rs:111:45:111:48 | true | | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:112:13:112:18 | result | | {EXTERNAL LOCATION} | Option | -| blanket_impl.rs:112:13:112:18 | result | T | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:112:22:112:32 | my_try_flag | | blanket_impl.rs:77:5:79:5 | MyTryFlag | -| blanket_impl.rs:112:22:112:54 | my_try_flag.try_read_flag_twice() | | {EXTERNAL LOCATION} | Option | -| blanket_impl.rs:112:22:112:54 | my_try_flag.try_read_flag_twice() | T | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:114:13:114:19 | my_flag | | blanket_impl.rs:88:5:90:5 | MyFlag | -| blanket_impl.rs:114:23:114:43 | MyFlag {...} | | blanket_impl.rs:88:5:90:5 | MyFlag | -| blanket_impl.rs:114:38:114:41 | true | | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:117:22:117:28 | my_flag | | blanket_impl.rs:88:5:90:5 | MyFlag | -| blanket_impl.rs:119:13:119:25 | my_other_flag | | blanket_impl.rs:99:5:101:5 | MyOtherFlag | -| blanket_impl.rs:119:29:119:54 | MyOtherFlag {...} | | blanket_impl.rs:99:5:101:5 | MyOtherFlag | -| blanket_impl.rs:119:49:119:52 | true | | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:122:13:122:18 | result | | {EXTERNAL LOCATION} | Option | -| blanket_impl.rs:122:13:122:18 | result | T | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:122:22:122:34 | my_other_flag | | blanket_impl.rs:99:5:101:5 | MyOtherFlag | -| blanket_impl.rs:122:22:122:56 | my_other_flag.try_read_flag_twice() | | {EXTERNAL LOCATION} | Option | -| blanket_impl.rs:122:22:122:56 | my_other_flag.try_read_flag_twice() | T | {EXTERNAL LOCATION} | bool | -| blanket_impl.rs:132:21:132:25 | SelfParam | | file://:0:0:0:0 | & | -| blanket_impl.rs:132:21:132:25 | SelfParam | &T | blanket_impl.rs:131:5:134:5 | Self [trait Executor] | -| blanket_impl.rs:133:24:133:28 | SelfParam | | file://:0:0:0:0 | & | -| blanket_impl.rs:133:24:133:28 | SelfParam | &T | blanket_impl.rs:131:5:134:5 | Self [trait Executor] | -| blanket_impl.rs:133:31:133:35 | query | | blanket_impl.rs:133:21:133:21 | E | -| blanket_impl.rs:137:21:137:25 | SelfParam | | file://:0:0:0:0 | & | -| blanket_impl.rs:137:21:137:25 | SelfParam | &T | blanket_impl.rs:136:10:136:22 | T | -| blanket_impl.rs:138:22:138:41 | "Executor::execute1\\n" | | file://:0:0:0:0 | & | -| blanket_impl.rs:138:22:138:41 | "Executor::execute1\\n" | &T | {EXTERNAL LOCATION} | str | -| blanket_impl.rs:138:22:138:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| blanket_impl.rs:138:22:138:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| blanket_impl.rs:141:24:141:28 | SelfParam | | file://:0:0:0:0 | & | -| blanket_impl.rs:141:24:141:28 | SelfParam | &T | blanket_impl.rs:136:10:136:22 | T | -| blanket_impl.rs:141:31:141:36 | _query | | blanket_impl.rs:141:21:141:21 | E | -| blanket_impl.rs:142:22:142:41 | "Executor::execute2\\n" | | file://:0:0:0:0 | & | -| blanket_impl.rs:142:22:142:41 | "Executor::execute2\\n" | &T | {EXTERNAL LOCATION} | str | -| blanket_impl.rs:142:22:142:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| blanket_impl.rs:142:22:142:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| blanket_impl.rs:151:13:151:13 | c | | blanket_impl.rs:146:5:146:29 | MySqlConnection | -| blanket_impl.rs:151:17:151:34 | MySqlConnection {...} | | blanket_impl.rs:146:5:146:29 | MySqlConnection | -| blanket_impl.rs:153:9:153:9 | c | | blanket_impl.rs:146:5:146:29 | MySqlConnection | -| blanket_impl.rs:154:35:154:36 | &c | | file://:0:0:0:0 | & | -| blanket_impl.rs:154:35:154:36 | &c | &T | blanket_impl.rs:146:5:146:29 | MySqlConnection | -| blanket_impl.rs:154:36:154:36 | c | | blanket_impl.rs:146:5:146:29 | MySqlConnection | -| blanket_impl.rs:156:9:156:9 | c | | blanket_impl.rs:146:5:146:29 | MySqlConnection | -| blanket_impl.rs:156:20:156:40 | "SELECT * FROM users" | | file://:0:0:0:0 | & | -| blanket_impl.rs:156:20:156:40 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | -| blanket_impl.rs:157:9:157:9 | c | | blanket_impl.rs:146:5:146:29 | MySqlConnection | -| blanket_impl.rs:157:28:157:48 | "SELECT * FROM users" | | file://:0:0:0:0 | & | -| blanket_impl.rs:157:28:157:48 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | -| blanket_impl.rs:158:35:158:36 | &c | | file://:0:0:0:0 | & | -| blanket_impl.rs:158:35:158:36 | &c | &T | blanket_impl.rs:146:5:146:29 | MySqlConnection | -| blanket_impl.rs:158:36:158:36 | c | | blanket_impl.rs:146:5:146:29 | MySqlConnection | -| blanket_impl.rs:158:39:158:59 | "SELECT * FROM users" | | file://:0:0:0:0 | & | -| blanket_impl.rs:158:39:158:59 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | -| blanket_impl.rs:159:43:159:44 | &c | | file://:0:0:0:0 | & | -| blanket_impl.rs:159:43:159:44 | &c | &T | blanket_impl.rs:146:5:146:29 | MySqlConnection | -| blanket_impl.rs:159:44:159:44 | c | | blanket_impl.rs:146:5:146:29 | MySqlConnection | -| blanket_impl.rs:159:47:159:67 | "SELECT * FROM users" | | file://:0:0:0:0 | & | -| blanket_impl.rs:159:47:159:67 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:15:18:15:22 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:15:18:15:22 | SelfParam | &T | blanket_impl.rs:9:5:10:14 | S2 | +| blanket_impl.rs:15:42:17:9 | { ... } | | file://:0:0:0:0 | & | +| blanket_impl.rs:15:42:17:9 | { ... } | &T | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:16:13:16:15 | &S1 | | file://:0:0:0:0 | & | +| blanket_impl.rs:16:13:16:15 | &S1 | &T | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:16:14:16:15 | S1 | | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:21:19:21:23 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:21:19:21:23 | SelfParam | &T | blanket_impl.rs:20:5:22:5 | Self [trait Clone1] | +| blanket_impl.rs:25:22:25:26 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:25:22:25:26 | SelfParam | &T | blanket_impl.rs:24:5:28:5 | Self [trait Duplicatable] | +| blanket_impl.rs:32:19:32:23 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:32:19:32:23 | SelfParam | &T | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:32:34:34:9 | { ... } | | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:33:13:33:17 | * ... | | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:33:14:33:17 | self | | file://:0:0:0:0 | & | +| blanket_impl.rs:33:14:33:17 | self | &T | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:40:22:40:26 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:40:22:40:26 | SelfParam | &T | blanket_impl.rs:38:10:38:18 | T | +| blanket_impl.rs:40:37:42:9 | { ... } | | blanket_impl.rs:38:10:38:18 | T | +| blanket_impl.rs:41:13:41:16 | self | | file://:0:0:0:0 | & | +| blanket_impl.rs:41:13:41:16 | self | &T | blanket_impl.rs:38:10:38:18 | T | +| blanket_impl.rs:41:13:41:25 | self.clone1() | | blanket_impl.rs:38:10:38:18 | T | +| blanket_impl.rs:46:13:46:14 | x1 | | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:46:18:46:19 | S1 | | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:46:18:46:28 | S1.clone1() | | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:47:18:47:25 | "{x1:?}\\n" | | file://:0:0:0:0 | & | +| blanket_impl.rs:47:18:47:25 | "{x1:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:47:18:47:25 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| blanket_impl.rs:47:18:47:25 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| blanket_impl.rs:47:20:47:21 | x1 | | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:48:13:48:14 | x2 | | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:48:18:48:22 | (...) | | file://:0:0:0:0 | & | +| blanket_impl.rs:48:18:48:22 | (...) | &T | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:48:18:48:31 | ... .clone1() | | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:48:19:48:21 | &S1 | | file://:0:0:0:0 | & | +| blanket_impl.rs:48:19:48:21 | &S1 | &T | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:48:20:48:21 | S1 | | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:49:18:49:25 | "{x2:?}\\n" | | file://:0:0:0:0 | & | +| blanket_impl.rs:49:18:49:25 | "{x2:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:49:18:49:25 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| blanket_impl.rs:49:18:49:25 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| blanket_impl.rs:49:20:49:21 | x2 | | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:50:13:50:14 | x3 | | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:50:18:50:19 | S1 | | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:50:18:50:31 | S1.duplicate() | | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:51:18:51:25 | "{x3:?}\\n" | | file://:0:0:0:0 | & | +| blanket_impl.rs:51:18:51:25 | "{x3:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:51:18:51:25 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| blanket_impl.rs:51:18:51:25 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| blanket_impl.rs:51:20:51:21 | x3 | | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:52:13:52:14 | x4 | | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:52:18:52:22 | (...) | | file://:0:0:0:0 | & | +| blanket_impl.rs:52:18:52:22 | (...) | &T | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:52:18:52:34 | ... .duplicate() | | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:52:19:52:21 | &S1 | | file://:0:0:0:0 | & | +| blanket_impl.rs:52:19:52:21 | &S1 | &T | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:52:20:52:21 | S1 | | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:53:18:53:25 | "{x4:?}\\n" | | file://:0:0:0:0 | & | +| blanket_impl.rs:53:18:53:25 | "{x4:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:53:18:53:25 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| blanket_impl.rs:53:18:53:25 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| blanket_impl.rs:53:20:53:21 | x4 | | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:54:32:54:34 | &S1 | | file://:0:0:0:0 | & | +| blanket_impl.rs:54:32:54:34 | &S1 | &T | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:54:33:54:34 | S1 | | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:55:18:55:25 | "{x5:?}\\n" | | file://:0:0:0:0 | & | +| blanket_impl.rs:55:18:55:25 | "{x5:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:55:18:55:25 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| blanket_impl.rs:55:18:55:25 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| blanket_impl.rs:56:18:56:19 | S2 | | blanket_impl.rs:9:5:10:14 | S2 | +| blanket_impl.rs:57:18:57:25 | "{x6:?}\\n" | | file://:0:0:0:0 | & | +| blanket_impl.rs:57:18:57:25 | "{x6:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:57:18:57:25 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| blanket_impl.rs:57:18:57:25 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| blanket_impl.rs:58:18:58:22 | (...) | | file://:0:0:0:0 | & | +| blanket_impl.rs:58:18:58:22 | (...) | &T | blanket_impl.rs:9:5:10:14 | S2 | +| blanket_impl.rs:58:19:58:21 | &S2 | | file://:0:0:0:0 | & | +| blanket_impl.rs:58:19:58:21 | &S2 | &T | blanket_impl.rs:9:5:10:14 | S2 | +| blanket_impl.rs:58:20:58:21 | S2 | | blanket_impl.rs:9:5:10:14 | S2 | +| blanket_impl.rs:59:18:59:25 | "{x7:?}\\n" | | file://:0:0:0:0 | & | +| blanket_impl.rs:59:18:59:25 | "{x7:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:59:18:59:25 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| blanket_impl.rs:59:18:59:25 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| blanket_impl.rs:68:24:68:24 | x | | {EXTERNAL LOCATION} | i64 | +| blanket_impl.rs:68:32:68:32 | y | | blanket_impl.rs:67:5:69:5 | Self [trait Trait1] | +| blanket_impl.rs:72:24:72:24 | x | | {EXTERNAL LOCATION} | i64 | +| blanket_impl.rs:72:32:72:32 | y | | blanket_impl.rs:71:5:73:5 | Self [trait Trait2] | +| blanket_impl.rs:77:24:77:24 | x | | {EXTERNAL LOCATION} | i64 | +| blanket_impl.rs:77:32:77:32 | y | | blanket_impl.rs:64:5:65:14 | S1 | +| blanket_impl.rs:77:49:79:9 | { ... } | | blanket_impl.rs:64:5:65:14 | S1 | +| blanket_impl.rs:78:13:78:13 | y | | blanket_impl.rs:64:5:65:14 | S1 | +| blanket_impl.rs:84:24:84:24 | x | | {EXTERNAL LOCATION} | i64 | +| blanket_impl.rs:84:32:84:32 | y | | blanket_impl.rs:82:10:82:18 | T | +| blanket_impl.rs:84:49:86:9 | { ... } | | blanket_impl.rs:82:10:82:18 | T | +| blanket_impl.rs:85:13:85:32 | ...::assoc_func1(...) | | blanket_impl.rs:82:10:82:18 | T | +| blanket_impl.rs:85:28:85:28 | x | | {EXTERNAL LOCATION} | i64 | +| blanket_impl.rs:85:31:85:31 | y | | blanket_impl.rs:82:10:82:18 | T | +| blanket_impl.rs:90:13:90:14 | x1 | | blanket_impl.rs:64:5:65:14 | S1 | +| blanket_impl.rs:90:18:90:39 | ...::assoc_func1(...) | | blanket_impl.rs:64:5:65:14 | S1 | +| blanket_impl.rs:90:34:90:34 | 1 | | {EXTERNAL LOCATION} | i32 | +| blanket_impl.rs:90:34:90:34 | 1 | | {EXTERNAL LOCATION} | i64 | +| blanket_impl.rs:90:37:90:38 | S1 | | blanket_impl.rs:64:5:65:14 | S1 | +| blanket_impl.rs:91:18:91:25 | "{x1:?}\\n" | | file://:0:0:0:0 | & | +| blanket_impl.rs:91:18:91:25 | "{x1:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:91:18:91:25 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| blanket_impl.rs:91:18:91:25 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| blanket_impl.rs:91:20:91:21 | x1 | | blanket_impl.rs:64:5:65:14 | S1 | +| blanket_impl.rs:92:13:92:14 | x2 | | blanket_impl.rs:64:5:65:14 | S1 | +| blanket_impl.rs:92:18:92:43 | ...::assoc_func1(...) | | blanket_impl.rs:64:5:65:14 | S1 | +| blanket_impl.rs:92:38:92:38 | 1 | | {EXTERNAL LOCATION} | i32 | +| blanket_impl.rs:92:38:92:38 | 1 | | {EXTERNAL LOCATION} | i64 | +| blanket_impl.rs:92:41:92:42 | S1 | | blanket_impl.rs:64:5:65:14 | S1 | +| blanket_impl.rs:93:18:93:25 | "{x2:?}\\n" | | file://:0:0:0:0 | & | +| blanket_impl.rs:93:18:93:25 | "{x2:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:93:18:93:25 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| blanket_impl.rs:93:18:93:25 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| blanket_impl.rs:93:20:93:21 | x2 | | blanket_impl.rs:64:5:65:14 | S1 | +| blanket_impl.rs:94:34:94:34 | 1 | | {EXTERNAL LOCATION} | i32 | +| blanket_impl.rs:94:37:94:38 | S1 | | blanket_impl.rs:64:5:65:14 | S1 | +| blanket_impl.rs:95:18:95:25 | "{x3:?}\\n" | | file://:0:0:0:0 | & | +| blanket_impl.rs:95:18:95:25 | "{x3:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:95:18:95:25 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| blanket_impl.rs:95:18:95:25 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| blanket_impl.rs:96:13:96:14 | x4 | | blanket_impl.rs:64:5:65:14 | S1 | +| blanket_impl.rs:96:13:96:14 | x4 | | blanket_impl.rs:71:5:73:5 | trait Trait2 | +| blanket_impl.rs:96:18:96:43 | ...::assoc_func2(...) | | blanket_impl.rs:64:5:65:14 | S1 | +| blanket_impl.rs:96:18:96:43 | ...::assoc_func2(...) | | blanket_impl.rs:71:5:73:5 | trait Trait2 | +| blanket_impl.rs:96:38:96:38 | 1 | | {EXTERNAL LOCATION} | i32 | +| blanket_impl.rs:96:38:96:38 | 1 | | {EXTERNAL LOCATION} | i64 | +| blanket_impl.rs:96:41:96:42 | S1 | | blanket_impl.rs:64:5:65:14 | S1 | +| blanket_impl.rs:96:41:96:42 | S1 | | blanket_impl.rs:71:5:73:5 | trait Trait2 | +| blanket_impl.rs:97:18:97:25 | "{x4:?}\\n" | | file://:0:0:0:0 | & | +| blanket_impl.rs:97:18:97:25 | "{x4:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:97:18:97:25 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| blanket_impl.rs:97:18:97:25 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| blanket_impl.rs:97:20:97:21 | x4 | | blanket_impl.rs:64:5:65:14 | S1 | +| blanket_impl.rs:97:20:97:21 | x4 | | blanket_impl.rs:71:5:73:5 | trait Trait2 | +| blanket_impl.rs:108:22:108:26 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:108:22:108:26 | SelfParam | &T | blanket_impl.rs:107:5:109:5 | Self [trait Flag] | +| blanket_impl.rs:112:26:112:30 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:112:26:112:30 | SelfParam | &T | blanket_impl.rs:111:5:113:5 | Self [trait TryFlag] | +| blanket_impl.rs:119:26:119:30 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:119:26:119:30 | SelfParam | &T | blanket_impl.rs:115:10:115:11 | Fl | +| blanket_impl.rs:119:49:121:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| blanket_impl.rs:119:49:121:9 | { ... } | T | {EXTERNAL LOCATION} | bool | +| blanket_impl.rs:120:13:120:34 | Some(...) | | {EXTERNAL LOCATION} | Option | +| blanket_impl.rs:120:13:120:34 | Some(...) | T | {EXTERNAL LOCATION} | bool | +| blanket_impl.rs:120:18:120:21 | self | | file://:0:0:0:0 | & | +| blanket_impl.rs:120:18:120:21 | self | &T | blanket_impl.rs:115:10:115:11 | Fl | +| blanket_impl.rs:120:18:120:33 | self.read_flag() | | {EXTERNAL LOCATION} | bool | +| blanket_impl.rs:126:32:126:36 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:126:32:126:36 | SelfParam | &T | blanket_impl.rs:124:5:129:5 | Self [trait TryFlagExt] | +| blanket_impl.rs:126:55:128:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| blanket_impl.rs:126:55:128:9 | { ... } | T | {EXTERNAL LOCATION} | bool | +| blanket_impl.rs:127:13:127:16 | self | | file://:0:0:0:0 | & | +| blanket_impl.rs:127:13:127:16 | self | &T | blanket_impl.rs:124:5:129:5 | Self [trait TryFlagExt] | +| blanket_impl.rs:127:13:127:32 | self.try_read_flag() | | {EXTERNAL LOCATION} | Option | +| blanket_impl.rs:127:13:127:32 | self.try_read_flag() | T | {EXTERNAL LOCATION} | bool | +| blanket_impl.rs:135:32:135:36 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:135:32:135:36 | SelfParam | &T | blanket_impl.rs:133:5:136:5 | Self [trait AnotherTryFlag] | +| blanket_impl.rs:144:26:144:30 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:144:26:144:30 | SelfParam | &T | blanket_impl.rs:138:5:140:5 | MyTryFlag | +| blanket_impl.rs:144:49:146:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| blanket_impl.rs:144:49:146:9 | { ... } | T | {EXTERNAL LOCATION} | bool | +| blanket_impl.rs:145:13:145:27 | Some(...) | | {EXTERNAL LOCATION} | Option | +| blanket_impl.rs:145:13:145:27 | Some(...) | T | {EXTERNAL LOCATION} | bool | +| blanket_impl.rs:145:18:145:21 | self | | file://:0:0:0:0 | & | +| blanket_impl.rs:145:18:145:21 | self | &T | blanket_impl.rs:138:5:140:5 | MyTryFlag | +| blanket_impl.rs:145:18:145:26 | self.flag | | {EXTERNAL LOCATION} | bool | +| blanket_impl.rs:155:22:155:26 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:155:22:155:26 | SelfParam | &T | blanket_impl.rs:149:5:151:5 | MyFlag | +| blanket_impl.rs:155:37:157:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| blanket_impl.rs:156:13:156:16 | self | | file://:0:0:0:0 | & | +| blanket_impl.rs:156:13:156:16 | self | &T | blanket_impl.rs:149:5:151:5 | MyFlag | +| blanket_impl.rs:156:13:156:21 | self.flag | | {EXTERNAL LOCATION} | bool | +| blanket_impl.rs:166:32:166:36 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:166:32:166:36 | SelfParam | &T | blanket_impl.rs:160:5:162:5 | MyOtherFlag | +| blanket_impl.rs:166:55:168:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| blanket_impl.rs:166:55:168:9 | { ... } | T | {EXTERNAL LOCATION} | bool | +| blanket_impl.rs:167:13:167:27 | Some(...) | | {EXTERNAL LOCATION} | Option | +| blanket_impl.rs:167:13:167:27 | Some(...) | T | {EXTERNAL LOCATION} | bool | +| blanket_impl.rs:167:18:167:21 | self | | file://:0:0:0:0 | & | +| blanket_impl.rs:167:18:167:21 | self | &T | blanket_impl.rs:160:5:162:5 | MyOtherFlag | +| blanket_impl.rs:167:18:167:26 | self.flag | | {EXTERNAL LOCATION} | bool | +| blanket_impl.rs:172:13:172:23 | my_try_flag | | blanket_impl.rs:138:5:140:5 | MyTryFlag | +| blanket_impl.rs:172:27:172:50 | MyTryFlag {...} | | blanket_impl.rs:138:5:140:5 | MyTryFlag | +| blanket_impl.rs:172:45:172:48 | true | | {EXTERNAL LOCATION} | bool | +| blanket_impl.rs:173:13:173:18 | result | | {EXTERNAL LOCATION} | Option | +| blanket_impl.rs:173:13:173:18 | result | T | {EXTERNAL LOCATION} | bool | +| blanket_impl.rs:173:22:173:32 | my_try_flag | | blanket_impl.rs:138:5:140:5 | MyTryFlag | +| blanket_impl.rs:173:22:173:54 | my_try_flag.try_read_flag_twice() | | {EXTERNAL LOCATION} | Option | +| blanket_impl.rs:173:22:173:54 | my_try_flag.try_read_flag_twice() | T | {EXTERNAL LOCATION} | bool | +| blanket_impl.rs:175:13:175:19 | my_flag | | blanket_impl.rs:149:5:151:5 | MyFlag | +| blanket_impl.rs:175:23:175:43 | MyFlag {...} | | blanket_impl.rs:149:5:151:5 | MyFlag | +| blanket_impl.rs:175:38:175:41 | true | | {EXTERNAL LOCATION} | bool | +| blanket_impl.rs:178:22:178:28 | my_flag | | blanket_impl.rs:149:5:151:5 | MyFlag | +| blanket_impl.rs:180:13:180:25 | my_other_flag | | blanket_impl.rs:160:5:162:5 | MyOtherFlag | +| blanket_impl.rs:180:29:180:54 | MyOtherFlag {...} | | blanket_impl.rs:160:5:162:5 | MyOtherFlag | +| blanket_impl.rs:180:49:180:52 | true | | {EXTERNAL LOCATION} | bool | +| blanket_impl.rs:183:13:183:18 | result | | {EXTERNAL LOCATION} | Option | +| blanket_impl.rs:183:13:183:18 | result | T | {EXTERNAL LOCATION} | bool | +| blanket_impl.rs:183:22:183:34 | my_other_flag | | blanket_impl.rs:160:5:162:5 | MyOtherFlag | +| blanket_impl.rs:183:22:183:56 | my_other_flag.try_read_flag_twice() | | {EXTERNAL LOCATION} | Option | +| blanket_impl.rs:183:22:183:56 | my_other_flag.try_read_flag_twice() | T | {EXTERNAL LOCATION} | bool | +| blanket_impl.rs:193:21:193:25 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:193:21:193:25 | SelfParam | &T | blanket_impl.rs:192:5:195:5 | Self [trait Executor] | +| blanket_impl.rs:194:24:194:28 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:194:24:194:28 | SelfParam | &T | blanket_impl.rs:192:5:195:5 | Self [trait Executor] | +| blanket_impl.rs:194:31:194:35 | query | | blanket_impl.rs:194:21:194:21 | E | +| blanket_impl.rs:198:21:198:25 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:198:21:198:25 | SelfParam | &T | blanket_impl.rs:197:10:197:22 | T | +| blanket_impl.rs:199:22:199:41 | "Executor::execute1\\n" | | file://:0:0:0:0 | & | +| blanket_impl.rs:199:22:199:41 | "Executor::execute1\\n" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:199:22:199:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| blanket_impl.rs:199:22:199:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| blanket_impl.rs:202:24:202:28 | SelfParam | | file://:0:0:0:0 | & | +| blanket_impl.rs:202:24:202:28 | SelfParam | &T | blanket_impl.rs:197:10:197:22 | T | +| blanket_impl.rs:202:31:202:36 | _query | | blanket_impl.rs:202:21:202:21 | E | +| blanket_impl.rs:203:22:203:41 | "Executor::execute2\\n" | | file://:0:0:0:0 | & | +| blanket_impl.rs:203:22:203:41 | "Executor::execute2\\n" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:203:22:203:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| blanket_impl.rs:203:22:203:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| blanket_impl.rs:212:13:212:13 | c | | blanket_impl.rs:207:5:207:29 | MySqlConnection | +| blanket_impl.rs:212:17:212:34 | MySqlConnection {...} | | blanket_impl.rs:207:5:207:29 | MySqlConnection | +| blanket_impl.rs:214:9:214:9 | c | | blanket_impl.rs:207:5:207:29 | MySqlConnection | +| blanket_impl.rs:215:35:215:36 | &c | | file://:0:0:0:0 | & | +| blanket_impl.rs:215:35:215:36 | &c | &T | blanket_impl.rs:207:5:207:29 | MySqlConnection | +| blanket_impl.rs:215:36:215:36 | c | | blanket_impl.rs:207:5:207:29 | MySqlConnection | +| blanket_impl.rs:217:9:217:9 | c | | blanket_impl.rs:207:5:207:29 | MySqlConnection | +| blanket_impl.rs:217:20:217:40 | "SELECT * FROM users" | | file://:0:0:0:0 | & | +| blanket_impl.rs:217:20:217:40 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:218:9:218:9 | c | | blanket_impl.rs:207:5:207:29 | MySqlConnection | +| blanket_impl.rs:218:28:218:48 | "SELECT * FROM users" | | file://:0:0:0:0 | & | +| blanket_impl.rs:218:28:218:48 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:219:35:219:36 | &c | | file://:0:0:0:0 | & | +| blanket_impl.rs:219:35:219:36 | &c | &T | blanket_impl.rs:207:5:207:29 | MySqlConnection | +| blanket_impl.rs:219:36:219:36 | c | | blanket_impl.rs:207:5:207:29 | MySqlConnection | +| blanket_impl.rs:219:39:219:59 | "SELECT * FROM users" | | file://:0:0:0:0 | & | +| blanket_impl.rs:219:39:219:59 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | +| blanket_impl.rs:220:43:220:44 | &c | | file://:0:0:0:0 | & | +| blanket_impl.rs:220:43:220:44 | &c | &T | blanket_impl.rs:207:5:207:29 | MySqlConnection | +| blanket_impl.rs:220:44:220:44 | c | | blanket_impl.rs:207:5:207:29 | MySqlConnection | +| blanket_impl.rs:220:47:220:67 | "SELECT * FROM users" | | file://:0:0:0:0 | & | +| blanket_impl.rs:220:47:220:67 | "SELECT * FROM users" | &T | {EXTERNAL LOCATION} | str | | closure.rs:6:13:6:22 | my_closure | | {EXTERNAL LOCATION} | dyn FnOnce | | closure.rs:6:13:6:22 | my_closure | dyn(Args) | file://:0:0:0:0 | (T_2) | | closure.rs:6:13:6:22 | my_closure | dyn(Args).0(2) | {EXTERNAL LOCATION} | bool | @@ -367,215 +473,305 @@ inferType | dereference.rs:26:10:26:13 | self | &T | dereference.rs:17:1:19:1 | MySmartPointer | | dereference.rs:26:10:26:13 | self | &T.T | dereference.rs:21:6:21:6 | T | | dereference.rs:26:10:26:19 | self.value | | dereference.rs:21:6:21:6 | T | -| dereference.rs:32:9:32:10 | a1 | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:32:14:32:42 | MyIntPointer {...} | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:32:36:32:40 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:33:9:33:11 | _b1 | | file://:0:0:0:0 | & | -| dereference.rs:33:9:33:11 | _b1 | &T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:33:15:33:16 | a1 | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:33:15:33:24 | a1.deref() | | file://:0:0:0:0 | & | -| dereference.rs:33:15:33:24 | a1.deref() | &T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:36:9:36:10 | a2 | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:36:14:36:42 | MyIntPointer {...} | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:36:36:36:40 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:37:9:37:11 | _b2 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:37:15:37:17 | * ... | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:37:16:37:17 | a2 | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:40:9:40:10 | a3 | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:33:12:33:16 | SelfParam | | file://:0:0:0:0 | & | +| dereference.rs:33:12:33:16 | SelfParam | &T | dereference.rs:30:1:30:15 | S | +| dereference.rs:33:12:33:16 | SelfParam | &T.T | dereference.rs:32:6:32:6 | T | +| dereference.rs:33:25:35:5 | { ... } | | file://:0:0:0:0 | & | +| dereference.rs:33:25:35:5 | { ... } | &T | dereference.rs:32:6:32:6 | T | +| dereference.rs:34:9:34:15 | &... | | file://:0:0:0:0 | & | +| dereference.rs:34:9:34:15 | &... | &T | dereference.rs:32:6:32:6 | T | +| dereference.rs:34:10:34:13 | self | | file://:0:0:0:0 | & | +| dereference.rs:34:10:34:13 | self | &T | dereference.rs:30:1:30:15 | S | +| dereference.rs:34:10:34:13 | self | &T.T | dereference.rs:32:6:32:6 | T | +| dereference.rs:34:10:34:15 | self.0 | | dereference.rs:32:6:32:6 | T | +| dereference.rs:40:9:40:10 | a1 | | dereference.rs:4:1:6:1 | MyIntPointer | | dereference.rs:40:14:40:42 | MyIntPointer {...} | | dereference.rs:4:1:6:1 | MyIntPointer | | dereference.rs:40:36:40:40 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:41:9:41:11 | _b3 | | {EXTERNAL LOCATION} | bool | -| dereference.rs:41:15:41:19 | (...) | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:41:15:41:33 | ... .is_positive() | | {EXTERNAL LOCATION} | bool | -| dereference.rs:41:16:41:18 | * ... | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:41:17:41:18 | a3 | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:46:9:46:10 | c1 | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:46:9:46:10 | c1 | T | {EXTERNAL LOCATION} | char | -| dereference.rs:46:14:46:42 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:46:14:46:42 | MySmartPointer {...} | T | {EXTERNAL LOCATION} | char | -| dereference.rs:46:38:46:40 | 'a' | | {EXTERNAL LOCATION} | char | -| dereference.rs:47:9:47:11 | _d1 | | file://:0:0:0:0 | & | -| dereference.rs:47:9:47:11 | _d1 | &T | {EXTERNAL LOCATION} | char | -| dereference.rs:47:15:47:16 | c1 | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:47:15:47:16 | c1 | T | {EXTERNAL LOCATION} | char | -| dereference.rs:47:15:47:24 | c1.deref() | | file://:0:0:0:0 | & | -| dereference.rs:47:15:47:24 | c1.deref() | &T | {EXTERNAL LOCATION} | char | -| dereference.rs:50:9:50:10 | c2 | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:50:9:50:10 | c2 | T | {EXTERNAL LOCATION} | char | -| dereference.rs:50:14:50:42 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:50:14:50:42 | MySmartPointer {...} | T | {EXTERNAL LOCATION} | char | -| dereference.rs:50:38:50:40 | 'a' | | {EXTERNAL LOCATION} | char | -| dereference.rs:51:9:51:11 | _d2 | | {EXTERNAL LOCATION} | char | -| dereference.rs:51:15:51:17 | * ... | | {EXTERNAL LOCATION} | char | -| dereference.rs:51:16:51:17 | c2 | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:51:16:51:17 | c2 | T | {EXTERNAL LOCATION} | char | -| dereference.rs:54:9:54:10 | c3 | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:54:9:54:10 | c3 | T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:54:14:54:44 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:54:14:54:44 | MySmartPointer {...} | T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:54:38:54:42 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:55:9:55:11 | _d3 | | {EXTERNAL LOCATION} | bool | -| dereference.rs:55:15:55:19 | (...) | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:55:15:55:33 | ... .is_positive() | | {EXTERNAL LOCATION} | bool | -| dereference.rs:55:16:55:18 | * ... | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:55:17:55:18 | c3 | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:55:17:55:18 | c3 | T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:60:9:60:10 | e1 | | file://:0:0:0:0 | & | -| dereference.rs:60:9:60:10 | e1 | &T | {EXTERNAL LOCATION} | char | -| dereference.rs:60:9:60:10 | e1 | &T | file://:0:0:0:0 | & | -| dereference.rs:60:14:60:17 | &'a' | | file://:0:0:0:0 | & | -| dereference.rs:60:14:60:17 | &'a' | &T | {EXTERNAL LOCATION} | char | -| dereference.rs:60:14:60:17 | &'a' | &T | file://:0:0:0:0 | & | -| dereference.rs:60:15:60:17 | 'a' | | {EXTERNAL LOCATION} | char | -| dereference.rs:61:9:61:11 | _f1 | | file://:0:0:0:0 | & | -| dereference.rs:61:15:61:16 | e1 | | file://:0:0:0:0 | & | -| dereference.rs:61:15:61:16 | e1 | &T | {EXTERNAL LOCATION} | char | -| dereference.rs:61:15:61:16 | e1 | &T | file://:0:0:0:0 | & | -| dereference.rs:61:15:61:24 | e1.deref() | | file://:0:0:0:0 | & | -| dereference.rs:64:9:64:10 | e2 | | file://:0:0:0:0 | & | -| dereference.rs:64:9:64:10 | e2 | &T | {EXTERNAL LOCATION} | char | -| dereference.rs:64:14:64:17 | &'a' | | file://:0:0:0:0 | & | -| dereference.rs:64:14:64:17 | &'a' | &T | {EXTERNAL LOCATION} | char | -| dereference.rs:64:15:64:17 | 'a' | | {EXTERNAL LOCATION} | char | -| dereference.rs:65:9:65:11 | _f2 | | {EXTERNAL LOCATION} | char | -| dereference.rs:65:15:65:17 | * ... | | {EXTERNAL LOCATION} | char | -| dereference.rs:65:16:65:17 | e2 | | file://:0:0:0:0 | & | -| dereference.rs:65:16:65:17 | e2 | &T | {EXTERNAL LOCATION} | char | -| dereference.rs:68:9:68:10 | e3 | | file://:0:0:0:0 | & | -| dereference.rs:68:9:68:10 | e3 | &T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:68:14:68:19 | &34i64 | | file://:0:0:0:0 | & | -| dereference.rs:68:14:68:19 | &34i64 | &T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:68:15:68:19 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:69:9:69:11 | _f3 | | {EXTERNAL LOCATION} | bool | -| dereference.rs:69:15:69:19 | (...) | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:69:15:69:33 | ... .is_positive() | | {EXTERNAL LOCATION} | bool | -| dereference.rs:69:16:69:18 | * ... | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:69:17:69:18 | e3 | | file://:0:0:0:0 | & | -| dereference.rs:69:17:69:18 | e3 | &T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:74:9:74:10 | g1 | | {EXTERNAL LOCATION} | Box | -| dereference.rs:74:9:74:10 | g1 | A | {EXTERNAL LOCATION} | Global | -| dereference.rs:74:9:74:10 | g1 | T | {EXTERNAL LOCATION} | char | -| dereference.rs:74:25:74:37 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| dereference.rs:74:25:74:37 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| dereference.rs:74:25:74:37 | ...::new(...) | T | {EXTERNAL LOCATION} | char | -| dereference.rs:74:34:74:36 | 'a' | | {EXTERNAL LOCATION} | char | -| dereference.rs:75:9:75:11 | _h1 | | file://:0:0:0:0 | & | -| dereference.rs:75:9:75:11 | _h1 | &T | {EXTERNAL LOCATION} | char | -| dereference.rs:75:15:75:16 | g1 | | {EXTERNAL LOCATION} | Box | -| dereference.rs:75:15:75:16 | g1 | A | {EXTERNAL LOCATION} | Global | -| dereference.rs:75:15:75:16 | g1 | T | {EXTERNAL LOCATION} | char | -| dereference.rs:75:15:75:24 | g1.deref() | | file://:0:0:0:0 | & | -| dereference.rs:75:15:75:24 | g1.deref() | &T | {EXTERNAL LOCATION} | char | -| dereference.rs:78:9:78:10 | g2 | | {EXTERNAL LOCATION} | Box | -| dereference.rs:78:9:78:10 | g2 | A | {EXTERNAL LOCATION} | Global | -| dereference.rs:78:9:78:10 | g2 | T | {EXTERNAL LOCATION} | char | -| dereference.rs:78:25:78:37 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| dereference.rs:78:25:78:37 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| dereference.rs:78:25:78:37 | ...::new(...) | T | {EXTERNAL LOCATION} | char | -| dereference.rs:78:34:78:36 | 'a' | | {EXTERNAL LOCATION} | char | -| dereference.rs:79:9:79:11 | _h2 | | {EXTERNAL LOCATION} | char | -| dereference.rs:79:15:79:17 | * ... | | {EXTERNAL LOCATION} | char | -| dereference.rs:79:16:79:17 | g2 | | {EXTERNAL LOCATION} | Box | -| dereference.rs:79:16:79:17 | g2 | A | {EXTERNAL LOCATION} | Global | -| dereference.rs:79:16:79:17 | g2 | T | {EXTERNAL LOCATION} | char | -| dereference.rs:82:9:82:10 | g3 | | {EXTERNAL LOCATION} | Box | -| dereference.rs:82:9:82:10 | g3 | A | {EXTERNAL LOCATION} | Global | -| dereference.rs:82:9:82:10 | g3 | T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:82:24:82:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| dereference.rs:82:24:82:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| dereference.rs:82:24:82:38 | ...::new(...) | T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:82:33:82:37 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:83:9:83:11 | _h3 | | {EXTERNAL LOCATION} | bool | -| dereference.rs:83:15:83:19 | (...) | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:83:15:83:33 | ... .is_positive() | | {EXTERNAL LOCATION} | bool | -| dereference.rs:83:16:83:18 | * ... | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:83:17:83:18 | g3 | | {EXTERNAL LOCATION} | Box | -| dereference.rs:83:17:83:18 | g3 | A | {EXTERNAL LOCATION} | Global | -| dereference.rs:83:17:83:18 | g3 | T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:88:9:88:9 | x | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:88:13:88:41 | MyIntPointer {...} | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:88:35:88:39 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:89:14:89:14 | x | | dereference.rs:4:1:6:1 | MyIntPointer | -| dereference.rs:92:9:92:9 | x | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:92:9:92:9 | x | T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:92:13:92:43 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:92:13:92:43 | MySmartPointer {...} | T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:92:37:92:41 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:93:14:93:14 | x | | dereference.rs:17:1:19:1 | MySmartPointer | -| dereference.rs:93:14:93:14 | x | T | {EXTERNAL LOCATION} | i64 | -| dereference.rs:121:17:121:26 | key_to_key | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:121:17:121:26 | key_to_key | K | file://:0:0:0:0 | & | -| dereference.rs:121:17:121:26 | key_to_key | K.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:17:121:26 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | -| dereference.rs:121:17:121:26 | key_to_key | V | file://:0:0:0:0 | & | -| dereference.rs:121:17:121:26 | key_to_key | V.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:30:121:57 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:121:30:121:57 | ...::new(...) | K | file://:0:0:0:0 | & | -| dereference.rs:121:30:121:57 | ...::new(...) | K.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:121:30:121:57 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | -| dereference.rs:121:30:121:57 | ...::new(...) | V | file://:0:0:0:0 | & | -| dereference.rs:121:30:121:57 | ...::new(...) | V.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:17:122:19 | key | | file://:0:0:0:0 | & | -| dereference.rs:122:17:122:19 | key | &T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:17:122:19 | key | &T | file://:0:0:0:0 | & | -| dereference.rs:122:17:122:19 | key | &T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:23:122:29 | &... | | file://:0:0:0:0 | & | -| dereference.rs:122:23:122:29 | &... | &T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:23:122:29 | &... | &T | file://:0:0:0:0 | & | -| dereference.rs:122:23:122:29 | &... | &T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:122:24:122:29 | Key {...} | | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:16:123:28 | Some(...) | | {EXTERNAL LOCATION} | Option | -| dereference.rs:123:16:123:28 | Some(...) | T | file://:0:0:0:0 | & | -| dereference.rs:123:16:123:28 | Some(...) | T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:16:123:28 | Some(...) | T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:16:123:28 | Some(...) | T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:21:123:27 | ref_key | | file://:0:0:0:0 | & | -| dereference.rs:123:21:123:27 | ref_key | &T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:21:123:27 | ref_key | &T | file://:0:0:0:0 | & | -| dereference.rs:123:21:123:27 | ref_key | &T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:32:123:41 | key_to_key | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:123:32:123:41 | key_to_key | K | file://:0:0:0:0 | & | -| dereference.rs:123:32:123:41 | key_to_key | K.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:32:123:41 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | -| dereference.rs:123:32:123:41 | key_to_key | V | file://:0:0:0:0 | & | -| dereference.rs:123:32:123:41 | key_to_key | V.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:32:123:50 | key_to_key.get(...) | | {EXTERNAL LOCATION} | Option | -| dereference.rs:123:32:123:50 | key_to_key.get(...) | T | file://:0:0:0:0 | & | -| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T | file://:0:0:0:0 | & | -| dereference.rs:123:32:123:50 | key_to_key.get(...) | T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:47:123:49 | key | | file://:0:0:0:0 | & | -| dereference.rs:123:47:123:49 | key | &T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:123:47:123:49 | key | &T | file://:0:0:0:0 | & | -| dereference.rs:123:47:123:49 | key | &T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:125:13:125:15 | key | | file://:0:0:0:0 | & | -| dereference.rs:125:13:125:15 | key | &T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:125:13:125:15 | key | &T | file://:0:0:0:0 | & | -| dereference.rs:125:13:125:15 | key | &T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:125:13:125:25 | ... = ... | | file://:0:0:0:0 | () | -| dereference.rs:125:19:125:25 | ref_key | | file://:0:0:0:0 | & | -| dereference.rs:125:19:125:25 | ref_key | &T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:125:19:125:25 | ref_key | &T | file://:0:0:0:0 | & | -| dereference.rs:125:19:125:25 | ref_key | &T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:9:127:18 | key_to_key | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:127:9:127:18 | key_to_key | K | file://:0:0:0:0 | & | -| dereference.rs:127:9:127:18 | key_to_key | K.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:9:127:18 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | -| dereference.rs:127:9:127:18 | key_to_key | V | file://:0:0:0:0 | & | -| dereference.rs:127:9:127:18 | key_to_key | V.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:9:127:35 | key_to_key.insert(...) | | {EXTERNAL LOCATION} | Option | -| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T | file://:0:0:0:0 | & | -| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T | file://:0:0:0:0 | & | -| dereference.rs:127:9:127:35 | key_to_key.insert(...) | T.&T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:27:127:29 | key | | file://:0:0:0:0 | & | -| dereference.rs:127:27:127:29 | key | &T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:27:127:29 | key | &T | file://:0:0:0:0 | & | -| dereference.rs:127:27:127:29 | key | &T.&T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:32:127:34 | key | | file://:0:0:0:0 | & | -| dereference.rs:127:32:127:34 | key | &T | dereference.rs:99:5:100:21 | Key | -| dereference.rs:127:32:127:34 | key | &T | file://:0:0:0:0 | & | -| dereference.rs:127:32:127:34 | key | &T.&T | dereference.rs:99:5:100:21 | Key | +| dereference.rs:41:9:41:11 | _b1 | | file://:0:0:0:0 | & | +| dereference.rs:41:9:41:11 | _b1 | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:41:15:41:16 | a1 | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:41:15:41:24 | a1.deref() | | file://:0:0:0:0 | & | +| dereference.rs:41:15:41:24 | a1.deref() | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:44:9:44:10 | a2 | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:44:14:44:42 | MyIntPointer {...} | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:44:36:44:40 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:45:9:45:11 | _b2 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:45:15:45:17 | * ... | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:45:16:45:17 | a2 | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:48:9:48:10 | a3 | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:48:14:48:42 | MyIntPointer {...} | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:48:36:48:40 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:49:9:49:11 | _b3 | | {EXTERNAL LOCATION} | bool | +| dereference.rs:49:15:49:19 | (...) | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:49:15:49:33 | ... .is_positive() | | {EXTERNAL LOCATION} | bool | +| dereference.rs:49:16:49:18 | * ... | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:49:17:49:18 | a3 | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:54:9:54:10 | c1 | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:54:9:54:10 | c1 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:54:14:54:42 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:54:14:54:42 | MySmartPointer {...} | T | {EXTERNAL LOCATION} | char | +| dereference.rs:54:38:54:40 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:55:9:55:11 | _d1 | | file://:0:0:0:0 | & | +| dereference.rs:55:9:55:11 | _d1 | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:55:15:55:16 | c1 | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:55:15:55:16 | c1 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:55:15:55:24 | c1.deref() | | file://:0:0:0:0 | & | +| dereference.rs:55:15:55:24 | c1.deref() | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:58:9:58:10 | c2 | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:58:9:58:10 | c2 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:58:14:58:42 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:58:14:58:42 | MySmartPointer {...} | T | {EXTERNAL LOCATION} | char | +| dereference.rs:58:38:58:40 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:59:9:59:11 | _d2 | | {EXTERNAL LOCATION} | char | +| dereference.rs:59:15:59:17 | * ... | | {EXTERNAL LOCATION} | char | +| dereference.rs:59:16:59:17 | c2 | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:59:16:59:17 | c2 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:62:9:62:10 | c3 | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:62:9:62:10 | c3 | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:62:14:62:44 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:62:14:62:44 | MySmartPointer {...} | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:62:38:62:42 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:63:9:63:11 | _d3 | | {EXTERNAL LOCATION} | bool | +| dereference.rs:63:15:63:19 | (...) | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:63:15:63:33 | ... .is_positive() | | {EXTERNAL LOCATION} | bool | +| dereference.rs:63:16:63:18 | * ... | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:63:17:63:18 | c3 | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:63:17:63:18 | c3 | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:68:9:68:10 | e1 | | file://:0:0:0:0 | & | +| dereference.rs:68:9:68:10 | e1 | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:68:9:68:10 | e1 | &T | file://:0:0:0:0 | & | +| dereference.rs:68:14:68:17 | &'a' | | file://:0:0:0:0 | & | +| dereference.rs:68:14:68:17 | &'a' | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:68:14:68:17 | &'a' | &T | file://:0:0:0:0 | & | +| dereference.rs:68:15:68:17 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:69:9:69:11 | _f1 | | file://:0:0:0:0 | & | +| dereference.rs:69:15:69:16 | e1 | | file://:0:0:0:0 | & | +| dereference.rs:69:15:69:16 | e1 | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:69:15:69:16 | e1 | &T | file://:0:0:0:0 | & | +| dereference.rs:69:15:69:24 | e1.deref() | | file://:0:0:0:0 | & | +| dereference.rs:72:9:72:10 | e2 | | file://:0:0:0:0 | & | +| dereference.rs:72:9:72:10 | e2 | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:72:14:72:17 | &'a' | | file://:0:0:0:0 | & | +| dereference.rs:72:14:72:17 | &'a' | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:72:15:72:17 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:73:9:73:11 | _f2 | | {EXTERNAL LOCATION} | char | +| dereference.rs:73:15:73:17 | * ... | | {EXTERNAL LOCATION} | char | +| dereference.rs:73:16:73:17 | e2 | | file://:0:0:0:0 | & | +| dereference.rs:73:16:73:17 | e2 | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:76:9:76:10 | e3 | | file://:0:0:0:0 | & | +| dereference.rs:76:9:76:10 | e3 | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:76:14:76:19 | &34i64 | | file://:0:0:0:0 | & | +| dereference.rs:76:14:76:19 | &34i64 | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:76:15:76:19 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:77:9:77:11 | _f3 | | {EXTERNAL LOCATION} | bool | +| dereference.rs:77:15:77:19 | (...) | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:77:15:77:33 | ... .is_positive() | | {EXTERNAL LOCATION} | bool | +| dereference.rs:77:16:77:18 | * ... | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:77:17:77:18 | e3 | | file://:0:0:0:0 | & | +| dereference.rs:77:17:77:18 | e3 | &T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:82:9:82:10 | g1 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:82:9:82:10 | g1 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:82:9:82:10 | g1 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:82:25:82:37 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| dereference.rs:82:25:82:37 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:82:25:82:37 | ...::new(...) | T | {EXTERNAL LOCATION} | char | +| dereference.rs:82:34:82:36 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:83:9:83:11 | _h1 | | file://:0:0:0:0 | & | +| dereference.rs:83:9:83:11 | _h1 | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:83:15:83:16 | g1 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:83:15:83:16 | g1 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:83:15:83:16 | g1 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:83:15:83:24 | g1.deref() | | file://:0:0:0:0 | & | +| dereference.rs:83:15:83:24 | g1.deref() | &T | {EXTERNAL LOCATION} | char | +| dereference.rs:86:9:86:10 | g2 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:86:9:86:10 | g2 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:86:9:86:10 | g2 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:86:25:86:37 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| dereference.rs:86:25:86:37 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:86:25:86:37 | ...::new(...) | T | {EXTERNAL LOCATION} | char | +| dereference.rs:86:34:86:36 | 'a' | | {EXTERNAL LOCATION} | char | +| dereference.rs:87:9:87:11 | _h2 | | {EXTERNAL LOCATION} | char | +| dereference.rs:87:15:87:17 | * ... | | {EXTERNAL LOCATION} | char | +| dereference.rs:87:16:87:17 | g2 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:87:16:87:17 | g2 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:87:16:87:17 | g2 | T | {EXTERNAL LOCATION} | char | +| dereference.rs:90:9:90:10 | g3 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:90:9:90:10 | g3 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:90:9:90:10 | g3 | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:90:24:90:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| dereference.rs:90:24:90:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:90:24:90:38 | ...::new(...) | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:90:33:90:37 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:91:9:91:11 | _h3 | | {EXTERNAL LOCATION} | bool | +| dereference.rs:91:15:91:19 | (...) | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:91:15:91:33 | ... .is_positive() | | {EXTERNAL LOCATION} | bool | +| dereference.rs:91:16:91:18 | * ... | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:91:17:91:18 | g3 | | {EXTERNAL LOCATION} | Box | +| dereference.rs:91:17:91:18 | g3 | A | {EXTERNAL LOCATION} | Global | +| dereference.rs:91:17:91:18 | g3 | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:96:9:96:9 | x | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:96:13:96:41 | MyIntPointer {...} | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:96:35:96:39 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:97:14:97:14 | x | | dereference.rs:4:1:6:1 | MyIntPointer | +| dereference.rs:100:9:100:9 | x | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:100:9:100:9 | x | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:100:13:100:43 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:100:13:100:43 | MySmartPointer {...} | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:100:37:100:41 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:101:14:101:14 | x | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:101:14:101:14 | x | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:103:9:103:9 | z | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:103:9:103:9 | z | T | dereference.rs:30:1:30:15 | S | +| dereference.rs:103:9:103:9 | z | T.T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:103:13:103:45 | MySmartPointer {...} | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:103:13:103:45 | MySmartPointer {...} | T | dereference.rs:30:1:30:15 | S | +| dereference.rs:103:13:103:45 | MySmartPointer {...} | T.T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:103:37:103:43 | S(...) | | dereference.rs:30:1:30:15 | S | +| dereference.rs:103:37:103:43 | S(...) | T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:103:39:103:42 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:104:14:104:14 | z | | dereference.rs:17:1:19:1 | MySmartPointer | +| dereference.rs:104:14:104:14 | z | T | dereference.rs:30:1:30:15 | S | +| dereference.rs:104:14:104:14 | z | T.T | {EXTERNAL LOCATION} | i64 | +| dereference.rs:132:17:132:26 | key_to_key | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:132:17:132:26 | key_to_key | K | file://:0:0:0:0 | & | +| dereference.rs:132:17:132:26 | key_to_key | K.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:132:17:132:26 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | +| dereference.rs:132:17:132:26 | key_to_key | V | file://:0:0:0:0 | & | +| dereference.rs:132:17:132:26 | key_to_key | V.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:132:30:132:57 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:132:30:132:57 | ...::new(...) | K | file://:0:0:0:0 | & | +| dereference.rs:132:30:132:57 | ...::new(...) | K.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:132:30:132:57 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | +| dereference.rs:132:30:132:57 | ...::new(...) | V | file://:0:0:0:0 | & | +| dereference.rs:132:30:132:57 | ...::new(...) | V.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:133:17:133:19 | key | | file://:0:0:0:0 | & | +| dereference.rs:133:17:133:19 | key | &T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:133:17:133:19 | key | &T | file://:0:0:0:0 | & | +| dereference.rs:133:17:133:19 | key | &T.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:133:23:133:29 | &... | | file://:0:0:0:0 | & | +| dereference.rs:133:23:133:29 | &... | &T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:133:23:133:29 | &... | &T | file://:0:0:0:0 | & | +| dereference.rs:133:23:133:29 | &... | &T.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:133:24:133:29 | Key {...} | | dereference.rs:110:5:111:21 | Key | +| dereference.rs:134:16:134:28 | Some(...) | | {EXTERNAL LOCATION} | Option | +| dereference.rs:134:16:134:28 | Some(...) | T | file://:0:0:0:0 | & | +| dereference.rs:134:16:134:28 | Some(...) | T.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:134:16:134:28 | Some(...) | T.&T | file://:0:0:0:0 | & | +| dereference.rs:134:16:134:28 | Some(...) | T.&T.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:134:21:134:27 | ref_key | | file://:0:0:0:0 | & | +| dereference.rs:134:21:134:27 | ref_key | &T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:134:21:134:27 | ref_key | &T | file://:0:0:0:0 | & | +| dereference.rs:134:21:134:27 | ref_key | &T.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:134:32:134:41 | key_to_key | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:134:32:134:41 | key_to_key | K | file://:0:0:0:0 | & | +| dereference.rs:134:32:134:41 | key_to_key | K.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:134:32:134:41 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | +| dereference.rs:134:32:134:41 | key_to_key | V | file://:0:0:0:0 | & | +| dereference.rs:134:32:134:41 | key_to_key | V.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:134:32:134:50 | key_to_key.get(...) | | {EXTERNAL LOCATION} | Option | +| dereference.rs:134:32:134:50 | key_to_key.get(...) | T | file://:0:0:0:0 | & | +| dereference.rs:134:32:134:50 | key_to_key.get(...) | T.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:134:32:134:50 | key_to_key.get(...) | T.&T | file://:0:0:0:0 | & | +| dereference.rs:134:32:134:50 | key_to_key.get(...) | T.&T.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:134:47:134:49 | key | | file://:0:0:0:0 | & | +| dereference.rs:134:47:134:49 | key | &T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:134:47:134:49 | key | &T | file://:0:0:0:0 | & | +| dereference.rs:134:47:134:49 | key | &T.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:136:13:136:15 | key | | file://:0:0:0:0 | & | +| dereference.rs:136:13:136:15 | key | &T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:136:13:136:15 | key | &T | file://:0:0:0:0 | & | +| dereference.rs:136:13:136:15 | key | &T.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:136:13:136:25 | ... = ... | | file://:0:0:0:0 | () | +| dereference.rs:136:19:136:25 | ref_key | | file://:0:0:0:0 | & | +| dereference.rs:136:19:136:25 | ref_key | &T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:136:19:136:25 | ref_key | &T | file://:0:0:0:0 | & | +| dereference.rs:136:19:136:25 | ref_key | &T.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:138:9:138:18 | key_to_key | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:138:9:138:18 | key_to_key | K | file://:0:0:0:0 | & | +| dereference.rs:138:9:138:18 | key_to_key | K.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:138:9:138:18 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | +| dereference.rs:138:9:138:18 | key_to_key | V | file://:0:0:0:0 | & | +| dereference.rs:138:9:138:18 | key_to_key | V.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:138:9:138:35 | key_to_key.insert(...) | | {EXTERNAL LOCATION} | Option | +| dereference.rs:138:9:138:35 | key_to_key.insert(...) | T | file://:0:0:0:0 | & | +| dereference.rs:138:9:138:35 | key_to_key.insert(...) | T.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:138:9:138:35 | key_to_key.insert(...) | T.&T | file://:0:0:0:0 | & | +| dereference.rs:138:9:138:35 | key_to_key.insert(...) | T.&T.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:138:27:138:29 | key | | file://:0:0:0:0 | & | +| dereference.rs:138:27:138:29 | key | &T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:138:27:138:29 | key | &T | file://:0:0:0:0 | & | +| dereference.rs:138:27:138:29 | key | &T.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:138:32:138:34 | key | | file://:0:0:0:0 | & | +| dereference.rs:138:32:138:34 | key | &T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:138:32:138:34 | key | &T | file://:0:0:0:0 | & | +| dereference.rs:138:32:138:34 | key | &T.&T | dereference.rs:110:5:111:21 | Key | +| dereference.rs:144:16:144:19 | SelfParam | | dereference.rs:143:5:145:5 | Self [trait MyTrait1] | +| dereference.rs:151:16:151:19 | SelfParam | | file://:0:0:0:0 | & | +| dereference.rs:151:16:151:19 | SelfParam | &T | dereference.rs:147:5:147:13 | S | +| dereference.rs:151:27:153:9 | { ... } | | dereference.rs:147:5:147:13 | S | +| dereference.rs:152:13:152:13 | S | | dereference.rs:147:5:147:13 | S | +| dereference.rs:158:16:158:19 | SelfParam | | file://:0:0:0:0 | & | +| dereference.rs:158:16:158:19 | SelfParam | &T | dereference.rs:147:5:147:13 | S | +| dereference.rs:158:29:160:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:159:13:159:14 | 42 | | {EXTERNAL LOCATION} | i32 | +| dereference.rs:159:13:159:14 | 42 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:164:16:164:19 | SelfParam | | dereference.rs:163:5:165:5 | Self [trait MyTrait2] | +| dereference.rs:164:22:164:24 | arg | | dereference.rs:163:20:163:21 | T1 | +| dereference.rs:169:16:169:19 | SelfParam | | dereference.rs:147:5:147:13 | S | +| dereference.rs:169:22:169:24 | arg | | file://:0:0:0:0 | & | +| dereference.rs:169:22:169:24 | arg | &T | dereference.rs:147:5:147:13 | S | +| dereference.rs:169:36:171:9 | { ... } | | dereference.rs:147:5:147:13 | S | +| dereference.rs:170:13:170:13 | S | | dereference.rs:147:5:147:13 | S | +| dereference.rs:176:16:176:19 | SelfParam | | dereference.rs:147:5:147:13 | S | +| dereference.rs:176:22:176:24 | arg | | file://:0:0:0:0 | & | +| dereference.rs:176:22:176:24 | arg | &T | dereference.rs:147:5:147:13 | S | +| dereference.rs:176:42:178:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:177:13:177:14 | 42 | | {EXTERNAL LOCATION} | i32 | +| dereference.rs:177:13:177:14 | 42 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:182:17:182:20 | (...) | | file://:0:0:0:0 | & | +| dereference.rs:182:17:182:20 | (...) | &T | dereference.rs:147:5:147:13 | S | +| dereference.rs:182:18:182:19 | &S | | file://:0:0:0:0 | & | +| dereference.rs:182:18:182:19 | &S | &T | dereference.rs:147:5:147:13 | S | +| dereference.rs:182:19:182:19 | S | | dereference.rs:147:5:147:13 | S | +| dereference.rs:183:17:183:17 | S | | dereference.rs:147:5:147:13 | S | +| dereference.rs:184:17:184:24 | (...) | | file://:0:0:0:0 | & | +| dereference.rs:184:17:184:24 | (...) | &T | dereference.rs:147:5:147:13 | S | +| dereference.rs:184:18:184:23 | &mut S | | file://:0:0:0:0 | & | +| dereference.rs:184:18:184:23 | &mut S | &T | dereference.rs:147:5:147:13 | S | +| dereference.rs:184:23:184:23 | S | | dereference.rs:147:5:147:13 | S | +| dereference.rs:186:13:186:13 | x | | dereference.rs:147:5:147:13 | S | +| dereference.rs:186:13:186:13 | x | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:186:17:186:17 | S | | dereference.rs:147:5:147:13 | S | +| dereference.rs:186:17:186:25 | S.bar(...) | | dereference.rs:147:5:147:13 | S | +| dereference.rs:186:17:186:25 | S.bar(...) | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:186:23:186:24 | &S | | file://:0:0:0:0 | & | +| dereference.rs:186:23:186:24 | &S | &T | dereference.rs:147:5:147:13 | S | +| dereference.rs:186:24:186:24 | S | | dereference.rs:147:5:147:13 | S | +| dereference.rs:187:13:187:13 | y | | dereference.rs:147:5:147:13 | S | +| dereference.rs:187:13:187:13 | y | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:187:17:187:17 | S | | dereference.rs:147:5:147:13 | S | +| dereference.rs:187:17:187:29 | S.bar(...) | | dereference.rs:147:5:147:13 | S | +| dereference.rs:187:17:187:29 | S.bar(...) | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:187:23:187:28 | &mut S | | file://:0:0:0:0 | & | +| dereference.rs:187:23:187:28 | &mut S | &T | dereference.rs:147:5:147:13 | S | +| dereference.rs:187:28:187:28 | S | | dereference.rs:147:5:147:13 | S | +| dereference.rs:196:16:196:20 | SelfParam | | file://:0:0:0:0 | & | +| dereference.rs:196:16:196:20 | SelfParam | &T | dereference.rs:195:5:197:5 | Self [trait Bar] | +| dereference.rs:201:16:201:24 | SelfParam | | file://:0:0:0:0 | & | +| dereference.rs:201:16:201:24 | SelfParam | &T | dereference.rs:193:5:193:17 | Foo | +| dereference.rs:202:22:202:38 | "In struct impl!\\n" | | file://:0:0:0:0 | & | +| dereference.rs:202:22:202:38 | "In struct impl!\\n" | &T | {EXTERNAL LOCATION} | str | +| dereference.rs:202:22:202:38 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| dereference.rs:202:22:202:38 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| dereference.rs:208:16:208:20 | SelfParam | | file://:0:0:0:0 | & | +| dereference.rs:208:16:208:20 | SelfParam | &T | dereference.rs:193:5:193:17 | Foo | +| dereference.rs:209:22:209:37 | "In trait impl!\\n" | | file://:0:0:0:0 | & | +| dereference.rs:209:22:209:37 | "In trait impl!\\n" | &T | {EXTERNAL LOCATION} | str | +| dereference.rs:209:22:209:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| dereference.rs:209:22:209:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| dereference.rs:214:17:214:17 | f | | dereference.rs:193:5:193:17 | Foo | +| dereference.rs:214:21:214:26 | Foo {...} | | dereference.rs:193:5:193:17 | Foo | +| dereference.rs:215:9:215:9 | f | | dereference.rs:193:5:193:17 | Foo | | dyn_type.rs:7:10:7:14 | SelfParam | | file://:0:0:0:0 | & | | dyn_type.rs:7:10:7:14 | SelfParam | &T | dyn_type.rs:5:1:8:1 | Self [trait MyTrait1] | | dyn_type.rs:12:12:12:16 | SelfParam | | file://:0:0:0:0 | & | @@ -779,9 +975,61 @@ inferType | dyn_type.rs:107:22:107:45 | GenStruct {...} | | dyn_type.rs:33:1:36:1 | GenStruct | | dyn_type.rs:107:22:107:45 | GenStruct {...} | A | {EXTERNAL LOCATION} | i32 | | dyn_type.rs:107:41:107:43 | 100 | | {EXTERNAL LOCATION} | i32 | -| loop/main.rs:7:12:7:15 | SelfParam | | loop/main.rs:6:1:8:1 | Self [trait T1] | -| loop/main.rs:11:12:11:15 | SelfParam | | loop/main.rs:10:1:14:1 | Self [trait T2] | -| loop/main.rs:12:9:12:12 | self | | loop/main.rs:10:1:14:1 | Self [trait T2] | +| invalid/main.rs:8:16:8:19 | SelfParam | | invalid/main.rs:7:5:9:5 | Self [trait T1] | +| invalid/main.rs:12:16:12:19 | SelfParam | | invalid/main.rs:11:5:15:5 | Self [trait T2] | +| invalid/main.rs:13:13:13:16 | self | | invalid/main.rs:11:5:15:5 | Self [trait T2] | +| invalid/main.rs:25:22:25:25 | SelfParam | | invalid/main.rs:24:5:26:5 | Self [trait AddAlias] | +| invalid/main.rs:25:28:25:32 | other | | invalid/main.rs:24:5:26:5 | Self [trait AddAlias] | +| invalid/main.rs:29:22:29:25 | SelfParam | | invalid/main.rs:21:5:22:20 | Num | +| invalid/main.rs:29:28:29:32 | other | | invalid/main.rs:21:5:22:20 | Num | +| invalid/main.rs:29:49:31:9 | { ... } | | invalid/main.rs:21:5:22:20 | Num | +| invalid/main.rs:30:13:30:33 | Num(...) | | invalid/main.rs:21:5:22:20 | Num | +| invalid/main.rs:30:17:30:20 | self | | invalid/main.rs:21:5:22:20 | Num | +| invalid/main.rs:30:17:30:22 | self.0 | | {EXTERNAL LOCATION} | i32 | +| invalid/main.rs:30:17:30:32 | ... + ... | | {EXTERNAL LOCATION} | i32 | +| invalid/main.rs:30:26:30:30 | other | | invalid/main.rs:21:5:22:20 | Num | +| invalid/main.rs:30:26:30:32 | other.0 | | {EXTERNAL LOCATION} | i32 | +| invalid/main.rs:39:16:39:19 | SelfParam | | invalid/main.rs:35:10:35:20 | T | +| invalid/main.rs:39:22:39:26 | other | | invalid/main.rs:35:10:35:20 | T | +| invalid/main.rs:39:43:41:9 | { ... } | | invalid/main.rs:35:10:35:20 | T | +| invalid/main.rs:40:13:40:16 | self | | invalid/main.rs:35:10:35:20 | T | +| invalid/main.rs:40:13:40:33 | self.add_alias(...) | | invalid/main.rs:35:10:35:20 | T | +| invalid/main.rs:40:28:40:32 | other | | invalid/main.rs:35:10:35:20 | T | +| invalid/main.rs:45:13:45:13 | a | | invalid/main.rs:21:5:22:20 | Num | +| invalid/main.rs:45:17:45:22 | Num(...) | | invalid/main.rs:21:5:22:20 | Num | +| invalid/main.rs:45:21:45:21 | 5 | | {EXTERNAL LOCATION} | i32 | +| invalid/main.rs:46:13:46:13 | b | | invalid/main.rs:21:5:22:20 | Num | +| invalid/main.rs:46:17:46:23 | Num(...) | | invalid/main.rs:21:5:22:20 | Num | +| invalid/main.rs:46:21:46:22 | 10 | | {EXTERNAL LOCATION} | i32 | +| invalid/main.rs:47:13:47:13 | c | | invalid/main.rs:21:5:22:20 | Num | +| invalid/main.rs:47:17:47:17 | a | | invalid/main.rs:21:5:22:20 | Num | +| invalid/main.rs:47:17:47:21 | ... + ... | | invalid/main.rs:21:5:22:20 | Num | +| invalid/main.rs:47:21:47:21 | b | | invalid/main.rs:21:5:22:20 | Num | +| invalid/main.rs:57:19:57:23 | SelfParam | | file://:0:0:0:0 | & | +| invalid/main.rs:57:19:57:23 | SelfParam | &T | invalid/main.rs:56:5:58:5 | Self [trait Clone1] | +| invalid/main.rs:61:22:61:26 | SelfParam | | file://:0:0:0:0 | & | +| invalid/main.rs:61:22:61:26 | SelfParam | &T | invalid/main.rs:60:5:64:5 | Self [trait Duplicatable] | +| invalid/main.rs:68:19:68:23 | SelfParam | | file://:0:0:0:0 | & | +| invalid/main.rs:68:19:68:23 | SelfParam | &T | invalid/main.rs:53:5:54:14 | S1 | +| invalid/main.rs:68:34:70:9 | { ... } | | invalid/main.rs:53:5:54:14 | S1 | +| invalid/main.rs:69:13:69:17 | * ... | | invalid/main.rs:53:5:54:14 | S1 | +| invalid/main.rs:69:14:69:17 | self | | file://:0:0:0:0 | & | +| invalid/main.rs:69:14:69:17 | self | &T | invalid/main.rs:53:5:54:14 | S1 | +| invalid/main.rs:75:22:75:26 | SelfParam | | file://:0:0:0:0 | & | +| invalid/main.rs:75:22:75:26 | SelfParam | &T | invalid/main.rs:53:5:54:14 | S1 | +| invalid/main.rs:75:37:77:9 | { ... } | | invalid/main.rs:53:5:54:14 | S1 | +| invalid/main.rs:76:13:76:17 | * ... | | invalid/main.rs:53:5:54:14 | S1 | +| invalid/main.rs:76:14:76:17 | self | | file://:0:0:0:0 | & | +| invalid/main.rs:76:14:76:17 | self | &T | invalid/main.rs:53:5:54:14 | S1 | +| invalid/main.rs:83:22:83:26 | SelfParam | | file://:0:0:0:0 | & | +| invalid/main.rs:83:22:83:26 | SelfParam | &T | invalid/main.rs:81:10:81:18 | T | +| invalid/main.rs:83:37:85:9 | { ... } | | invalid/main.rs:81:10:81:18 | T | +| invalid/main.rs:84:13:84:16 | self | | file://:0:0:0:0 | & | +| invalid/main.rs:84:13:84:16 | self | &T | invalid/main.rs:81:10:81:18 | T | +| invalid/main.rs:84:13:84:25 | self.clone1() | | invalid/main.rs:81:10:81:18 | T | +| invalid/main.rs:91:13:91:13 | x | | invalid/main.rs:53:5:54:14 | S1 | +| invalid/main.rs:91:17:91:18 | S1 | | invalid/main.rs:53:5:54:14 | S1 | +| invalid/main.rs:91:17:91:30 | S1.duplicate() | | invalid/main.rs:53:5:54:14 | S1 | | main.rs:26:13:26:13 | x | | main.rs:5:5:8:5 | MyThing | | main.rs:26:17:26:32 | MyThing {...} | | main.rs:5:5:8:5 | MyThing | | main.rs:26:30:26:30 | S | | main.rs:3:5:4:13 | S | @@ -1487,3642 +1735,3888 @@ inferType | main.rs:540:26:540:42 | x.common_method() | | main.rs:446:5:447:14 | S1 | | main.rs:541:18:541:23 | "{:?}\\n" | | file://:0:0:0:0 | & | | main.rs:541:18:541:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:541:18:541:44 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:541:18:541:44 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:541:26:541:26 | x | | main.rs:446:5:447:14 | S1 | -| main.rs:541:26:541:44 | x.common_method_2() | | main.rs:446:5:447:14 | S1 | -| main.rs:543:13:543:13 | y | | main.rs:479:5:479:22 | S2 | -| main.rs:543:13:543:13 | y | T2 | main.rs:446:5:447:14 | S1 | -| main.rs:543:17:543:22 | S2(...) | | main.rs:479:5:479:22 | S2 | -| main.rs:543:17:543:22 | S2(...) | T2 | main.rs:446:5:447:14 | S1 | -| main.rs:543:20:543:21 | S1 | | main.rs:446:5:447:14 | S1 | -| main.rs:544:18:544:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:544:18:544:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:544:18:544:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:544:18:544:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:544:26:544:26 | y | | main.rs:479:5:479:22 | S2 | -| main.rs:544:26:544:26 | y | T2 | main.rs:446:5:447:14 | S1 | -| main.rs:544:26:544:42 | y.common_method() | | main.rs:446:5:447:14 | S1 | -| main.rs:546:13:546:13 | z | | main.rs:479:5:479:22 | S2 | -| main.rs:546:13:546:13 | z | T2 | {EXTERNAL LOCATION} | i32 | -| main.rs:546:17:546:21 | S2(...) | | main.rs:479:5:479:22 | S2 | -| main.rs:546:17:546:21 | S2(...) | T2 | {EXTERNAL LOCATION} | i32 | -| main.rs:546:20:546:20 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:541:18:541:45 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:541:18:541:45 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:541:26:541:45 | ...::common_method(...) | | main.rs:446:5:447:14 | S1 | +| main.rs:541:44:541:44 | x | | main.rs:446:5:447:14 | S1 | +| main.rs:542:18:542:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:542:18:542:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:542:18:542:44 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:542:18:542:44 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:542:26:542:26 | x | | main.rs:446:5:447:14 | S1 | +| main.rs:542:26:542:44 | x.common_method_2() | | main.rs:446:5:447:14 | S1 | +| main.rs:543:18:543:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:543:18:543:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:543:18:543:47 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:543:18:543:47 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:543:26:543:47 | ...::common_method_2(...) | | main.rs:446:5:447:14 | S1 | +| main.rs:543:46:543:46 | x | | main.rs:446:5:447:14 | S1 | +| main.rs:545:13:545:13 | y | | main.rs:479:5:479:22 | S2 | +| main.rs:545:13:545:13 | y | T2 | main.rs:446:5:447:14 | S1 | +| main.rs:545:17:545:22 | S2(...) | | main.rs:479:5:479:22 | S2 | +| main.rs:545:17:545:22 | S2(...) | T2 | main.rs:446:5:447:14 | S1 | +| main.rs:545:20:545:21 | S1 | | main.rs:446:5:447:14 | S1 | +| main.rs:546:18:546:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:546:18:546:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:546:18:546:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:546:18:546:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:546:26:546:26 | y | | main.rs:479:5:479:22 | S2 | +| main.rs:546:26:546:26 | y | T2 | main.rs:446:5:447:14 | S1 | +| main.rs:546:26:546:42 | y.common_method() | | main.rs:446:5:447:14 | S1 | | main.rs:547:18:547:23 | "{:?}\\n" | | file://:0:0:0:0 | & | | main.rs:547:18:547:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:547:18:547:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:547:18:547:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:547:26:547:26 | z | | main.rs:479:5:479:22 | S2 | -| main.rs:547:26:547:26 | z | T2 | {EXTERNAL LOCATION} | i32 | -| main.rs:547:26:547:42 | z.common_method() | | main.rs:446:5:447:14 | S1 | -| main.rs:549:13:549:13 | w | | main.rs:517:5:518:22 | S3 | -| main.rs:549:13:549:13 | w | T3 | main.rs:446:5:447:14 | S1 | -| main.rs:549:17:549:22 | S3(...) | | main.rs:517:5:518:22 | S3 | -| main.rs:549:17:549:22 | S3(...) | T3 | main.rs:446:5:447:14 | S1 | -| main.rs:549:20:549:21 | S1 | | main.rs:446:5:447:14 | S1 | +| main.rs:547:18:547:56 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:547:18:547:56 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:547:26:547:56 | ...::common_method(...) | | main.rs:446:5:447:14 | S1 | +| main.rs:547:50:547:55 | S2(...) | | main.rs:479:5:479:22 | S2 | +| main.rs:547:50:547:55 | S2(...) | T2 | main.rs:446:5:447:14 | S1 | +| main.rs:547:53:547:54 | S1 | | main.rs:446:5:447:14 | S1 | +| main.rs:549:13:549:13 | z | | main.rs:479:5:479:22 | S2 | +| main.rs:549:13:549:13 | z | T2 | {EXTERNAL LOCATION} | i32 | +| main.rs:549:17:549:21 | S2(...) | | main.rs:479:5:479:22 | S2 | +| main.rs:549:17:549:21 | S2(...) | T2 | {EXTERNAL LOCATION} | i32 | +| main.rs:549:20:549:20 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:550:18:550:23 | "{:?}\\n" | | file://:0:0:0:0 | & | | main.rs:550:18:550:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:550:18:550:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:550:18:550:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:550:26:550:26 | w | | main.rs:517:5:518:22 | S3 | -| main.rs:550:26:550:26 | w | T3 | main.rs:446:5:447:14 | S1 | -| main.rs:550:26:550:31 | w.m(...) | | file://:0:0:0:0 | & | -| main.rs:550:26:550:31 | w.m(...) | &T | main.rs:517:5:518:22 | S3 | -| main.rs:550:26:550:31 | w.m(...) | &T.T3 | main.rs:446:5:447:14 | S1 | -| main.rs:550:30:550:30 | x | | main.rs:446:5:447:14 | S1 | -| main.rs:567:19:567:22 | SelfParam | | main.rs:565:5:568:5 | Self [trait FirstTrait] | -| main.rs:572:19:572:22 | SelfParam | | main.rs:570:5:573:5 | Self [trait SecondTrait] | -| main.rs:575:64:575:64 | x | | main.rs:575:45:575:61 | T | -| main.rs:577:13:577:14 | s1 | | main.rs:575:35:575:42 | I | -| main.rs:577:18:577:18 | x | | main.rs:575:45:575:61 | T | -| main.rs:577:18:577:27 | x.method() | | main.rs:575:35:575:42 | I | -| main.rs:578:18:578:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:578:18:578:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:578:18:578:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:578:18:578:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:578:26:578:27 | s1 | | main.rs:575:35:575:42 | I | -| main.rs:581:65:581:65 | x | | main.rs:581:46:581:62 | T | -| main.rs:583:13:583:14 | s2 | | main.rs:581:36:581:43 | I | -| main.rs:583:18:583:18 | x | | main.rs:581:46:581:62 | T | -| main.rs:583:18:583:27 | x.method() | | main.rs:581:36:581:43 | I | +| main.rs:550:18:550:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:550:18:550:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:550:26:550:26 | z | | main.rs:479:5:479:22 | S2 | +| main.rs:550:26:550:26 | z | T2 | {EXTERNAL LOCATION} | i32 | +| main.rs:550:26:550:42 | z.common_method() | | main.rs:446:5:447:14 | S1 | +| main.rs:551:18:551:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:551:18:551:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:551:18:551:49 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:551:18:551:49 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:551:26:551:49 | ...::common_method(...) | | main.rs:446:5:447:14 | S1 | +| main.rs:551:44:551:48 | S2(...) | | main.rs:479:5:479:22 | S2 | +| main.rs:551:44:551:48 | S2(...) | T2 | {EXTERNAL LOCATION} | i32 | +| main.rs:551:47:551:47 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:552:18:552:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:552:18:552:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:552:18:552:56 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:552:18:552:56 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:552:26:552:56 | ...::common_method(...) | | main.rs:446:5:447:14 | S1 | +| main.rs:552:51:552:55 | S2(...) | | main.rs:479:5:479:22 | S2 | +| main.rs:552:51:552:55 | S2(...) | T2 | {EXTERNAL LOCATION} | i32 | +| main.rs:552:54:552:54 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:554:13:554:13 | w | | main.rs:517:5:518:22 | S3 | +| main.rs:554:13:554:13 | w | T3 | main.rs:446:5:447:14 | S1 | +| main.rs:554:17:554:22 | S3(...) | | main.rs:517:5:518:22 | S3 | +| main.rs:554:17:554:22 | S3(...) | T3 | main.rs:446:5:447:14 | S1 | +| main.rs:554:20:554:21 | S1 | | main.rs:446:5:447:14 | S1 | +| main.rs:555:18:555:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:555:18:555:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:555:18:555:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:555:18:555:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:555:26:555:26 | w | | main.rs:517:5:518:22 | S3 | +| main.rs:555:26:555:26 | w | T3 | main.rs:446:5:447:14 | S1 | +| main.rs:555:26:555:31 | w.m(...) | | file://:0:0:0:0 | & | +| main.rs:555:26:555:31 | w.m(...) | &T | main.rs:517:5:518:22 | S3 | +| main.rs:555:26:555:31 | w.m(...) | &T.T3 | main.rs:446:5:447:14 | S1 | +| main.rs:555:30:555:30 | x | | main.rs:446:5:447:14 | S1 | +| main.rs:556:18:556:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:556:18:556:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:556:18:556:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:556:18:556:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:556:26:556:37 | ...::m(...) | | file://:0:0:0:0 | & | +| main.rs:556:26:556:37 | ...::m(...) | &T | main.rs:517:5:518:22 | S3 | +| main.rs:556:26:556:37 | ...::m(...) | &T.T3 | main.rs:446:5:447:14 | S1 | +| main.rs:556:32:556:33 | &w | | file://:0:0:0:0 | & | +| main.rs:556:32:556:33 | &w | &T | main.rs:517:5:518:22 | S3 | +| main.rs:556:32:556:33 | &w | &T.T3 | main.rs:446:5:447:14 | S1 | +| main.rs:556:33:556:33 | w | | main.rs:517:5:518:22 | S3 | +| main.rs:556:33:556:33 | w | T3 | main.rs:446:5:447:14 | S1 | +| main.rs:556:36:556:36 | x | | main.rs:446:5:447:14 | S1 | +| main.rs:573:19:573:22 | SelfParam | | main.rs:571:5:574:5 | Self [trait FirstTrait] | +| main.rs:578:19:578:22 | SelfParam | | main.rs:576:5:579:5 | Self [trait SecondTrait] | +| main.rs:581:64:581:64 | x | | main.rs:581:45:581:61 | T | +| main.rs:583:13:583:14 | s1 | | main.rs:581:35:581:42 | I | +| main.rs:583:18:583:18 | x | | main.rs:581:45:581:61 | T | +| main.rs:583:18:583:27 | x.method() | | main.rs:581:35:581:42 | I | | main.rs:584:18:584:23 | "{:?}\\n" | | file://:0:0:0:0 | & | | main.rs:584:18:584:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:584:18:584:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:584:18:584:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:584:26:584:27 | s2 | | main.rs:581:36:581:43 | I | -| main.rs:587:49:587:49 | x | | main.rs:587:30:587:46 | T | -| main.rs:588:13:588:13 | s | | main.rs:557:5:558:14 | S1 | -| main.rs:588:17:588:17 | x | | main.rs:587:30:587:46 | T | -| main.rs:588:17:588:26 | x.method() | | main.rs:557:5:558:14 | S1 | -| main.rs:589:18:589:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:589:18:589:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:589:18:589:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:589:18:589:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:589:26:589:26 | s | | main.rs:557:5:558:14 | S1 | -| main.rs:592:53:592:53 | x | | main.rs:592:34:592:50 | T | -| main.rs:593:13:593:13 | s | | main.rs:557:5:558:14 | S1 | -| main.rs:593:17:593:17 | x | | main.rs:592:34:592:50 | T | -| main.rs:593:17:593:26 | x.method() | | main.rs:557:5:558:14 | S1 | -| main.rs:594:18:594:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:594:18:594:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:594:18:594:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:594:18:594:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:594:26:594:26 | s | | main.rs:557:5:558:14 | S1 | -| main.rs:597:43:597:43 | x | | main.rs:597:40:597:40 | T | -| main.rs:601:13:601:13 | s | | main.rs:557:5:558:14 | S1 | -| main.rs:601:17:601:17 | x | | main.rs:597:40:597:40 | T | -| main.rs:601:17:601:26 | x.method() | | main.rs:557:5:558:14 | S1 | -| main.rs:602:18:602:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:602:18:602:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:602:18:602:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:602:18:602:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:602:26:602:26 | s | | main.rs:557:5:558:14 | S1 | -| main.rs:606:16:606:19 | SelfParam | | main.rs:605:5:609:5 | Self [trait Pair] | -| main.rs:608:16:608:19 | SelfParam | | main.rs:605:5:609:5 | Self [trait Pair] | -| main.rs:611:53:611:53 | x | | main.rs:611:50:611:50 | T | -| main.rs:611:59:611:59 | y | | main.rs:611:50:611:50 | T | -| main.rs:616:13:616:13 | _ | | main.rs:557:5:558:14 | S1 | -| main.rs:616:17:616:17 | x | | main.rs:611:50:611:50 | T | -| main.rs:616:17:616:23 | x.fst() | | main.rs:557:5:558:14 | S1 | -| main.rs:617:13:617:13 | _ | | main.rs:557:5:558:14 | S1 | -| main.rs:617:17:617:17 | y | | main.rs:611:50:611:50 | T | -| main.rs:617:17:617:26 | y.method() | | main.rs:557:5:558:14 | S1 | -| main.rs:620:58:620:58 | x | | main.rs:620:41:620:55 | T | -| main.rs:620:64:620:64 | y | | main.rs:620:41:620:55 | T | -| main.rs:622:13:622:14 | s1 | | main.rs:557:5:558:14 | S1 | -| main.rs:622:18:622:18 | x | | main.rs:620:41:620:55 | T | -| main.rs:622:18:622:24 | x.fst() | | main.rs:557:5:558:14 | S1 | -| main.rs:623:13:623:14 | s2 | | main.rs:560:5:561:14 | S2 | -| main.rs:623:18:623:18 | y | | main.rs:620:41:620:55 | T | -| main.rs:623:18:623:24 | y.snd() | | main.rs:560:5:561:14 | S2 | -| main.rs:624:18:624:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:624:18:624:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:624:18:624:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:624:18:624:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:624:32:624:33 | s1 | | main.rs:557:5:558:14 | S1 | -| main.rs:624:36:624:37 | s2 | | main.rs:560:5:561:14 | S2 | -| main.rs:627:69:627:69 | x | | main.rs:627:52:627:66 | T | -| main.rs:627:75:627:75 | y | | main.rs:627:52:627:66 | T | -| main.rs:629:13:629:14 | s1 | | main.rs:557:5:558:14 | S1 | -| main.rs:629:18:629:18 | x | | main.rs:627:52:627:66 | T | -| main.rs:629:18:629:24 | x.fst() | | main.rs:557:5:558:14 | S1 | -| main.rs:630:13:630:14 | s2 | | main.rs:627:41:627:49 | T2 | -| main.rs:630:18:630:18 | y | | main.rs:627:52:627:66 | T | -| main.rs:630:18:630:24 | y.snd() | | main.rs:627:41:627:49 | T2 | -| main.rs:631:18:631:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:631:18:631:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:631:18:631:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:631:18:631:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:631:32:631:33 | s1 | | main.rs:557:5:558:14 | S1 | -| main.rs:631:36:631:37 | s2 | | main.rs:627:41:627:49 | T2 | -| main.rs:634:50:634:50 | x | | main.rs:634:41:634:47 | T | -| main.rs:634:56:634:56 | y | | main.rs:634:41:634:47 | T | -| main.rs:636:13:636:14 | s1 | | {EXTERNAL LOCATION} | bool | -| main.rs:636:18:636:18 | x | | main.rs:634:41:634:47 | T | -| main.rs:636:18:636:24 | x.fst() | | {EXTERNAL LOCATION} | bool | -| main.rs:637:13:637:14 | s2 | | {EXTERNAL LOCATION} | i64 | -| main.rs:637:18:637:18 | y | | main.rs:634:41:634:47 | T | -| main.rs:637:18:637:24 | y.snd() | | {EXTERNAL LOCATION} | i64 | -| main.rs:638:18:638:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:638:18:638:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:638:18:638:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:638:18:638:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:638:32:638:33 | s1 | | {EXTERNAL LOCATION} | bool | -| main.rs:638:36:638:37 | s2 | | {EXTERNAL LOCATION} | i64 | -| main.rs:641:54:641:54 | x | | main.rs:641:41:641:51 | T | -| main.rs:641:60:641:60 | y | | main.rs:641:41:641:51 | T | -| main.rs:643:13:643:14 | s1 | | {EXTERNAL LOCATION} | u8 | -| main.rs:643:18:643:18 | x | | main.rs:641:41:641:51 | T | -| main.rs:643:18:643:24 | x.fst() | | {EXTERNAL LOCATION} | u8 | -| main.rs:644:13:644:14 | s2 | | {EXTERNAL LOCATION} | i64 | -| main.rs:644:18:644:18 | y | | main.rs:641:41:641:51 | T | -| main.rs:644:18:644:24 | y.snd() | | {EXTERNAL LOCATION} | i64 | -| main.rs:645:18:645:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:645:18:645:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:645:18:645:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:645:18:645:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:645:32:645:33 | s1 | | {EXTERNAL LOCATION} | u8 | -| main.rs:645:36:645:37 | s2 | | {EXTERNAL LOCATION} | i64 | -| main.rs:661:15:661:18 | SelfParam | | main.rs:660:5:669:5 | Self [trait MyTrait] | -| main.rs:663:15:663:18 | SelfParam | | main.rs:660:5:669:5 | Self [trait MyTrait] | -| main.rs:666:9:668:9 | { ... } | | main.rs:660:19:660:19 | A | -| main.rs:667:13:667:16 | self | | main.rs:660:5:669:5 | Self [trait MyTrait] | -| main.rs:667:13:667:21 | self.m1() | | main.rs:660:19:660:19 | A | -| main.rs:673:43:673:43 | x | | main.rs:673:26:673:40 | T2 | -| main.rs:673:56:675:5 | { ... } | | main.rs:673:22:673:23 | T1 | -| main.rs:674:9:674:9 | x | | main.rs:673:26:673:40 | T2 | -| main.rs:674:9:674:14 | x.m1() | | main.rs:673:22:673:23 | T1 | -| main.rs:679:49:679:49 | x | | main.rs:650:5:653:5 | MyThing | -| main.rs:679:49:679:49 | x | T | main.rs:679:32:679:46 | T2 | -| main.rs:679:71:681:5 | { ... } | | main.rs:679:28:679:29 | T1 | -| main.rs:680:9:680:9 | x | | main.rs:650:5:653:5 | MyThing | -| main.rs:680:9:680:9 | x | T | main.rs:679:32:679:46 | T2 | -| main.rs:680:9:680:11 | x.a | | main.rs:679:32:679:46 | T2 | -| main.rs:680:9:680:16 | ... .m1() | | main.rs:679:28:679:29 | T1 | -| main.rs:684:15:684:18 | SelfParam | | main.rs:650:5:653:5 | MyThing | -| main.rs:684:15:684:18 | SelfParam | T | main.rs:683:10:683:10 | T | -| main.rs:684:26:686:9 | { ... } | | main.rs:683:10:683:10 | T | -| main.rs:685:13:685:16 | self | | main.rs:650:5:653:5 | MyThing | -| main.rs:685:13:685:16 | self | T | main.rs:683:10:683:10 | T | -| main.rs:685:13:685:18 | self.a | | main.rs:683:10:683:10 | T | -| main.rs:690:13:690:13 | x | | main.rs:650:5:653:5 | MyThing | -| main.rs:690:13:690:13 | x | T | main.rs:655:5:656:14 | S1 | -| main.rs:690:17:690:33 | MyThing {...} | | main.rs:650:5:653:5 | MyThing | -| main.rs:690:17:690:33 | MyThing {...} | T | main.rs:655:5:656:14 | S1 | -| main.rs:690:30:690:31 | S1 | | main.rs:655:5:656:14 | S1 | -| main.rs:691:13:691:13 | y | | main.rs:650:5:653:5 | MyThing | -| main.rs:691:13:691:13 | y | T | main.rs:657:5:658:14 | S2 | -| main.rs:691:17:691:33 | MyThing {...} | | main.rs:650:5:653:5 | MyThing | -| main.rs:691:17:691:33 | MyThing {...} | T | main.rs:657:5:658:14 | S2 | -| main.rs:691:30:691:31 | S2 | | main.rs:657:5:658:14 | S2 | -| main.rs:693:18:693:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:693:18:693:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:693:18:693:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:693:18:693:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:693:26:693:26 | x | | main.rs:650:5:653:5 | MyThing | -| main.rs:693:26:693:26 | x | T | main.rs:655:5:656:14 | S1 | -| main.rs:693:26:693:31 | x.m1() | | main.rs:655:5:656:14 | S1 | -| main.rs:694:18:694:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:694:18:694:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:694:18:694:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:694:18:694:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:694:26:694:26 | y | | main.rs:650:5:653:5 | MyThing | -| main.rs:694:26:694:26 | y | T | main.rs:657:5:658:14 | S2 | -| main.rs:694:26:694:31 | y.m1() | | main.rs:657:5:658:14 | S2 | -| main.rs:696:13:696:13 | x | | main.rs:650:5:653:5 | MyThing | -| main.rs:696:13:696:13 | x | T | main.rs:655:5:656:14 | S1 | -| main.rs:696:17:696:33 | MyThing {...} | | main.rs:650:5:653:5 | MyThing | -| main.rs:696:17:696:33 | MyThing {...} | T | main.rs:655:5:656:14 | S1 | -| main.rs:696:30:696:31 | S1 | | main.rs:655:5:656:14 | S1 | -| main.rs:697:13:697:13 | y | | main.rs:650:5:653:5 | MyThing | -| main.rs:697:13:697:13 | y | T | main.rs:657:5:658:14 | S2 | -| main.rs:697:17:697:33 | MyThing {...} | | main.rs:650:5:653:5 | MyThing | -| main.rs:697:17:697:33 | MyThing {...} | T | main.rs:657:5:658:14 | S2 | -| main.rs:697:30:697:31 | S2 | | main.rs:657:5:658:14 | S2 | -| main.rs:699:18:699:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:699:18:699:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:699:18:699:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:699:18:699:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:699:26:699:26 | x | | main.rs:650:5:653:5 | MyThing | -| main.rs:699:26:699:26 | x | T | main.rs:655:5:656:14 | S1 | -| main.rs:699:26:699:31 | x.m2() | | main.rs:655:5:656:14 | S1 | -| main.rs:700:18:700:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:700:18:700:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:700:18:700:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:700:18:700:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:700:26:700:26 | y | | main.rs:650:5:653:5 | MyThing | -| main.rs:700:26:700:26 | y | T | main.rs:657:5:658:14 | S2 | -| main.rs:700:26:700:31 | y.m2() | | main.rs:657:5:658:14 | S2 | -| main.rs:702:13:702:14 | x2 | | main.rs:650:5:653:5 | MyThing | -| main.rs:702:13:702:14 | x2 | T | main.rs:655:5:656:14 | S1 | -| main.rs:702:18:702:34 | MyThing {...} | | main.rs:650:5:653:5 | MyThing | -| main.rs:702:18:702:34 | MyThing {...} | T | main.rs:655:5:656:14 | S1 | -| main.rs:702:31:702:32 | S1 | | main.rs:655:5:656:14 | S1 | -| main.rs:703:13:703:14 | y2 | | main.rs:650:5:653:5 | MyThing | -| main.rs:703:13:703:14 | y2 | T | main.rs:657:5:658:14 | S2 | -| main.rs:703:18:703:34 | MyThing {...} | | main.rs:650:5:653:5 | MyThing | -| main.rs:703:18:703:34 | MyThing {...} | T | main.rs:657:5:658:14 | S2 | -| main.rs:703:31:703:32 | S2 | | main.rs:657:5:658:14 | S2 | -| main.rs:705:18:705:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:705:18:705:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:705:18:705:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:705:18:705:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:705:26:705:42 | call_trait_m1(...) | | main.rs:655:5:656:14 | S1 | -| main.rs:705:40:705:41 | x2 | | main.rs:650:5:653:5 | MyThing | -| main.rs:705:40:705:41 | x2 | T | main.rs:655:5:656:14 | S1 | -| main.rs:706:18:706:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:706:18:706:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:706:18:706:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:706:18:706:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:706:26:706:42 | call_trait_m1(...) | | main.rs:657:5:658:14 | S2 | -| main.rs:706:40:706:41 | y2 | | main.rs:650:5:653:5 | MyThing | -| main.rs:706:40:706:41 | y2 | T | main.rs:657:5:658:14 | S2 | -| main.rs:708:13:708:14 | x3 | | main.rs:650:5:653:5 | MyThing | -| main.rs:708:13:708:14 | x3 | T | main.rs:650:5:653:5 | MyThing | -| main.rs:708:13:708:14 | x3 | T.T | main.rs:655:5:656:14 | S1 | -| main.rs:708:18:710:9 | MyThing {...} | | main.rs:650:5:653:5 | MyThing | -| main.rs:708:18:710:9 | MyThing {...} | T | main.rs:650:5:653:5 | MyThing | -| main.rs:708:18:710:9 | MyThing {...} | T.T | main.rs:655:5:656:14 | S1 | -| main.rs:709:16:709:32 | MyThing {...} | | main.rs:650:5:653:5 | MyThing | -| main.rs:709:16:709:32 | MyThing {...} | T | main.rs:655:5:656:14 | S1 | -| main.rs:709:29:709:30 | S1 | | main.rs:655:5:656:14 | S1 | -| main.rs:711:13:711:14 | y3 | | main.rs:650:5:653:5 | MyThing | -| main.rs:711:13:711:14 | y3 | T | main.rs:650:5:653:5 | MyThing | -| main.rs:711:13:711:14 | y3 | T.T | main.rs:657:5:658:14 | S2 | -| main.rs:711:18:713:9 | MyThing {...} | | main.rs:650:5:653:5 | MyThing | -| main.rs:711:18:713:9 | MyThing {...} | T | main.rs:650:5:653:5 | MyThing | -| main.rs:711:18:713:9 | MyThing {...} | T.T | main.rs:657:5:658:14 | S2 | -| main.rs:712:16:712:32 | MyThing {...} | | main.rs:650:5:653:5 | MyThing | -| main.rs:712:16:712:32 | MyThing {...} | T | main.rs:657:5:658:14 | S2 | -| main.rs:712:29:712:30 | S2 | | main.rs:657:5:658:14 | S2 | -| main.rs:715:13:715:13 | a | | main.rs:655:5:656:14 | S1 | -| main.rs:715:17:715:39 | call_trait_thing_m1(...) | | main.rs:655:5:656:14 | S1 | -| main.rs:715:37:715:38 | x3 | | main.rs:650:5:653:5 | MyThing | -| main.rs:715:37:715:38 | x3 | T | main.rs:650:5:653:5 | MyThing | -| main.rs:715:37:715:38 | x3 | T.T | main.rs:655:5:656:14 | S1 | -| main.rs:716:18:716:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:716:18:716:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:716:18:716:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:716:18:716:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:716:26:716:26 | a | | main.rs:655:5:656:14 | S1 | -| main.rs:717:13:717:13 | b | | main.rs:657:5:658:14 | S2 | -| main.rs:717:17:717:39 | call_trait_thing_m1(...) | | main.rs:657:5:658:14 | S2 | -| main.rs:717:37:717:38 | y3 | | main.rs:650:5:653:5 | MyThing | -| main.rs:717:37:717:38 | y3 | T | main.rs:650:5:653:5 | MyThing | -| main.rs:717:37:717:38 | y3 | T.T | main.rs:657:5:658:14 | S2 | -| main.rs:718:18:718:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:718:18:718:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:718:18:718:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:718:18:718:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:718:26:718:26 | b | | main.rs:657:5:658:14 | S2 | -| main.rs:729:19:729:22 | SelfParam | | main.rs:723:5:726:5 | Wrapper | -| main.rs:729:19:729:22 | SelfParam | A | main.rs:728:10:728:10 | A | -| main.rs:729:30:731:9 | { ... } | | main.rs:728:10:728:10 | A | -| main.rs:730:13:730:16 | self | | main.rs:723:5:726:5 | Wrapper | -| main.rs:730:13:730:16 | self | A | main.rs:728:10:728:10 | A | -| main.rs:730:13:730:22 | self.field | | main.rs:728:10:728:10 | A | -| main.rs:738:15:738:18 | SelfParam | | main.rs:734:5:748:5 | Self [trait MyTrait] | -| main.rs:740:15:740:18 | SelfParam | | main.rs:734:5:748:5 | Self [trait MyTrait] | -| main.rs:744:9:747:9 | { ... } | | main.rs:735:9:735:28 | AssociatedType | -| main.rs:745:13:745:16 | self | | main.rs:734:5:748:5 | Self [trait MyTrait] | -| main.rs:745:13:745:21 | self.m1() | | main.rs:735:9:735:28 | AssociatedType | -| main.rs:746:13:746:43 | ...::default(...) | | main.rs:735:9:735:28 | AssociatedType | -| main.rs:754:19:754:23 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:754:19:754:23 | SelfParam | &T | main.rs:750:5:760:5 | Self [trait MyTraitAssoc2] | -| main.rs:754:26:754:26 | a | | main.rs:754:16:754:16 | A | -| main.rs:756:22:756:26 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:756:22:756:26 | SelfParam | &T | main.rs:750:5:760:5 | Self [trait MyTraitAssoc2] | -| main.rs:756:29:756:29 | a | | main.rs:756:19:756:19 | A | -| main.rs:756:35:756:35 | b | | main.rs:756:19:756:19 | A | -| main.rs:756:75:759:9 | { ... } | | main.rs:751:9:751:52 | GenericAssociatedType | -| main.rs:757:13:757:16 | self | | file://:0:0:0:0 | & | -| main.rs:757:13:757:16 | self | &T | main.rs:750:5:760:5 | Self [trait MyTraitAssoc2] | -| main.rs:757:13:757:23 | self.put(...) | | main.rs:751:9:751:52 | GenericAssociatedType | -| main.rs:757:22:757:22 | a | | main.rs:756:19:756:19 | A | -| main.rs:758:13:758:16 | self | | file://:0:0:0:0 | & | -| main.rs:758:13:758:16 | self | &T | main.rs:750:5:760:5 | Self [trait MyTraitAssoc2] | -| main.rs:758:13:758:23 | self.put(...) | | main.rs:751:9:751:52 | GenericAssociatedType | -| main.rs:758:22:758:22 | b | | main.rs:756:19:756:19 | A | -| main.rs:767:21:767:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:767:21:767:25 | SelfParam | &T | main.rs:762:5:772:5 | Self [trait TraitMultipleAssoc] | -| main.rs:769:20:769:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:769:20:769:24 | SelfParam | &T | main.rs:762:5:772:5 | Self [trait TraitMultipleAssoc] | -| main.rs:771:20:771:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:771:20:771:24 | SelfParam | &T | main.rs:762:5:772:5 | Self [trait TraitMultipleAssoc] | -| main.rs:787:15:787:18 | SelfParam | | main.rs:774:5:775:13 | S | -| main.rs:787:45:789:9 | { ... } | | main.rs:780:5:781:14 | AT | -| main.rs:788:13:788:14 | AT | | main.rs:780:5:781:14 | AT | -| main.rs:797:19:797:23 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:797:19:797:23 | SelfParam | &T | main.rs:774:5:775:13 | S | -| main.rs:797:26:797:26 | a | | main.rs:797:16:797:16 | A | -| main.rs:797:46:799:9 | { ... } | | main.rs:723:5:726:5 | Wrapper | -| main.rs:797:46:799:9 | { ... } | A | main.rs:797:16:797:16 | A | -| main.rs:798:13:798:32 | Wrapper {...} | | main.rs:723:5:726:5 | Wrapper | -| main.rs:798:13:798:32 | Wrapper {...} | A | main.rs:797:16:797:16 | A | -| main.rs:798:30:798:30 | a | | main.rs:797:16:797:16 | A | -| main.rs:806:15:806:18 | SelfParam | | main.rs:777:5:778:14 | S2 | -| main.rs:806:45:808:9 | { ... } | | main.rs:723:5:726:5 | Wrapper | -| main.rs:806:45:808:9 | { ... } | A | main.rs:777:5:778:14 | S2 | -| main.rs:807:13:807:35 | Wrapper {...} | | main.rs:723:5:726:5 | Wrapper | -| main.rs:807:13:807:35 | Wrapper {...} | A | main.rs:777:5:778:14 | S2 | -| main.rs:807:30:807:33 | self | | main.rs:777:5:778:14 | S2 | -| main.rs:813:30:815:9 | { ... } | | main.rs:723:5:726:5 | Wrapper | -| main.rs:813:30:815:9 | { ... } | A | main.rs:777:5:778:14 | S2 | -| main.rs:814:13:814:33 | Wrapper {...} | | main.rs:723:5:726:5 | Wrapper | -| main.rs:814:13:814:33 | Wrapper {...} | A | main.rs:777:5:778:14 | S2 | -| main.rs:814:30:814:31 | S2 | | main.rs:777:5:778:14 | S2 | -| main.rs:820:22:820:26 | thing | | main.rs:820:10:820:19 | T | -| main.rs:821:9:821:13 | thing | | main.rs:820:10:820:19 | T | -| main.rs:828:21:828:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:828:21:828:25 | SelfParam | &T | main.rs:780:5:781:14 | AT | -| main.rs:828:34:830:9 | { ... } | | main.rs:780:5:781:14 | AT | -| main.rs:829:13:829:14 | AT | | main.rs:780:5:781:14 | AT | -| main.rs:832:20:832:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:832:20:832:24 | SelfParam | &T | main.rs:780:5:781:14 | AT | -| main.rs:832:43:834:9 | { ... } | | main.rs:774:5:775:13 | S | -| main.rs:833:13:833:13 | S | | main.rs:774:5:775:13 | S | +| main.rs:584:26:584:27 | s1 | | main.rs:581:35:581:42 | I | +| main.rs:587:65:587:65 | x | | main.rs:587:46:587:62 | T | +| main.rs:589:13:589:14 | s2 | | main.rs:587:36:587:43 | I | +| main.rs:589:18:589:18 | x | | main.rs:587:46:587:62 | T | +| main.rs:589:18:589:27 | x.method() | | main.rs:587:36:587:43 | I | +| main.rs:590:18:590:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:590:18:590:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:590:18:590:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:590:18:590:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:590:26:590:27 | s2 | | main.rs:587:36:587:43 | I | +| main.rs:593:49:593:49 | x | | main.rs:593:30:593:46 | T | +| main.rs:594:13:594:13 | s | | main.rs:563:5:564:14 | S1 | +| main.rs:594:17:594:17 | x | | main.rs:593:30:593:46 | T | +| main.rs:594:17:594:26 | x.method() | | main.rs:563:5:564:14 | S1 | +| main.rs:595:18:595:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:595:18:595:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:595:18:595:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:595:18:595:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:595:26:595:26 | s | | main.rs:563:5:564:14 | S1 | +| main.rs:598:53:598:53 | x | | main.rs:598:34:598:50 | T | +| main.rs:599:13:599:13 | s | | main.rs:563:5:564:14 | S1 | +| main.rs:599:17:599:17 | x | | main.rs:598:34:598:50 | T | +| main.rs:599:17:599:26 | x.method() | | main.rs:563:5:564:14 | S1 | +| main.rs:600:18:600:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:600:18:600:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:600:18:600:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:600:18:600:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:600:26:600:26 | s | | main.rs:563:5:564:14 | S1 | +| main.rs:603:43:603:43 | x | | main.rs:603:40:603:40 | T | +| main.rs:607:13:607:13 | s | | main.rs:563:5:564:14 | S1 | +| main.rs:607:17:607:17 | x | | main.rs:603:40:603:40 | T | +| main.rs:607:17:607:26 | x.method() | | main.rs:563:5:564:14 | S1 | +| main.rs:608:18:608:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:608:18:608:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:608:18:608:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:608:18:608:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:608:26:608:26 | s | | main.rs:563:5:564:14 | S1 | +| main.rs:612:16:612:19 | SelfParam | | main.rs:611:5:615:5 | Self [trait Pair] | +| main.rs:614:16:614:19 | SelfParam | | main.rs:611:5:615:5 | Self [trait Pair] | +| main.rs:617:53:617:53 | x | | main.rs:617:50:617:50 | T | +| main.rs:617:59:617:59 | y | | main.rs:617:50:617:50 | T | +| main.rs:622:13:622:13 | _ | | main.rs:563:5:564:14 | S1 | +| main.rs:622:17:622:17 | x | | main.rs:617:50:617:50 | T | +| main.rs:622:17:622:23 | x.fst() | | main.rs:563:5:564:14 | S1 | +| main.rs:623:13:623:13 | _ | | main.rs:563:5:564:14 | S1 | +| main.rs:623:17:623:17 | y | | main.rs:617:50:617:50 | T | +| main.rs:623:17:623:26 | y.method() | | main.rs:563:5:564:14 | S1 | +| main.rs:626:58:626:58 | x | | main.rs:626:41:626:55 | T | +| main.rs:626:64:626:64 | y | | main.rs:626:41:626:55 | T | +| main.rs:628:13:628:14 | s1 | | main.rs:563:5:564:14 | S1 | +| main.rs:628:18:628:18 | x | | main.rs:626:41:626:55 | T | +| main.rs:628:18:628:24 | x.fst() | | main.rs:563:5:564:14 | S1 | +| main.rs:629:13:629:14 | s2 | | main.rs:566:5:567:14 | S2 | +| main.rs:629:18:629:18 | y | | main.rs:626:41:626:55 | T | +| main.rs:629:18:629:24 | y.snd() | | main.rs:566:5:567:14 | S2 | +| main.rs:630:18:630:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:630:18:630:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:630:18:630:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:630:18:630:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:630:32:630:33 | s1 | | main.rs:563:5:564:14 | S1 | +| main.rs:630:36:630:37 | s2 | | main.rs:566:5:567:14 | S2 | +| main.rs:633:69:633:69 | x | | main.rs:633:52:633:66 | T | +| main.rs:633:75:633:75 | y | | main.rs:633:52:633:66 | T | +| main.rs:635:13:635:14 | s1 | | main.rs:563:5:564:14 | S1 | +| main.rs:635:18:635:18 | x | | main.rs:633:52:633:66 | T | +| main.rs:635:18:635:24 | x.fst() | | main.rs:563:5:564:14 | S1 | +| main.rs:636:13:636:14 | s2 | | main.rs:633:41:633:49 | T2 | +| main.rs:636:18:636:18 | y | | main.rs:633:52:633:66 | T | +| main.rs:636:18:636:24 | y.snd() | | main.rs:633:41:633:49 | T2 | +| main.rs:637:18:637:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:637:18:637:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:637:18:637:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:637:18:637:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:637:32:637:33 | s1 | | main.rs:563:5:564:14 | S1 | +| main.rs:637:36:637:37 | s2 | | main.rs:633:41:633:49 | T2 | +| main.rs:640:50:640:50 | x | | main.rs:640:41:640:47 | T | +| main.rs:640:56:640:56 | y | | main.rs:640:41:640:47 | T | +| main.rs:642:13:642:14 | s1 | | {EXTERNAL LOCATION} | bool | +| main.rs:642:18:642:18 | x | | main.rs:640:41:640:47 | T | +| main.rs:642:18:642:24 | x.fst() | | {EXTERNAL LOCATION} | bool | +| main.rs:643:13:643:14 | s2 | | {EXTERNAL LOCATION} | i64 | +| main.rs:643:18:643:18 | y | | main.rs:640:41:640:47 | T | +| main.rs:643:18:643:24 | y.snd() | | {EXTERNAL LOCATION} | i64 | +| main.rs:644:18:644:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:644:18:644:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:644:18:644:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:644:18:644:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:644:32:644:33 | s1 | | {EXTERNAL LOCATION} | bool | +| main.rs:644:36:644:37 | s2 | | {EXTERNAL LOCATION} | i64 | +| main.rs:647:54:647:54 | x | | main.rs:647:41:647:51 | T | +| main.rs:647:60:647:60 | y | | main.rs:647:41:647:51 | T | +| main.rs:649:13:649:14 | s1 | | {EXTERNAL LOCATION} | u8 | +| main.rs:649:18:649:18 | x | | main.rs:647:41:647:51 | T | +| main.rs:649:18:649:24 | x.fst() | | {EXTERNAL LOCATION} | u8 | +| main.rs:650:13:650:14 | s2 | | {EXTERNAL LOCATION} | i64 | +| main.rs:650:18:650:18 | y | | main.rs:647:41:647:51 | T | +| main.rs:650:18:650:24 | y.snd() | | {EXTERNAL LOCATION} | i64 | +| main.rs:651:18:651:29 | "{:?}, {:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:651:18:651:29 | "{:?}, {:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:651:18:651:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:651:18:651:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:651:32:651:33 | s1 | | {EXTERNAL LOCATION} | u8 | +| main.rs:651:36:651:37 | s2 | | {EXTERNAL LOCATION} | i64 | +| main.rs:667:15:667:18 | SelfParam | | main.rs:666:5:677:5 | Self [trait MyTrait] | +| main.rs:669:15:669:18 | SelfParam | | main.rs:666:5:677:5 | Self [trait MyTrait] | +| main.rs:672:9:674:9 | { ... } | | main.rs:666:19:666:19 | A | +| main.rs:673:13:673:16 | self | | main.rs:666:5:677:5 | Self [trait MyTrait] | +| main.rs:673:13:673:21 | self.m1() | | main.rs:666:19:666:19 | A | +| main.rs:676:18:676:18 | x | | main.rs:666:5:677:5 | Self [trait MyTrait] | +| main.rs:681:50:681:50 | x | | main.rs:681:26:681:47 | T2 | +| main.rs:681:63:684:5 | { ... } | | main.rs:681:22:681:23 | T1 | +| main.rs:682:9:682:9 | x | | main.rs:681:26:681:47 | T2 | +| main.rs:682:9:682:14 | x.m1() | | main.rs:681:22:681:23 | T1 | +| main.rs:683:9:683:9 | x | | main.rs:681:26:681:47 | T2 | +| main.rs:683:9:683:14 | x.m1() | | main.rs:681:22:681:23 | T1 | +| main.rs:685:52:685:52 | x | | main.rs:685:28:685:49 | T2 | +| main.rs:685:65:689:5 | { ... } | | main.rs:685:24:685:25 | T1 | +| main.rs:686:13:686:13 | y | | main.rs:685:24:685:25 | T1 | +| main.rs:686:17:686:25 | ...::m1(...) | | main.rs:685:24:685:25 | T1 | +| main.rs:686:24:686:24 | x | | main.rs:685:28:685:49 | T2 | +| main.rs:687:9:687:9 | y | | main.rs:685:24:685:25 | T1 | +| main.rs:688:9:688:17 | ...::m1(...) | | main.rs:685:24:685:25 | T1 | +| main.rs:688:16:688:16 | x | | main.rs:685:28:685:49 | T2 | +| main.rs:690:52:690:52 | x | | main.rs:690:28:690:49 | T2 | +| main.rs:690:65:694:5 | { ... } | | main.rs:690:24:690:25 | T1 | +| main.rs:691:13:691:13 | y | | main.rs:690:24:690:25 | T1 | +| main.rs:691:17:691:30 | ...::m1(...) | | main.rs:690:24:690:25 | T1 | +| main.rs:691:29:691:29 | x | | main.rs:690:28:690:49 | T2 | +| main.rs:692:9:692:9 | y | | main.rs:690:24:690:25 | T1 | +| main.rs:693:9:693:22 | ...::m1(...) | | main.rs:690:24:690:25 | T1 | +| main.rs:693:21:693:21 | x | | main.rs:690:28:690:49 | T2 | +| main.rs:695:55:695:55 | x | | main.rs:695:31:695:52 | T2 | +| main.rs:695:68:699:5 | { ... } | | main.rs:695:27:695:28 | T1 | +| main.rs:696:13:696:13 | y | | main.rs:695:27:695:28 | T1 | +| main.rs:696:17:696:28 | ...::assoc(...) | | main.rs:695:27:695:28 | T1 | +| main.rs:696:27:696:27 | x | | main.rs:695:31:695:52 | T2 | +| main.rs:697:9:697:9 | y | | main.rs:695:27:695:28 | T1 | +| main.rs:698:9:698:20 | ...::assoc(...) | | main.rs:695:27:695:28 | T1 | +| main.rs:698:19:698:19 | x | | main.rs:695:31:695:52 | T2 | +| main.rs:700:55:700:55 | x | | main.rs:700:31:700:52 | T2 | +| main.rs:700:68:704:5 | { ... } | | main.rs:700:27:700:28 | T1 | +| main.rs:701:32:701:32 | x | | main.rs:700:31:700:52 | T2 | +| main.rs:703:9:703:25 | ...::assoc(...) | | main.rs:700:27:700:28 | T1 | +| main.rs:703:24:703:24 | x | | main.rs:700:31:700:52 | T2 | +| main.rs:708:49:708:49 | x | | main.rs:656:5:659:5 | MyThing | +| main.rs:708:49:708:49 | x | T | main.rs:708:32:708:46 | T2 | +| main.rs:708:71:710:5 | { ... } | | main.rs:708:28:708:29 | T1 | +| main.rs:709:9:709:9 | x | | main.rs:656:5:659:5 | MyThing | +| main.rs:709:9:709:9 | x | T | main.rs:708:32:708:46 | T2 | +| main.rs:709:9:709:11 | x.a | | main.rs:708:32:708:46 | T2 | +| main.rs:709:9:709:16 | ... .m1() | | main.rs:708:28:708:29 | T1 | +| main.rs:711:51:711:51 | x | | main.rs:656:5:659:5 | MyThing | +| main.rs:711:51:711:51 | x | T | main.rs:711:34:711:48 | T2 | +| main.rs:711:73:713:5 | { ... } | | main.rs:711:30:711:31 | T1 | +| main.rs:712:9:712:19 | ...::m1(...) | | main.rs:711:30:711:31 | T1 | +| main.rs:712:16:712:16 | x | | main.rs:656:5:659:5 | MyThing | +| main.rs:712:16:712:16 | x | T | main.rs:711:34:711:48 | T2 | +| main.rs:712:16:712:18 | x.a | | main.rs:711:34:711:48 | T2 | +| main.rs:714:51:714:51 | x | | main.rs:656:5:659:5 | MyThing | +| main.rs:714:51:714:51 | x | T | main.rs:714:34:714:48 | T2 | +| main.rs:714:73:716:5 | { ... } | | main.rs:714:30:714:31 | T1 | +| main.rs:715:9:715:24 | ...::m1(...) | | main.rs:714:30:714:31 | T1 | +| main.rs:715:21:715:21 | x | | main.rs:656:5:659:5 | MyThing | +| main.rs:715:21:715:21 | x | T | main.rs:714:34:714:48 | T2 | +| main.rs:715:21:715:23 | x.a | | main.rs:666:5:677:5 | trait MyTrait | +| main.rs:715:21:715:23 | x.a | | main.rs:714:34:714:48 | T2 | +| main.rs:719:15:719:18 | SelfParam | | main.rs:656:5:659:5 | MyThing | +| main.rs:719:15:719:18 | SelfParam | T | main.rs:718:10:718:10 | T | +| main.rs:719:26:721:9 | { ... } | | main.rs:718:10:718:10 | T | +| main.rs:720:13:720:16 | self | | main.rs:656:5:659:5 | MyThing | +| main.rs:720:13:720:16 | self | T | main.rs:718:10:718:10 | T | +| main.rs:720:13:720:18 | self.a | | main.rs:718:10:718:10 | T | +| main.rs:723:18:723:18 | x | | main.rs:656:5:659:5 | MyThing | +| main.rs:723:18:723:18 | x | T | main.rs:718:10:718:10 | T | +| main.rs:723:32:725:9 | { ... } | | main.rs:718:10:718:10 | T | +| main.rs:724:13:724:13 | x | | main.rs:656:5:659:5 | MyThing | +| main.rs:724:13:724:13 | x | T | main.rs:718:10:718:10 | T | +| main.rs:724:13:724:15 | x.a | | main.rs:718:10:718:10 | T | +| main.rs:729:13:729:13 | x | | main.rs:656:5:659:5 | MyThing | +| main.rs:729:13:729:13 | x | T | main.rs:661:5:662:14 | S1 | +| main.rs:729:17:729:33 | MyThing {...} | | main.rs:656:5:659:5 | MyThing | +| main.rs:729:17:729:33 | MyThing {...} | T | main.rs:661:5:662:14 | S1 | +| main.rs:729:30:729:31 | S1 | | main.rs:661:5:662:14 | S1 | +| main.rs:730:13:730:13 | y | | main.rs:656:5:659:5 | MyThing | +| main.rs:730:13:730:13 | y | T | main.rs:663:5:664:14 | S2 | +| main.rs:730:17:730:33 | MyThing {...} | | main.rs:656:5:659:5 | MyThing | +| main.rs:730:17:730:33 | MyThing {...} | T | main.rs:663:5:664:14 | S2 | +| main.rs:730:30:730:31 | S2 | | main.rs:663:5:664:14 | S2 | +| main.rs:732:18:732:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:732:18:732:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:732:18:732:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:732:18:732:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:732:26:732:26 | x | | main.rs:656:5:659:5 | MyThing | +| main.rs:732:26:732:26 | x | T | main.rs:661:5:662:14 | S1 | +| main.rs:732:26:732:31 | x.m1() | | main.rs:661:5:662:14 | S1 | +| main.rs:733:18:733:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:733:18:733:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:733:18:733:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:733:18:733:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:733:26:733:26 | y | | main.rs:656:5:659:5 | MyThing | +| main.rs:733:26:733:26 | y | T | main.rs:663:5:664:14 | S2 | +| main.rs:733:26:733:31 | y.m1() | | main.rs:663:5:664:14 | S2 | +| main.rs:735:13:735:13 | x | | main.rs:656:5:659:5 | MyThing | +| main.rs:735:13:735:13 | x | T | main.rs:661:5:662:14 | S1 | +| main.rs:735:17:735:33 | MyThing {...} | | main.rs:656:5:659:5 | MyThing | +| main.rs:735:17:735:33 | MyThing {...} | T | main.rs:661:5:662:14 | S1 | +| main.rs:735:30:735:31 | S1 | | main.rs:661:5:662:14 | S1 | +| main.rs:736:13:736:13 | y | | main.rs:656:5:659:5 | MyThing | +| main.rs:736:13:736:13 | y | T | main.rs:663:5:664:14 | S2 | +| main.rs:736:17:736:33 | MyThing {...} | | main.rs:656:5:659:5 | MyThing | +| main.rs:736:17:736:33 | MyThing {...} | T | main.rs:663:5:664:14 | S2 | +| main.rs:736:30:736:31 | S2 | | main.rs:663:5:664:14 | S2 | +| main.rs:738:18:738:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:738:18:738:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:738:18:738:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:738:18:738:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:738:26:738:26 | x | | main.rs:656:5:659:5 | MyThing | +| main.rs:738:26:738:26 | x | T | main.rs:661:5:662:14 | S1 | +| main.rs:738:26:738:31 | x.m2() | | main.rs:661:5:662:14 | S1 | +| main.rs:739:18:739:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:739:18:739:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:739:18:739:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:739:18:739:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:739:26:739:26 | y | | main.rs:656:5:659:5 | MyThing | +| main.rs:739:26:739:26 | y | T | main.rs:663:5:664:14 | S2 | +| main.rs:739:26:739:31 | y.m2() | | main.rs:663:5:664:14 | S2 | +| main.rs:741:13:741:14 | x2 | | main.rs:656:5:659:5 | MyThing | +| main.rs:741:13:741:14 | x2 | T | main.rs:661:5:662:14 | S1 | +| main.rs:741:18:741:34 | MyThing {...} | | main.rs:656:5:659:5 | MyThing | +| main.rs:741:18:741:34 | MyThing {...} | T | main.rs:661:5:662:14 | S1 | +| main.rs:741:31:741:32 | S1 | | main.rs:661:5:662:14 | S1 | +| main.rs:742:13:742:14 | y2 | | main.rs:656:5:659:5 | MyThing | +| main.rs:742:13:742:14 | y2 | T | main.rs:663:5:664:14 | S2 | +| main.rs:742:18:742:34 | MyThing {...} | | main.rs:656:5:659:5 | MyThing | +| main.rs:742:18:742:34 | MyThing {...} | T | main.rs:663:5:664:14 | S2 | +| main.rs:742:31:742:32 | S2 | | main.rs:663:5:664:14 | S2 | +| main.rs:744:13:744:13 | a | | main.rs:661:5:662:14 | S1 | +| main.rs:744:17:744:33 | call_trait_m1(...) | | main.rs:661:5:662:14 | S1 | +| main.rs:744:31:744:32 | x2 | | main.rs:656:5:659:5 | MyThing | +| main.rs:744:31:744:32 | x2 | T | main.rs:661:5:662:14 | S1 | +| main.rs:745:18:745:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:745:18:745:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:745:18:745:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:745:18:745:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:745:26:745:26 | a | | main.rs:661:5:662:14 | S1 | +| main.rs:746:13:746:13 | a | | main.rs:661:5:662:14 | S1 | +| main.rs:746:17:746:35 | call_trait_m1_2(...) | | main.rs:661:5:662:14 | S1 | +| main.rs:746:33:746:34 | x2 | | main.rs:656:5:659:5 | MyThing | +| main.rs:746:33:746:34 | x2 | T | main.rs:661:5:662:14 | S1 | +| main.rs:747:18:747:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:747:18:747:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:747:18:747:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:747:18:747:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:747:26:747:26 | a | | main.rs:661:5:662:14 | S1 | +| main.rs:748:13:748:13 | a | | main.rs:661:5:662:14 | S1 | +| main.rs:748:17:748:35 | call_trait_m1_3(...) | | main.rs:661:5:662:14 | S1 | +| main.rs:748:33:748:34 | x2 | | main.rs:656:5:659:5 | MyThing | +| main.rs:748:33:748:34 | x2 | T | main.rs:661:5:662:14 | S1 | +| main.rs:749:18:749:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:749:18:749:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:749:18:749:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:749:18:749:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:749:26:749:26 | a | | main.rs:661:5:662:14 | S1 | +| main.rs:750:13:750:13 | a | | main.rs:663:5:664:14 | S2 | +| main.rs:750:17:750:33 | call_trait_m1(...) | | main.rs:663:5:664:14 | S2 | +| main.rs:750:31:750:32 | y2 | | main.rs:656:5:659:5 | MyThing | +| main.rs:750:31:750:32 | y2 | T | main.rs:663:5:664:14 | S2 | +| main.rs:751:18:751:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:751:18:751:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:751:18:751:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:751:18:751:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:751:26:751:26 | a | | main.rs:663:5:664:14 | S2 | +| main.rs:752:13:752:13 | a | | main.rs:663:5:664:14 | S2 | +| main.rs:752:17:752:35 | call_trait_m1_2(...) | | main.rs:663:5:664:14 | S2 | +| main.rs:752:33:752:34 | y2 | | main.rs:656:5:659:5 | MyThing | +| main.rs:752:33:752:34 | y2 | T | main.rs:663:5:664:14 | S2 | +| main.rs:753:18:753:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:753:18:753:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:753:18:753:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:753:18:753:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:753:26:753:26 | a | | main.rs:663:5:664:14 | S2 | +| main.rs:754:13:754:13 | a | | main.rs:663:5:664:14 | S2 | +| main.rs:754:17:754:35 | call_trait_m1_3(...) | | main.rs:663:5:664:14 | S2 | +| main.rs:754:33:754:34 | y2 | | main.rs:656:5:659:5 | MyThing | +| main.rs:754:33:754:34 | y2 | T | main.rs:663:5:664:14 | S2 | +| main.rs:755:18:755:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:755:18:755:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:755:18:755:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:755:18:755:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:755:26:755:26 | a | | main.rs:663:5:664:14 | S2 | +| main.rs:756:13:756:13 | a | | main.rs:661:5:662:14 | S1 | +| main.rs:756:17:756:38 | call_trait_assoc_1(...) | | main.rs:661:5:662:14 | S1 | +| main.rs:756:36:756:37 | x2 | | main.rs:656:5:659:5 | MyThing | +| main.rs:756:36:756:37 | x2 | T | main.rs:661:5:662:14 | S1 | +| main.rs:757:18:757:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:757:18:757:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:757:18:757:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:757:18:757:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:757:26:757:26 | a | | main.rs:661:5:662:14 | S1 | +| main.rs:758:13:758:13 | a | | main.rs:661:5:662:14 | S1 | +| main.rs:758:17:758:38 | call_trait_assoc_2(...) | | main.rs:661:5:662:14 | S1 | +| main.rs:758:36:758:37 | x2 | | main.rs:656:5:659:5 | MyThing | +| main.rs:758:36:758:37 | x2 | T | main.rs:661:5:662:14 | S1 | +| main.rs:759:18:759:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:759:18:759:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:759:18:759:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:759:18:759:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:759:26:759:26 | a | | main.rs:661:5:662:14 | S1 | +| main.rs:760:13:760:13 | a | | main.rs:663:5:664:14 | S2 | +| main.rs:760:17:760:38 | call_trait_assoc_1(...) | | main.rs:663:5:664:14 | S2 | +| main.rs:760:36:760:37 | y2 | | main.rs:656:5:659:5 | MyThing | +| main.rs:760:36:760:37 | y2 | T | main.rs:663:5:664:14 | S2 | +| main.rs:761:18:761:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:761:18:761:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:761:18:761:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:761:18:761:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:761:26:761:26 | a | | main.rs:663:5:664:14 | S2 | +| main.rs:762:13:762:13 | a | | main.rs:663:5:664:14 | S2 | +| main.rs:762:17:762:38 | call_trait_assoc_2(...) | | main.rs:663:5:664:14 | S2 | +| main.rs:762:36:762:37 | y2 | | main.rs:656:5:659:5 | MyThing | +| main.rs:762:36:762:37 | y2 | T | main.rs:663:5:664:14 | S2 | +| main.rs:763:18:763:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:763:18:763:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:763:18:763:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:763:18:763:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:763:26:763:26 | a | | main.rs:663:5:664:14 | S2 | +| main.rs:765:13:765:14 | x3 | | main.rs:656:5:659:5 | MyThing | +| main.rs:765:13:765:14 | x3 | T | main.rs:656:5:659:5 | MyThing | +| main.rs:765:13:765:14 | x3 | T.T | main.rs:661:5:662:14 | S1 | +| main.rs:765:18:767:9 | MyThing {...} | | main.rs:656:5:659:5 | MyThing | +| main.rs:765:18:767:9 | MyThing {...} | T | main.rs:656:5:659:5 | MyThing | +| main.rs:765:18:767:9 | MyThing {...} | T.T | main.rs:661:5:662:14 | S1 | +| main.rs:766:16:766:32 | MyThing {...} | | main.rs:656:5:659:5 | MyThing | +| main.rs:766:16:766:32 | MyThing {...} | T | main.rs:661:5:662:14 | S1 | +| main.rs:766:29:766:30 | S1 | | main.rs:661:5:662:14 | S1 | +| main.rs:768:13:768:14 | y3 | | main.rs:656:5:659:5 | MyThing | +| main.rs:768:13:768:14 | y3 | T | main.rs:656:5:659:5 | MyThing | +| main.rs:768:13:768:14 | y3 | T.T | main.rs:663:5:664:14 | S2 | +| main.rs:768:18:770:9 | MyThing {...} | | main.rs:656:5:659:5 | MyThing | +| main.rs:768:18:770:9 | MyThing {...} | T | main.rs:656:5:659:5 | MyThing | +| main.rs:768:18:770:9 | MyThing {...} | T.T | main.rs:663:5:664:14 | S2 | +| main.rs:769:16:769:32 | MyThing {...} | | main.rs:656:5:659:5 | MyThing | +| main.rs:769:16:769:32 | MyThing {...} | T | main.rs:663:5:664:14 | S2 | +| main.rs:769:29:769:30 | S2 | | main.rs:663:5:664:14 | S2 | +| main.rs:772:13:772:13 | a | | main.rs:661:5:662:14 | S1 | +| main.rs:772:17:772:39 | call_trait_thing_m1(...) | | main.rs:661:5:662:14 | S1 | +| main.rs:772:37:772:38 | x3 | | main.rs:656:5:659:5 | MyThing | +| main.rs:772:37:772:38 | x3 | T | main.rs:656:5:659:5 | MyThing | +| main.rs:772:37:772:38 | x3 | T.T | main.rs:661:5:662:14 | S1 | +| main.rs:773:18:773:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:773:18:773:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:773:18:773:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:773:18:773:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:773:26:773:26 | a | | main.rs:661:5:662:14 | S1 | +| main.rs:774:13:774:13 | a | | main.rs:661:5:662:14 | S1 | +| main.rs:774:17:774:41 | call_trait_thing_m1_2(...) | | main.rs:661:5:662:14 | S1 | +| main.rs:774:39:774:40 | x3 | | main.rs:656:5:659:5 | MyThing | +| main.rs:774:39:774:40 | x3 | T | main.rs:656:5:659:5 | MyThing | +| main.rs:774:39:774:40 | x3 | T.T | main.rs:661:5:662:14 | S1 | +| main.rs:775:18:775:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:775:18:775:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:775:18:775:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:775:18:775:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:775:26:775:26 | a | | main.rs:661:5:662:14 | S1 | +| main.rs:776:13:776:13 | a | | main.rs:661:5:662:14 | S1 | +| main.rs:776:17:776:41 | call_trait_thing_m1_3(...) | | main.rs:661:5:662:14 | S1 | +| main.rs:776:39:776:40 | x3 | | main.rs:656:5:659:5 | MyThing | +| main.rs:776:39:776:40 | x3 | T | main.rs:656:5:659:5 | MyThing | +| main.rs:776:39:776:40 | x3 | T.T | main.rs:661:5:662:14 | S1 | +| main.rs:777:18:777:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:777:18:777:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:777:18:777:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:777:18:777:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:777:26:777:26 | a | | main.rs:661:5:662:14 | S1 | +| main.rs:778:13:778:13 | b | | main.rs:663:5:664:14 | S2 | +| main.rs:778:17:778:39 | call_trait_thing_m1(...) | | main.rs:663:5:664:14 | S2 | +| main.rs:778:37:778:38 | y3 | | main.rs:656:5:659:5 | MyThing | +| main.rs:778:37:778:38 | y3 | T | main.rs:656:5:659:5 | MyThing | +| main.rs:778:37:778:38 | y3 | T.T | main.rs:663:5:664:14 | S2 | +| main.rs:779:18:779:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:779:18:779:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:779:18:779:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:779:18:779:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:779:26:779:26 | b | | main.rs:663:5:664:14 | S2 | +| main.rs:780:13:780:13 | b | | main.rs:663:5:664:14 | S2 | +| main.rs:780:17:780:41 | call_trait_thing_m1_2(...) | | main.rs:663:5:664:14 | S2 | +| main.rs:780:39:780:40 | y3 | | main.rs:656:5:659:5 | MyThing | +| main.rs:780:39:780:40 | y3 | T | main.rs:656:5:659:5 | MyThing | +| main.rs:780:39:780:40 | y3 | T.T | main.rs:663:5:664:14 | S2 | +| main.rs:781:18:781:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:781:18:781:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:781:18:781:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:781:18:781:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:781:26:781:26 | b | | main.rs:663:5:664:14 | S2 | +| main.rs:782:13:782:13 | b | | main.rs:663:5:664:14 | S2 | +| main.rs:782:17:782:41 | call_trait_thing_m1_3(...) | | main.rs:663:5:664:14 | S2 | +| main.rs:782:39:782:40 | y3 | | main.rs:656:5:659:5 | MyThing | +| main.rs:782:39:782:40 | y3 | T | main.rs:656:5:659:5 | MyThing | +| main.rs:782:39:782:40 | y3 | T.T | main.rs:663:5:664:14 | S2 | +| main.rs:783:18:783:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:783:18:783:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:783:18:783:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:783:18:783:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:783:26:783:26 | b | | main.rs:663:5:664:14 | S2 | +| main.rs:794:19:794:22 | SelfParam | | main.rs:788:5:791:5 | Wrapper | +| main.rs:794:19:794:22 | SelfParam | A | main.rs:793:10:793:10 | A | +| main.rs:794:30:796:9 | { ... } | | main.rs:793:10:793:10 | A | +| main.rs:795:13:795:16 | self | | main.rs:788:5:791:5 | Wrapper | +| main.rs:795:13:795:16 | self | A | main.rs:793:10:793:10 | A | +| main.rs:795:13:795:22 | self.field | | main.rs:793:10:793:10 | A | +| main.rs:803:15:803:18 | SelfParam | | main.rs:799:5:813:5 | Self [trait MyTrait] | +| main.rs:805:15:805:18 | SelfParam | | main.rs:799:5:813:5 | Self [trait MyTrait] | +| main.rs:809:9:812:9 | { ... } | | main.rs:800:9:800:28 | AssociatedType | +| main.rs:810:13:810:16 | self | | main.rs:799:5:813:5 | Self [trait MyTrait] | +| main.rs:810:13:810:21 | self.m1() | | main.rs:800:9:800:28 | AssociatedType | +| main.rs:811:13:811:43 | ...::default(...) | | main.rs:800:9:800:28 | AssociatedType | +| main.rs:819:19:819:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:819:19:819:23 | SelfParam | &T | main.rs:815:5:825:5 | Self [trait MyTraitAssoc2] | +| main.rs:819:26:819:26 | a | | main.rs:819:16:819:16 | A | +| main.rs:821:22:821:26 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:821:22:821:26 | SelfParam | &T | main.rs:815:5:825:5 | Self [trait MyTraitAssoc2] | +| main.rs:821:29:821:29 | a | | main.rs:821:19:821:19 | A | +| main.rs:821:35:821:35 | b | | main.rs:821:19:821:19 | A | +| main.rs:821:75:824:9 | { ... } | | main.rs:816:9:816:52 | GenericAssociatedType | +| main.rs:822:13:822:16 | self | | file://:0:0:0:0 | & | +| main.rs:822:13:822:16 | self | &T | main.rs:815:5:825:5 | Self [trait MyTraitAssoc2] | +| main.rs:822:13:822:23 | self.put(...) | | main.rs:816:9:816:52 | GenericAssociatedType | +| main.rs:822:22:822:22 | a | | main.rs:821:19:821:19 | A | +| main.rs:823:13:823:16 | self | | file://:0:0:0:0 | & | +| main.rs:823:13:823:16 | self | &T | main.rs:815:5:825:5 | Self [trait MyTraitAssoc2] | +| main.rs:823:13:823:23 | self.put(...) | | main.rs:816:9:816:52 | GenericAssociatedType | +| main.rs:823:22:823:22 | b | | main.rs:821:19:821:19 | A | +| main.rs:832:21:832:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:832:21:832:25 | SelfParam | &T | main.rs:827:5:837:5 | Self [trait TraitMultipleAssoc] | +| main.rs:834:20:834:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:834:20:834:24 | SelfParam | &T | main.rs:827:5:837:5 | Self [trait TraitMultipleAssoc] | | main.rs:836:20:836:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:836:20:836:24 | SelfParam | &T | main.rs:780:5:781:14 | AT | -| main.rs:836:43:838:9 | { ... } | | main.rs:777:5:778:14 | S2 | -| main.rs:837:13:837:14 | S2 | | main.rs:777:5:778:14 | S2 | -| main.rs:842:13:842:14 | x1 | | main.rs:774:5:775:13 | S | -| main.rs:842:18:842:18 | S | | main.rs:774:5:775:13 | S | -| main.rs:844:18:844:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:844:18:844:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:844:18:844:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:844:18:844:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:844:26:844:27 | x1 | | main.rs:774:5:775:13 | S | -| main.rs:844:26:844:32 | x1.m1() | | main.rs:780:5:781:14 | AT | -| main.rs:846:13:846:14 | x2 | | main.rs:774:5:775:13 | S | -| main.rs:846:18:846:18 | S | | main.rs:774:5:775:13 | S | -| main.rs:848:13:848:13 | y | | main.rs:780:5:781:14 | AT | -| main.rs:848:17:848:18 | x2 | | main.rs:774:5:775:13 | S | -| main.rs:848:17:848:23 | x2.m2() | | main.rs:780:5:781:14 | AT | -| main.rs:849:18:849:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:849:18:849:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:849:18:849:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:849:18:849:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:849:26:849:26 | y | | main.rs:780:5:781:14 | AT | -| main.rs:851:13:851:14 | x3 | | main.rs:774:5:775:13 | S | -| main.rs:851:18:851:18 | S | | main.rs:774:5:775:13 | S | -| main.rs:853:18:853:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:853:18:853:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:853:18:853:43 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:853:18:853:43 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:853:26:853:27 | x3 | | main.rs:774:5:775:13 | S | -| main.rs:853:26:853:34 | x3.put(...) | | main.rs:723:5:726:5 | Wrapper | -| main.rs:853:26:853:34 | x3.put(...) | A | {EXTERNAL LOCATION} | i32 | -| main.rs:853:26:853:43 | ... .unwrap() | | {EXTERNAL LOCATION} | i32 | -| main.rs:853:33:853:33 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:856:18:856:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:856:18:856:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:856:18:856:49 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:856:18:856:49 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:856:26:856:27 | x3 | | main.rs:774:5:775:13 | S | -| main.rs:856:26:856:40 | x3.putTwo(...) | | main.rs:723:5:726:5 | Wrapper | -| main.rs:856:26:856:40 | x3.putTwo(...) | A | main.rs:794:36:794:50 | AssociatedParam | -| main.rs:856:26:856:49 | ... .unwrap() | | main.rs:794:36:794:50 | AssociatedParam | -| main.rs:856:36:856:36 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:856:39:856:39 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:858:20:858:20 | S | | main.rs:774:5:775:13 | S | -| main.rs:859:18:859:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:859:18:859:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:859:18:859:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:859:18:859:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:861:13:861:14 | x5 | | main.rs:777:5:778:14 | S2 | -| main.rs:861:18:861:19 | S2 | | main.rs:777:5:778:14 | S2 | -| main.rs:862:18:862:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:862:18:862:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:862:18:862:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:862:18:862:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:862:26:862:27 | x5 | | main.rs:777:5:778:14 | S2 | -| main.rs:862:26:862:32 | x5.m1() | | main.rs:723:5:726:5 | Wrapper | -| main.rs:862:26:862:32 | x5.m1() | A | main.rs:777:5:778:14 | S2 | -| main.rs:863:13:863:14 | x6 | | main.rs:777:5:778:14 | S2 | -| main.rs:863:18:863:19 | S2 | | main.rs:777:5:778:14 | S2 | -| main.rs:864:18:864:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:864:18:864:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:864:18:864:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:864:18:864:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:864:26:864:27 | x6 | | main.rs:777:5:778:14 | S2 | -| main.rs:864:26:864:32 | x6.m2() | | main.rs:723:5:726:5 | Wrapper | -| main.rs:864:26:864:32 | x6.m2() | A | main.rs:777:5:778:14 | S2 | -| main.rs:866:13:866:22 | assoc_zero | | main.rs:780:5:781:14 | AT | -| main.rs:866:26:866:27 | AT | | main.rs:780:5:781:14 | AT | -| main.rs:866:26:866:38 | AT.get_zero() | | main.rs:780:5:781:14 | AT | -| main.rs:867:13:867:21 | assoc_one | | main.rs:774:5:775:13 | S | -| main.rs:867:25:867:26 | AT | | main.rs:780:5:781:14 | AT | -| main.rs:867:25:867:36 | AT.get_one() | | main.rs:774:5:775:13 | S | -| main.rs:868:13:868:21 | assoc_two | | main.rs:777:5:778:14 | S2 | -| main.rs:868:25:868:26 | AT | | main.rs:780:5:781:14 | AT | -| main.rs:868:25:868:36 | AT.get_two() | | main.rs:777:5:778:14 | S2 | -| main.rs:876:19:876:23 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:876:19:876:23 | SelfParam | &T | main.rs:873:5:877:5 | Self [trait Supertrait] | -| main.rs:876:26:876:32 | content | | main.rs:874:9:874:21 | Content | -| main.rs:881:24:881:28 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:881:24:881:28 | SelfParam | &T | main.rs:879:5:882:5 | Self [trait Subtrait] | -| main.rs:890:23:890:27 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:890:23:890:27 | SelfParam | &T | main.rs:884:5:894:5 | Self [trait Subtrait2] | -| main.rs:890:30:890:31 | c1 | | main.rs:874:9:874:21 | Content | -| main.rs:890:49:890:50 | c2 | | main.rs:874:9:874:21 | Content | -| main.rs:891:13:891:16 | self | | file://:0:0:0:0 | & | -| main.rs:891:13:891:16 | self | &T | main.rs:884:5:894:5 | Self [trait Subtrait2] | -| main.rs:891:25:891:26 | c1 | | main.rs:874:9:874:21 | Content | -| main.rs:892:13:892:16 | self | | file://:0:0:0:0 | & | -| main.rs:892:13:892:16 | self | &T | main.rs:884:5:894:5 | Self [trait Subtrait2] | -| main.rs:892:25:892:26 | c2 | | main.rs:874:9:874:21 | Content | -| main.rs:900:19:900:23 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:900:19:900:23 | SelfParam | &T | main.rs:896:5:896:24 | MyType | -| main.rs:900:19:900:23 | SelfParam | &T.T | main.rs:898:10:898:10 | T | -| main.rs:900:26:900:33 | _content | | main.rs:898:10:898:10 | T | -| main.rs:901:22:901:42 | "Inserting content: \\n" | | file://:0:0:0:0 | & | -| main.rs:901:22:901:42 | "Inserting content: \\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:901:22:901:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:901:22:901:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:907:24:907:28 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:907:24:907:28 | SelfParam | &T | main.rs:896:5:896:24 | MyType | -| main.rs:907:24:907:28 | SelfParam | &T.T | main.rs:905:10:905:17 | T | -| main.rs:907:48:909:9 | { ... } | | main.rs:905:10:905:17 | T | -| main.rs:908:13:908:19 | (...) | | main.rs:896:5:896:24 | MyType | -| main.rs:908:13:908:19 | (...) | T | main.rs:905:10:905:17 | T | -| main.rs:908:13:908:21 | ... .0 | | main.rs:905:10:905:17 | T | -| main.rs:908:13:908:29 | ... .clone() | | main.rs:905:10:905:17 | T | -| main.rs:908:14:908:18 | * ... | | main.rs:896:5:896:24 | MyType | -| main.rs:908:14:908:18 | * ... | T | main.rs:905:10:905:17 | T | -| main.rs:908:15:908:18 | self | | file://:0:0:0:0 | & | -| main.rs:908:15:908:18 | self | &T | main.rs:896:5:896:24 | MyType | -| main.rs:908:15:908:18 | self | &T.T | main.rs:905:10:905:17 | T | -| main.rs:912:33:912:36 | item | | file://:0:0:0:0 | & | -| main.rs:912:33:912:36 | item | &T | main.rs:912:20:912:30 | T | -| main.rs:912:57:914:5 | { ... } | | main.rs:874:9:874:21 | Content | -| main.rs:913:9:913:12 | item | | file://:0:0:0:0 | & | -| main.rs:913:9:913:12 | item | &T | main.rs:912:20:912:30 | T | -| main.rs:913:9:913:26 | item.get_content() | | main.rs:874:9:874:21 | Content | -| main.rs:916:35:916:38 | item | | file://:0:0:0:0 | & | -| main.rs:916:35:916:38 | item | &T | main.rs:916:21:916:32 | T | -| main.rs:916:45:916:46 | c1 | | main.rs:874:9:874:21 | Content | -| main.rs:916:61:916:62 | c2 | | main.rs:874:9:874:21 | Content | -| main.rs:916:77:916:78 | c3 | | main.rs:874:9:874:21 | Content | -| main.rs:917:9:917:12 | item | | file://:0:0:0:0 | & | -| main.rs:917:9:917:12 | item | &T | main.rs:916:21:916:32 | T | -| main.rs:917:21:917:22 | c1 | | main.rs:874:9:874:21 | Content | -| main.rs:918:9:918:12 | item | | file://:0:0:0:0 | & | -| main.rs:918:9:918:12 | item | &T | main.rs:916:21:916:32 | T | -| main.rs:918:25:918:26 | c2 | | main.rs:874:9:874:21 | Content | -| main.rs:918:29:918:30 | c3 | | main.rs:874:9:874:21 | Content | -| main.rs:922:13:922:17 | item1 | | main.rs:896:5:896:24 | MyType | -| main.rs:922:13:922:17 | item1 | T | {EXTERNAL LOCATION} | i64 | -| main.rs:922:21:922:33 | MyType(...) | | main.rs:896:5:896:24 | MyType | -| main.rs:922:21:922:33 | MyType(...) | T | {EXTERNAL LOCATION} | i64 | -| main.rs:922:28:922:32 | 42i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:923:25:923:29 | item1 | | main.rs:896:5:896:24 | MyType | -| main.rs:923:25:923:29 | item1 | T | {EXTERNAL LOCATION} | i64 | -| main.rs:925:13:925:17 | item2 | | main.rs:896:5:896:24 | MyType | -| main.rs:925:13:925:17 | item2 | T | {EXTERNAL LOCATION} | bool | -| main.rs:925:21:925:32 | MyType(...) | | main.rs:896:5:896:24 | MyType | -| main.rs:925:21:925:32 | MyType(...) | T | {EXTERNAL LOCATION} | bool | -| main.rs:925:28:925:31 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:926:37:926:42 | &item2 | | file://:0:0:0:0 | & | -| main.rs:926:37:926:42 | &item2 | &T | main.rs:896:5:896:24 | MyType | -| main.rs:926:37:926:42 | &item2 | &T.T | {EXTERNAL LOCATION} | bool | -| main.rs:926:38:926:42 | item2 | | main.rs:896:5:896:24 | MyType | -| main.rs:926:38:926:42 | item2 | T | {EXTERNAL LOCATION} | bool | -| main.rs:943:15:943:18 | SelfParam | | main.rs:931:5:935:5 | MyEnum | -| main.rs:943:15:943:18 | SelfParam | A | main.rs:942:10:942:10 | T | -| main.rs:943:26:948:9 | { ... } | | main.rs:942:10:942:10 | T | -| main.rs:944:13:947:13 | match self { ... } | | main.rs:942:10:942:10 | T | -| main.rs:944:19:944:22 | self | | main.rs:931:5:935:5 | MyEnum | -| main.rs:944:19:944:22 | self | A | main.rs:942:10:942:10 | T | -| main.rs:945:17:945:29 | ...::C1(...) | | main.rs:931:5:935:5 | MyEnum | -| main.rs:945:17:945:29 | ...::C1(...) | A | main.rs:942:10:942:10 | T | -| main.rs:945:28:945:28 | a | | main.rs:942:10:942:10 | T | -| main.rs:945:34:945:34 | a | | main.rs:942:10:942:10 | T | -| main.rs:946:17:946:32 | ...::C2 {...} | | main.rs:931:5:935:5 | MyEnum | -| main.rs:946:17:946:32 | ...::C2 {...} | A | main.rs:942:10:942:10 | T | -| main.rs:946:30:946:30 | a | | main.rs:942:10:942:10 | T | -| main.rs:946:37:946:37 | a | | main.rs:942:10:942:10 | T | -| main.rs:952:13:952:13 | x | | main.rs:931:5:935:5 | MyEnum | -| main.rs:952:13:952:13 | x | A | main.rs:937:5:938:14 | S1 | -| main.rs:952:17:952:30 | ...::C1(...) | | main.rs:931:5:935:5 | MyEnum | -| main.rs:952:17:952:30 | ...::C1(...) | A | main.rs:937:5:938:14 | S1 | -| main.rs:952:28:952:29 | S1 | | main.rs:937:5:938:14 | S1 | -| main.rs:953:13:953:13 | y | | main.rs:931:5:935:5 | MyEnum | -| main.rs:953:13:953:13 | y | A | main.rs:939:5:940:14 | S2 | -| main.rs:953:17:953:36 | ...::C2 {...} | | main.rs:931:5:935:5 | MyEnum | -| main.rs:953:17:953:36 | ...::C2 {...} | A | main.rs:939:5:940:14 | S2 | -| main.rs:953:33:953:34 | S2 | | main.rs:939:5:940:14 | S2 | -| main.rs:955:18:955:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:955:18:955:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:955:18:955:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:955:18:955:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:955:26:955:26 | x | | main.rs:931:5:935:5 | MyEnum | -| main.rs:955:26:955:26 | x | A | main.rs:937:5:938:14 | S1 | -| main.rs:955:26:955:31 | x.m1() | | main.rs:937:5:938:14 | S1 | -| main.rs:956:18:956:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:956:18:956:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:956:18:956:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:956:18:956:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:956:26:956:26 | y | | main.rs:931:5:935:5 | MyEnum | -| main.rs:956:26:956:26 | y | A | main.rs:939:5:940:14 | S2 | -| main.rs:956:26:956:31 | y.m1() | | main.rs:939:5:940:14 | S2 | -| main.rs:978:15:978:18 | SelfParam | | main.rs:976:5:979:5 | Self [trait MyTrait1] | -| main.rs:983:15:983:18 | SelfParam | | main.rs:981:5:993:5 | Self [trait MyTrait2] | -| main.rs:986:9:992:9 | { ... } | | main.rs:981:20:981:22 | Tr2 | -| main.rs:987:13:991:13 | if ... {...} else {...} | | main.rs:981:20:981:22 | Tr2 | -| main.rs:987:16:987:16 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:987:16:987:20 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:987:20:987:20 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:987:22:989:13 | { ... } | | main.rs:981:20:981:22 | Tr2 | -| main.rs:988:17:988:20 | self | | main.rs:981:5:993:5 | Self [trait MyTrait2] | -| main.rs:988:17:988:25 | self.m1() | | main.rs:981:20:981:22 | Tr2 | -| main.rs:989:20:991:13 | { ... } | | main.rs:981:20:981:22 | Tr2 | -| main.rs:990:17:990:30 | ...::m1(...) | | main.rs:981:20:981:22 | Tr2 | -| main.rs:990:26:990:29 | self | | main.rs:981:5:993:5 | Self [trait MyTrait2] | -| main.rs:997:15:997:18 | SelfParam | | main.rs:995:5:1007:5 | Self [trait MyTrait3] | -| main.rs:1000:9:1006:9 | { ... } | | main.rs:995:20:995:22 | Tr3 | -| main.rs:1001:13:1005:13 | if ... {...} else {...} | | main.rs:995:20:995:22 | Tr3 | -| main.rs:1001:16:1001:16 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1001:16:1001:20 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1001:20:1001:20 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1001:22:1003:13 | { ... } | | main.rs:995:20:995:22 | Tr3 | -| main.rs:1002:17:1002:20 | self | | main.rs:995:5:1007:5 | Self [trait MyTrait3] | -| main.rs:1002:17:1002:25 | self.m2() | | main.rs:961:5:964:5 | MyThing | -| main.rs:1002:17:1002:25 | self.m2() | A | main.rs:995:20:995:22 | Tr3 | -| main.rs:1002:17:1002:27 | ... .a | | main.rs:995:20:995:22 | Tr3 | -| main.rs:1003:20:1005:13 | { ... } | | main.rs:995:20:995:22 | Tr3 | -| main.rs:1004:17:1004:30 | ...::m2(...) | | main.rs:961:5:964:5 | MyThing | -| main.rs:1004:17:1004:30 | ...::m2(...) | A | main.rs:995:20:995:22 | Tr3 | -| main.rs:1004:17:1004:32 | ... .a | | main.rs:995:20:995:22 | Tr3 | -| main.rs:1004:26:1004:29 | self | | main.rs:995:5:1007:5 | Self [trait MyTrait3] | -| main.rs:1011:15:1011:18 | SelfParam | | main.rs:961:5:964:5 | MyThing | -| main.rs:1011:15:1011:18 | SelfParam | A | main.rs:1009:10:1009:10 | T | -| main.rs:1011:26:1013:9 | { ... } | | main.rs:1009:10:1009:10 | T | -| main.rs:1012:13:1012:16 | self | | main.rs:961:5:964:5 | MyThing | -| main.rs:1012:13:1012:16 | self | A | main.rs:1009:10:1009:10 | T | -| main.rs:1012:13:1012:18 | self.a | | main.rs:1009:10:1009:10 | T | -| main.rs:1020:15:1020:18 | SelfParam | | main.rs:966:5:969:5 | MyThing2 | -| main.rs:1020:15:1020:18 | SelfParam | A | main.rs:1018:10:1018:10 | T | -| main.rs:1020:35:1022:9 | { ... } | | main.rs:961:5:964:5 | MyThing | -| main.rs:1020:35:1022:9 | { ... } | A | main.rs:1018:10:1018:10 | T | -| main.rs:1021:13:1021:33 | MyThing {...} | | main.rs:961:5:964:5 | MyThing | -| main.rs:1021:13:1021:33 | MyThing {...} | A | main.rs:1018:10:1018:10 | T | -| main.rs:1021:26:1021:29 | self | | main.rs:966:5:969:5 | MyThing2 | -| main.rs:1021:26:1021:29 | self | A | main.rs:1018:10:1018:10 | T | -| main.rs:1021:26:1021:31 | self.a | | main.rs:1018:10:1018:10 | T | -| main.rs:1029:44:1029:44 | x | | main.rs:1029:26:1029:41 | T2 | -| main.rs:1029:57:1031:5 | { ... } | | main.rs:1029:22:1029:23 | T1 | -| main.rs:1030:9:1030:9 | x | | main.rs:1029:26:1029:41 | T2 | -| main.rs:1030:9:1030:14 | x.m1() | | main.rs:1029:22:1029:23 | T1 | -| main.rs:1033:56:1033:56 | x | | main.rs:1033:39:1033:53 | T | -| main.rs:1035:13:1035:13 | a | | main.rs:961:5:964:5 | MyThing | -| main.rs:1035:13:1035:13 | a | A | main.rs:971:5:972:14 | S1 | -| main.rs:1035:17:1035:17 | x | | main.rs:1033:39:1033:53 | T | -| main.rs:1035:17:1035:22 | x.m1() | | main.rs:961:5:964:5 | MyThing | -| main.rs:1035:17:1035:22 | x.m1() | A | main.rs:971:5:972:14 | S1 | -| main.rs:1036:18:1036:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1036:18:1036:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1036:18:1036:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1036:18:1036:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1036:26:1036:26 | a | | main.rs:961:5:964:5 | MyThing | -| main.rs:1036:26:1036:26 | a | A | main.rs:971:5:972:14 | S1 | -| main.rs:1040:13:1040:13 | x | | main.rs:961:5:964:5 | MyThing | -| main.rs:1040:13:1040:13 | x | A | main.rs:971:5:972:14 | S1 | -| main.rs:1040:17:1040:33 | MyThing {...} | | main.rs:961:5:964:5 | MyThing | -| main.rs:1040:17:1040:33 | MyThing {...} | A | main.rs:971:5:972:14 | S1 | -| main.rs:1040:30:1040:31 | S1 | | main.rs:971:5:972:14 | S1 | -| main.rs:1041:13:1041:13 | y | | main.rs:961:5:964:5 | MyThing | -| main.rs:1041:13:1041:13 | y | A | main.rs:973:5:974:14 | S2 | -| main.rs:1041:17:1041:33 | MyThing {...} | | main.rs:961:5:964:5 | MyThing | -| main.rs:1041:17:1041:33 | MyThing {...} | A | main.rs:973:5:974:14 | S2 | -| main.rs:1041:30:1041:31 | S2 | | main.rs:973:5:974:14 | S2 | -| main.rs:1043:18:1043:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1043:18:1043:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1043:18:1043:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1043:18:1043:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1043:26:1043:26 | x | | main.rs:961:5:964:5 | MyThing | -| main.rs:1043:26:1043:26 | x | A | main.rs:971:5:972:14 | S1 | -| main.rs:1043:26:1043:31 | x.m1() | | main.rs:971:5:972:14 | S1 | -| main.rs:1044:18:1044:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1044:18:1044:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1044:18:1044:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1044:18:1044:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1044:26:1044:26 | y | | main.rs:961:5:964:5 | MyThing | -| main.rs:1044:26:1044:26 | y | A | main.rs:973:5:974:14 | S2 | -| main.rs:1044:26:1044:31 | y.m1() | | main.rs:973:5:974:14 | S2 | -| main.rs:1046:13:1046:13 | x | | main.rs:961:5:964:5 | MyThing | -| main.rs:1046:13:1046:13 | x | A | main.rs:971:5:972:14 | S1 | -| main.rs:1046:17:1046:33 | MyThing {...} | | main.rs:961:5:964:5 | MyThing | -| main.rs:1046:17:1046:33 | MyThing {...} | A | main.rs:971:5:972:14 | S1 | -| main.rs:1046:30:1046:31 | S1 | | main.rs:971:5:972:14 | S1 | -| main.rs:1047:13:1047:13 | y | | main.rs:961:5:964:5 | MyThing | -| main.rs:1047:13:1047:13 | y | A | main.rs:973:5:974:14 | S2 | -| main.rs:1047:17:1047:33 | MyThing {...} | | main.rs:961:5:964:5 | MyThing | -| main.rs:1047:17:1047:33 | MyThing {...} | A | main.rs:973:5:974:14 | S2 | -| main.rs:1047:30:1047:31 | S2 | | main.rs:973:5:974:14 | S2 | -| main.rs:1049:18:1049:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1049:18:1049:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1049:18:1049:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1049:18:1049:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1049:26:1049:26 | x | | main.rs:961:5:964:5 | MyThing | -| main.rs:1049:26:1049:26 | x | A | main.rs:971:5:972:14 | S1 | -| main.rs:1049:26:1049:31 | x.m2() | | main.rs:971:5:972:14 | S1 | -| main.rs:1050:18:1050:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1050:18:1050:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1050:18:1050:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1050:18:1050:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1050:26:1050:26 | y | | main.rs:961:5:964:5 | MyThing | -| main.rs:1050:26:1050:26 | y | A | main.rs:973:5:974:14 | S2 | -| main.rs:1050:26:1050:31 | y.m2() | | main.rs:973:5:974:14 | S2 | -| main.rs:1052:13:1052:13 | x | | main.rs:966:5:969:5 | MyThing2 | -| main.rs:1052:13:1052:13 | x | A | main.rs:971:5:972:14 | S1 | -| main.rs:1052:17:1052:34 | MyThing2 {...} | | main.rs:966:5:969:5 | MyThing2 | -| main.rs:1052:17:1052:34 | MyThing2 {...} | A | main.rs:971:5:972:14 | S1 | -| main.rs:1052:31:1052:32 | S1 | | main.rs:971:5:972:14 | S1 | -| main.rs:1053:13:1053:13 | y | | main.rs:966:5:969:5 | MyThing2 | -| main.rs:1053:13:1053:13 | y | A | main.rs:973:5:974:14 | S2 | -| main.rs:1053:17:1053:34 | MyThing2 {...} | | main.rs:966:5:969:5 | MyThing2 | -| main.rs:1053:17:1053:34 | MyThing2 {...} | A | main.rs:973:5:974:14 | S2 | -| main.rs:1053:31:1053:32 | S2 | | main.rs:973:5:974:14 | S2 | -| main.rs:1055:18:1055:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1055:18:1055:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1055:18:1055:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1055:18:1055:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1055:26:1055:26 | x | | main.rs:966:5:969:5 | MyThing2 | -| main.rs:1055:26:1055:26 | x | A | main.rs:971:5:972:14 | S1 | -| main.rs:1055:26:1055:31 | x.m3() | | main.rs:971:5:972:14 | S1 | -| main.rs:1056:18:1056:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1056:18:1056:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1056:18:1056:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1056:18:1056:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1056:26:1056:26 | y | | main.rs:966:5:969:5 | MyThing2 | -| main.rs:1056:26:1056:26 | y | A | main.rs:973:5:974:14 | S2 | -| main.rs:1056:26:1056:31 | y.m3() | | main.rs:973:5:974:14 | S2 | -| main.rs:1058:13:1058:13 | x | | main.rs:961:5:964:5 | MyThing | -| main.rs:1058:13:1058:13 | x | A | main.rs:971:5:972:14 | S1 | -| main.rs:1058:17:1058:33 | MyThing {...} | | main.rs:961:5:964:5 | MyThing | -| main.rs:1058:17:1058:33 | MyThing {...} | A | main.rs:971:5:972:14 | S1 | -| main.rs:1058:30:1058:31 | S1 | | main.rs:971:5:972:14 | S1 | -| main.rs:1059:13:1059:13 | s | | main.rs:971:5:972:14 | S1 | -| main.rs:1059:17:1059:32 | call_trait_m1(...) | | main.rs:971:5:972:14 | S1 | -| main.rs:1059:31:1059:31 | x | | main.rs:961:5:964:5 | MyThing | -| main.rs:1059:31:1059:31 | x | A | main.rs:971:5:972:14 | S1 | -| main.rs:1061:13:1061:13 | x | | main.rs:966:5:969:5 | MyThing2 | -| main.rs:1061:13:1061:13 | x | A | main.rs:973:5:974:14 | S2 | -| main.rs:1061:17:1061:34 | MyThing2 {...} | | main.rs:966:5:969:5 | MyThing2 | -| main.rs:1061:17:1061:34 | MyThing2 {...} | A | main.rs:973:5:974:14 | S2 | -| main.rs:1061:31:1061:32 | S2 | | main.rs:973:5:974:14 | S2 | -| main.rs:1062:13:1062:13 | s | | main.rs:961:5:964:5 | MyThing | -| main.rs:1062:13:1062:13 | s | A | main.rs:973:5:974:14 | S2 | -| main.rs:1062:17:1062:32 | call_trait_m1(...) | | main.rs:961:5:964:5 | MyThing | -| main.rs:1062:17:1062:32 | call_trait_m1(...) | A | main.rs:973:5:974:14 | S2 | -| main.rs:1062:31:1062:31 | x | | main.rs:966:5:969:5 | MyThing2 | -| main.rs:1062:31:1062:31 | x | A | main.rs:973:5:974:14 | S2 | -| main.rs:1079:22:1079:22 | x | | file://:0:0:0:0 | & | -| main.rs:1079:22:1079:22 | x | &T | main.rs:1079:11:1079:19 | T | -| main.rs:1079:35:1081:5 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1079:35:1081:5 | { ... } | &T | main.rs:1079:11:1079:19 | T | -| main.rs:1080:9:1080:9 | x | | file://:0:0:0:0 | & | -| main.rs:1080:9:1080:9 | x | &T | main.rs:1079:11:1079:19 | T | -| main.rs:1084:17:1084:20 | SelfParam | | main.rs:1069:5:1070:14 | S1 | -| main.rs:1084:29:1086:9 | { ... } | | main.rs:1072:5:1073:14 | S2 | -| main.rs:1085:13:1085:14 | S2 | | main.rs:1072:5:1073:14 | S2 | -| main.rs:1089:21:1089:21 | x | | main.rs:1089:13:1089:14 | T1 | -| main.rs:1092:5:1094:5 | { ... } | | main.rs:1089:17:1089:18 | T2 | -| main.rs:1093:9:1093:9 | x | | main.rs:1089:13:1089:14 | T1 | -| main.rs:1093:9:1093:16 | x.into() | | main.rs:1089:17:1089:18 | T2 | -| main.rs:1097:13:1097:13 | x | | main.rs:1069:5:1070:14 | S1 | -| main.rs:1097:17:1097:18 | S1 | | main.rs:1069:5:1070:14 | S1 | -| main.rs:1098:18:1098:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1098:18:1098:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1098:18:1098:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1098:18:1098:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1098:26:1098:31 | id(...) | | file://:0:0:0:0 | & | -| main.rs:1098:26:1098:31 | id(...) | &T | main.rs:1069:5:1070:14 | S1 | -| main.rs:1098:29:1098:30 | &x | | file://:0:0:0:0 | & | -| main.rs:1098:29:1098:30 | &x | &T | main.rs:1069:5:1070:14 | S1 | -| main.rs:1098:30:1098:30 | x | | main.rs:1069:5:1070:14 | S1 | -| main.rs:1100:13:1100:13 | x | | main.rs:1069:5:1070:14 | S1 | -| main.rs:1100:17:1100:18 | S1 | | main.rs:1069:5:1070:14 | S1 | +| main.rs:836:20:836:24 | SelfParam | &T | main.rs:827:5:837:5 | Self [trait TraitMultipleAssoc] | +| main.rs:852:15:852:18 | SelfParam | | main.rs:839:5:840:13 | S | +| main.rs:852:45:854:9 | { ... } | | main.rs:845:5:846:14 | AT | +| main.rs:853:13:853:14 | AT | | main.rs:845:5:846:14 | AT | +| main.rs:862:19:862:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:862:19:862:23 | SelfParam | &T | main.rs:839:5:840:13 | S | +| main.rs:862:26:862:26 | a | | main.rs:862:16:862:16 | A | +| main.rs:862:46:864:9 | { ... } | | main.rs:788:5:791:5 | Wrapper | +| main.rs:862:46:864:9 | { ... } | A | main.rs:862:16:862:16 | A | +| main.rs:863:13:863:32 | Wrapper {...} | | main.rs:788:5:791:5 | Wrapper | +| main.rs:863:13:863:32 | Wrapper {...} | A | main.rs:862:16:862:16 | A | +| main.rs:863:30:863:30 | a | | main.rs:862:16:862:16 | A | +| main.rs:871:15:871:18 | SelfParam | | main.rs:842:5:843:14 | S2 | +| main.rs:871:45:873:9 | { ... } | | main.rs:788:5:791:5 | Wrapper | +| main.rs:871:45:873:9 | { ... } | A | main.rs:842:5:843:14 | S2 | +| main.rs:872:13:872:35 | Wrapper {...} | | main.rs:788:5:791:5 | Wrapper | +| main.rs:872:13:872:35 | Wrapper {...} | A | main.rs:842:5:843:14 | S2 | +| main.rs:872:30:872:33 | self | | main.rs:842:5:843:14 | S2 | +| main.rs:878:30:880:9 | { ... } | | main.rs:788:5:791:5 | Wrapper | +| main.rs:878:30:880:9 | { ... } | A | main.rs:842:5:843:14 | S2 | +| main.rs:879:13:879:33 | Wrapper {...} | | main.rs:788:5:791:5 | Wrapper | +| main.rs:879:13:879:33 | Wrapper {...} | A | main.rs:842:5:843:14 | S2 | +| main.rs:879:30:879:31 | S2 | | main.rs:842:5:843:14 | S2 | +| main.rs:885:22:885:26 | thing | | main.rs:885:10:885:19 | T | +| main.rs:886:9:886:13 | thing | | main.rs:885:10:885:19 | T | +| main.rs:893:21:893:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:893:21:893:25 | SelfParam | &T | main.rs:845:5:846:14 | AT | +| main.rs:893:34:895:9 | { ... } | | main.rs:845:5:846:14 | AT | +| main.rs:894:13:894:14 | AT | | main.rs:845:5:846:14 | AT | +| main.rs:897:20:897:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:897:20:897:24 | SelfParam | &T | main.rs:845:5:846:14 | AT | +| main.rs:897:43:899:9 | { ... } | | main.rs:839:5:840:13 | S | +| main.rs:898:13:898:13 | S | | main.rs:839:5:840:13 | S | +| main.rs:901:20:901:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:901:20:901:24 | SelfParam | &T | main.rs:845:5:846:14 | AT | +| main.rs:901:43:903:9 | { ... } | | main.rs:842:5:843:14 | S2 | +| main.rs:902:13:902:14 | S2 | | main.rs:842:5:843:14 | S2 | +| main.rs:907:13:907:14 | x1 | | main.rs:839:5:840:13 | S | +| main.rs:907:18:907:18 | S | | main.rs:839:5:840:13 | S | +| main.rs:909:18:909:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:909:18:909:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:909:18:909:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:909:18:909:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:909:26:909:27 | x1 | | main.rs:839:5:840:13 | S | +| main.rs:909:26:909:32 | x1.m1() | | main.rs:845:5:846:14 | AT | +| main.rs:911:13:911:14 | x2 | | main.rs:839:5:840:13 | S | +| main.rs:911:18:911:18 | S | | main.rs:839:5:840:13 | S | +| main.rs:913:13:913:13 | y | | main.rs:845:5:846:14 | AT | +| main.rs:913:17:913:18 | x2 | | main.rs:839:5:840:13 | S | +| main.rs:913:17:913:23 | x2.m2() | | main.rs:845:5:846:14 | AT | +| main.rs:914:18:914:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:914:18:914:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:914:18:914:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:914:18:914:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:914:26:914:26 | y | | main.rs:845:5:846:14 | AT | +| main.rs:916:13:916:14 | x3 | | main.rs:839:5:840:13 | S | +| main.rs:916:18:916:18 | S | | main.rs:839:5:840:13 | S | +| main.rs:918:18:918:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:918:18:918:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:918:18:918:43 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:918:18:918:43 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:918:26:918:27 | x3 | | main.rs:839:5:840:13 | S | +| main.rs:918:26:918:34 | x3.put(...) | | main.rs:788:5:791:5 | Wrapper | +| main.rs:918:26:918:34 | x3.put(...) | A | {EXTERNAL LOCATION} | i32 | +| main.rs:918:26:918:43 | ... .unwrap() | | {EXTERNAL LOCATION} | i32 | +| main.rs:918:33:918:33 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:921:18:921:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:921:18:921:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:921:18:921:49 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:921:18:921:49 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:921:26:921:27 | x3 | | main.rs:839:5:840:13 | S | +| main.rs:921:26:921:40 | x3.putTwo(...) | | main.rs:788:5:791:5 | Wrapper | +| main.rs:921:26:921:40 | x3.putTwo(...) | A | main.rs:859:36:859:50 | AssociatedParam | +| main.rs:921:26:921:49 | ... .unwrap() | | main.rs:859:36:859:50 | AssociatedParam | +| main.rs:921:36:921:36 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:921:39:921:39 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:923:20:923:20 | S | | main.rs:839:5:840:13 | S | +| main.rs:924:18:924:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:924:18:924:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:924:18:924:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:924:18:924:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:926:13:926:14 | x5 | | main.rs:842:5:843:14 | S2 | +| main.rs:926:18:926:19 | S2 | | main.rs:842:5:843:14 | S2 | +| main.rs:927:18:927:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:927:18:927:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:927:18:927:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:927:18:927:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:927:26:927:27 | x5 | | main.rs:842:5:843:14 | S2 | +| main.rs:927:26:927:32 | x5.m1() | | main.rs:788:5:791:5 | Wrapper | +| main.rs:927:26:927:32 | x5.m1() | A | main.rs:842:5:843:14 | S2 | +| main.rs:928:13:928:14 | x6 | | main.rs:842:5:843:14 | S2 | +| main.rs:928:18:928:19 | S2 | | main.rs:842:5:843:14 | S2 | +| main.rs:929:18:929:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:929:18:929:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:929:18:929:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:929:18:929:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:929:26:929:27 | x6 | | main.rs:842:5:843:14 | S2 | +| main.rs:929:26:929:32 | x6.m2() | | main.rs:788:5:791:5 | Wrapper | +| main.rs:929:26:929:32 | x6.m2() | A | main.rs:842:5:843:14 | S2 | +| main.rs:931:13:931:22 | assoc_zero | | main.rs:845:5:846:14 | AT | +| main.rs:931:26:931:27 | AT | | main.rs:845:5:846:14 | AT | +| main.rs:931:26:931:38 | AT.get_zero() | | main.rs:845:5:846:14 | AT | +| main.rs:932:13:932:21 | assoc_one | | main.rs:839:5:840:13 | S | +| main.rs:932:25:932:26 | AT | | main.rs:845:5:846:14 | AT | +| main.rs:932:25:932:36 | AT.get_one() | | main.rs:839:5:840:13 | S | +| main.rs:933:13:933:21 | assoc_two | | main.rs:842:5:843:14 | S2 | +| main.rs:933:25:933:26 | AT | | main.rs:845:5:846:14 | AT | +| main.rs:933:25:933:36 | AT.get_two() | | main.rs:842:5:843:14 | S2 | +| main.rs:941:19:941:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:941:19:941:23 | SelfParam | &T | main.rs:938:5:942:5 | Self [trait Supertrait] | +| main.rs:941:26:941:32 | content | | main.rs:939:9:939:21 | Content | +| main.rs:946:24:946:28 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:946:24:946:28 | SelfParam | &T | main.rs:944:5:947:5 | Self [trait Subtrait] | +| main.rs:955:23:955:27 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:955:23:955:27 | SelfParam | &T | main.rs:949:5:959:5 | Self [trait Subtrait2] | +| main.rs:955:30:955:31 | c1 | | main.rs:939:9:939:21 | Content | +| main.rs:955:49:955:50 | c2 | | main.rs:939:9:939:21 | Content | +| main.rs:956:13:956:16 | self | | file://:0:0:0:0 | & | +| main.rs:956:13:956:16 | self | &T | main.rs:949:5:959:5 | Self [trait Subtrait2] | +| main.rs:956:25:956:26 | c1 | | main.rs:939:9:939:21 | Content | +| main.rs:957:13:957:16 | self | | file://:0:0:0:0 | & | +| main.rs:957:13:957:16 | self | &T | main.rs:949:5:959:5 | Self [trait Subtrait2] | +| main.rs:957:25:957:26 | c2 | | main.rs:939:9:939:21 | Content | +| main.rs:965:19:965:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:965:19:965:23 | SelfParam | &T | main.rs:961:5:961:24 | MyType | +| main.rs:965:19:965:23 | SelfParam | &T.T | main.rs:963:10:963:10 | T | +| main.rs:965:26:965:33 | _content | | main.rs:963:10:963:10 | T | +| main.rs:966:22:966:42 | "Inserting content: \\n" | | file://:0:0:0:0 | & | +| main.rs:966:22:966:42 | "Inserting content: \\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:966:22:966:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:966:22:966:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:972:24:972:28 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:972:24:972:28 | SelfParam | &T | main.rs:961:5:961:24 | MyType | +| main.rs:972:24:972:28 | SelfParam | &T.T | main.rs:970:10:970:17 | T | +| main.rs:972:48:974:9 | { ... } | | main.rs:970:10:970:17 | T | +| main.rs:973:13:973:19 | (...) | | main.rs:961:5:961:24 | MyType | +| main.rs:973:13:973:19 | (...) | T | main.rs:970:10:970:17 | T | +| main.rs:973:13:973:21 | ... .0 | | main.rs:970:10:970:17 | T | +| main.rs:973:13:973:29 | ... .clone() | | main.rs:970:10:970:17 | T | +| main.rs:973:14:973:18 | * ... | | main.rs:961:5:961:24 | MyType | +| main.rs:973:14:973:18 | * ... | T | main.rs:970:10:970:17 | T | +| main.rs:973:15:973:18 | self | | file://:0:0:0:0 | & | +| main.rs:973:15:973:18 | self | &T | main.rs:961:5:961:24 | MyType | +| main.rs:973:15:973:18 | self | &T.T | main.rs:970:10:970:17 | T | +| main.rs:977:33:977:36 | item | | file://:0:0:0:0 | & | +| main.rs:977:33:977:36 | item | &T | main.rs:977:20:977:30 | T | +| main.rs:977:57:979:5 | { ... } | | main.rs:939:9:939:21 | Content | +| main.rs:978:9:978:12 | item | | file://:0:0:0:0 | & | +| main.rs:978:9:978:12 | item | &T | main.rs:977:20:977:30 | T | +| main.rs:978:9:978:26 | item.get_content() | | main.rs:939:9:939:21 | Content | +| main.rs:981:35:981:38 | item | | file://:0:0:0:0 | & | +| main.rs:981:35:981:38 | item | &T | main.rs:981:21:981:32 | T | +| main.rs:981:45:981:46 | c1 | | main.rs:939:9:939:21 | Content | +| main.rs:981:61:981:62 | c2 | | main.rs:939:9:939:21 | Content | +| main.rs:981:77:981:78 | c3 | | main.rs:939:9:939:21 | Content | +| main.rs:982:9:982:12 | item | | file://:0:0:0:0 | & | +| main.rs:982:9:982:12 | item | &T | main.rs:981:21:981:32 | T | +| main.rs:982:21:982:22 | c1 | | main.rs:939:9:939:21 | Content | +| main.rs:983:9:983:12 | item | | file://:0:0:0:0 | & | +| main.rs:983:9:983:12 | item | &T | main.rs:981:21:981:32 | T | +| main.rs:983:25:983:26 | c2 | | main.rs:939:9:939:21 | Content | +| main.rs:983:29:983:30 | c3 | | main.rs:939:9:939:21 | Content | +| main.rs:987:13:987:17 | item1 | | main.rs:961:5:961:24 | MyType | +| main.rs:987:13:987:17 | item1 | T | {EXTERNAL LOCATION} | i64 | +| main.rs:987:21:987:33 | MyType(...) | | main.rs:961:5:961:24 | MyType | +| main.rs:987:21:987:33 | MyType(...) | T | {EXTERNAL LOCATION} | i64 | +| main.rs:987:28:987:32 | 42i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:988:25:988:29 | item1 | | main.rs:961:5:961:24 | MyType | +| main.rs:988:25:988:29 | item1 | T | {EXTERNAL LOCATION} | i64 | +| main.rs:990:13:990:17 | item2 | | main.rs:961:5:961:24 | MyType | +| main.rs:990:13:990:17 | item2 | T | {EXTERNAL LOCATION} | bool | +| main.rs:990:21:990:32 | MyType(...) | | main.rs:961:5:961:24 | MyType | +| main.rs:990:21:990:32 | MyType(...) | T | {EXTERNAL LOCATION} | bool | +| main.rs:990:28:990:31 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:991:37:991:42 | &item2 | | file://:0:0:0:0 | & | +| main.rs:991:37:991:42 | &item2 | &T | main.rs:961:5:961:24 | MyType | +| main.rs:991:37:991:42 | &item2 | &T.T | {EXTERNAL LOCATION} | bool | +| main.rs:991:38:991:42 | item2 | | main.rs:961:5:961:24 | MyType | +| main.rs:991:38:991:42 | item2 | T | {EXTERNAL LOCATION} | bool | +| main.rs:1008:15:1008:18 | SelfParam | | main.rs:996:5:1000:5 | MyEnum | +| main.rs:1008:15:1008:18 | SelfParam | A | main.rs:1007:10:1007:10 | T | +| main.rs:1008:26:1013:9 | { ... } | | main.rs:1007:10:1007:10 | T | +| main.rs:1009:13:1012:13 | match self { ... } | | main.rs:1007:10:1007:10 | T | +| main.rs:1009:19:1009:22 | self | | main.rs:996:5:1000:5 | MyEnum | +| main.rs:1009:19:1009:22 | self | A | main.rs:1007:10:1007:10 | T | +| main.rs:1010:17:1010:29 | ...::C1(...) | | main.rs:996:5:1000:5 | MyEnum | +| main.rs:1010:17:1010:29 | ...::C1(...) | A | main.rs:1007:10:1007:10 | T | +| main.rs:1010:28:1010:28 | a | | main.rs:1007:10:1007:10 | T | +| main.rs:1010:34:1010:34 | a | | main.rs:1007:10:1007:10 | T | +| main.rs:1011:17:1011:32 | ...::C2 {...} | | main.rs:996:5:1000:5 | MyEnum | +| main.rs:1011:17:1011:32 | ...::C2 {...} | A | main.rs:1007:10:1007:10 | T | +| main.rs:1011:30:1011:30 | a | | main.rs:1007:10:1007:10 | T | +| main.rs:1011:37:1011:37 | a | | main.rs:1007:10:1007:10 | T | +| main.rs:1017:13:1017:13 | x | | main.rs:996:5:1000:5 | MyEnum | +| main.rs:1017:13:1017:13 | x | A | main.rs:1002:5:1003:14 | S1 | +| main.rs:1017:17:1017:30 | ...::C1(...) | | main.rs:996:5:1000:5 | MyEnum | +| main.rs:1017:17:1017:30 | ...::C1(...) | A | main.rs:1002:5:1003:14 | S1 | +| main.rs:1017:28:1017:29 | S1 | | main.rs:1002:5:1003:14 | S1 | +| main.rs:1018:13:1018:13 | y | | main.rs:996:5:1000:5 | MyEnum | +| main.rs:1018:13:1018:13 | y | A | main.rs:1004:5:1005:14 | S2 | +| main.rs:1018:17:1018:36 | ...::C2 {...} | | main.rs:996:5:1000:5 | MyEnum | +| main.rs:1018:17:1018:36 | ...::C2 {...} | A | main.rs:1004:5:1005:14 | S2 | +| main.rs:1018:33:1018:34 | S2 | | main.rs:1004:5:1005:14 | S2 | +| main.rs:1020:18:1020:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1020:18:1020:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1020:18:1020:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1020:18:1020:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1020:26:1020:26 | x | | main.rs:996:5:1000:5 | MyEnum | +| main.rs:1020:26:1020:26 | x | A | main.rs:1002:5:1003:14 | S1 | +| main.rs:1020:26:1020:31 | x.m1() | | main.rs:1002:5:1003:14 | S1 | +| main.rs:1021:18:1021:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1021:18:1021:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1021:18:1021:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1021:18:1021:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1021:26:1021:26 | y | | main.rs:996:5:1000:5 | MyEnum | +| main.rs:1021:26:1021:26 | y | A | main.rs:1004:5:1005:14 | S2 | +| main.rs:1021:26:1021:31 | y.m1() | | main.rs:1004:5:1005:14 | S2 | +| main.rs:1043:15:1043:18 | SelfParam | | main.rs:1041:5:1044:5 | Self [trait MyTrait1] | +| main.rs:1048:15:1048:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1048:15:1048:19 | SelfParam | &T | main.rs:1046:5:1058:5 | Self [trait MyTrait2] | +| main.rs:1051:9:1057:9 | { ... } | | main.rs:1046:20:1046:22 | Tr2 | +| main.rs:1052:13:1056:13 | if ... {...} else {...} | | main.rs:1046:20:1046:22 | Tr2 | +| main.rs:1052:16:1052:16 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1052:16:1052:20 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1052:20:1052:20 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1052:22:1054:13 | { ... } | | main.rs:1046:20:1046:22 | Tr2 | +| main.rs:1053:17:1053:20 | self | | file://:0:0:0:0 | & | +| main.rs:1053:17:1053:20 | self | &T | main.rs:1046:5:1058:5 | Self [trait MyTrait2] | +| main.rs:1053:17:1053:25 | self.m1() | | main.rs:1046:20:1046:22 | Tr2 | +| main.rs:1054:20:1056:13 | { ... } | | main.rs:1046:20:1046:22 | Tr2 | +| main.rs:1055:17:1055:31 | ...::m1(...) | | main.rs:1046:20:1046:22 | Tr2 | +| main.rs:1055:26:1055:30 | * ... | | main.rs:1046:5:1058:5 | Self [trait MyTrait2] | +| main.rs:1055:27:1055:30 | self | | file://:0:0:0:0 | & | +| main.rs:1055:27:1055:30 | self | &T | main.rs:1046:5:1058:5 | Self [trait MyTrait2] | +| main.rs:1062:15:1062:18 | SelfParam | | main.rs:1060:5:1072:5 | Self [trait MyTrait3] | +| main.rs:1065:9:1071:9 | { ... } | | main.rs:1060:20:1060:22 | Tr3 | +| main.rs:1066:13:1070:13 | if ... {...} else {...} | | main.rs:1060:20:1060:22 | Tr3 | +| main.rs:1066:16:1066:16 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1066:16:1066:20 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1066:20:1066:20 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1066:22:1068:13 | { ... } | | main.rs:1060:20:1060:22 | Tr3 | +| main.rs:1067:17:1067:20 | self | | main.rs:1060:5:1072:5 | Self [trait MyTrait3] | +| main.rs:1067:17:1067:25 | self.m2() | | main.rs:1026:5:1029:5 | MyThing | +| main.rs:1067:17:1067:25 | self.m2() | A | main.rs:1060:20:1060:22 | Tr3 | +| main.rs:1067:17:1067:27 | ... .a | | main.rs:1060:20:1060:22 | Tr3 | +| main.rs:1068:20:1070:13 | { ... } | | main.rs:1060:20:1060:22 | Tr3 | +| main.rs:1069:17:1069:31 | ...::m2(...) | | main.rs:1026:5:1029:5 | MyThing | +| main.rs:1069:17:1069:31 | ...::m2(...) | A | main.rs:1060:20:1060:22 | Tr3 | +| main.rs:1069:17:1069:33 | ... .a | | main.rs:1060:20:1060:22 | Tr3 | +| main.rs:1069:26:1069:30 | &self | | file://:0:0:0:0 | & | +| main.rs:1069:26:1069:30 | &self | &T | main.rs:1060:5:1072:5 | Self [trait MyTrait3] | +| main.rs:1069:27:1069:30 | self | | main.rs:1060:5:1072:5 | Self [trait MyTrait3] | +| main.rs:1076:15:1076:18 | SelfParam | | main.rs:1026:5:1029:5 | MyThing | +| main.rs:1076:15:1076:18 | SelfParam | A | main.rs:1074:10:1074:10 | T | +| main.rs:1076:26:1078:9 | { ... } | | main.rs:1074:10:1074:10 | T | +| main.rs:1077:13:1077:16 | self | | main.rs:1026:5:1029:5 | MyThing | +| main.rs:1077:13:1077:16 | self | A | main.rs:1074:10:1074:10 | T | +| main.rs:1077:13:1077:18 | self.a | | main.rs:1074:10:1074:10 | T | +| main.rs:1085:15:1085:18 | SelfParam | | main.rs:1031:5:1034:5 | MyThing2 | +| main.rs:1085:15:1085:18 | SelfParam | A | main.rs:1083:10:1083:10 | T | +| main.rs:1085:35:1087:9 | { ... } | | main.rs:1026:5:1029:5 | MyThing | +| main.rs:1085:35:1087:9 | { ... } | A | main.rs:1083:10:1083:10 | T | +| main.rs:1086:13:1086:33 | MyThing {...} | | main.rs:1026:5:1029:5 | MyThing | +| main.rs:1086:13:1086:33 | MyThing {...} | A | main.rs:1083:10:1083:10 | T | +| main.rs:1086:26:1086:29 | self | | main.rs:1031:5:1034:5 | MyThing2 | +| main.rs:1086:26:1086:29 | self | A | main.rs:1083:10:1083:10 | T | +| main.rs:1086:26:1086:31 | self.a | | main.rs:1083:10:1083:10 | T | +| main.rs:1094:44:1094:44 | x | | main.rs:1094:26:1094:41 | T2 | +| main.rs:1094:57:1096:5 | { ... } | | main.rs:1094:22:1094:23 | T1 | +| main.rs:1095:9:1095:9 | x | | main.rs:1094:26:1094:41 | T2 | +| main.rs:1095:9:1095:14 | x.m1() | | main.rs:1094:22:1094:23 | T1 | +| main.rs:1098:56:1098:56 | x | | main.rs:1098:39:1098:53 | T | +| main.rs:1100:13:1100:13 | a | | main.rs:1026:5:1029:5 | MyThing | +| main.rs:1100:13:1100:13 | a | A | main.rs:1036:5:1037:14 | S1 | +| main.rs:1100:17:1100:17 | x | | main.rs:1098:39:1098:53 | T | +| main.rs:1100:17:1100:22 | x.m1() | | main.rs:1026:5:1029:5 | MyThing | +| main.rs:1100:17:1100:22 | x.m1() | A | main.rs:1036:5:1037:14 | S1 | | main.rs:1101:18:1101:23 | "{:?}\\n" | | file://:0:0:0:0 | & | | main.rs:1101:18:1101:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1101:18:1101:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1101:18:1101:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1101:26:1101:37 | id::<...>(...) | | file://:0:0:0:0 | & | -| main.rs:1101:26:1101:37 | id::<...>(...) | &T | main.rs:1069:5:1070:14 | S1 | -| main.rs:1101:35:1101:36 | &x | | file://:0:0:0:0 | & | -| main.rs:1101:35:1101:36 | &x | &T | main.rs:1069:5:1070:14 | S1 | -| main.rs:1101:36:1101:36 | x | | main.rs:1069:5:1070:14 | S1 | -| main.rs:1103:13:1103:13 | x | | main.rs:1069:5:1070:14 | S1 | -| main.rs:1103:13:1103:13 | x | | main.rs:1075:5:1075:25 | dyn Trait | -| main.rs:1103:17:1103:18 | S1 | | main.rs:1069:5:1070:14 | S1 | -| main.rs:1103:17:1103:18 | S1 | | main.rs:1075:5:1075:25 | dyn Trait | -| main.rs:1105:18:1105:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1105:18:1105:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1105:18:1105:44 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1105:18:1105:44 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1105:26:1105:44 | id::<...>(...) | | file://:0:0:0:0 | & | -| main.rs:1105:26:1105:44 | id::<...>(...) | &T | main.rs:1075:5:1075:25 | dyn Trait | -| main.rs:1105:42:1105:43 | &x | | file://:0:0:0:0 | & | -| main.rs:1105:42:1105:43 | &x | &T | main.rs:1069:5:1070:14 | S1 | -| main.rs:1105:42:1105:43 | &x | &T | main.rs:1075:5:1075:25 | dyn Trait | -| main.rs:1105:43:1105:43 | x | | main.rs:1069:5:1070:14 | S1 | -| main.rs:1105:43:1105:43 | x | | main.rs:1075:5:1075:25 | dyn Trait | -| main.rs:1107:13:1107:13 | x | | main.rs:1069:5:1070:14 | S1 | -| main.rs:1107:17:1107:18 | S1 | | main.rs:1069:5:1070:14 | S1 | -| main.rs:1108:9:1108:25 | into::<...>(...) | | main.rs:1072:5:1073:14 | S2 | -| main.rs:1108:24:1108:24 | x | | main.rs:1069:5:1070:14 | S1 | -| main.rs:1110:13:1110:13 | x | | main.rs:1069:5:1070:14 | S1 | -| main.rs:1110:17:1110:18 | S1 | | main.rs:1069:5:1070:14 | S1 | -| main.rs:1111:13:1111:13 | y | | main.rs:1072:5:1073:14 | S2 | -| main.rs:1111:21:1111:27 | into(...) | | main.rs:1072:5:1073:14 | S2 | -| main.rs:1111:26:1111:26 | x | | main.rs:1069:5:1070:14 | S1 | -| main.rs:1125:22:1125:25 | SelfParam | | main.rs:1116:5:1122:5 | PairOption | -| main.rs:1125:22:1125:25 | SelfParam | Fst | main.rs:1124:10:1124:12 | Fst | -| main.rs:1125:22:1125:25 | SelfParam | Snd | main.rs:1124:15:1124:17 | Snd | -| main.rs:1125:35:1132:9 | { ... } | | main.rs:1124:15:1124:17 | Snd | -| main.rs:1126:13:1131:13 | match self { ... } | | main.rs:1124:15:1124:17 | Snd | -| main.rs:1126:19:1126:22 | self | | main.rs:1116:5:1122:5 | PairOption | -| main.rs:1126:19:1126:22 | self | Fst | main.rs:1124:10:1124:12 | Fst | -| main.rs:1126:19:1126:22 | self | Snd | main.rs:1124:15:1124:17 | Snd | -| main.rs:1127:17:1127:38 | ...::PairNone(...) | | main.rs:1116:5:1122:5 | PairOption | -| main.rs:1127:17:1127:38 | ...::PairNone(...) | Fst | main.rs:1124:10:1124:12 | Fst | -| main.rs:1127:17:1127:38 | ...::PairNone(...) | Snd | main.rs:1124:15:1124:17 | Snd | -| main.rs:1127:43:1127:82 | MacroExpr | | main.rs:1124:15:1124:17 | Snd | -| main.rs:1127:50:1127:81 | "PairNone has no second elemen... | | file://:0:0:0:0 | & | -| main.rs:1127:50:1127:81 | "PairNone has no second elemen... | &T | {EXTERNAL LOCATION} | str | -| main.rs:1127:50:1127:81 | ...::panic_fmt(...) | | file://:0:0:0:0 | ! | -| main.rs:1127:50:1127:81 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1127:50:1127:81 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1127:50:1127:81 | MacroExpr | | main.rs:1124:15:1124:17 | Snd | -| main.rs:1127:50:1127:81 | { ... } | | main.rs:1124:15:1124:17 | Snd | -| main.rs:1128:17:1128:38 | ...::PairFst(...) | | main.rs:1116:5:1122:5 | PairOption | -| main.rs:1128:17:1128:38 | ...::PairFst(...) | Fst | main.rs:1124:10:1124:12 | Fst | -| main.rs:1128:17:1128:38 | ...::PairFst(...) | Snd | main.rs:1124:15:1124:17 | Snd | -| main.rs:1128:37:1128:37 | _ | | main.rs:1124:10:1124:12 | Fst | -| main.rs:1128:43:1128:81 | MacroExpr | | main.rs:1124:15:1124:17 | Snd | -| main.rs:1128:50:1128:80 | "PairFst has no second element... | | file://:0:0:0:0 | & | -| main.rs:1128:50:1128:80 | "PairFst has no second element... | &T | {EXTERNAL LOCATION} | str | -| main.rs:1128:50:1128:80 | ...::panic_fmt(...) | | file://:0:0:0:0 | ! | -| main.rs:1128:50:1128:80 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1128:50:1128:80 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1128:50:1128:80 | MacroExpr | | main.rs:1124:15:1124:17 | Snd | -| main.rs:1128:50:1128:80 | { ... } | | main.rs:1124:15:1124:17 | Snd | -| main.rs:1129:17:1129:40 | ...::PairSnd(...) | | main.rs:1116:5:1122:5 | PairOption | -| main.rs:1129:17:1129:40 | ...::PairSnd(...) | Fst | main.rs:1124:10:1124:12 | Fst | -| main.rs:1129:17:1129:40 | ...::PairSnd(...) | Snd | main.rs:1124:15:1124:17 | Snd | -| main.rs:1129:37:1129:39 | snd | | main.rs:1124:15:1124:17 | Snd | -| main.rs:1129:45:1129:47 | snd | | main.rs:1124:15:1124:17 | Snd | -| main.rs:1130:17:1130:44 | ...::PairBoth(...) | | main.rs:1116:5:1122:5 | PairOption | -| main.rs:1130:17:1130:44 | ...::PairBoth(...) | Fst | main.rs:1124:10:1124:12 | Fst | -| main.rs:1130:17:1130:44 | ...::PairBoth(...) | Snd | main.rs:1124:15:1124:17 | Snd | -| main.rs:1130:38:1130:38 | _ | | main.rs:1124:10:1124:12 | Fst | -| main.rs:1130:41:1130:43 | snd | | main.rs:1124:15:1124:17 | Snd | -| main.rs:1130:49:1130:51 | snd | | main.rs:1124:15:1124:17 | Snd | -| main.rs:1156:10:1156:10 | t | | main.rs:1116:5:1122:5 | PairOption | -| main.rs:1156:10:1156:10 | t | Fst | main.rs:1138:5:1139:14 | S2 | -| main.rs:1156:10:1156:10 | t | Snd | main.rs:1116:5:1122:5 | PairOption | -| main.rs:1156:10:1156:10 | t | Snd.Fst | main.rs:1138:5:1139:14 | S2 | -| main.rs:1156:10:1156:10 | t | Snd.Snd | main.rs:1141:5:1142:14 | S3 | -| main.rs:1157:13:1157:13 | x | | main.rs:1141:5:1142:14 | S3 | -| main.rs:1157:17:1157:17 | t | | main.rs:1116:5:1122:5 | PairOption | -| main.rs:1157:17:1157:17 | t | Fst | main.rs:1138:5:1139:14 | S2 | -| main.rs:1157:17:1157:17 | t | Snd | main.rs:1116:5:1122:5 | PairOption | -| main.rs:1157:17:1157:17 | t | Snd.Fst | main.rs:1138:5:1139:14 | S2 | -| main.rs:1157:17:1157:17 | t | Snd.Snd | main.rs:1141:5:1142:14 | S3 | -| main.rs:1157:17:1157:29 | t.unwrapSnd() | | main.rs:1116:5:1122:5 | PairOption | -| main.rs:1157:17:1157:29 | t.unwrapSnd() | Fst | main.rs:1138:5:1139:14 | S2 | -| main.rs:1157:17:1157:29 | t.unwrapSnd() | Snd | main.rs:1141:5:1142:14 | S3 | -| main.rs:1157:17:1157:41 | ... .unwrapSnd() | | main.rs:1141:5:1142:14 | S3 | -| main.rs:1158:18:1158:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1158:18:1158:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1158:18:1158:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1158:18:1158:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1158:26:1158:26 | x | | main.rs:1141:5:1142:14 | S3 | -| main.rs:1173:22:1173:25 | SelfParam | | main.rs:1171:5:1174:5 | Self [trait TraitWithAssocType] | -| main.rs:1181:22:1181:25 | SelfParam | | main.rs:1169:5:1169:28 | GenS | -| main.rs:1181:22:1181:25 | SelfParam | GenT | main.rs:1176:10:1176:15 | Output | -| main.rs:1181:44:1183:9 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1181:44:1183:9 | { ... } | E | main.rs:1176:10:1176:15 | Output | -| main.rs:1181:44:1183:9 | { ... } | T | main.rs:1176:10:1176:15 | Output | -| main.rs:1182:13:1182:22 | Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1182:13:1182:22 | Ok(...) | E | main.rs:1176:10:1176:15 | Output | -| main.rs:1182:13:1182:22 | Ok(...) | T | main.rs:1176:10:1176:15 | Output | -| main.rs:1182:16:1182:19 | self | | main.rs:1169:5:1169:28 | GenS | -| main.rs:1182:16:1182:19 | self | GenT | main.rs:1176:10:1176:15 | Output | -| main.rs:1182:16:1182:21 | self.0 | | main.rs:1176:10:1176:15 | Output | -| main.rs:1188:13:1188:14 | p1 | | main.rs:1116:5:1122:5 | PairOption | -| main.rs:1188:13:1188:14 | p1 | Fst | main.rs:1135:5:1136:14 | S1 | -| main.rs:1188:13:1188:14 | p1 | Snd | main.rs:1138:5:1139:14 | S2 | -| main.rs:1188:26:1188:53 | ...::PairBoth(...) | | main.rs:1116:5:1122:5 | PairOption | -| main.rs:1188:26:1188:53 | ...::PairBoth(...) | Fst | main.rs:1135:5:1136:14 | S1 | -| main.rs:1188:26:1188:53 | ...::PairBoth(...) | Snd | main.rs:1138:5:1139:14 | S2 | -| main.rs:1188:47:1188:48 | S1 | | main.rs:1135:5:1136:14 | S1 | -| main.rs:1188:51:1188:52 | S2 | | main.rs:1138:5:1139:14 | S2 | -| main.rs:1189:18:1189:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1189:18:1189:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1189:18:1189:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1189:18:1189:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1189:26:1189:27 | p1 | | main.rs:1116:5:1122:5 | PairOption | -| main.rs:1189:26:1189:27 | p1 | Fst | main.rs:1135:5:1136:14 | S1 | -| main.rs:1189:26:1189:27 | p1 | Snd | main.rs:1138:5:1139:14 | S2 | -| main.rs:1192:13:1192:14 | p2 | | main.rs:1116:5:1122:5 | PairOption | -| main.rs:1192:13:1192:14 | p2 | Fst | main.rs:1135:5:1136:14 | S1 | -| main.rs:1192:13:1192:14 | p2 | Snd | main.rs:1138:5:1139:14 | S2 | -| main.rs:1192:26:1192:47 | ...::PairNone(...) | | main.rs:1116:5:1122:5 | PairOption | -| main.rs:1192:26:1192:47 | ...::PairNone(...) | Fst | main.rs:1135:5:1136:14 | S1 | -| main.rs:1192:26:1192:47 | ...::PairNone(...) | Snd | main.rs:1138:5:1139:14 | S2 | -| main.rs:1193:18:1193:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1193:18:1193:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1193:18:1193:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1193:18:1193:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1193:26:1193:27 | p2 | | main.rs:1116:5:1122:5 | PairOption | -| main.rs:1193:26:1193:27 | p2 | Fst | main.rs:1135:5:1136:14 | S1 | -| main.rs:1193:26:1193:27 | p2 | Snd | main.rs:1138:5:1139:14 | S2 | -| main.rs:1196:13:1196:14 | p3 | | main.rs:1116:5:1122:5 | PairOption | -| main.rs:1196:13:1196:14 | p3 | Fst | main.rs:1138:5:1139:14 | S2 | -| main.rs:1196:13:1196:14 | p3 | Snd | main.rs:1141:5:1142:14 | S3 | -| main.rs:1196:34:1196:56 | ...::PairSnd(...) | | main.rs:1116:5:1122:5 | PairOption | -| main.rs:1196:34:1196:56 | ...::PairSnd(...) | Fst | main.rs:1138:5:1139:14 | S2 | -| main.rs:1196:34:1196:56 | ...::PairSnd(...) | Snd | main.rs:1141:5:1142:14 | S3 | -| main.rs:1196:54:1196:55 | S3 | | main.rs:1141:5:1142:14 | S3 | -| main.rs:1197:18:1197:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1197:18:1197:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1197:18:1197:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1197:18:1197:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1197:26:1197:27 | p3 | | main.rs:1116:5:1122:5 | PairOption | -| main.rs:1197:26:1197:27 | p3 | Fst | main.rs:1138:5:1139:14 | S2 | -| main.rs:1197:26:1197:27 | p3 | Snd | main.rs:1141:5:1142:14 | S3 | -| main.rs:1200:13:1200:14 | p3 | | main.rs:1116:5:1122:5 | PairOption | -| main.rs:1200:13:1200:14 | p3 | Fst | main.rs:1138:5:1139:14 | S2 | -| main.rs:1200:13:1200:14 | p3 | Snd | main.rs:1141:5:1142:14 | S3 | -| main.rs:1200:35:1200:56 | ...::PairNone(...) | | main.rs:1116:5:1122:5 | PairOption | -| main.rs:1200:35:1200:56 | ...::PairNone(...) | Fst | main.rs:1138:5:1139:14 | S2 | -| main.rs:1200:35:1200:56 | ...::PairNone(...) | Snd | main.rs:1141:5:1142:14 | S3 | -| main.rs:1201:18:1201:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1201:18:1201:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1201:18:1201:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1201:18:1201:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1201:26:1201:27 | p3 | | main.rs:1116:5:1122:5 | PairOption | -| main.rs:1201:26:1201:27 | p3 | Fst | main.rs:1138:5:1139:14 | S2 | -| main.rs:1201:26:1201:27 | p3 | Snd | main.rs:1141:5:1142:14 | S3 | -| main.rs:1203:11:1203:54 | ...::PairSnd(...) | | main.rs:1116:5:1122:5 | PairOption | -| main.rs:1203:11:1203:54 | ...::PairSnd(...) | Fst | main.rs:1138:5:1139:14 | S2 | -| main.rs:1203:11:1203:54 | ...::PairSnd(...) | Snd | main.rs:1116:5:1122:5 | PairOption | -| main.rs:1203:11:1203:54 | ...::PairSnd(...) | Snd.Fst | main.rs:1138:5:1139:14 | S2 | -| main.rs:1203:11:1203:54 | ...::PairSnd(...) | Snd.Snd | main.rs:1141:5:1142:14 | S3 | -| main.rs:1203:31:1203:53 | ...::PairSnd(...) | | main.rs:1116:5:1122:5 | PairOption | -| main.rs:1203:31:1203:53 | ...::PairSnd(...) | Fst | main.rs:1138:5:1139:14 | S2 | -| main.rs:1203:31:1203:53 | ...::PairSnd(...) | Snd | main.rs:1141:5:1142:14 | S3 | -| main.rs:1203:51:1203:52 | S3 | | main.rs:1141:5:1142:14 | S3 | -| main.rs:1205:13:1205:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1205:13:1205:13 | x | E | main.rs:1135:5:1136:14 | S1 | -| main.rs:1205:13:1205:13 | x | T | main.rs:1161:5:1161:34 | S4 | -| main.rs:1205:13:1205:13 | x | T.T41 | main.rs:1138:5:1139:14 | S2 | -| main.rs:1205:13:1205:13 | x | T.T42 | main.rs:1163:5:1163:22 | S5 | -| main.rs:1205:13:1205:13 | x | T.T42.T5 | main.rs:1138:5:1139:14 | S2 | -| main.rs:1207:13:1207:13 | y | | {EXTERNAL LOCATION} | Result | -| main.rs:1207:13:1207:13 | y | E | {EXTERNAL LOCATION} | bool | -| main.rs:1207:13:1207:13 | y | T | {EXTERNAL LOCATION} | bool | -| main.rs:1207:17:1207:26 | GenS(...) | | main.rs:1169:5:1169:28 | GenS | -| main.rs:1207:17:1207:26 | GenS(...) | GenT | {EXTERNAL LOCATION} | bool | -| main.rs:1207:17:1207:38 | ... .get_input() | | {EXTERNAL LOCATION} | Result | -| main.rs:1207:17:1207:38 | ... .get_input() | E | {EXTERNAL LOCATION} | bool | -| main.rs:1207:17:1207:38 | ... .get_input() | T | {EXTERNAL LOCATION} | bool | -| main.rs:1207:22:1207:25 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1220:16:1220:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1220:16:1220:24 | SelfParam | &T | main.rs:1218:5:1225:5 | Self [trait MyTrait] | -| main.rs:1220:27:1220:31 | value | | main.rs:1218:19:1218:19 | S | -| main.rs:1222:21:1222:29 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1222:21:1222:29 | SelfParam | &T | main.rs:1218:5:1225:5 | Self [trait MyTrait] | -| main.rs:1222:32:1222:36 | value | | main.rs:1218:19:1218:19 | S | -| main.rs:1223:13:1223:16 | self | | file://:0:0:0:0 | & | -| main.rs:1223:13:1223:16 | self | &T | main.rs:1218:5:1225:5 | Self [trait MyTrait] | -| main.rs:1223:22:1223:26 | value | | main.rs:1218:19:1218:19 | S | -| main.rs:1229:16:1229:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1229:16:1229:24 | SelfParam | &T | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1229:16:1229:24 | SelfParam | &T.T | main.rs:1227:10:1227:10 | T | -| main.rs:1229:27:1229:31 | value | | main.rs:1227:10:1227:10 | T | -| main.rs:1233:26:1235:9 | { ... } | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1233:26:1235:9 | { ... } | T | main.rs:1232:10:1232:10 | T | -| main.rs:1234:13:1234:30 | ...::MyNone(...) | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1234:13:1234:30 | ...::MyNone(...) | T | main.rs:1232:10:1232:10 | T | -| main.rs:1239:20:1239:23 | SelfParam | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1239:20:1239:23 | SelfParam | T | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1239:20:1239:23 | SelfParam | T.T | main.rs:1238:10:1238:10 | T | -| main.rs:1239:41:1244:9 | { ... } | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1239:41:1244:9 | { ... } | T | main.rs:1238:10:1238:10 | T | -| main.rs:1240:13:1243:13 | match self { ... } | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1240:13:1243:13 | match self { ... } | T | main.rs:1238:10:1238:10 | T | -| main.rs:1240:19:1240:22 | self | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1240:19:1240:22 | self | T | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1240:19:1240:22 | self | T.T | main.rs:1238:10:1238:10 | T | -| main.rs:1241:17:1241:34 | ...::MyNone(...) | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1241:17:1241:34 | ...::MyNone(...) | T | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1241:17:1241:34 | ...::MyNone(...) | T.T | main.rs:1238:10:1238:10 | T | -| main.rs:1241:39:1241:56 | ...::MyNone(...) | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1241:39:1241:56 | ...::MyNone(...) | T | main.rs:1238:10:1238:10 | T | -| main.rs:1242:17:1242:35 | ...::MySome(...) | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1242:17:1242:35 | ...::MySome(...) | T | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1242:17:1242:35 | ...::MySome(...) | T.T | main.rs:1238:10:1238:10 | T | -| main.rs:1242:34:1242:34 | x | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1242:34:1242:34 | x | T | main.rs:1238:10:1238:10 | T | -| main.rs:1242:40:1242:40 | x | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1242:40:1242:40 | x | T | main.rs:1238:10:1238:10 | T | -| main.rs:1251:13:1251:14 | x1 | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1251:13:1251:14 | x1 | T | main.rs:1247:5:1248:13 | S | -| main.rs:1251:18:1251:37 | ...::new(...) | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1251:18:1251:37 | ...::new(...) | T | main.rs:1247:5:1248:13 | S | -| main.rs:1252:18:1252:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1252:18:1252:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1252:18:1252:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1252:18:1252:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1252:26:1252:27 | x1 | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1252:26:1252:27 | x1 | T | main.rs:1247:5:1248:13 | S | -| main.rs:1254:17:1254:18 | x2 | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1254:17:1254:18 | x2 | T | main.rs:1247:5:1248:13 | S | -| main.rs:1254:22:1254:36 | ...::new(...) | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1254:22:1254:36 | ...::new(...) | T | main.rs:1247:5:1248:13 | S | -| main.rs:1255:9:1255:10 | x2 | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1255:9:1255:10 | x2 | T | main.rs:1247:5:1248:13 | S | -| main.rs:1255:16:1255:16 | S | | main.rs:1247:5:1248:13 | S | -| main.rs:1256:18:1256:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1256:18:1256:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1256:18:1256:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1256:18:1256:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1256:26:1256:27 | x2 | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1256:26:1256:27 | x2 | T | main.rs:1247:5:1248:13 | S | -| main.rs:1259:17:1259:18 | x3 | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1259:22:1259:36 | ...::new(...) | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1260:9:1260:10 | x3 | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1260:21:1260:21 | S | | main.rs:1247:5:1248:13 | S | -| main.rs:1261:18:1261:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1261:18:1261:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1261:18:1261:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1261:18:1261:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1261:26:1261:27 | x3 | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1263:17:1263:18 | x4 | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1263:17:1263:18 | x4 | T | main.rs:1247:5:1248:13 | S | -| main.rs:1263:22:1263:36 | ...::new(...) | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1263:22:1263:36 | ...::new(...) | T | main.rs:1247:5:1248:13 | S | -| main.rs:1264:23:1264:29 | &mut x4 | | file://:0:0:0:0 | & | -| main.rs:1264:23:1264:29 | &mut x4 | &T | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1264:23:1264:29 | &mut x4 | &T.T | main.rs:1247:5:1248:13 | S | -| main.rs:1264:28:1264:29 | x4 | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1264:28:1264:29 | x4 | T | main.rs:1247:5:1248:13 | S | -| main.rs:1264:32:1264:32 | S | | main.rs:1247:5:1248:13 | S | -| main.rs:1265:18:1265:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1265:18:1265:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1265:18:1265:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1265:18:1265:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1265:26:1265:27 | x4 | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1265:26:1265:27 | x4 | T | main.rs:1247:5:1248:13 | S | -| main.rs:1267:13:1267:14 | x5 | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1267:13:1267:14 | x5 | T | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1267:13:1267:14 | x5 | T.T | main.rs:1247:5:1248:13 | S | -| main.rs:1267:18:1267:58 | ...::MySome(...) | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1267:18:1267:58 | ...::MySome(...) | T | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1267:18:1267:58 | ...::MySome(...) | T.T | main.rs:1247:5:1248:13 | S | -| main.rs:1267:35:1267:57 | ...::MyNone(...) | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1267:35:1267:57 | ...::MyNone(...) | T | main.rs:1247:5:1248:13 | S | -| main.rs:1268:18:1268:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1268:18:1268:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1268:18:1268:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1268:18:1268:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1268:26:1268:27 | x5 | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1268:26:1268:27 | x5 | T | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1268:26:1268:27 | x5 | T.T | main.rs:1247:5:1248:13 | S | -| main.rs:1268:26:1268:37 | x5.flatten() | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1268:26:1268:37 | x5.flatten() | T | main.rs:1247:5:1248:13 | S | -| main.rs:1270:13:1270:14 | x6 | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1270:13:1270:14 | x6 | T | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1270:13:1270:14 | x6 | T.T | main.rs:1247:5:1248:13 | S | -| main.rs:1270:18:1270:58 | ...::MySome(...) | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1270:18:1270:58 | ...::MySome(...) | T | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1270:18:1270:58 | ...::MySome(...) | T.T | main.rs:1247:5:1248:13 | S | -| main.rs:1270:35:1270:57 | ...::MyNone(...) | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1270:35:1270:57 | ...::MyNone(...) | T | main.rs:1247:5:1248:13 | S | -| main.rs:1271:18:1271:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1271:18:1271:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1271:18:1271:61 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1271:18:1271:61 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1271:26:1271:61 | ...::flatten(...) | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1271:26:1271:61 | ...::flatten(...) | T | main.rs:1247:5:1248:13 | S | -| main.rs:1271:59:1271:60 | x6 | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1271:59:1271:60 | x6 | T | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1271:59:1271:60 | x6 | T.T | main.rs:1247:5:1248:13 | S | -| main.rs:1274:13:1274:19 | from_if | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1274:13:1274:19 | from_if | T | main.rs:1247:5:1248:13 | S | -| main.rs:1274:23:1278:9 | if ... {...} else {...} | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1274:23:1278:9 | if ... {...} else {...} | T | main.rs:1247:5:1248:13 | S | -| main.rs:1274:26:1274:26 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1274:26:1274:30 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1274:30:1274:30 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1274:32:1276:9 | { ... } | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1274:32:1276:9 | { ... } | T | main.rs:1247:5:1248:13 | S | -| main.rs:1275:13:1275:30 | ...::MyNone(...) | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1275:13:1275:30 | ...::MyNone(...) | T | main.rs:1247:5:1248:13 | S | -| main.rs:1276:16:1278:9 | { ... } | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1276:16:1278:9 | { ... } | T | main.rs:1247:5:1248:13 | S | -| main.rs:1277:13:1277:31 | ...::MySome(...) | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1277:13:1277:31 | ...::MySome(...) | T | main.rs:1247:5:1248:13 | S | -| main.rs:1277:30:1277:30 | S | | main.rs:1247:5:1248:13 | S | -| main.rs:1279:18:1279:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1279:18:1279:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1279:18:1279:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1279:18:1279:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1279:26:1279:32 | from_if | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1279:26:1279:32 | from_if | T | main.rs:1247:5:1248:13 | S | -| main.rs:1282:13:1282:22 | from_match | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1282:13:1282:22 | from_match | T | main.rs:1247:5:1248:13 | S | -| main.rs:1282:26:1285:9 | match ... { ... } | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1282:26:1285:9 | match ... { ... } | T | main.rs:1247:5:1248:13 | S | -| main.rs:1282:32:1282:32 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1282:32:1282:36 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1282:36:1282:36 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1283:13:1283:16 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1283:21:1283:38 | ...::MyNone(...) | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1283:21:1283:38 | ...::MyNone(...) | T | main.rs:1247:5:1248:13 | S | -| main.rs:1284:13:1284:17 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1284:22:1284:40 | ...::MySome(...) | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1284:22:1284:40 | ...::MySome(...) | T | main.rs:1247:5:1248:13 | S | -| main.rs:1284:39:1284:39 | S | | main.rs:1247:5:1248:13 | S | -| main.rs:1286:18:1286:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1286:18:1286:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1286:18:1286:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1286:18:1286:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1286:26:1286:35 | from_match | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1286:26:1286:35 | from_match | T | main.rs:1247:5:1248:13 | S | -| main.rs:1289:13:1289:21 | from_loop | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1289:13:1289:21 | from_loop | T | main.rs:1247:5:1248:13 | S | -| main.rs:1289:25:1294:9 | loop { ... } | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1289:25:1294:9 | loop { ... } | T | main.rs:1247:5:1248:13 | S | -| main.rs:1290:16:1290:16 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1290:16:1290:20 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1290:20:1290:20 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1291:23:1291:40 | ...::MyNone(...) | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1291:23:1291:40 | ...::MyNone(...) | T | main.rs:1247:5:1248:13 | S | -| main.rs:1293:19:1293:37 | ...::MySome(...) | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1293:19:1293:37 | ...::MySome(...) | T | main.rs:1247:5:1248:13 | S | -| main.rs:1293:36:1293:36 | S | | main.rs:1247:5:1248:13 | S | -| main.rs:1295:18:1295:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1295:18:1295:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1295:18:1295:34 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1295:18:1295:34 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1295:26:1295:34 | from_loop | | main.rs:1212:5:1216:5 | MyOption | -| main.rs:1295:26:1295:34 | from_loop | T | main.rs:1247:5:1248:13 | S | -| main.rs:1313:15:1313:18 | SelfParam | | main.rs:1301:5:1302:19 | S | -| main.rs:1313:15:1313:18 | SelfParam | T | main.rs:1312:10:1312:10 | T | -| main.rs:1313:26:1315:9 | { ... } | | main.rs:1312:10:1312:10 | T | -| main.rs:1314:13:1314:16 | self | | main.rs:1301:5:1302:19 | S | -| main.rs:1314:13:1314:16 | self | T | main.rs:1312:10:1312:10 | T | -| main.rs:1314:13:1314:18 | self.0 | | main.rs:1312:10:1312:10 | T | -| main.rs:1317:15:1317:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1317:15:1317:19 | SelfParam | &T | main.rs:1301:5:1302:19 | S | -| main.rs:1317:15:1317:19 | SelfParam | &T.T | main.rs:1312:10:1312:10 | T | -| main.rs:1317:28:1319:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1317:28:1319:9 | { ... } | &T | main.rs:1312:10:1312:10 | T | -| main.rs:1318:13:1318:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1318:13:1318:19 | &... | &T | main.rs:1312:10:1312:10 | T | -| main.rs:1318:14:1318:17 | self | | file://:0:0:0:0 | & | -| main.rs:1318:14:1318:17 | self | &T | main.rs:1301:5:1302:19 | S | -| main.rs:1318:14:1318:17 | self | &T.T | main.rs:1312:10:1312:10 | T | -| main.rs:1318:14:1318:19 | self.0 | | main.rs:1312:10:1312:10 | T | -| main.rs:1321:15:1321:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1321:15:1321:25 | SelfParam | &T | main.rs:1301:5:1302:19 | S | -| main.rs:1321:15:1321:25 | SelfParam | &T.T | main.rs:1312:10:1312:10 | T | -| main.rs:1321:34:1323:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1321:34:1323:9 | { ... } | &T | main.rs:1312:10:1312:10 | T | -| main.rs:1322:13:1322:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1322:13:1322:19 | &... | &T | main.rs:1312:10:1312:10 | T | -| main.rs:1322:14:1322:17 | self | | file://:0:0:0:0 | & | -| main.rs:1322:14:1322:17 | self | &T | main.rs:1301:5:1302:19 | S | -| main.rs:1322:14:1322:17 | self | &T.T | main.rs:1312:10:1312:10 | T | -| main.rs:1322:14:1322:19 | self.0 | | main.rs:1312:10:1312:10 | T | -| main.rs:1327:29:1327:33 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1327:29:1327:33 | SelfParam | &T | main.rs:1326:5:1329:5 | Self [trait ATrait] | -| main.rs:1328:33:1328:36 | SelfParam | | main.rs:1326:5:1329:5 | Self [trait ATrait] | -| main.rs:1334:29:1334:33 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1334:29:1334:33 | SelfParam | &T | file://:0:0:0:0 | & | -| main.rs:1334:29:1334:33 | SelfParam | &T.&T | main.rs:1307:5:1310:5 | MyInt | -| main.rs:1334:43:1336:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:1335:13:1335:22 | (...) | | main.rs:1307:5:1310:5 | MyInt | -| main.rs:1335:13:1335:24 | ... .a | | {EXTERNAL LOCATION} | i64 | -| main.rs:1335:14:1335:21 | * ... | | main.rs:1307:5:1310:5 | MyInt | -| main.rs:1335:15:1335:21 | (...) | | file://:0:0:0:0 | & | -| main.rs:1335:15:1335:21 | (...) | | main.rs:1307:5:1310:5 | MyInt | -| main.rs:1335:15:1335:21 | (...) | &T | main.rs:1307:5:1310:5 | MyInt | -| main.rs:1335:16:1335:20 | * ... | | file://:0:0:0:0 | & | -| main.rs:1335:16:1335:20 | * ... | | main.rs:1307:5:1310:5 | MyInt | -| main.rs:1335:16:1335:20 | * ... | &T | main.rs:1307:5:1310:5 | MyInt | -| main.rs:1335:17:1335:20 | self | | file://:0:0:0:0 | & | -| main.rs:1335:17:1335:20 | self | &T | file://:0:0:0:0 | & | -| main.rs:1335:17:1335:20 | self | &T.&T | main.rs:1307:5:1310:5 | MyInt | -| main.rs:1339:33:1339:36 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1339:33:1339:36 | SelfParam | &T | main.rs:1307:5:1310:5 | MyInt | -| main.rs:1339:46:1341:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:1340:13:1340:19 | (...) | | main.rs:1307:5:1310:5 | MyInt | -| main.rs:1340:13:1340:21 | ... .a | | {EXTERNAL LOCATION} | i64 | -| main.rs:1340:14:1340:18 | * ... | | main.rs:1307:5:1310:5 | MyInt | -| main.rs:1340:15:1340:18 | self | | file://:0:0:0:0 | & | -| main.rs:1340:15:1340:18 | self | &T | main.rs:1307:5:1310:5 | MyInt | -| main.rs:1345:13:1345:14 | x1 | | main.rs:1301:5:1302:19 | S | -| main.rs:1345:13:1345:14 | x1 | T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1345:18:1345:22 | S(...) | | main.rs:1301:5:1302:19 | S | -| main.rs:1345:18:1345:22 | S(...) | T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1345:20:1345:21 | S2 | | main.rs:1304:5:1305:14 | S2 | -| main.rs:1346:18:1346:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1346:18:1346:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1346:18:1346:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1346:18:1346:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1346:26:1346:27 | x1 | | main.rs:1301:5:1302:19 | S | -| main.rs:1346:26:1346:27 | x1 | T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1346:26:1346:32 | x1.m1() | | main.rs:1304:5:1305:14 | S2 | -| main.rs:1348:13:1348:14 | x2 | | main.rs:1301:5:1302:19 | S | -| main.rs:1348:13:1348:14 | x2 | T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1348:18:1348:22 | S(...) | | main.rs:1301:5:1302:19 | S | -| main.rs:1348:18:1348:22 | S(...) | T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1348:20:1348:21 | S2 | | main.rs:1304:5:1305:14 | S2 | -| main.rs:1350:18:1350:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1350:18:1350:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1350:18:1350:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1350:18:1350:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1350:26:1350:27 | x2 | | main.rs:1301:5:1302:19 | S | -| main.rs:1350:26:1350:27 | x2 | T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1350:26:1350:32 | x2.m2() | | file://:0:0:0:0 | & | -| main.rs:1350:26:1350:32 | x2.m2() | &T | main.rs:1304:5:1305:14 | S2 | +| main.rs:1101:18:1101:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1101:18:1101:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1101:26:1101:26 | a | | main.rs:1026:5:1029:5 | MyThing | +| main.rs:1101:26:1101:26 | a | A | main.rs:1036:5:1037:14 | S1 | +| main.rs:1105:13:1105:13 | x | | main.rs:1026:5:1029:5 | MyThing | +| main.rs:1105:13:1105:13 | x | A | main.rs:1036:5:1037:14 | S1 | +| main.rs:1105:17:1105:33 | MyThing {...} | | main.rs:1026:5:1029:5 | MyThing | +| main.rs:1105:17:1105:33 | MyThing {...} | A | main.rs:1036:5:1037:14 | S1 | +| main.rs:1105:30:1105:31 | S1 | | main.rs:1036:5:1037:14 | S1 | +| main.rs:1106:13:1106:13 | y | | main.rs:1026:5:1029:5 | MyThing | +| main.rs:1106:13:1106:13 | y | A | main.rs:1038:5:1039:14 | S2 | +| main.rs:1106:17:1106:33 | MyThing {...} | | main.rs:1026:5:1029:5 | MyThing | +| main.rs:1106:17:1106:33 | MyThing {...} | A | main.rs:1038:5:1039:14 | S2 | +| main.rs:1106:30:1106:31 | S2 | | main.rs:1038:5:1039:14 | S2 | +| main.rs:1108:18:1108:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1108:18:1108:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1108:18:1108:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1108:18:1108:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1108:26:1108:26 | x | | main.rs:1026:5:1029:5 | MyThing | +| main.rs:1108:26:1108:26 | x | A | main.rs:1036:5:1037:14 | S1 | +| main.rs:1108:26:1108:31 | x.m1() | | main.rs:1036:5:1037:14 | S1 | +| main.rs:1109:18:1109:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1109:18:1109:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1109:18:1109:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1109:18:1109:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1109:26:1109:26 | y | | main.rs:1026:5:1029:5 | MyThing | +| main.rs:1109:26:1109:26 | y | A | main.rs:1038:5:1039:14 | S2 | +| main.rs:1109:26:1109:31 | y.m1() | | main.rs:1038:5:1039:14 | S2 | +| main.rs:1111:13:1111:13 | x | | main.rs:1026:5:1029:5 | MyThing | +| main.rs:1111:13:1111:13 | x | A | main.rs:1036:5:1037:14 | S1 | +| main.rs:1111:17:1111:33 | MyThing {...} | | main.rs:1026:5:1029:5 | MyThing | +| main.rs:1111:17:1111:33 | MyThing {...} | A | main.rs:1036:5:1037:14 | S1 | +| main.rs:1111:30:1111:31 | S1 | | main.rs:1036:5:1037:14 | S1 | +| main.rs:1112:13:1112:13 | y | | main.rs:1026:5:1029:5 | MyThing | +| main.rs:1112:13:1112:13 | y | A | main.rs:1038:5:1039:14 | S2 | +| main.rs:1112:17:1112:33 | MyThing {...} | | main.rs:1026:5:1029:5 | MyThing | +| main.rs:1112:17:1112:33 | MyThing {...} | A | main.rs:1038:5:1039:14 | S2 | +| main.rs:1112:30:1112:31 | S2 | | main.rs:1038:5:1039:14 | S2 | +| main.rs:1114:18:1114:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1114:18:1114:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1114:18:1114:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1114:18:1114:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1114:26:1114:26 | x | | main.rs:1026:5:1029:5 | MyThing | +| main.rs:1114:26:1114:26 | x | A | main.rs:1036:5:1037:14 | S1 | +| main.rs:1114:26:1114:31 | x.m2() | | main.rs:1036:5:1037:14 | S1 | +| main.rs:1115:18:1115:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1115:18:1115:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1115:18:1115:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1115:18:1115:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1115:26:1115:26 | y | | main.rs:1026:5:1029:5 | MyThing | +| main.rs:1115:26:1115:26 | y | A | main.rs:1038:5:1039:14 | S2 | +| main.rs:1115:26:1115:31 | y.m2() | | main.rs:1038:5:1039:14 | S2 | +| main.rs:1117:13:1117:13 | x | | main.rs:1031:5:1034:5 | MyThing2 | +| main.rs:1117:13:1117:13 | x | A | main.rs:1036:5:1037:14 | S1 | +| main.rs:1117:17:1117:34 | MyThing2 {...} | | main.rs:1031:5:1034:5 | MyThing2 | +| main.rs:1117:17:1117:34 | MyThing2 {...} | A | main.rs:1036:5:1037:14 | S1 | +| main.rs:1117:31:1117:32 | S1 | | main.rs:1036:5:1037:14 | S1 | +| main.rs:1118:13:1118:13 | y | | main.rs:1031:5:1034:5 | MyThing2 | +| main.rs:1118:13:1118:13 | y | A | main.rs:1038:5:1039:14 | S2 | +| main.rs:1118:17:1118:34 | MyThing2 {...} | | main.rs:1031:5:1034:5 | MyThing2 | +| main.rs:1118:17:1118:34 | MyThing2 {...} | A | main.rs:1038:5:1039:14 | S2 | +| main.rs:1118:31:1118:32 | S2 | | main.rs:1038:5:1039:14 | S2 | +| main.rs:1120:18:1120:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1120:18:1120:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1120:18:1120:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1120:18:1120:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1120:26:1120:26 | x | | main.rs:1031:5:1034:5 | MyThing2 | +| main.rs:1120:26:1120:26 | x | A | main.rs:1036:5:1037:14 | S1 | +| main.rs:1120:26:1120:31 | x.m3() | | main.rs:1036:5:1037:14 | S1 | +| main.rs:1121:18:1121:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1121:18:1121:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1121:18:1121:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1121:18:1121:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1121:26:1121:26 | y | | main.rs:1031:5:1034:5 | MyThing2 | +| main.rs:1121:26:1121:26 | y | A | main.rs:1038:5:1039:14 | S2 | +| main.rs:1121:26:1121:31 | y.m3() | | main.rs:1038:5:1039:14 | S2 | +| main.rs:1123:13:1123:13 | x | | main.rs:1026:5:1029:5 | MyThing | +| main.rs:1123:13:1123:13 | x | A | main.rs:1036:5:1037:14 | S1 | +| main.rs:1123:17:1123:33 | MyThing {...} | | main.rs:1026:5:1029:5 | MyThing | +| main.rs:1123:17:1123:33 | MyThing {...} | A | main.rs:1036:5:1037:14 | S1 | +| main.rs:1123:30:1123:31 | S1 | | main.rs:1036:5:1037:14 | S1 | +| main.rs:1124:13:1124:13 | s | | main.rs:1036:5:1037:14 | S1 | +| main.rs:1124:17:1124:32 | call_trait_m1(...) | | main.rs:1036:5:1037:14 | S1 | +| main.rs:1124:31:1124:31 | x | | main.rs:1026:5:1029:5 | MyThing | +| main.rs:1124:31:1124:31 | x | A | main.rs:1036:5:1037:14 | S1 | +| main.rs:1126:13:1126:13 | x | | main.rs:1031:5:1034:5 | MyThing2 | +| main.rs:1126:13:1126:13 | x | A | main.rs:1038:5:1039:14 | S2 | +| main.rs:1126:17:1126:34 | MyThing2 {...} | | main.rs:1031:5:1034:5 | MyThing2 | +| main.rs:1126:17:1126:34 | MyThing2 {...} | A | main.rs:1038:5:1039:14 | S2 | +| main.rs:1126:31:1126:32 | S2 | | main.rs:1038:5:1039:14 | S2 | +| main.rs:1127:13:1127:13 | s | | main.rs:1026:5:1029:5 | MyThing | +| main.rs:1127:13:1127:13 | s | A | main.rs:1038:5:1039:14 | S2 | +| main.rs:1127:17:1127:32 | call_trait_m1(...) | | main.rs:1026:5:1029:5 | MyThing | +| main.rs:1127:17:1127:32 | call_trait_m1(...) | A | main.rs:1038:5:1039:14 | S2 | +| main.rs:1127:31:1127:31 | x | | main.rs:1031:5:1034:5 | MyThing2 | +| main.rs:1127:31:1127:31 | x | A | main.rs:1038:5:1039:14 | S2 | +| main.rs:1144:22:1144:22 | x | | file://:0:0:0:0 | & | +| main.rs:1144:22:1144:22 | x | &T | main.rs:1144:11:1144:19 | T | +| main.rs:1144:35:1146:5 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1144:35:1146:5 | { ... } | &T | main.rs:1144:11:1144:19 | T | +| main.rs:1145:9:1145:9 | x | | file://:0:0:0:0 | & | +| main.rs:1145:9:1145:9 | x | &T | main.rs:1144:11:1144:19 | T | +| main.rs:1149:17:1149:20 | SelfParam | | main.rs:1134:5:1135:14 | S1 | +| main.rs:1149:29:1151:9 | { ... } | | main.rs:1137:5:1138:14 | S2 | +| main.rs:1150:13:1150:14 | S2 | | main.rs:1137:5:1138:14 | S2 | +| main.rs:1154:21:1154:21 | x | | main.rs:1154:13:1154:14 | T1 | +| main.rs:1157:5:1159:5 | { ... } | | main.rs:1154:17:1154:18 | T2 | +| main.rs:1158:9:1158:9 | x | | main.rs:1154:13:1154:14 | T1 | +| main.rs:1158:9:1158:16 | x.into() | | main.rs:1154:17:1154:18 | T2 | +| main.rs:1162:13:1162:13 | x | | main.rs:1134:5:1135:14 | S1 | +| main.rs:1162:17:1162:18 | S1 | | main.rs:1134:5:1135:14 | S1 | +| main.rs:1163:18:1163:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1163:18:1163:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1163:18:1163:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1163:18:1163:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1163:26:1163:31 | id(...) | | file://:0:0:0:0 | & | +| main.rs:1163:26:1163:31 | id(...) | &T | main.rs:1134:5:1135:14 | S1 | +| main.rs:1163:29:1163:30 | &x | | file://:0:0:0:0 | & | +| main.rs:1163:29:1163:30 | &x | &T | main.rs:1134:5:1135:14 | S1 | +| main.rs:1163:30:1163:30 | x | | main.rs:1134:5:1135:14 | S1 | +| main.rs:1165:13:1165:13 | x | | main.rs:1134:5:1135:14 | S1 | +| main.rs:1165:17:1165:18 | S1 | | main.rs:1134:5:1135:14 | S1 | +| main.rs:1166:18:1166:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1166:18:1166:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1166:18:1166:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1166:18:1166:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1166:26:1166:37 | id::<...>(...) | | file://:0:0:0:0 | & | +| main.rs:1166:26:1166:37 | id::<...>(...) | &T | main.rs:1134:5:1135:14 | S1 | +| main.rs:1166:35:1166:36 | &x | | file://:0:0:0:0 | & | +| main.rs:1166:35:1166:36 | &x | &T | main.rs:1134:5:1135:14 | S1 | +| main.rs:1166:36:1166:36 | x | | main.rs:1134:5:1135:14 | S1 | +| main.rs:1168:13:1168:13 | x | | main.rs:1134:5:1135:14 | S1 | +| main.rs:1168:13:1168:13 | x | | main.rs:1140:5:1140:25 | dyn Trait | +| main.rs:1168:17:1168:18 | S1 | | main.rs:1134:5:1135:14 | S1 | +| main.rs:1168:17:1168:18 | S1 | | main.rs:1140:5:1140:25 | dyn Trait | +| main.rs:1170:18:1170:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1170:18:1170:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1170:18:1170:44 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1170:18:1170:44 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1170:26:1170:44 | id::<...>(...) | | file://:0:0:0:0 | & | +| main.rs:1170:26:1170:44 | id::<...>(...) | &T | main.rs:1140:5:1140:25 | dyn Trait | +| main.rs:1170:42:1170:43 | &x | | file://:0:0:0:0 | & | +| main.rs:1170:42:1170:43 | &x | &T | main.rs:1134:5:1135:14 | S1 | +| main.rs:1170:42:1170:43 | &x | &T | main.rs:1140:5:1140:25 | dyn Trait | +| main.rs:1170:43:1170:43 | x | | main.rs:1134:5:1135:14 | S1 | +| main.rs:1170:43:1170:43 | x | | main.rs:1140:5:1140:25 | dyn Trait | +| main.rs:1172:13:1172:13 | x | | main.rs:1134:5:1135:14 | S1 | +| main.rs:1172:17:1172:18 | S1 | | main.rs:1134:5:1135:14 | S1 | +| main.rs:1173:9:1173:25 | into::<...>(...) | | main.rs:1137:5:1138:14 | S2 | +| main.rs:1173:24:1173:24 | x | | main.rs:1134:5:1135:14 | S1 | +| main.rs:1175:13:1175:13 | x | | main.rs:1134:5:1135:14 | S1 | +| main.rs:1175:17:1175:18 | S1 | | main.rs:1134:5:1135:14 | S1 | +| main.rs:1176:13:1176:13 | y | | main.rs:1137:5:1138:14 | S2 | +| main.rs:1176:21:1176:27 | into(...) | | main.rs:1137:5:1138:14 | S2 | +| main.rs:1176:26:1176:26 | x | | main.rs:1134:5:1135:14 | S1 | +| main.rs:1190:22:1190:25 | SelfParam | | main.rs:1181:5:1187:5 | PairOption | +| main.rs:1190:22:1190:25 | SelfParam | Fst | main.rs:1189:10:1189:12 | Fst | +| main.rs:1190:22:1190:25 | SelfParam | Snd | main.rs:1189:15:1189:17 | Snd | +| main.rs:1190:35:1197:9 | { ... } | | main.rs:1189:15:1189:17 | Snd | +| main.rs:1191:13:1196:13 | match self { ... } | | main.rs:1189:15:1189:17 | Snd | +| main.rs:1191:19:1191:22 | self | | main.rs:1181:5:1187:5 | PairOption | +| main.rs:1191:19:1191:22 | self | Fst | main.rs:1189:10:1189:12 | Fst | +| main.rs:1191:19:1191:22 | self | Snd | main.rs:1189:15:1189:17 | Snd | +| main.rs:1192:17:1192:38 | ...::PairNone(...) | | main.rs:1181:5:1187:5 | PairOption | +| main.rs:1192:17:1192:38 | ...::PairNone(...) | Fst | main.rs:1189:10:1189:12 | Fst | +| main.rs:1192:17:1192:38 | ...::PairNone(...) | Snd | main.rs:1189:15:1189:17 | Snd | +| main.rs:1192:43:1192:82 | MacroExpr | | main.rs:1189:15:1189:17 | Snd | +| main.rs:1192:50:1192:81 | "PairNone has no second elemen... | | file://:0:0:0:0 | & | +| main.rs:1192:50:1192:81 | "PairNone has no second elemen... | &T | {EXTERNAL LOCATION} | str | +| main.rs:1192:50:1192:81 | ...::panic_fmt(...) | | file://:0:0:0:0 | ! | +| main.rs:1192:50:1192:81 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1192:50:1192:81 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1192:50:1192:81 | MacroExpr | | main.rs:1189:15:1189:17 | Snd | +| main.rs:1192:50:1192:81 | { ... } | | main.rs:1189:15:1189:17 | Snd | +| main.rs:1193:17:1193:38 | ...::PairFst(...) | | main.rs:1181:5:1187:5 | PairOption | +| main.rs:1193:17:1193:38 | ...::PairFst(...) | Fst | main.rs:1189:10:1189:12 | Fst | +| main.rs:1193:17:1193:38 | ...::PairFst(...) | Snd | main.rs:1189:15:1189:17 | Snd | +| main.rs:1193:37:1193:37 | _ | | main.rs:1189:10:1189:12 | Fst | +| main.rs:1193:43:1193:81 | MacroExpr | | main.rs:1189:15:1189:17 | Snd | +| main.rs:1193:50:1193:80 | "PairFst has no second element... | | file://:0:0:0:0 | & | +| main.rs:1193:50:1193:80 | "PairFst has no second element... | &T | {EXTERNAL LOCATION} | str | +| main.rs:1193:50:1193:80 | ...::panic_fmt(...) | | file://:0:0:0:0 | ! | +| main.rs:1193:50:1193:80 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1193:50:1193:80 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1193:50:1193:80 | MacroExpr | | main.rs:1189:15:1189:17 | Snd | +| main.rs:1193:50:1193:80 | { ... } | | main.rs:1189:15:1189:17 | Snd | +| main.rs:1194:17:1194:40 | ...::PairSnd(...) | | main.rs:1181:5:1187:5 | PairOption | +| main.rs:1194:17:1194:40 | ...::PairSnd(...) | Fst | main.rs:1189:10:1189:12 | Fst | +| main.rs:1194:17:1194:40 | ...::PairSnd(...) | Snd | main.rs:1189:15:1189:17 | Snd | +| main.rs:1194:37:1194:39 | snd | | main.rs:1189:15:1189:17 | Snd | +| main.rs:1194:45:1194:47 | snd | | main.rs:1189:15:1189:17 | Snd | +| main.rs:1195:17:1195:44 | ...::PairBoth(...) | | main.rs:1181:5:1187:5 | PairOption | +| main.rs:1195:17:1195:44 | ...::PairBoth(...) | Fst | main.rs:1189:10:1189:12 | Fst | +| main.rs:1195:17:1195:44 | ...::PairBoth(...) | Snd | main.rs:1189:15:1189:17 | Snd | +| main.rs:1195:38:1195:38 | _ | | main.rs:1189:10:1189:12 | Fst | +| main.rs:1195:41:1195:43 | snd | | main.rs:1189:15:1189:17 | Snd | +| main.rs:1195:49:1195:51 | snd | | main.rs:1189:15:1189:17 | Snd | +| main.rs:1221:10:1221:10 | t | | main.rs:1181:5:1187:5 | PairOption | +| main.rs:1221:10:1221:10 | t | Fst | main.rs:1203:5:1204:14 | S2 | +| main.rs:1221:10:1221:10 | t | Snd | main.rs:1181:5:1187:5 | PairOption | +| main.rs:1221:10:1221:10 | t | Snd.Fst | main.rs:1203:5:1204:14 | S2 | +| main.rs:1221:10:1221:10 | t | Snd.Snd | main.rs:1206:5:1207:14 | S3 | +| main.rs:1222:13:1222:13 | x | | main.rs:1206:5:1207:14 | S3 | +| main.rs:1222:17:1222:17 | t | | main.rs:1181:5:1187:5 | PairOption | +| main.rs:1222:17:1222:17 | t | Fst | main.rs:1203:5:1204:14 | S2 | +| main.rs:1222:17:1222:17 | t | Snd | main.rs:1181:5:1187:5 | PairOption | +| main.rs:1222:17:1222:17 | t | Snd.Fst | main.rs:1203:5:1204:14 | S2 | +| main.rs:1222:17:1222:17 | t | Snd.Snd | main.rs:1206:5:1207:14 | S3 | +| main.rs:1222:17:1222:29 | t.unwrapSnd() | | main.rs:1181:5:1187:5 | PairOption | +| main.rs:1222:17:1222:29 | t.unwrapSnd() | Fst | main.rs:1203:5:1204:14 | S2 | +| main.rs:1222:17:1222:29 | t.unwrapSnd() | Snd | main.rs:1206:5:1207:14 | S3 | +| main.rs:1222:17:1222:41 | ... .unwrapSnd() | | main.rs:1206:5:1207:14 | S3 | +| main.rs:1223:18:1223:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1223:18:1223:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1223:18:1223:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1223:18:1223:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1223:26:1223:26 | x | | main.rs:1206:5:1207:14 | S3 | +| main.rs:1238:22:1238:25 | SelfParam | | main.rs:1236:5:1239:5 | Self [trait TraitWithAssocType] | +| main.rs:1246:22:1246:25 | SelfParam | | main.rs:1234:5:1234:28 | GenS | +| main.rs:1246:22:1246:25 | SelfParam | GenT | main.rs:1241:10:1241:15 | Output | +| main.rs:1246:44:1248:9 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1246:44:1248:9 | { ... } | E | main.rs:1241:10:1241:15 | Output | +| main.rs:1246:44:1248:9 | { ... } | T | main.rs:1241:10:1241:15 | Output | +| main.rs:1247:13:1247:22 | Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1247:13:1247:22 | Ok(...) | E | main.rs:1241:10:1241:15 | Output | +| main.rs:1247:13:1247:22 | Ok(...) | T | main.rs:1241:10:1241:15 | Output | +| main.rs:1247:16:1247:19 | self | | main.rs:1234:5:1234:28 | GenS | +| main.rs:1247:16:1247:19 | self | GenT | main.rs:1241:10:1241:15 | Output | +| main.rs:1247:16:1247:21 | self.0 | | main.rs:1241:10:1241:15 | Output | +| main.rs:1253:13:1253:14 | p1 | | main.rs:1181:5:1187:5 | PairOption | +| main.rs:1253:13:1253:14 | p1 | Fst | main.rs:1200:5:1201:14 | S1 | +| main.rs:1253:13:1253:14 | p1 | Snd | main.rs:1203:5:1204:14 | S2 | +| main.rs:1253:26:1253:53 | ...::PairBoth(...) | | main.rs:1181:5:1187:5 | PairOption | +| main.rs:1253:26:1253:53 | ...::PairBoth(...) | Fst | main.rs:1200:5:1201:14 | S1 | +| main.rs:1253:26:1253:53 | ...::PairBoth(...) | Snd | main.rs:1203:5:1204:14 | S2 | +| main.rs:1253:47:1253:48 | S1 | | main.rs:1200:5:1201:14 | S1 | +| main.rs:1253:51:1253:52 | S2 | | main.rs:1203:5:1204:14 | S2 | +| main.rs:1254:18:1254:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1254:18:1254:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1254:18:1254:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1254:18:1254:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1254:26:1254:27 | p1 | | main.rs:1181:5:1187:5 | PairOption | +| main.rs:1254:26:1254:27 | p1 | Fst | main.rs:1200:5:1201:14 | S1 | +| main.rs:1254:26:1254:27 | p1 | Snd | main.rs:1203:5:1204:14 | S2 | +| main.rs:1257:13:1257:14 | p2 | | main.rs:1181:5:1187:5 | PairOption | +| main.rs:1257:13:1257:14 | p2 | Fst | main.rs:1200:5:1201:14 | S1 | +| main.rs:1257:13:1257:14 | p2 | Snd | main.rs:1203:5:1204:14 | S2 | +| main.rs:1257:26:1257:47 | ...::PairNone(...) | | main.rs:1181:5:1187:5 | PairOption | +| main.rs:1257:26:1257:47 | ...::PairNone(...) | Fst | main.rs:1200:5:1201:14 | S1 | +| main.rs:1257:26:1257:47 | ...::PairNone(...) | Snd | main.rs:1203:5:1204:14 | S2 | +| main.rs:1258:18:1258:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1258:18:1258:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1258:18:1258:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1258:18:1258:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1258:26:1258:27 | p2 | | main.rs:1181:5:1187:5 | PairOption | +| main.rs:1258:26:1258:27 | p2 | Fst | main.rs:1200:5:1201:14 | S1 | +| main.rs:1258:26:1258:27 | p2 | Snd | main.rs:1203:5:1204:14 | S2 | +| main.rs:1261:13:1261:14 | p3 | | main.rs:1181:5:1187:5 | PairOption | +| main.rs:1261:13:1261:14 | p3 | Fst | main.rs:1203:5:1204:14 | S2 | +| main.rs:1261:13:1261:14 | p3 | Snd | main.rs:1206:5:1207:14 | S3 | +| main.rs:1261:34:1261:56 | ...::PairSnd(...) | | main.rs:1181:5:1187:5 | PairOption | +| main.rs:1261:34:1261:56 | ...::PairSnd(...) | Fst | main.rs:1203:5:1204:14 | S2 | +| main.rs:1261:34:1261:56 | ...::PairSnd(...) | Snd | main.rs:1206:5:1207:14 | S3 | +| main.rs:1261:54:1261:55 | S3 | | main.rs:1206:5:1207:14 | S3 | +| main.rs:1262:18:1262:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1262:18:1262:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1262:18:1262:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1262:18:1262:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1262:26:1262:27 | p3 | | main.rs:1181:5:1187:5 | PairOption | +| main.rs:1262:26:1262:27 | p3 | Fst | main.rs:1203:5:1204:14 | S2 | +| main.rs:1262:26:1262:27 | p3 | Snd | main.rs:1206:5:1207:14 | S3 | +| main.rs:1265:13:1265:14 | p3 | | main.rs:1181:5:1187:5 | PairOption | +| main.rs:1265:13:1265:14 | p3 | Fst | main.rs:1203:5:1204:14 | S2 | +| main.rs:1265:13:1265:14 | p3 | Snd | main.rs:1206:5:1207:14 | S3 | +| main.rs:1265:35:1265:56 | ...::PairNone(...) | | main.rs:1181:5:1187:5 | PairOption | +| main.rs:1265:35:1265:56 | ...::PairNone(...) | Fst | main.rs:1203:5:1204:14 | S2 | +| main.rs:1265:35:1265:56 | ...::PairNone(...) | Snd | main.rs:1206:5:1207:14 | S3 | +| main.rs:1266:18:1266:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1266:18:1266:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1266:18:1266:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1266:18:1266:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1266:26:1266:27 | p3 | | main.rs:1181:5:1187:5 | PairOption | +| main.rs:1266:26:1266:27 | p3 | Fst | main.rs:1203:5:1204:14 | S2 | +| main.rs:1266:26:1266:27 | p3 | Snd | main.rs:1206:5:1207:14 | S3 | +| main.rs:1268:11:1268:54 | ...::PairSnd(...) | | main.rs:1181:5:1187:5 | PairOption | +| main.rs:1268:11:1268:54 | ...::PairSnd(...) | Fst | main.rs:1203:5:1204:14 | S2 | +| main.rs:1268:11:1268:54 | ...::PairSnd(...) | Snd | main.rs:1181:5:1187:5 | PairOption | +| main.rs:1268:11:1268:54 | ...::PairSnd(...) | Snd.Fst | main.rs:1203:5:1204:14 | S2 | +| main.rs:1268:11:1268:54 | ...::PairSnd(...) | Snd.Snd | main.rs:1206:5:1207:14 | S3 | +| main.rs:1268:31:1268:53 | ...::PairSnd(...) | | main.rs:1181:5:1187:5 | PairOption | +| main.rs:1268:31:1268:53 | ...::PairSnd(...) | Fst | main.rs:1203:5:1204:14 | S2 | +| main.rs:1268:31:1268:53 | ...::PairSnd(...) | Snd | main.rs:1206:5:1207:14 | S3 | +| main.rs:1268:51:1268:52 | S3 | | main.rs:1206:5:1207:14 | S3 | +| main.rs:1270:13:1270:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1270:13:1270:13 | x | E | main.rs:1200:5:1201:14 | S1 | +| main.rs:1270:13:1270:13 | x | T | main.rs:1226:5:1226:34 | S4 | +| main.rs:1270:13:1270:13 | x | T.T41 | main.rs:1203:5:1204:14 | S2 | +| main.rs:1270:13:1270:13 | x | T.T42 | main.rs:1228:5:1228:22 | S5 | +| main.rs:1270:13:1270:13 | x | T.T42.T5 | main.rs:1203:5:1204:14 | S2 | +| main.rs:1272:13:1272:13 | y | | {EXTERNAL LOCATION} | Result | +| main.rs:1272:13:1272:13 | y | E | {EXTERNAL LOCATION} | bool | +| main.rs:1272:13:1272:13 | y | T | {EXTERNAL LOCATION} | bool | +| main.rs:1272:17:1272:26 | GenS(...) | | main.rs:1234:5:1234:28 | GenS | +| main.rs:1272:17:1272:26 | GenS(...) | GenT | {EXTERNAL LOCATION} | bool | +| main.rs:1272:17:1272:38 | ... .get_input() | | {EXTERNAL LOCATION} | Result | +| main.rs:1272:17:1272:38 | ... .get_input() | E | {EXTERNAL LOCATION} | bool | +| main.rs:1272:17:1272:38 | ... .get_input() | T | {EXTERNAL LOCATION} | bool | +| main.rs:1272:22:1272:25 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1285:16:1285:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1285:16:1285:24 | SelfParam | &T | main.rs:1283:5:1290:5 | Self [trait MyTrait] | +| main.rs:1285:27:1285:31 | value | | main.rs:1283:19:1283:19 | S | +| main.rs:1287:21:1287:29 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1287:21:1287:29 | SelfParam | &T | main.rs:1283:5:1290:5 | Self [trait MyTrait] | +| main.rs:1287:32:1287:36 | value | | main.rs:1283:19:1283:19 | S | +| main.rs:1288:13:1288:16 | self | | file://:0:0:0:0 | & | +| main.rs:1288:13:1288:16 | self | &T | main.rs:1283:5:1290:5 | Self [trait MyTrait] | +| main.rs:1288:22:1288:26 | value | | main.rs:1283:19:1283:19 | S | +| main.rs:1294:16:1294:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1294:16:1294:24 | SelfParam | &T | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1294:16:1294:24 | SelfParam | &T.T | main.rs:1292:10:1292:10 | T | +| main.rs:1294:27:1294:31 | value | | main.rs:1292:10:1292:10 | T | +| main.rs:1298:26:1300:9 | { ... } | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1298:26:1300:9 | { ... } | T | main.rs:1297:10:1297:10 | T | +| main.rs:1299:13:1299:30 | ...::MyNone(...) | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1299:13:1299:30 | ...::MyNone(...) | T | main.rs:1297:10:1297:10 | T | +| main.rs:1304:20:1304:23 | SelfParam | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1304:20:1304:23 | SelfParam | T | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1304:20:1304:23 | SelfParam | T.T | main.rs:1303:10:1303:10 | T | +| main.rs:1304:41:1309:9 | { ... } | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1304:41:1309:9 | { ... } | T | main.rs:1303:10:1303:10 | T | +| main.rs:1305:13:1308:13 | match self { ... } | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1305:13:1308:13 | match self { ... } | T | main.rs:1303:10:1303:10 | T | +| main.rs:1305:19:1305:22 | self | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1305:19:1305:22 | self | T | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1305:19:1305:22 | self | T.T | main.rs:1303:10:1303:10 | T | +| main.rs:1306:17:1306:34 | ...::MyNone(...) | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1306:17:1306:34 | ...::MyNone(...) | T | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1306:17:1306:34 | ...::MyNone(...) | T.T | main.rs:1303:10:1303:10 | T | +| main.rs:1306:39:1306:56 | ...::MyNone(...) | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1306:39:1306:56 | ...::MyNone(...) | T | main.rs:1303:10:1303:10 | T | +| main.rs:1307:17:1307:35 | ...::MySome(...) | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1307:17:1307:35 | ...::MySome(...) | T | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1307:17:1307:35 | ...::MySome(...) | T.T | main.rs:1303:10:1303:10 | T | +| main.rs:1307:34:1307:34 | x | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1307:34:1307:34 | x | T | main.rs:1303:10:1303:10 | T | +| main.rs:1307:40:1307:40 | x | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1307:40:1307:40 | x | T | main.rs:1303:10:1303:10 | T | +| main.rs:1316:13:1316:14 | x1 | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1316:13:1316:14 | x1 | T | main.rs:1312:5:1313:13 | S | +| main.rs:1316:18:1316:37 | ...::new(...) | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1316:18:1316:37 | ...::new(...) | T | main.rs:1312:5:1313:13 | S | +| main.rs:1317:18:1317:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1317:18:1317:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1317:18:1317:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1317:18:1317:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1317:26:1317:27 | x1 | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1317:26:1317:27 | x1 | T | main.rs:1312:5:1313:13 | S | +| main.rs:1319:17:1319:18 | x2 | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1319:17:1319:18 | x2 | T | main.rs:1312:5:1313:13 | S | +| main.rs:1319:22:1319:36 | ...::new(...) | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1319:22:1319:36 | ...::new(...) | T | main.rs:1312:5:1313:13 | S | +| main.rs:1320:9:1320:10 | x2 | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1320:9:1320:10 | x2 | T | main.rs:1312:5:1313:13 | S | +| main.rs:1320:16:1320:16 | S | | main.rs:1312:5:1313:13 | S | +| main.rs:1321:18:1321:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1321:18:1321:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1321:18:1321:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1321:18:1321:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1321:26:1321:27 | x2 | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1321:26:1321:27 | x2 | T | main.rs:1312:5:1313:13 | S | +| main.rs:1324:17:1324:18 | x3 | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1324:22:1324:36 | ...::new(...) | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1325:9:1325:10 | x3 | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1325:21:1325:21 | S | | main.rs:1312:5:1313:13 | S | +| main.rs:1326:18:1326:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1326:18:1326:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1326:18:1326:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1326:18:1326:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1326:26:1326:27 | x3 | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1328:17:1328:18 | x4 | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1328:17:1328:18 | x4 | T | main.rs:1312:5:1313:13 | S | +| main.rs:1328:22:1328:36 | ...::new(...) | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1328:22:1328:36 | ...::new(...) | T | main.rs:1312:5:1313:13 | S | +| main.rs:1329:23:1329:29 | &mut x4 | | file://:0:0:0:0 | & | +| main.rs:1329:23:1329:29 | &mut x4 | &T | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1329:23:1329:29 | &mut x4 | &T.T | main.rs:1312:5:1313:13 | S | +| main.rs:1329:28:1329:29 | x4 | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1329:28:1329:29 | x4 | T | main.rs:1312:5:1313:13 | S | +| main.rs:1329:32:1329:32 | S | | main.rs:1312:5:1313:13 | S | +| main.rs:1330:18:1330:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1330:18:1330:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1330:18:1330:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1330:18:1330:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1330:26:1330:27 | x4 | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1330:26:1330:27 | x4 | T | main.rs:1312:5:1313:13 | S | +| main.rs:1332:13:1332:14 | x5 | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1332:13:1332:14 | x5 | T | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1332:13:1332:14 | x5 | T.T | main.rs:1312:5:1313:13 | S | +| main.rs:1332:18:1332:58 | ...::MySome(...) | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1332:18:1332:58 | ...::MySome(...) | T | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1332:18:1332:58 | ...::MySome(...) | T.T | main.rs:1312:5:1313:13 | S | +| main.rs:1332:35:1332:57 | ...::MyNone(...) | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1332:35:1332:57 | ...::MyNone(...) | T | main.rs:1312:5:1313:13 | S | +| main.rs:1333:18:1333:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1333:18:1333:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1333:18:1333:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1333:18:1333:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1333:26:1333:27 | x5 | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1333:26:1333:27 | x5 | T | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1333:26:1333:27 | x5 | T.T | main.rs:1312:5:1313:13 | S | +| main.rs:1333:26:1333:37 | x5.flatten() | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1333:26:1333:37 | x5.flatten() | T | main.rs:1312:5:1313:13 | S | +| main.rs:1335:13:1335:14 | x6 | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1335:13:1335:14 | x6 | T | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1335:13:1335:14 | x6 | T.T | main.rs:1312:5:1313:13 | S | +| main.rs:1335:18:1335:58 | ...::MySome(...) | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1335:18:1335:58 | ...::MySome(...) | T | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1335:18:1335:58 | ...::MySome(...) | T.T | main.rs:1312:5:1313:13 | S | +| main.rs:1335:35:1335:57 | ...::MyNone(...) | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1335:35:1335:57 | ...::MyNone(...) | T | main.rs:1312:5:1313:13 | S | +| main.rs:1336:18:1336:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1336:18:1336:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1336:18:1336:61 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1336:18:1336:61 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1336:26:1336:61 | ...::flatten(...) | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1336:26:1336:61 | ...::flatten(...) | T | main.rs:1312:5:1313:13 | S | +| main.rs:1336:59:1336:60 | x6 | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1336:59:1336:60 | x6 | T | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1336:59:1336:60 | x6 | T.T | main.rs:1312:5:1313:13 | S | +| main.rs:1339:13:1339:19 | from_if | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1339:13:1339:19 | from_if | T | main.rs:1312:5:1313:13 | S | +| main.rs:1339:23:1343:9 | if ... {...} else {...} | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1339:23:1343:9 | if ... {...} else {...} | T | main.rs:1312:5:1313:13 | S | +| main.rs:1339:26:1339:26 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1339:26:1339:30 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1339:30:1339:30 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1339:32:1341:9 | { ... } | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1339:32:1341:9 | { ... } | T | main.rs:1312:5:1313:13 | S | +| main.rs:1340:13:1340:30 | ...::MyNone(...) | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1340:13:1340:30 | ...::MyNone(...) | T | main.rs:1312:5:1313:13 | S | +| main.rs:1341:16:1343:9 | { ... } | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1341:16:1343:9 | { ... } | T | main.rs:1312:5:1313:13 | S | +| main.rs:1342:13:1342:31 | ...::MySome(...) | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1342:13:1342:31 | ...::MySome(...) | T | main.rs:1312:5:1313:13 | S | +| main.rs:1342:30:1342:30 | S | | main.rs:1312:5:1313:13 | S | +| main.rs:1344:18:1344:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1344:18:1344:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1344:18:1344:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1344:18:1344:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1344:26:1344:32 | from_if | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1344:26:1344:32 | from_if | T | main.rs:1312:5:1313:13 | S | +| main.rs:1347:13:1347:22 | from_match | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1347:13:1347:22 | from_match | T | main.rs:1312:5:1313:13 | S | +| main.rs:1347:26:1350:9 | match ... { ... } | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1347:26:1350:9 | match ... { ... } | T | main.rs:1312:5:1313:13 | S | +| main.rs:1347:32:1347:32 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1347:32:1347:36 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1347:36:1347:36 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1348:13:1348:16 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1348:21:1348:38 | ...::MyNone(...) | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1348:21:1348:38 | ...::MyNone(...) | T | main.rs:1312:5:1313:13 | S | +| main.rs:1349:13:1349:17 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1349:22:1349:40 | ...::MySome(...) | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1349:22:1349:40 | ...::MySome(...) | T | main.rs:1312:5:1313:13 | S | +| main.rs:1349:39:1349:39 | S | | main.rs:1312:5:1313:13 | S | | main.rs:1351:18:1351:23 | "{:?}\\n" | | file://:0:0:0:0 | & | | main.rs:1351:18:1351:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1351:18:1351:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1351:18:1351:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1351:26:1351:27 | x2 | | main.rs:1301:5:1302:19 | S | -| main.rs:1351:26:1351:27 | x2 | T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1351:26:1351:32 | x2.m3() | | file://:0:0:0:0 | & | -| main.rs:1351:26:1351:32 | x2.m3() | &T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1353:13:1353:14 | x3 | | main.rs:1301:5:1302:19 | S | -| main.rs:1353:13:1353:14 | x3 | T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1353:18:1353:22 | S(...) | | main.rs:1301:5:1302:19 | S | -| main.rs:1353:18:1353:22 | S(...) | T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1353:20:1353:21 | S2 | | main.rs:1304:5:1305:14 | S2 | -| main.rs:1355:18:1355:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1355:18:1355:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1355:18:1355:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1355:18:1355:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1355:26:1355:41 | ...::m2(...) | | file://:0:0:0:0 | & | -| main.rs:1355:26:1355:41 | ...::m2(...) | &T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1355:38:1355:40 | &x3 | | file://:0:0:0:0 | & | -| main.rs:1355:38:1355:40 | &x3 | &T | main.rs:1301:5:1302:19 | S | -| main.rs:1355:38:1355:40 | &x3 | &T.T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1355:39:1355:40 | x3 | | main.rs:1301:5:1302:19 | S | -| main.rs:1355:39:1355:40 | x3 | T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1356:18:1356:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1356:18:1356:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1356:18:1356:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1356:18:1356:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1356:26:1356:41 | ...::m3(...) | | file://:0:0:0:0 | & | -| main.rs:1356:26:1356:41 | ...::m3(...) | &T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1356:38:1356:40 | &x3 | | file://:0:0:0:0 | & | -| main.rs:1356:38:1356:40 | &x3 | &T | main.rs:1301:5:1302:19 | S | -| main.rs:1356:38:1356:40 | &x3 | &T.T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1356:39:1356:40 | x3 | | main.rs:1301:5:1302:19 | S | -| main.rs:1356:39:1356:40 | x3 | T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1358:13:1358:14 | x4 | | file://:0:0:0:0 | & | -| main.rs:1358:13:1358:14 | x4 | &T | main.rs:1301:5:1302:19 | S | -| main.rs:1358:13:1358:14 | x4 | &T.T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1358:18:1358:23 | &... | | file://:0:0:0:0 | & | -| main.rs:1358:18:1358:23 | &... | &T | main.rs:1301:5:1302:19 | S | -| main.rs:1358:18:1358:23 | &... | &T.T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1358:19:1358:23 | S(...) | | main.rs:1301:5:1302:19 | S | -| main.rs:1358:19:1358:23 | S(...) | T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1358:21:1358:22 | S2 | | main.rs:1304:5:1305:14 | S2 | +| main.rs:1351:18:1351:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1351:18:1351:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1351:26:1351:35 | from_match | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1351:26:1351:35 | from_match | T | main.rs:1312:5:1313:13 | S | +| main.rs:1354:13:1354:21 | from_loop | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1354:13:1354:21 | from_loop | T | main.rs:1312:5:1313:13 | S | +| main.rs:1354:25:1359:9 | loop { ... } | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1354:25:1359:9 | loop { ... } | T | main.rs:1312:5:1313:13 | S | +| main.rs:1355:16:1355:16 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1355:16:1355:20 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1355:20:1355:20 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1356:23:1356:40 | ...::MyNone(...) | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1356:23:1356:40 | ...::MyNone(...) | T | main.rs:1312:5:1313:13 | S | +| main.rs:1358:19:1358:37 | ...::MySome(...) | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1358:19:1358:37 | ...::MySome(...) | T | main.rs:1312:5:1313:13 | S | +| main.rs:1358:36:1358:36 | S | | main.rs:1312:5:1313:13 | S | | main.rs:1360:18:1360:23 | "{:?}\\n" | | file://:0:0:0:0 | & | | main.rs:1360:18:1360:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1360:18:1360:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1360:18:1360:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1360:26:1360:27 | x4 | | file://:0:0:0:0 | & | -| main.rs:1360:26:1360:27 | x4 | &T | main.rs:1301:5:1302:19 | S | -| main.rs:1360:26:1360:27 | x4 | &T.T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1360:26:1360:32 | x4.m2() | | file://:0:0:0:0 | & | -| main.rs:1360:26:1360:32 | x4.m2() | &T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1361:18:1361:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1361:18:1361:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1361:18:1361:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1361:18:1361:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1361:26:1361:27 | x4 | | file://:0:0:0:0 | & | -| main.rs:1361:26:1361:27 | x4 | &T | main.rs:1301:5:1302:19 | S | -| main.rs:1361:26:1361:27 | x4 | &T.T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1361:26:1361:32 | x4.m3() | | file://:0:0:0:0 | & | -| main.rs:1361:26:1361:32 | x4.m3() | &T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1363:13:1363:14 | x5 | | file://:0:0:0:0 | & | -| main.rs:1363:13:1363:14 | x5 | &T | main.rs:1301:5:1302:19 | S | -| main.rs:1363:13:1363:14 | x5 | &T.T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1363:18:1363:23 | &... | | file://:0:0:0:0 | & | -| main.rs:1363:18:1363:23 | &... | &T | main.rs:1301:5:1302:19 | S | -| main.rs:1363:18:1363:23 | &... | &T.T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1363:19:1363:23 | S(...) | | main.rs:1301:5:1302:19 | S | -| main.rs:1363:19:1363:23 | S(...) | T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1363:21:1363:22 | S2 | | main.rs:1304:5:1305:14 | S2 | -| main.rs:1365:18:1365:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1365:18:1365:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1365:18:1365:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1365:18:1365:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1365:26:1365:27 | x5 | | file://:0:0:0:0 | & | -| main.rs:1365:26:1365:27 | x5 | &T | main.rs:1301:5:1302:19 | S | -| main.rs:1365:26:1365:27 | x5 | &T.T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1365:26:1365:32 | x5.m1() | | main.rs:1304:5:1305:14 | S2 | -| main.rs:1366:18:1366:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1366:18:1366:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1366:18:1366:29 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1366:18:1366:29 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1366:26:1366:27 | x5 | | file://:0:0:0:0 | & | -| main.rs:1366:26:1366:27 | x5 | &T | main.rs:1301:5:1302:19 | S | -| main.rs:1366:26:1366:27 | x5 | &T.T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1366:26:1366:29 | x5.0 | | main.rs:1304:5:1305:14 | S2 | -| main.rs:1368:13:1368:14 | x6 | | file://:0:0:0:0 | & | -| main.rs:1368:13:1368:14 | x6 | &T | main.rs:1301:5:1302:19 | S | -| main.rs:1368:13:1368:14 | x6 | &T.T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1368:18:1368:23 | &... | | file://:0:0:0:0 | & | -| main.rs:1368:18:1368:23 | &... | &T | main.rs:1301:5:1302:19 | S | -| main.rs:1368:18:1368:23 | &... | &T.T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1368:19:1368:23 | S(...) | | main.rs:1301:5:1302:19 | S | -| main.rs:1368:19:1368:23 | S(...) | T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1368:21:1368:22 | S2 | | main.rs:1304:5:1305:14 | S2 | -| main.rs:1371:18:1371:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1371:18:1371:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1371:18:1371:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1371:18:1371:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1371:26:1371:30 | (...) | | main.rs:1301:5:1302:19 | S | -| main.rs:1371:26:1371:30 | (...) | T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1371:26:1371:35 | ... .m1() | | main.rs:1304:5:1305:14 | S2 | -| main.rs:1371:27:1371:29 | * ... | | main.rs:1301:5:1302:19 | S | -| main.rs:1371:27:1371:29 | * ... | T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1371:28:1371:29 | x6 | | file://:0:0:0:0 | & | -| main.rs:1371:28:1371:29 | x6 | &T | main.rs:1301:5:1302:19 | S | -| main.rs:1371:28:1371:29 | x6 | &T.T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1373:13:1373:14 | x7 | | main.rs:1301:5:1302:19 | S | -| main.rs:1373:13:1373:14 | x7 | T | file://:0:0:0:0 | & | -| main.rs:1373:13:1373:14 | x7 | T.&T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1373:18:1373:23 | S(...) | | main.rs:1301:5:1302:19 | S | -| main.rs:1373:18:1373:23 | S(...) | T | file://:0:0:0:0 | & | -| main.rs:1373:18:1373:23 | S(...) | T.&T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1373:20:1373:22 | &S2 | | file://:0:0:0:0 | & | -| main.rs:1373:20:1373:22 | &S2 | &T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1373:21:1373:22 | S2 | | main.rs:1304:5:1305:14 | S2 | -| main.rs:1376:13:1376:13 | t | | file://:0:0:0:0 | & | -| main.rs:1376:13:1376:13 | t | &T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1376:17:1376:18 | x7 | | main.rs:1301:5:1302:19 | S | -| main.rs:1376:17:1376:18 | x7 | T | file://:0:0:0:0 | & | -| main.rs:1376:17:1376:18 | x7 | T.&T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1376:17:1376:23 | x7.m1() | | file://:0:0:0:0 | & | -| main.rs:1376:17:1376:23 | x7.m1() | &T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1377:18:1377:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1377:18:1377:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1377:18:1377:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1377:18:1377:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1377:26:1377:27 | x7 | | main.rs:1301:5:1302:19 | S | -| main.rs:1377:26:1377:27 | x7 | T | file://:0:0:0:0 | & | -| main.rs:1377:26:1377:27 | x7 | T.&T | main.rs:1304:5:1305:14 | S2 | -| main.rs:1379:13:1379:14 | x9 | | {EXTERNAL LOCATION} | String | -| main.rs:1379:26:1379:32 | "Hello" | | file://:0:0:0:0 | & | -| main.rs:1379:26:1379:32 | "Hello" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1379:26:1379:44 | "Hello".to_string() | | {EXTERNAL LOCATION} | String | -| main.rs:1383:13:1383:13 | u | | {EXTERNAL LOCATION} | Result | -| main.rs:1383:13:1383:13 | u | T | {EXTERNAL LOCATION} | u32 | -| main.rs:1383:17:1383:18 | x9 | | {EXTERNAL LOCATION} | String | -| main.rs:1383:17:1383:33 | x9.parse() | | {EXTERNAL LOCATION} | Result | -| main.rs:1383:17:1383:33 | x9.parse() | T | {EXTERNAL LOCATION} | u32 | -| main.rs:1385:13:1385:20 | my_thing | | file://:0:0:0:0 | & | -| main.rs:1385:13:1385:20 | my_thing | &T | main.rs:1307:5:1310:5 | MyInt | -| main.rs:1385:24:1385:39 | &... | | file://:0:0:0:0 | & | -| main.rs:1385:24:1385:39 | &... | &T | main.rs:1307:5:1310:5 | MyInt | -| main.rs:1385:25:1385:39 | MyInt {...} | | main.rs:1307:5:1310:5 | MyInt | -| main.rs:1385:36:1385:37 | 37 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1385:36:1385:37 | 37 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1387:17:1387:24 | my_thing | | file://:0:0:0:0 | & | -| main.rs:1387:17:1387:24 | my_thing | &T | main.rs:1307:5:1310:5 | MyInt | -| main.rs:1388:18:1388:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1388:18:1388:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1388:18:1388:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1388:18:1388:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1391:13:1391:20 | my_thing | | file://:0:0:0:0 | & | -| main.rs:1391:13:1391:20 | my_thing | &T | main.rs:1307:5:1310:5 | MyInt | -| main.rs:1391:24:1391:39 | &... | | file://:0:0:0:0 | & | -| main.rs:1391:24:1391:39 | &... | &T | main.rs:1307:5:1310:5 | MyInt | -| main.rs:1391:25:1391:39 | MyInt {...} | | main.rs:1307:5:1310:5 | MyInt | -| main.rs:1391:36:1391:37 | 38 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1391:36:1391:37 | 38 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1392:17:1392:24 | my_thing | | file://:0:0:0:0 | & | -| main.rs:1392:17:1392:24 | my_thing | &T | main.rs:1307:5:1310:5 | MyInt | -| main.rs:1393:18:1393:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1393:18:1393:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1393:18:1393:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1393:18:1393:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1400:16:1400:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1400:16:1400:20 | SelfParam | &T | main.rs:1398:5:1406:5 | Self [trait MyTrait] | -| main.rs:1403:16:1403:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1403:16:1403:20 | SelfParam | &T | main.rs:1398:5:1406:5 | Self [trait MyTrait] | -| main.rs:1403:32:1405:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1403:32:1405:9 | { ... } | &T | main.rs:1398:5:1406:5 | Self [trait MyTrait] | -| main.rs:1404:13:1404:16 | self | | file://:0:0:0:0 | & | -| main.rs:1404:13:1404:16 | self | &T | main.rs:1398:5:1406:5 | Self [trait MyTrait] | -| main.rs:1404:13:1404:22 | self.foo() | | file://:0:0:0:0 | & | -| main.rs:1404:13:1404:22 | self.foo() | &T | main.rs:1398:5:1406:5 | Self [trait MyTrait] | -| main.rs:1412:16:1412:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1412:16:1412:20 | SelfParam | &T | main.rs:1408:5:1408:20 | MyStruct | -| main.rs:1412:36:1414:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1412:36:1414:9 | { ... } | &T | main.rs:1408:5:1408:20 | MyStruct | -| main.rs:1413:13:1413:16 | self | | file://:0:0:0:0 | & | -| main.rs:1413:13:1413:16 | self | &T | main.rs:1408:5:1408:20 | MyStruct | -| main.rs:1418:13:1418:13 | x | | main.rs:1408:5:1408:20 | MyStruct | -| main.rs:1418:17:1418:24 | MyStruct | | main.rs:1408:5:1408:20 | MyStruct | -| main.rs:1419:9:1419:9 | x | | main.rs:1408:5:1408:20 | MyStruct | -| main.rs:1419:9:1419:15 | x.bar() | | file://:0:0:0:0 | & | -| main.rs:1419:9:1419:15 | x.bar() | &T | main.rs:1408:5:1408:20 | MyStruct | -| main.rs:1429:16:1429:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1429:16:1429:20 | SelfParam | &T | main.rs:1426:5:1426:26 | MyStruct | -| main.rs:1429:16:1429:20 | SelfParam | &T.T | main.rs:1428:10:1428:10 | T | -| main.rs:1429:32:1431:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1429:32:1431:9 | { ... } | &T | main.rs:1426:5:1426:26 | MyStruct | -| main.rs:1429:32:1431:9 | { ... } | &T.T | main.rs:1428:10:1428:10 | T | -| main.rs:1430:13:1430:16 | self | | file://:0:0:0:0 | & | -| main.rs:1430:13:1430:16 | self | &T | main.rs:1426:5:1426:26 | MyStruct | -| main.rs:1430:13:1430:16 | self | &T.T | main.rs:1428:10:1428:10 | T | -| main.rs:1435:13:1435:13 | x | | main.rs:1426:5:1426:26 | MyStruct | -| main.rs:1435:13:1435:13 | x | T | main.rs:1424:5:1424:13 | S | -| main.rs:1435:17:1435:27 | MyStruct(...) | | main.rs:1426:5:1426:26 | MyStruct | -| main.rs:1435:17:1435:27 | MyStruct(...) | T | main.rs:1424:5:1424:13 | S | -| main.rs:1435:26:1435:26 | S | | main.rs:1424:5:1424:13 | S | -| main.rs:1436:9:1436:9 | x | | main.rs:1426:5:1426:26 | MyStruct | -| main.rs:1436:9:1436:9 | x | T | main.rs:1424:5:1424:13 | S | -| main.rs:1436:9:1436:15 | x.foo() | | file://:0:0:0:0 | & | -| main.rs:1436:9:1436:15 | x.foo() | &T | main.rs:1426:5:1426:26 | MyStruct | -| main.rs:1436:9:1436:15 | x.foo() | &T.T | main.rs:1424:5:1424:13 | S | -| main.rs:1447:17:1447:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1447:17:1447:25 | SelfParam | &T | main.rs:1441:5:1444:5 | MyFlag | -| main.rs:1448:13:1448:16 | self | | file://:0:0:0:0 | & | -| main.rs:1448:13:1448:16 | self | &T | main.rs:1441:5:1444:5 | MyFlag | -| main.rs:1448:13:1448:21 | self.bool | | {EXTERNAL LOCATION} | bool | -| main.rs:1448:13:1448:34 | ... = ... | | file://:0:0:0:0 | () | -| main.rs:1448:25:1448:34 | ! ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1448:26:1448:29 | self | | file://:0:0:0:0 | & | -| main.rs:1448:26:1448:29 | self | &T | main.rs:1441:5:1444:5 | MyFlag | -| main.rs:1448:26:1448:34 | self.bool | | {EXTERNAL LOCATION} | bool | -| main.rs:1455:15:1455:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1455:15:1455:19 | SelfParam | &T | main.rs:1452:5:1452:13 | S | -| main.rs:1455:31:1457:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1455:31:1457:9 | { ... } | &T | main.rs:1452:5:1452:13 | S | -| main.rs:1456:13:1456:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1456:13:1456:19 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1456:13:1456:19 | &... | &T | main.rs:1452:5:1452:13 | S | -| main.rs:1456:13:1456:19 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1456:13:1456:19 | &... | &T.&T.&T | file://:0:0:0:0 | & | -| main.rs:1456:13:1456:19 | &... | &T.&T.&T.&T | main.rs:1452:5:1452:13 | S | -| main.rs:1456:14:1456:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1456:14:1456:19 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1456:14:1456:19 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1456:14:1456:19 | &... | &T.&T.&T | main.rs:1452:5:1452:13 | S | -| main.rs:1456:15:1456:19 | &self | | file://:0:0:0:0 | & | -| main.rs:1456:15:1456:19 | &self | &T | file://:0:0:0:0 | & | -| main.rs:1456:15:1456:19 | &self | &T.&T | main.rs:1452:5:1452:13 | S | -| main.rs:1456:16:1456:19 | self | | file://:0:0:0:0 | & | -| main.rs:1456:16:1456:19 | self | &T | main.rs:1452:5:1452:13 | S | -| main.rs:1459:15:1459:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1459:15:1459:25 | SelfParam | &T | main.rs:1452:5:1452:13 | S | -| main.rs:1459:37:1461:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1459:37:1461:9 | { ... } | &T | main.rs:1452:5:1452:13 | S | -| main.rs:1460:13:1460:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1460:13:1460:19 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1460:13:1460:19 | &... | &T | main.rs:1452:5:1452:13 | S | -| main.rs:1460:13:1460:19 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1460:13:1460:19 | &... | &T.&T.&T | file://:0:0:0:0 | & | -| main.rs:1460:13:1460:19 | &... | &T.&T.&T.&T | main.rs:1452:5:1452:13 | S | -| main.rs:1460:14:1460:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1460:14:1460:19 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1460:14:1460:19 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1460:14:1460:19 | &... | &T.&T.&T | main.rs:1452:5:1452:13 | S | -| main.rs:1460:15:1460:19 | &self | | file://:0:0:0:0 | & | -| main.rs:1460:15:1460:19 | &self | &T | file://:0:0:0:0 | & | -| main.rs:1460:15:1460:19 | &self | &T.&T | main.rs:1452:5:1452:13 | S | -| main.rs:1460:16:1460:19 | self | | file://:0:0:0:0 | & | -| main.rs:1460:16:1460:19 | self | &T | main.rs:1452:5:1452:13 | S | -| main.rs:1463:15:1463:15 | x | | file://:0:0:0:0 | & | -| main.rs:1463:15:1463:15 | x | &T | main.rs:1452:5:1452:13 | S | -| main.rs:1463:34:1465:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1463:34:1465:9 | { ... } | &T | main.rs:1452:5:1452:13 | S | -| main.rs:1464:13:1464:13 | x | | file://:0:0:0:0 | & | -| main.rs:1464:13:1464:13 | x | &T | main.rs:1452:5:1452:13 | S | -| main.rs:1467:15:1467:15 | x | | file://:0:0:0:0 | & | -| main.rs:1467:15:1467:15 | x | &T | main.rs:1452:5:1452:13 | S | -| main.rs:1467:34:1469:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1467:34:1469:9 | { ... } | &T | main.rs:1452:5:1452:13 | S | -| main.rs:1468:13:1468:16 | &... | | file://:0:0:0:0 | & | -| main.rs:1468:13:1468:16 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1468:13:1468:16 | &... | &T | main.rs:1452:5:1452:13 | S | -| main.rs:1468:13:1468:16 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1468:13:1468:16 | &... | &T.&T.&T | file://:0:0:0:0 | & | -| main.rs:1468:13:1468:16 | &... | &T.&T.&T.&T | main.rs:1452:5:1452:13 | S | -| main.rs:1468:14:1468:16 | &... | | file://:0:0:0:0 | & | -| main.rs:1468:14:1468:16 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1468:14:1468:16 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1468:14:1468:16 | &... | &T.&T.&T | main.rs:1452:5:1452:13 | S | -| main.rs:1468:15:1468:16 | &x | | file://:0:0:0:0 | & | -| main.rs:1468:15:1468:16 | &x | &T | file://:0:0:0:0 | & | -| main.rs:1468:15:1468:16 | &x | &T.&T | main.rs:1452:5:1452:13 | S | -| main.rs:1468:16:1468:16 | x | | file://:0:0:0:0 | & | -| main.rs:1468:16:1468:16 | x | &T | main.rs:1452:5:1452:13 | S | -| main.rs:1473:13:1473:13 | x | | main.rs:1452:5:1452:13 | S | -| main.rs:1473:17:1473:20 | S {...} | | main.rs:1452:5:1452:13 | S | -| main.rs:1474:9:1474:9 | x | | main.rs:1452:5:1452:13 | S | -| main.rs:1474:9:1474:14 | x.f1() | | file://:0:0:0:0 | & | -| main.rs:1474:9:1474:14 | x.f1() | &T | main.rs:1452:5:1452:13 | S | -| main.rs:1475:9:1475:9 | x | | main.rs:1452:5:1452:13 | S | -| main.rs:1475:9:1475:14 | x.f2() | | file://:0:0:0:0 | & | -| main.rs:1475:9:1475:14 | x.f2() | &T | main.rs:1452:5:1452:13 | S | -| main.rs:1476:9:1476:17 | ...::f3(...) | | file://:0:0:0:0 | & | -| main.rs:1476:9:1476:17 | ...::f3(...) | &T | main.rs:1452:5:1452:13 | S | -| main.rs:1476:15:1476:16 | &x | | file://:0:0:0:0 | & | -| main.rs:1476:15:1476:16 | &x | &T | main.rs:1452:5:1452:13 | S | -| main.rs:1476:16:1476:16 | x | | main.rs:1452:5:1452:13 | S | -| main.rs:1478:13:1478:13 | n | | {EXTERNAL LOCATION} | bool | -| main.rs:1478:17:1478:24 | * ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1478:18:1478:24 | * ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1478:18:1478:24 | * ... | | file://:0:0:0:0 | & | -| main.rs:1478:18:1478:24 | * ... | &T | {EXTERNAL LOCATION} | bool | -| main.rs:1478:19:1478:24 | &... | | file://:0:0:0:0 | & | -| main.rs:1478:19:1478:24 | &... | &T | {EXTERNAL LOCATION} | bool | -| main.rs:1478:19:1478:24 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1478:19:1478:24 | &... | &T.&T | {EXTERNAL LOCATION} | bool | -| main.rs:1478:20:1478:24 | &true | | file://:0:0:0:0 | & | -| main.rs:1478:20:1478:24 | &true | &T | {EXTERNAL LOCATION} | bool | -| main.rs:1478:21:1478:24 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1482:17:1482:20 | flag | | main.rs:1441:5:1444:5 | MyFlag | -| main.rs:1482:24:1482:41 | ...::default(...) | | main.rs:1441:5:1444:5 | MyFlag | -| main.rs:1483:22:1483:30 | &mut flag | | file://:0:0:0:0 | & | -| main.rs:1483:22:1483:30 | &mut flag | &T | main.rs:1441:5:1444:5 | MyFlag | -| main.rs:1483:27:1483:30 | flag | | main.rs:1441:5:1444:5 | MyFlag | -| main.rs:1484:18:1484:23 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1484:18:1484:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1484:18:1484:29 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1484:18:1484:29 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1484:26:1484:29 | flag | | main.rs:1441:5:1444:5 | MyFlag | -| main.rs:1499:43:1502:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1499:43:1502:5 | { ... } | E | main.rs:1491:5:1492:14 | S1 | -| main.rs:1499:43:1502:5 | { ... } | T | main.rs:1491:5:1492:14 | S1 | -| main.rs:1500:13:1500:13 | x | | main.rs:1491:5:1492:14 | S1 | -| main.rs:1500:17:1500:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1500:17:1500:30 | ...::Ok(...) | T | main.rs:1491:5:1492:14 | S1 | -| main.rs:1500:17:1500:31 | TryExpr | | main.rs:1491:5:1492:14 | S1 | -| main.rs:1500:28:1500:29 | S1 | | main.rs:1491:5:1492:14 | S1 | -| main.rs:1501:9:1501:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1501:9:1501:22 | ...::Ok(...) | E | main.rs:1491:5:1492:14 | S1 | -| main.rs:1501:9:1501:22 | ...::Ok(...) | T | main.rs:1491:5:1492:14 | S1 | -| main.rs:1501:20:1501:21 | S1 | | main.rs:1491:5:1492:14 | S1 | -| main.rs:1506:46:1510:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1506:46:1510:5 | { ... } | E | main.rs:1494:5:1495:14 | S2 | -| main.rs:1506:46:1510:5 | { ... } | T | main.rs:1491:5:1492:14 | S1 | -| main.rs:1507:13:1507:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1507:13:1507:13 | x | T | main.rs:1491:5:1492:14 | S1 | -| main.rs:1507:17:1507:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1507:17:1507:30 | ...::Ok(...) | T | main.rs:1491:5:1492:14 | S1 | -| main.rs:1507:28:1507:29 | S1 | | main.rs:1491:5:1492:14 | S1 | -| main.rs:1508:13:1508:13 | y | | main.rs:1491:5:1492:14 | S1 | -| main.rs:1508:17:1508:17 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1508:17:1508:17 | x | T | main.rs:1491:5:1492:14 | S1 | -| main.rs:1508:17:1508:18 | TryExpr | | main.rs:1491:5:1492:14 | S1 | -| main.rs:1509:9:1509:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1509:9:1509:22 | ...::Ok(...) | E | main.rs:1494:5:1495:14 | S2 | -| main.rs:1509:9:1509:22 | ...::Ok(...) | T | main.rs:1491:5:1492:14 | S1 | -| main.rs:1509:20:1509:21 | S1 | | main.rs:1491:5:1492:14 | S1 | -| main.rs:1514:40:1519:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1514:40:1519:5 | { ... } | E | main.rs:1494:5:1495:14 | S2 | -| main.rs:1514:40:1519:5 | { ... } | T | main.rs:1491:5:1492:14 | S1 | -| main.rs:1515:13:1515:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1515:13:1515:13 | x | T | {EXTERNAL LOCATION} | Result | -| main.rs:1515:13:1515:13 | x | T.T | main.rs:1491:5:1492:14 | S1 | -| main.rs:1515:17:1515:42 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1515:17:1515:42 | ...::Ok(...) | T | {EXTERNAL LOCATION} | Result | -| main.rs:1515:17:1515:42 | ...::Ok(...) | T.T | main.rs:1491:5:1492:14 | S1 | -| main.rs:1515:28:1515:41 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1515:28:1515:41 | ...::Ok(...) | T | main.rs:1491:5:1492:14 | S1 | -| main.rs:1515:39:1515:40 | S1 | | main.rs:1491:5:1492:14 | S1 | -| main.rs:1517:17:1517:17 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1517:17:1517:17 | x | T | {EXTERNAL LOCATION} | Result | -| main.rs:1517:17:1517:17 | x | T.T | main.rs:1491:5:1492:14 | S1 | -| main.rs:1517:17:1517:18 | TryExpr | | {EXTERNAL LOCATION} | Result | -| main.rs:1517:17:1517:18 | TryExpr | T | main.rs:1491:5:1492:14 | S1 | -| main.rs:1517:17:1517:29 | ... .map(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1517:24:1517:28 | \|...\| s | | {EXTERNAL LOCATION} | dyn FnOnce | -| main.rs:1517:24:1517:28 | \|...\| s | dyn(Args) | file://:0:0:0:0 | (T_1) | -| main.rs:1518:9:1518:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1518:9:1518:22 | ...::Ok(...) | E | main.rs:1494:5:1495:14 | S2 | -| main.rs:1518:9:1518:22 | ...::Ok(...) | T | main.rs:1491:5:1492:14 | S1 | -| main.rs:1518:20:1518:21 | S1 | | main.rs:1491:5:1492:14 | S1 | -| main.rs:1523:30:1523:34 | input | | {EXTERNAL LOCATION} | Result | -| main.rs:1523:30:1523:34 | input | E | main.rs:1491:5:1492:14 | S1 | -| main.rs:1523:30:1523:34 | input | T | main.rs:1523:20:1523:27 | T | -| main.rs:1523:69:1530:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1523:69:1530:5 | { ... } | E | main.rs:1491:5:1492:14 | S1 | -| main.rs:1523:69:1530:5 | { ... } | T | main.rs:1523:20:1523:27 | T | -| main.rs:1524:13:1524:17 | value | | main.rs:1523:20:1523:27 | T | -| main.rs:1524:21:1524:25 | input | | {EXTERNAL LOCATION} | Result | -| main.rs:1524:21:1524:25 | input | E | main.rs:1491:5:1492:14 | S1 | -| main.rs:1524:21:1524:25 | input | T | main.rs:1523:20:1523:27 | T | -| main.rs:1524:21:1524:26 | TryExpr | | main.rs:1523:20:1523:27 | T | -| main.rs:1525:22:1525:38 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1525:22:1525:38 | ...::Ok(...) | E | main.rs:1491:5:1492:14 | S1 | -| main.rs:1525:22:1525:38 | ...::Ok(...) | T | main.rs:1523:20:1523:27 | T | -| main.rs:1525:22:1528:10 | ... .and_then(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1525:22:1528:10 | ... .and_then(...) | E | main.rs:1491:5:1492:14 | S1 | -| main.rs:1525:33:1525:37 | value | | main.rs:1523:20:1523:27 | T | -| main.rs:1525:49:1528:9 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | -| main.rs:1525:49:1528:9 | \|...\| ... | dyn(Args) | file://:0:0:0:0 | (T_1) | -| main.rs:1525:49:1528:9 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | Result | -| main.rs:1525:49:1528:9 | \|...\| ... | dyn(Output).E | main.rs:1491:5:1492:14 | S1 | -| main.rs:1525:53:1528:9 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1525:53:1528:9 | { ... } | E | main.rs:1491:5:1492:14 | S1 | -| main.rs:1526:22:1526:27 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1526:22:1526:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1526:22:1526:30 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1526:22:1526:30 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1527:13:1527:34 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1527:13:1527:34 | ...::Ok::<...>(...) | E | main.rs:1491:5:1492:14 | S1 | -| main.rs:1529:9:1529:23 | ...::Err(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1529:9:1529:23 | ...::Err(...) | E | main.rs:1491:5:1492:14 | S1 | -| main.rs:1529:9:1529:23 | ...::Err(...) | T | main.rs:1523:20:1523:27 | T | -| main.rs:1529:21:1529:22 | S1 | | main.rs:1491:5:1492:14 | S1 | -| main.rs:1534:16:1534:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1534:16:1534:33 | ...::Ok(...) | E | main.rs:1491:5:1492:14 | S1 | -| main.rs:1534:16:1534:33 | ...::Ok(...) | T | main.rs:1491:5:1492:14 | S1 | -| main.rs:1534:27:1534:32 | result | | main.rs:1491:5:1492:14 | S1 | -| main.rs:1534:37:1534:52 | try_same_error(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1534:37:1534:52 | try_same_error(...) | E | main.rs:1491:5:1492:14 | S1 | -| main.rs:1534:37:1534:52 | try_same_error(...) | T | main.rs:1491:5:1492:14 | S1 | -| main.rs:1535:22:1535:27 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1535:22:1535:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1535:22:1535:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1535:22:1535:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1535:30:1535:35 | result | | main.rs:1491:5:1492:14 | S1 | -| main.rs:1538:16:1538:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1538:16:1538:33 | ...::Ok(...) | E | main.rs:1494:5:1495:14 | S2 | -| main.rs:1538:16:1538:33 | ...::Ok(...) | T | main.rs:1491:5:1492:14 | S1 | -| main.rs:1538:27:1538:32 | result | | main.rs:1491:5:1492:14 | S1 | -| main.rs:1538:37:1538:55 | try_convert_error(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1538:37:1538:55 | try_convert_error(...) | E | main.rs:1494:5:1495:14 | S2 | -| main.rs:1538:37:1538:55 | try_convert_error(...) | T | main.rs:1491:5:1492:14 | S1 | -| main.rs:1539:22:1539:27 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1539:22:1539:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1539:22:1539:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1539:22:1539:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1539:30:1539:35 | result | | main.rs:1491:5:1492:14 | S1 | -| main.rs:1542:16:1542:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1542:16:1542:33 | ...::Ok(...) | E | main.rs:1494:5:1495:14 | S2 | -| main.rs:1542:16:1542:33 | ...::Ok(...) | T | main.rs:1491:5:1492:14 | S1 | -| main.rs:1542:27:1542:32 | result | | main.rs:1491:5:1492:14 | S1 | -| main.rs:1542:37:1542:49 | try_chained(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1542:37:1542:49 | try_chained(...) | E | main.rs:1494:5:1495:14 | S2 | -| main.rs:1542:37:1542:49 | try_chained(...) | T | main.rs:1491:5:1492:14 | S1 | -| main.rs:1543:22:1543:27 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1543:22:1543:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1543:22:1543:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1543:22:1543:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1543:30:1543:35 | result | | main.rs:1491:5:1492:14 | S1 | -| main.rs:1546:16:1546:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1546:16:1546:33 | ...::Ok(...) | E | main.rs:1491:5:1492:14 | S1 | -| main.rs:1546:16:1546:33 | ...::Ok(...) | T | main.rs:1491:5:1492:14 | S1 | -| main.rs:1546:27:1546:32 | result | | main.rs:1491:5:1492:14 | S1 | -| main.rs:1546:37:1546:63 | try_complex(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1546:37:1546:63 | try_complex(...) | E | main.rs:1491:5:1492:14 | S1 | -| main.rs:1546:37:1546:63 | try_complex(...) | T | main.rs:1491:5:1492:14 | S1 | -| main.rs:1546:49:1546:62 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1546:49:1546:62 | ...::Ok(...) | E | main.rs:1491:5:1492:14 | S1 | -| main.rs:1546:49:1546:62 | ...::Ok(...) | T | main.rs:1491:5:1492:14 | S1 | -| main.rs:1546:60:1546:61 | S1 | | main.rs:1491:5:1492:14 | S1 | -| main.rs:1547:22:1547:27 | "{:?}\\n" | | file://:0:0:0:0 | & | -| main.rs:1547:22:1547:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1547:22:1547:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1547:22:1547:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:1547:30:1547:35 | result | | main.rs:1491:5:1492:14 | S1 | -| main.rs:1554:13:1554:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1554:22:1554:22 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1555:13:1555:13 | y | | {EXTERNAL LOCATION} | i32 | -| main.rs:1555:17:1555:17 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1556:13:1556:13 | z | | {EXTERNAL LOCATION} | i32 | -| main.rs:1556:17:1556:17 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1556:17:1556:21 | ... + ... | | {EXTERNAL LOCATION} | i32 | -| main.rs:1556:21:1556:21 | y | | {EXTERNAL LOCATION} | i32 | -| main.rs:1557:13:1557:13 | z | | {EXTERNAL LOCATION} | i32 | -| main.rs:1557:17:1557:17 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1557:17:1557:23 | x.abs() | | {EXTERNAL LOCATION} | i32 | -| main.rs:1558:13:1558:13 | c | | {EXTERNAL LOCATION} | char | -| main.rs:1558:17:1558:19 | 'c' | | {EXTERNAL LOCATION} | char | -| main.rs:1559:13:1559:17 | hello | | file://:0:0:0:0 | & | -| main.rs:1559:13:1559:17 | hello | &T | {EXTERNAL LOCATION} | str | -| main.rs:1559:21:1559:27 | "Hello" | | file://:0:0:0:0 | & | -| main.rs:1559:21:1559:27 | "Hello" | &T | {EXTERNAL LOCATION} | str | -| main.rs:1560:13:1560:13 | f | | {EXTERNAL LOCATION} | f64 | -| main.rs:1560:17:1560:24 | 123.0f64 | | {EXTERNAL LOCATION} | f64 | -| main.rs:1561:13:1561:13 | t | | {EXTERNAL LOCATION} | bool | -| main.rs:1561:17:1561:20 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1562:13:1562:13 | f | | {EXTERNAL LOCATION} | bool | -| main.rs:1562:17:1562:21 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1569:13:1569:13 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:1569:17:1569:20 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1569:17:1569:29 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1569:25:1569:29 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1570:13:1570:13 | y | | {EXTERNAL LOCATION} | bool | -| main.rs:1570:17:1570:20 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1570:17:1570:29 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1570:25:1570:29 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1572:17:1572:17 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1573:13:1573:16 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:1573:20:1573:21 | 34 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1573:20:1573:27 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1573:26:1573:27 | 33 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1574:12:1574:15 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:1575:17:1575:17 | z | | file://:0:0:0:0 | () | -| main.rs:1575:21:1575:27 | (...) | | file://:0:0:0:0 | () | -| main.rs:1575:22:1575:22 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1575:22:1575:26 | ... = ... | | file://:0:0:0:0 | () | -| main.rs:1575:26:1575:26 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1577:13:1577:13 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1577:13:1577:17 | ... = ... | | file://:0:0:0:0 | () | -| main.rs:1577:17:1577:17 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1579:9:1579:9 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1593:30:1595:9 | { ... } | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1594:13:1594:31 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1594:23:1594:23 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1594:23:1594:23 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1594:29:1594:29 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1594:29:1594:29 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1601:16:1601:19 | SelfParam | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1601:22:1601:24 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1601:41:1606:9 | { ... } | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1602:13:1605:13 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1603:20:1603:23 | self | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1603:20:1603:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1603:20:1603:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1603:29:1603:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1603:29:1603:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1604:20:1604:23 | self | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1604:20:1604:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1604:20:1604:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1604:29:1604:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1604:29:1604:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1611:23:1611:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1611:23:1611:31 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1611:34:1611:36 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1612:13:1612:16 | self | | file://:0:0:0:0 | & | -| main.rs:1612:13:1612:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1612:13:1612:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1612:13:1612:27 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:1612:23:1612:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1612:23:1612:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1613:13:1613:16 | self | | file://:0:0:0:0 | & | -| main.rs:1613:13:1613:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1613:13:1613:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1613:13:1613:27 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:1613:23:1613:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1613:23:1613:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1619:16:1619:19 | SelfParam | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1619:22:1619:24 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1619:41:1624:9 | { ... } | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1620:13:1623:13 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1621:20:1621:23 | self | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1621:20:1621:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1621:20:1621:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1621:29:1621:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1621:29:1621:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1622:20:1622:23 | self | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1622:20:1622:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1622:20:1622:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1622:29:1622:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1622:29:1622:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1629:23:1629:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1629:23:1629:31 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1629:34:1629:36 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1630:13:1630:16 | self | | file://:0:0:0:0 | & | -| main.rs:1630:13:1630:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1630:13:1630:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1630:13:1630:27 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:1630:23:1630:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1630:23:1630:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1631:13:1631:16 | self | | file://:0:0:0:0 | & | -| main.rs:1631:13:1631:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1631:13:1631:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1631:13:1631:27 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:1631:23:1631:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1631:23:1631:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1637:16:1637:19 | SelfParam | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1637:22:1637:24 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1637:41:1642:9 | { ... } | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1638:13:1641:13 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1639:20:1639:23 | self | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1639:20:1639:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1639:20:1639:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1639:29:1639:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1639:29:1639:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1640:20:1640:23 | self | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1640:20:1640:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1640:20:1640:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1640:29:1640:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1640:29:1640:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1646:23:1646:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1646:23:1646:31 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1646:34:1646:36 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1647:13:1647:16 | self | | file://:0:0:0:0 | & | -| main.rs:1647:13:1647:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1647:13:1647:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1647:13:1647:27 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:1647:23:1647:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1647:23:1647:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1648:13:1648:16 | self | | file://:0:0:0:0 | & | -| main.rs:1648:13:1648:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1648:13:1648:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1648:13:1648:27 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:1648:23:1648:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1648:23:1648:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1654:16:1654:19 | SelfParam | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1654:22:1654:24 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1654:41:1659:9 | { ... } | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1655:13:1658:13 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1656:20:1656:23 | self | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1656:20:1656:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1656:20:1656:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1656:29:1656:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1656:29:1656:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1657:20:1657:23 | self | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1657:20:1657:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1657:20:1657:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1657:29:1657:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1657:29:1657:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1663:23:1663:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1663:23:1663:31 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1663:34:1663:36 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1664:13:1664:16 | self | | file://:0:0:0:0 | & | -| main.rs:1664:13:1664:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1664:13:1664:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1664:13:1664:27 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:1664:23:1664:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1664:23:1664:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1665:13:1665:16 | self | | file://:0:0:0:0 | & | -| main.rs:1665:13:1665:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1665:13:1665:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1665:13:1665:27 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:1665:23:1665:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1665:23:1665:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1671:16:1671:19 | SelfParam | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1671:22:1671:24 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1671:41:1676:9 | { ... } | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1672:13:1675:13 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1673:20:1673:23 | self | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1673:20:1673:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1673:20:1673:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1673:29:1673:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1673:29:1673:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1674:20:1674:23 | self | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1674:20:1674:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1674:20:1674:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1674:29:1674:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1674:29:1674:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1680:23:1680:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1680:23:1680:31 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1680:34:1680:36 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1681:13:1681:16 | self | | file://:0:0:0:0 | & | -| main.rs:1681:13:1681:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1681:13:1681:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1681:13:1681:27 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:1681:23:1681:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1681:23:1681:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1682:13:1682:16 | self | | file://:0:0:0:0 | & | -| main.rs:1682:13:1682:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1682:13:1682:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1682:13:1682:27 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:1682:23:1682:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1682:23:1682:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1688:19:1688:22 | SelfParam | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1688:25:1688:27 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1688:44:1693:9 | { ... } | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1689:13:1692:13 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1690:20:1690:23 | self | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1690:20:1690:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1690:20:1690:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1690:29:1690:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1690:29:1690:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1691:20:1691:23 | self | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1691:20:1691:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1691:20:1691:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1691:29:1691:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1691:29:1691:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1697:26:1697:34 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1697:26:1697:34 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1697:37:1697:39 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1698:13:1698:16 | self | | file://:0:0:0:0 | & | -| main.rs:1698:13:1698:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1698:13:1698:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1698:13:1698:27 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:1698:23:1698:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1698:23:1698:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1699:13:1699:16 | self | | file://:0:0:0:0 | & | -| main.rs:1699:13:1699:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1699:13:1699:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1699:13:1699:27 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:1699:23:1699:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1699:23:1699:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1705:18:1705:21 | SelfParam | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1705:24:1705:26 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1705:43:1710:9 | { ... } | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1706:13:1709:13 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1707:20:1707:23 | self | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1707:20:1707:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1707:20:1707:33 | ... \| ... | | {EXTERNAL LOCATION} | NonZero | -| main.rs:1707:20:1707:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1707:20:1707:33 | ... \| ... | T | {EXTERNAL LOCATION} | i64 | -| main.rs:1707:29:1707:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1707:29:1707:33 | rhs.x | | {EXTERNAL LOCATION} | NonZero | -| main.rs:1707:29:1707:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1707:29:1707:33 | rhs.x | T | {EXTERNAL LOCATION} | i64 | -| main.rs:1708:20:1708:23 | self | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1708:20:1708:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1708:20:1708:33 | ... \| ... | | {EXTERNAL LOCATION} | NonZero | -| main.rs:1708:20:1708:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1708:20:1708:33 | ... \| ... | T | {EXTERNAL LOCATION} | i64 | -| main.rs:1708:29:1708:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1708:29:1708:33 | rhs.y | | {EXTERNAL LOCATION} | NonZero | -| main.rs:1708:29:1708:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1708:29:1708:33 | rhs.y | T | {EXTERNAL LOCATION} | i64 | -| main.rs:1714:25:1714:33 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1714:25:1714:33 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1714:36:1714:38 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1715:13:1715:16 | self | | file://:0:0:0:0 | & | -| main.rs:1715:13:1715:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1715:13:1715:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1715:13:1715:27 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:1715:23:1715:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1715:23:1715:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1716:13:1716:16 | self | | file://:0:0:0:0 | & | -| main.rs:1716:13:1716:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1716:13:1716:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1716:13:1716:27 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:1716:23:1716:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1716:23:1716:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1722:19:1722:22 | SelfParam | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1722:25:1722:27 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1722:44:1727:9 | { ... } | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1723:13:1726:13 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1724:20:1724:23 | self | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1724:20:1724:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1724:20:1724:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1724:29:1724:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1724:29:1724:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1725:20:1725:23 | self | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1725:20:1725:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1725:20:1725:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1725:29:1725:31 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1725:29:1725:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1731:26:1731:34 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1731:26:1731:34 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1731:37:1731:39 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1732:13:1732:16 | self | | file://:0:0:0:0 | & | -| main.rs:1732:13:1732:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1732:13:1732:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1732:13:1732:27 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:1732:23:1732:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1732:23:1732:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1733:13:1733:16 | self | | file://:0:0:0:0 | & | -| main.rs:1733:13:1733:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1733:13:1733:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1733:13:1733:27 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:1733:23:1733:25 | rhs | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1733:23:1733:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1739:16:1739:19 | SelfParam | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1739:22:1739:24 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1739:40:1744:9 | { ... } | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1740:13:1743:13 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1741:20:1741:23 | self | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1741:20:1741:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1741:20:1741:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1741:30:1741:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1742:20:1742:23 | self | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1742:20:1742:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1742:20:1742:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1742:30:1742:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1748:23:1748:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1748:23:1748:31 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1748:34:1748:36 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1749:13:1749:16 | self | | file://:0:0:0:0 | & | -| main.rs:1749:13:1749:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1749:13:1749:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1749:13:1749:26 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1749:24:1749:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1750:13:1750:16 | self | | file://:0:0:0:0 | & | -| main.rs:1750:13:1750:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1750:13:1750:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1750:13:1750:26 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1750:24:1750:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1756:16:1756:19 | SelfParam | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1756:22:1756:24 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1756:40:1761:9 | { ... } | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1757:13:1760:13 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1758:20:1758:23 | self | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1758:20:1758:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1758:20:1758:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1758:30:1758:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1759:20:1759:23 | self | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1759:20:1759:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1759:20:1759:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1759:30:1759:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1765:23:1765:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1765:23:1765:31 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1765:34:1765:36 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1766:13:1766:16 | self | | file://:0:0:0:0 | & | -| main.rs:1766:13:1766:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1766:13:1766:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1766:13:1766:26 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1766:24:1766:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1767:13:1767:16 | self | | file://:0:0:0:0 | & | -| main.rs:1767:13:1767:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1767:13:1767:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1767:13:1767:26 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1767:24:1767:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1773:16:1773:19 | SelfParam | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1773:30:1778:9 | { ... } | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1774:13:1777:13 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1775:20:1775:26 | - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1775:21:1775:24 | self | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1775:21:1775:26 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1776:20:1776:26 | - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1776:21:1776:24 | self | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1776:21:1776:26 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1783:16:1783:19 | SelfParam | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1783:30:1788:9 | { ... } | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1784:13:1787:13 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1785:20:1785:26 | ! ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1785:21:1785:24 | self | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1785:21:1785:26 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1786:20:1786:26 | ! ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1786:21:1786:24 | self | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1786:21:1786:26 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1792:15:1792:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1792:15:1792:19 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1792:22:1792:26 | other | | file://:0:0:0:0 | & | -| main.rs:1792:22:1792:26 | other | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1792:44:1794:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1793:13:1793:16 | self | | file://:0:0:0:0 | & | -| main.rs:1793:13:1793:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1793:13:1793:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1793:13:1793:29 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1793:13:1793:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1793:23:1793:27 | other | | file://:0:0:0:0 | & | -| main.rs:1793:23:1793:27 | other | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1793:23:1793:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1793:34:1793:37 | self | | file://:0:0:0:0 | & | -| main.rs:1793:34:1793:37 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1793:34:1793:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1793:34:1793:50 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1793:44:1793:48 | other | | file://:0:0:0:0 | & | -| main.rs:1793:44:1793:48 | other | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1793:44:1793:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1796:15:1796:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1796:15:1796:19 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1796:22:1796:26 | other | | file://:0:0:0:0 | & | -| main.rs:1796:22:1796:26 | other | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1796:44:1798:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1360:18:1360:34 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1360:18:1360:34 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1360:26:1360:34 | from_loop | | main.rs:1277:5:1281:5 | MyOption | +| main.rs:1360:26:1360:34 | from_loop | T | main.rs:1312:5:1313:13 | S | +| main.rs:1378:15:1378:18 | SelfParam | | main.rs:1366:5:1367:19 | S | +| main.rs:1378:15:1378:18 | SelfParam | T | main.rs:1377:10:1377:10 | T | +| main.rs:1378:26:1380:9 | { ... } | | main.rs:1377:10:1377:10 | T | +| main.rs:1379:13:1379:16 | self | | main.rs:1366:5:1367:19 | S | +| main.rs:1379:13:1379:16 | self | T | main.rs:1377:10:1377:10 | T | +| main.rs:1379:13:1379:18 | self.0 | | main.rs:1377:10:1377:10 | T | +| main.rs:1382:15:1382:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1382:15:1382:19 | SelfParam | &T | main.rs:1366:5:1367:19 | S | +| main.rs:1382:15:1382:19 | SelfParam | &T.T | main.rs:1377:10:1377:10 | T | +| main.rs:1382:28:1384:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1382:28:1384:9 | { ... } | &T | main.rs:1377:10:1377:10 | T | +| main.rs:1383:13:1383:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1383:13:1383:19 | &... | &T | main.rs:1377:10:1377:10 | T | +| main.rs:1383:14:1383:17 | self | | file://:0:0:0:0 | & | +| main.rs:1383:14:1383:17 | self | &T | main.rs:1366:5:1367:19 | S | +| main.rs:1383:14:1383:17 | self | &T.T | main.rs:1377:10:1377:10 | T | +| main.rs:1383:14:1383:19 | self.0 | | main.rs:1377:10:1377:10 | T | +| main.rs:1386:15:1386:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1386:15:1386:25 | SelfParam | &T | main.rs:1366:5:1367:19 | S | +| main.rs:1386:15:1386:25 | SelfParam | &T.T | main.rs:1377:10:1377:10 | T | +| main.rs:1386:34:1388:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1386:34:1388:9 | { ... } | &T | main.rs:1377:10:1377:10 | T | +| main.rs:1387:13:1387:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1387:13:1387:19 | &... | &T | main.rs:1377:10:1377:10 | T | +| main.rs:1387:14:1387:17 | self | | file://:0:0:0:0 | & | +| main.rs:1387:14:1387:17 | self | &T | main.rs:1366:5:1367:19 | S | +| main.rs:1387:14:1387:17 | self | &T.T | main.rs:1377:10:1377:10 | T | +| main.rs:1387:14:1387:19 | self.0 | | main.rs:1377:10:1377:10 | T | +| main.rs:1392:29:1392:33 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1392:29:1392:33 | SelfParam | &T | main.rs:1391:5:1394:5 | Self [trait ATrait] | +| main.rs:1393:33:1393:36 | SelfParam | | main.rs:1391:5:1394:5 | Self [trait ATrait] | +| main.rs:1399:29:1399:33 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1399:29:1399:33 | SelfParam | &T | file://:0:0:0:0 | & | +| main.rs:1399:29:1399:33 | SelfParam | &T.&T | main.rs:1372:5:1375:5 | MyInt | +| main.rs:1399:43:1401:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:1400:13:1400:22 | (...) | | main.rs:1372:5:1375:5 | MyInt | +| main.rs:1400:13:1400:24 | ... .a | | {EXTERNAL LOCATION} | i64 | +| main.rs:1400:14:1400:21 | * ... | | main.rs:1372:5:1375:5 | MyInt | +| main.rs:1400:15:1400:21 | (...) | | file://:0:0:0:0 | & | +| main.rs:1400:15:1400:21 | (...) | | main.rs:1372:5:1375:5 | MyInt | +| main.rs:1400:15:1400:21 | (...) | &T | main.rs:1372:5:1375:5 | MyInt | +| main.rs:1400:16:1400:20 | * ... | | file://:0:0:0:0 | & | +| main.rs:1400:16:1400:20 | * ... | | main.rs:1372:5:1375:5 | MyInt | +| main.rs:1400:16:1400:20 | * ... | &T | main.rs:1372:5:1375:5 | MyInt | +| main.rs:1400:17:1400:20 | self | | file://:0:0:0:0 | & | +| main.rs:1400:17:1400:20 | self | &T | file://:0:0:0:0 | & | +| main.rs:1400:17:1400:20 | self | &T.&T | main.rs:1372:5:1375:5 | MyInt | +| main.rs:1404:33:1404:36 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1404:33:1404:36 | SelfParam | &T | main.rs:1372:5:1375:5 | MyInt | +| main.rs:1404:46:1406:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:1405:13:1405:19 | (...) | | main.rs:1372:5:1375:5 | MyInt | +| main.rs:1405:13:1405:21 | ... .a | | {EXTERNAL LOCATION} | i64 | +| main.rs:1405:14:1405:18 | * ... | | main.rs:1372:5:1375:5 | MyInt | +| main.rs:1405:15:1405:18 | self | | file://:0:0:0:0 | & | +| main.rs:1405:15:1405:18 | self | &T | main.rs:1372:5:1375:5 | MyInt | +| main.rs:1410:13:1410:14 | x1 | | main.rs:1366:5:1367:19 | S | +| main.rs:1410:13:1410:14 | x1 | T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1410:18:1410:22 | S(...) | | main.rs:1366:5:1367:19 | S | +| main.rs:1410:18:1410:22 | S(...) | T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1410:20:1410:21 | S2 | | main.rs:1369:5:1370:14 | S2 | +| main.rs:1411:18:1411:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1411:18:1411:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1411:18:1411:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1411:18:1411:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1411:26:1411:27 | x1 | | main.rs:1366:5:1367:19 | S | +| main.rs:1411:26:1411:27 | x1 | T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1411:26:1411:32 | x1.m1() | | main.rs:1369:5:1370:14 | S2 | +| main.rs:1413:13:1413:14 | x2 | | main.rs:1366:5:1367:19 | S | +| main.rs:1413:13:1413:14 | x2 | T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1413:18:1413:22 | S(...) | | main.rs:1366:5:1367:19 | S | +| main.rs:1413:18:1413:22 | S(...) | T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1413:20:1413:21 | S2 | | main.rs:1369:5:1370:14 | S2 | +| main.rs:1415:18:1415:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1415:18:1415:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1415:18:1415:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1415:18:1415:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1415:26:1415:27 | x2 | | main.rs:1366:5:1367:19 | S | +| main.rs:1415:26:1415:27 | x2 | T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1415:26:1415:32 | x2.m2() | | file://:0:0:0:0 | & | +| main.rs:1415:26:1415:32 | x2.m2() | &T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1416:18:1416:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1416:18:1416:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1416:18:1416:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1416:18:1416:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1416:26:1416:27 | x2 | | main.rs:1366:5:1367:19 | S | +| main.rs:1416:26:1416:27 | x2 | T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1416:26:1416:32 | x2.m3() | | file://:0:0:0:0 | & | +| main.rs:1416:26:1416:32 | x2.m3() | &T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1418:13:1418:14 | x3 | | main.rs:1366:5:1367:19 | S | +| main.rs:1418:13:1418:14 | x3 | T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1418:18:1418:22 | S(...) | | main.rs:1366:5:1367:19 | S | +| main.rs:1418:18:1418:22 | S(...) | T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1418:20:1418:21 | S2 | | main.rs:1369:5:1370:14 | S2 | +| main.rs:1420:18:1420:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1420:18:1420:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1420:18:1420:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1420:18:1420:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1420:26:1420:41 | ...::m2(...) | | file://:0:0:0:0 | & | +| main.rs:1420:26:1420:41 | ...::m2(...) | &T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1420:38:1420:40 | &x3 | | file://:0:0:0:0 | & | +| main.rs:1420:38:1420:40 | &x3 | &T | main.rs:1366:5:1367:19 | S | +| main.rs:1420:38:1420:40 | &x3 | &T.T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1420:39:1420:40 | x3 | | main.rs:1366:5:1367:19 | S | +| main.rs:1420:39:1420:40 | x3 | T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1421:18:1421:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1421:18:1421:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1421:18:1421:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1421:18:1421:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1421:26:1421:41 | ...::m3(...) | | file://:0:0:0:0 | & | +| main.rs:1421:26:1421:41 | ...::m3(...) | &T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1421:38:1421:40 | &x3 | | file://:0:0:0:0 | & | +| main.rs:1421:38:1421:40 | &x3 | &T | main.rs:1366:5:1367:19 | S | +| main.rs:1421:38:1421:40 | &x3 | &T.T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1421:39:1421:40 | x3 | | main.rs:1366:5:1367:19 | S | +| main.rs:1421:39:1421:40 | x3 | T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1423:13:1423:14 | x4 | | file://:0:0:0:0 | & | +| main.rs:1423:13:1423:14 | x4 | &T | main.rs:1366:5:1367:19 | S | +| main.rs:1423:13:1423:14 | x4 | &T.T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1423:18:1423:23 | &... | | file://:0:0:0:0 | & | +| main.rs:1423:18:1423:23 | &... | &T | main.rs:1366:5:1367:19 | S | +| main.rs:1423:18:1423:23 | &... | &T.T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1423:19:1423:23 | S(...) | | main.rs:1366:5:1367:19 | S | +| main.rs:1423:19:1423:23 | S(...) | T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1423:21:1423:22 | S2 | | main.rs:1369:5:1370:14 | S2 | +| main.rs:1425:18:1425:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1425:18:1425:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1425:18:1425:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1425:18:1425:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1425:26:1425:27 | x4 | | file://:0:0:0:0 | & | +| main.rs:1425:26:1425:27 | x4 | &T | main.rs:1366:5:1367:19 | S | +| main.rs:1425:26:1425:27 | x4 | &T.T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1425:26:1425:32 | x4.m2() | | file://:0:0:0:0 | & | +| main.rs:1425:26:1425:32 | x4.m2() | &T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1426:18:1426:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1426:18:1426:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1426:18:1426:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1426:18:1426:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1426:26:1426:27 | x4 | | file://:0:0:0:0 | & | +| main.rs:1426:26:1426:27 | x4 | &T | main.rs:1366:5:1367:19 | S | +| main.rs:1426:26:1426:27 | x4 | &T.T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1426:26:1426:32 | x4.m3() | | file://:0:0:0:0 | & | +| main.rs:1426:26:1426:32 | x4.m3() | &T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1428:13:1428:14 | x5 | | file://:0:0:0:0 | & | +| main.rs:1428:13:1428:14 | x5 | &T | main.rs:1366:5:1367:19 | S | +| main.rs:1428:13:1428:14 | x5 | &T.T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1428:18:1428:23 | &... | | file://:0:0:0:0 | & | +| main.rs:1428:18:1428:23 | &... | &T | main.rs:1366:5:1367:19 | S | +| main.rs:1428:18:1428:23 | &... | &T.T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1428:19:1428:23 | S(...) | | main.rs:1366:5:1367:19 | S | +| main.rs:1428:19:1428:23 | S(...) | T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1428:21:1428:22 | S2 | | main.rs:1369:5:1370:14 | S2 | +| main.rs:1430:18:1430:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1430:18:1430:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1430:18:1430:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1430:18:1430:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1430:26:1430:27 | x5 | | file://:0:0:0:0 | & | +| main.rs:1430:26:1430:27 | x5 | &T | main.rs:1366:5:1367:19 | S | +| main.rs:1430:26:1430:27 | x5 | &T.T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1430:26:1430:32 | x5.m1() | | main.rs:1369:5:1370:14 | S2 | +| main.rs:1431:18:1431:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1431:18:1431:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1431:18:1431:29 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1431:18:1431:29 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1431:26:1431:27 | x5 | | file://:0:0:0:0 | & | +| main.rs:1431:26:1431:27 | x5 | &T | main.rs:1366:5:1367:19 | S | +| main.rs:1431:26:1431:27 | x5 | &T.T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1431:26:1431:29 | x5.0 | | main.rs:1369:5:1370:14 | S2 | +| main.rs:1433:13:1433:14 | x6 | | file://:0:0:0:0 | & | +| main.rs:1433:13:1433:14 | x6 | &T | main.rs:1366:5:1367:19 | S | +| main.rs:1433:13:1433:14 | x6 | &T.T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1433:18:1433:23 | &... | | file://:0:0:0:0 | & | +| main.rs:1433:18:1433:23 | &... | &T | main.rs:1366:5:1367:19 | S | +| main.rs:1433:18:1433:23 | &... | &T.T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1433:19:1433:23 | S(...) | | main.rs:1366:5:1367:19 | S | +| main.rs:1433:19:1433:23 | S(...) | T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1433:21:1433:22 | S2 | | main.rs:1369:5:1370:14 | S2 | +| main.rs:1436:18:1436:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1436:18:1436:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1436:18:1436:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1436:18:1436:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1436:26:1436:30 | (...) | | main.rs:1366:5:1367:19 | S | +| main.rs:1436:26:1436:30 | (...) | T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1436:26:1436:35 | ... .m1() | | main.rs:1369:5:1370:14 | S2 | +| main.rs:1436:27:1436:29 | * ... | | main.rs:1366:5:1367:19 | S | +| main.rs:1436:27:1436:29 | * ... | T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1436:28:1436:29 | x6 | | file://:0:0:0:0 | & | +| main.rs:1436:28:1436:29 | x6 | &T | main.rs:1366:5:1367:19 | S | +| main.rs:1436:28:1436:29 | x6 | &T.T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1438:13:1438:14 | x7 | | main.rs:1366:5:1367:19 | S | +| main.rs:1438:13:1438:14 | x7 | T | file://:0:0:0:0 | & | +| main.rs:1438:13:1438:14 | x7 | T.&T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1438:18:1438:23 | S(...) | | main.rs:1366:5:1367:19 | S | +| main.rs:1438:18:1438:23 | S(...) | T | file://:0:0:0:0 | & | +| main.rs:1438:18:1438:23 | S(...) | T.&T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1438:20:1438:22 | &S2 | | file://:0:0:0:0 | & | +| main.rs:1438:20:1438:22 | &S2 | &T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1438:21:1438:22 | S2 | | main.rs:1369:5:1370:14 | S2 | +| main.rs:1441:13:1441:13 | t | | file://:0:0:0:0 | & | +| main.rs:1441:13:1441:13 | t | &T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1441:17:1441:18 | x7 | | main.rs:1366:5:1367:19 | S | +| main.rs:1441:17:1441:18 | x7 | T | file://:0:0:0:0 | & | +| main.rs:1441:17:1441:18 | x7 | T.&T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1441:17:1441:23 | x7.m1() | | file://:0:0:0:0 | & | +| main.rs:1441:17:1441:23 | x7.m1() | &T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1442:18:1442:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1442:18:1442:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1442:18:1442:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1442:18:1442:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1442:26:1442:27 | x7 | | main.rs:1366:5:1367:19 | S | +| main.rs:1442:26:1442:27 | x7 | T | file://:0:0:0:0 | & | +| main.rs:1442:26:1442:27 | x7 | T.&T | main.rs:1369:5:1370:14 | S2 | +| main.rs:1444:13:1444:14 | x9 | | {EXTERNAL LOCATION} | String | +| main.rs:1444:26:1444:32 | "Hello" | | file://:0:0:0:0 | & | +| main.rs:1444:26:1444:32 | "Hello" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1444:26:1444:44 | "Hello".to_string() | | {EXTERNAL LOCATION} | String | +| main.rs:1448:13:1448:13 | u | | {EXTERNAL LOCATION} | Result | +| main.rs:1448:13:1448:13 | u | T | {EXTERNAL LOCATION} | u32 | +| main.rs:1448:17:1448:18 | x9 | | {EXTERNAL LOCATION} | String | +| main.rs:1448:17:1448:33 | x9.parse() | | {EXTERNAL LOCATION} | Result | +| main.rs:1448:17:1448:33 | x9.parse() | T | {EXTERNAL LOCATION} | u32 | +| main.rs:1450:13:1450:20 | my_thing | | file://:0:0:0:0 | & | +| main.rs:1450:13:1450:20 | my_thing | &T | main.rs:1372:5:1375:5 | MyInt | +| main.rs:1450:24:1450:39 | &... | | file://:0:0:0:0 | & | +| main.rs:1450:24:1450:39 | &... | &T | main.rs:1372:5:1375:5 | MyInt | +| main.rs:1450:25:1450:39 | MyInt {...} | | main.rs:1372:5:1375:5 | MyInt | +| main.rs:1450:36:1450:37 | 37 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1450:36:1450:37 | 37 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1452:17:1452:24 | my_thing | | file://:0:0:0:0 | & | +| main.rs:1452:17:1452:24 | my_thing | &T | main.rs:1372:5:1375:5 | MyInt | +| main.rs:1453:18:1453:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1453:18:1453:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1453:18:1453:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1453:18:1453:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1456:13:1456:20 | my_thing | | file://:0:0:0:0 | & | +| main.rs:1456:13:1456:20 | my_thing | &T | main.rs:1372:5:1375:5 | MyInt | +| main.rs:1456:24:1456:39 | &... | | file://:0:0:0:0 | & | +| main.rs:1456:24:1456:39 | &... | &T | main.rs:1372:5:1375:5 | MyInt | +| main.rs:1456:25:1456:39 | MyInt {...} | | main.rs:1372:5:1375:5 | MyInt | +| main.rs:1456:36:1456:37 | 38 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1456:36:1456:37 | 38 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1457:17:1457:24 | my_thing | | file://:0:0:0:0 | & | +| main.rs:1457:17:1457:24 | my_thing | &T | main.rs:1372:5:1375:5 | MyInt | +| main.rs:1458:18:1458:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1458:18:1458:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1458:18:1458:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1458:18:1458:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1465:16:1465:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1465:16:1465:20 | SelfParam | &T | main.rs:1463:5:1471:5 | Self [trait MyTrait] | +| main.rs:1468:16:1468:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1468:16:1468:20 | SelfParam | &T | main.rs:1463:5:1471:5 | Self [trait MyTrait] | +| main.rs:1468:32:1470:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1468:32:1470:9 | { ... } | &T | main.rs:1463:5:1471:5 | Self [trait MyTrait] | +| main.rs:1469:13:1469:16 | self | | file://:0:0:0:0 | & | +| main.rs:1469:13:1469:16 | self | &T | main.rs:1463:5:1471:5 | Self [trait MyTrait] | +| main.rs:1469:13:1469:22 | self.foo() | | file://:0:0:0:0 | & | +| main.rs:1469:13:1469:22 | self.foo() | &T | main.rs:1463:5:1471:5 | Self [trait MyTrait] | +| main.rs:1477:16:1477:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1477:16:1477:20 | SelfParam | &T | main.rs:1473:5:1473:20 | MyStruct | +| main.rs:1477:36:1479:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1477:36:1479:9 | { ... } | &T | main.rs:1473:5:1473:20 | MyStruct | +| main.rs:1478:13:1478:16 | self | | file://:0:0:0:0 | & | +| main.rs:1478:13:1478:16 | self | &T | main.rs:1473:5:1473:20 | MyStruct | +| main.rs:1483:13:1483:13 | x | | main.rs:1473:5:1473:20 | MyStruct | +| main.rs:1483:17:1483:24 | MyStruct | | main.rs:1473:5:1473:20 | MyStruct | +| main.rs:1484:9:1484:9 | x | | main.rs:1473:5:1473:20 | MyStruct | +| main.rs:1484:9:1484:15 | x.bar() | | file://:0:0:0:0 | & | +| main.rs:1484:9:1484:15 | x.bar() | &T | main.rs:1473:5:1473:20 | MyStruct | +| main.rs:1494:16:1494:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1494:16:1494:20 | SelfParam | &T | main.rs:1491:5:1491:26 | MyStruct | +| main.rs:1494:16:1494:20 | SelfParam | &T.T | main.rs:1493:10:1493:10 | T | +| main.rs:1494:32:1496:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1494:32:1496:9 | { ... } | &T | main.rs:1491:5:1491:26 | MyStruct | +| main.rs:1494:32:1496:9 | { ... } | &T.T | main.rs:1493:10:1493:10 | T | +| main.rs:1495:13:1495:16 | self | | file://:0:0:0:0 | & | +| main.rs:1495:13:1495:16 | self | &T | main.rs:1491:5:1491:26 | MyStruct | +| main.rs:1495:13:1495:16 | self | &T.T | main.rs:1493:10:1493:10 | T | +| main.rs:1500:13:1500:13 | x | | main.rs:1491:5:1491:26 | MyStruct | +| main.rs:1500:13:1500:13 | x | T | main.rs:1489:5:1489:13 | S | +| main.rs:1500:17:1500:27 | MyStruct(...) | | main.rs:1491:5:1491:26 | MyStruct | +| main.rs:1500:17:1500:27 | MyStruct(...) | T | main.rs:1489:5:1489:13 | S | +| main.rs:1500:26:1500:26 | S | | main.rs:1489:5:1489:13 | S | +| main.rs:1501:9:1501:9 | x | | main.rs:1491:5:1491:26 | MyStruct | +| main.rs:1501:9:1501:9 | x | T | main.rs:1489:5:1489:13 | S | +| main.rs:1501:9:1501:15 | x.foo() | | file://:0:0:0:0 | & | +| main.rs:1501:9:1501:15 | x.foo() | &T | main.rs:1491:5:1491:26 | MyStruct | +| main.rs:1501:9:1501:15 | x.foo() | &T.T | main.rs:1489:5:1489:13 | S | +| main.rs:1512:17:1512:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1512:17:1512:25 | SelfParam | &T | main.rs:1506:5:1509:5 | MyFlag | +| main.rs:1513:13:1513:16 | self | | file://:0:0:0:0 | & | +| main.rs:1513:13:1513:16 | self | &T | main.rs:1506:5:1509:5 | MyFlag | +| main.rs:1513:13:1513:21 | self.bool | | {EXTERNAL LOCATION} | bool | +| main.rs:1513:13:1513:34 | ... = ... | | file://:0:0:0:0 | () | +| main.rs:1513:25:1513:34 | ! ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1513:26:1513:29 | self | | file://:0:0:0:0 | & | +| main.rs:1513:26:1513:29 | self | &T | main.rs:1506:5:1509:5 | MyFlag | +| main.rs:1513:26:1513:34 | self.bool | | {EXTERNAL LOCATION} | bool | +| main.rs:1520:15:1520:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1520:15:1520:19 | SelfParam | &T | main.rs:1517:5:1517:13 | S | +| main.rs:1520:31:1522:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1520:31:1522:9 | { ... } | &T | main.rs:1517:5:1517:13 | S | +| main.rs:1521:13:1521:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1521:13:1521:19 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1521:13:1521:19 | &... | &T | main.rs:1517:5:1517:13 | S | +| main.rs:1521:13:1521:19 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1521:13:1521:19 | &... | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1521:13:1521:19 | &... | &T.&T.&T.&T | main.rs:1517:5:1517:13 | S | +| main.rs:1521:14:1521:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1521:14:1521:19 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1521:14:1521:19 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1521:14:1521:19 | &... | &T.&T.&T | main.rs:1517:5:1517:13 | S | +| main.rs:1521:15:1521:19 | &self | | file://:0:0:0:0 | & | +| main.rs:1521:15:1521:19 | &self | &T | file://:0:0:0:0 | & | +| main.rs:1521:15:1521:19 | &self | &T.&T | main.rs:1517:5:1517:13 | S | +| main.rs:1521:16:1521:19 | self | | file://:0:0:0:0 | & | +| main.rs:1521:16:1521:19 | self | &T | main.rs:1517:5:1517:13 | S | +| main.rs:1524:15:1524:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1524:15:1524:25 | SelfParam | &T | main.rs:1517:5:1517:13 | S | +| main.rs:1524:37:1526:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1524:37:1526:9 | { ... } | &T | main.rs:1517:5:1517:13 | S | +| main.rs:1525:13:1525:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1525:13:1525:19 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1525:13:1525:19 | &... | &T | main.rs:1517:5:1517:13 | S | +| main.rs:1525:13:1525:19 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1525:13:1525:19 | &... | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1525:13:1525:19 | &... | &T.&T.&T.&T | main.rs:1517:5:1517:13 | S | +| main.rs:1525:14:1525:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1525:14:1525:19 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1525:14:1525:19 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1525:14:1525:19 | &... | &T.&T.&T | main.rs:1517:5:1517:13 | S | +| main.rs:1525:15:1525:19 | &self | | file://:0:0:0:0 | & | +| main.rs:1525:15:1525:19 | &self | &T | file://:0:0:0:0 | & | +| main.rs:1525:15:1525:19 | &self | &T.&T | main.rs:1517:5:1517:13 | S | +| main.rs:1525:16:1525:19 | self | | file://:0:0:0:0 | & | +| main.rs:1525:16:1525:19 | self | &T | main.rs:1517:5:1517:13 | S | +| main.rs:1528:15:1528:15 | x | | file://:0:0:0:0 | & | +| main.rs:1528:15:1528:15 | x | &T | main.rs:1517:5:1517:13 | S | +| main.rs:1528:34:1530:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1528:34:1530:9 | { ... } | &T | main.rs:1517:5:1517:13 | S | +| main.rs:1529:13:1529:13 | x | | file://:0:0:0:0 | & | +| main.rs:1529:13:1529:13 | x | &T | main.rs:1517:5:1517:13 | S | +| main.rs:1532:15:1532:15 | x | | file://:0:0:0:0 | & | +| main.rs:1532:15:1532:15 | x | &T | main.rs:1517:5:1517:13 | S | +| main.rs:1532:34:1534:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1532:34:1534:9 | { ... } | &T | main.rs:1517:5:1517:13 | S | +| main.rs:1533:13:1533:16 | &... | | file://:0:0:0:0 | & | +| main.rs:1533:13:1533:16 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1533:13:1533:16 | &... | &T | main.rs:1517:5:1517:13 | S | +| main.rs:1533:13:1533:16 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1533:13:1533:16 | &... | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1533:13:1533:16 | &... | &T.&T.&T.&T | main.rs:1517:5:1517:13 | S | +| main.rs:1533:14:1533:16 | &... | | file://:0:0:0:0 | & | +| main.rs:1533:14:1533:16 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1533:14:1533:16 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1533:14:1533:16 | &... | &T.&T.&T | main.rs:1517:5:1517:13 | S | +| main.rs:1533:15:1533:16 | &x | | file://:0:0:0:0 | & | +| main.rs:1533:15:1533:16 | &x | &T | file://:0:0:0:0 | & | +| main.rs:1533:15:1533:16 | &x | &T.&T | main.rs:1517:5:1517:13 | S | +| main.rs:1533:16:1533:16 | x | | file://:0:0:0:0 | & | +| main.rs:1533:16:1533:16 | x | &T | main.rs:1517:5:1517:13 | S | +| main.rs:1538:13:1538:13 | x | | main.rs:1517:5:1517:13 | S | +| main.rs:1538:17:1538:20 | S {...} | | main.rs:1517:5:1517:13 | S | +| main.rs:1539:9:1539:9 | x | | main.rs:1517:5:1517:13 | S | +| main.rs:1539:9:1539:14 | x.f1() | | file://:0:0:0:0 | & | +| main.rs:1539:9:1539:14 | x.f1() | &T | main.rs:1517:5:1517:13 | S | +| main.rs:1540:9:1540:9 | x | | main.rs:1517:5:1517:13 | S | +| main.rs:1540:9:1540:14 | x.f2() | | file://:0:0:0:0 | & | +| main.rs:1540:9:1540:14 | x.f2() | &T | main.rs:1517:5:1517:13 | S | +| main.rs:1541:9:1541:17 | ...::f3(...) | | file://:0:0:0:0 | & | +| main.rs:1541:9:1541:17 | ...::f3(...) | &T | main.rs:1517:5:1517:13 | S | +| main.rs:1541:15:1541:16 | &x | | file://:0:0:0:0 | & | +| main.rs:1541:15:1541:16 | &x | &T | main.rs:1517:5:1517:13 | S | +| main.rs:1541:16:1541:16 | x | | main.rs:1517:5:1517:13 | S | +| main.rs:1543:13:1543:13 | n | | {EXTERNAL LOCATION} | bool | +| main.rs:1543:17:1543:24 | * ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1543:18:1543:24 | * ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1543:18:1543:24 | * ... | | file://:0:0:0:0 | & | +| main.rs:1543:18:1543:24 | * ... | &T | {EXTERNAL LOCATION} | bool | +| main.rs:1543:19:1543:24 | &... | | file://:0:0:0:0 | & | +| main.rs:1543:19:1543:24 | &... | &T | {EXTERNAL LOCATION} | bool | +| main.rs:1543:19:1543:24 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1543:19:1543:24 | &... | &T.&T | {EXTERNAL LOCATION} | bool | +| main.rs:1543:20:1543:24 | &true | | file://:0:0:0:0 | & | +| main.rs:1543:20:1543:24 | &true | &T | {EXTERNAL LOCATION} | bool | +| main.rs:1543:21:1543:24 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1547:17:1547:20 | flag | | main.rs:1506:5:1509:5 | MyFlag | +| main.rs:1547:24:1547:41 | ...::default(...) | | main.rs:1506:5:1509:5 | MyFlag | +| main.rs:1548:22:1548:30 | &mut flag | | file://:0:0:0:0 | & | +| main.rs:1548:22:1548:30 | &mut flag | &T | main.rs:1506:5:1509:5 | MyFlag | +| main.rs:1548:27:1548:30 | flag | | main.rs:1506:5:1509:5 | MyFlag | +| main.rs:1549:18:1549:23 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1549:18:1549:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1549:18:1549:29 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1549:18:1549:29 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1549:26:1549:29 | flag | | main.rs:1506:5:1509:5 | MyFlag | +| main.rs:1564:43:1567:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1564:43:1567:5 | { ... } | E | main.rs:1556:5:1557:14 | S1 | +| main.rs:1564:43:1567:5 | { ... } | T | main.rs:1556:5:1557:14 | S1 | +| main.rs:1565:13:1565:13 | x | | main.rs:1556:5:1557:14 | S1 | +| main.rs:1565:17:1565:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1565:17:1565:30 | ...::Ok(...) | T | main.rs:1556:5:1557:14 | S1 | +| main.rs:1565:17:1565:31 | TryExpr | | main.rs:1556:5:1557:14 | S1 | +| main.rs:1565:28:1565:29 | S1 | | main.rs:1556:5:1557:14 | S1 | +| main.rs:1566:9:1566:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1566:9:1566:22 | ...::Ok(...) | E | main.rs:1556:5:1557:14 | S1 | +| main.rs:1566:9:1566:22 | ...::Ok(...) | T | main.rs:1556:5:1557:14 | S1 | +| main.rs:1566:20:1566:21 | S1 | | main.rs:1556:5:1557:14 | S1 | +| main.rs:1571:46:1575:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1571:46:1575:5 | { ... } | E | main.rs:1559:5:1560:14 | S2 | +| main.rs:1571:46:1575:5 | { ... } | T | main.rs:1556:5:1557:14 | S1 | +| main.rs:1572:13:1572:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1572:13:1572:13 | x | T | main.rs:1556:5:1557:14 | S1 | +| main.rs:1572:17:1572:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1572:17:1572:30 | ...::Ok(...) | T | main.rs:1556:5:1557:14 | S1 | +| main.rs:1572:28:1572:29 | S1 | | main.rs:1556:5:1557:14 | S1 | +| main.rs:1573:13:1573:13 | y | | main.rs:1556:5:1557:14 | S1 | +| main.rs:1573:17:1573:17 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1573:17:1573:17 | x | T | main.rs:1556:5:1557:14 | S1 | +| main.rs:1573:17:1573:18 | TryExpr | | main.rs:1556:5:1557:14 | S1 | +| main.rs:1574:9:1574:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1574:9:1574:22 | ...::Ok(...) | E | main.rs:1559:5:1560:14 | S2 | +| main.rs:1574:9:1574:22 | ...::Ok(...) | T | main.rs:1556:5:1557:14 | S1 | +| main.rs:1574:20:1574:21 | S1 | | main.rs:1556:5:1557:14 | S1 | +| main.rs:1579:40:1584:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1579:40:1584:5 | { ... } | E | main.rs:1559:5:1560:14 | S2 | +| main.rs:1579:40:1584:5 | { ... } | T | main.rs:1556:5:1557:14 | S1 | +| main.rs:1580:13:1580:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1580:13:1580:13 | x | T | {EXTERNAL LOCATION} | Result | +| main.rs:1580:13:1580:13 | x | T.T | main.rs:1556:5:1557:14 | S1 | +| main.rs:1580:17:1580:42 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1580:17:1580:42 | ...::Ok(...) | T | {EXTERNAL LOCATION} | Result | +| main.rs:1580:17:1580:42 | ...::Ok(...) | T.T | main.rs:1556:5:1557:14 | S1 | +| main.rs:1580:28:1580:41 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1580:28:1580:41 | ...::Ok(...) | T | main.rs:1556:5:1557:14 | S1 | +| main.rs:1580:39:1580:40 | S1 | | main.rs:1556:5:1557:14 | S1 | +| main.rs:1582:17:1582:17 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1582:17:1582:17 | x | T | {EXTERNAL LOCATION} | Result | +| main.rs:1582:17:1582:17 | x | T.T | main.rs:1556:5:1557:14 | S1 | +| main.rs:1582:17:1582:18 | TryExpr | | {EXTERNAL LOCATION} | Result | +| main.rs:1582:17:1582:18 | TryExpr | T | main.rs:1556:5:1557:14 | S1 | +| main.rs:1582:17:1582:29 | ... .map(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1582:24:1582:28 | \|...\| s | | {EXTERNAL LOCATION} | dyn FnOnce | +| main.rs:1582:24:1582:28 | \|...\| s | dyn(Args) | file://:0:0:0:0 | (T_1) | +| main.rs:1583:9:1583:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1583:9:1583:22 | ...::Ok(...) | E | main.rs:1559:5:1560:14 | S2 | +| main.rs:1583:9:1583:22 | ...::Ok(...) | T | main.rs:1556:5:1557:14 | S1 | +| main.rs:1583:20:1583:21 | S1 | | main.rs:1556:5:1557:14 | S1 | +| main.rs:1588:30:1588:34 | input | | {EXTERNAL LOCATION} | Result | +| main.rs:1588:30:1588:34 | input | E | main.rs:1556:5:1557:14 | S1 | +| main.rs:1588:30:1588:34 | input | T | main.rs:1588:20:1588:27 | T | +| main.rs:1588:69:1595:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1588:69:1595:5 | { ... } | E | main.rs:1556:5:1557:14 | S1 | +| main.rs:1588:69:1595:5 | { ... } | T | main.rs:1588:20:1588:27 | T | +| main.rs:1589:13:1589:17 | value | | main.rs:1588:20:1588:27 | T | +| main.rs:1589:21:1589:25 | input | | {EXTERNAL LOCATION} | Result | +| main.rs:1589:21:1589:25 | input | E | main.rs:1556:5:1557:14 | S1 | +| main.rs:1589:21:1589:25 | input | T | main.rs:1588:20:1588:27 | T | +| main.rs:1589:21:1589:26 | TryExpr | | main.rs:1588:20:1588:27 | T | +| main.rs:1590:22:1590:38 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1590:22:1590:38 | ...::Ok(...) | E | main.rs:1556:5:1557:14 | S1 | +| main.rs:1590:22:1590:38 | ...::Ok(...) | T | main.rs:1588:20:1588:27 | T | +| main.rs:1590:22:1593:10 | ... .and_then(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1590:22:1593:10 | ... .and_then(...) | E | main.rs:1556:5:1557:14 | S1 | +| main.rs:1590:33:1590:37 | value | | main.rs:1588:20:1588:27 | T | +| main.rs:1590:49:1593:9 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | +| main.rs:1590:49:1593:9 | \|...\| ... | dyn(Args) | file://:0:0:0:0 | (T_1) | +| main.rs:1590:49:1593:9 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | Result | +| main.rs:1590:49:1593:9 | \|...\| ... | dyn(Output).E | main.rs:1556:5:1557:14 | S1 | +| main.rs:1590:53:1593:9 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1590:53:1593:9 | { ... } | E | main.rs:1556:5:1557:14 | S1 | +| main.rs:1591:22:1591:27 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1591:22:1591:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1591:22:1591:30 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1591:22:1591:30 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1592:13:1592:34 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1592:13:1592:34 | ...::Ok::<...>(...) | E | main.rs:1556:5:1557:14 | S1 | +| main.rs:1594:9:1594:23 | ...::Err(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1594:9:1594:23 | ...::Err(...) | E | main.rs:1556:5:1557:14 | S1 | +| main.rs:1594:9:1594:23 | ...::Err(...) | T | main.rs:1588:20:1588:27 | T | +| main.rs:1594:21:1594:22 | S1 | | main.rs:1556:5:1557:14 | S1 | +| main.rs:1599:16:1599:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1599:16:1599:33 | ...::Ok(...) | E | main.rs:1556:5:1557:14 | S1 | +| main.rs:1599:16:1599:33 | ...::Ok(...) | T | main.rs:1556:5:1557:14 | S1 | +| main.rs:1599:27:1599:32 | result | | main.rs:1556:5:1557:14 | S1 | +| main.rs:1599:37:1599:52 | try_same_error(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1599:37:1599:52 | try_same_error(...) | E | main.rs:1556:5:1557:14 | S1 | +| main.rs:1599:37:1599:52 | try_same_error(...) | T | main.rs:1556:5:1557:14 | S1 | +| main.rs:1600:22:1600:27 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1600:22:1600:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1600:22:1600:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1600:22:1600:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1600:30:1600:35 | result | | main.rs:1556:5:1557:14 | S1 | +| main.rs:1603:16:1603:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1603:16:1603:33 | ...::Ok(...) | E | main.rs:1559:5:1560:14 | S2 | +| main.rs:1603:16:1603:33 | ...::Ok(...) | T | main.rs:1556:5:1557:14 | S1 | +| main.rs:1603:27:1603:32 | result | | main.rs:1556:5:1557:14 | S1 | +| main.rs:1603:37:1603:55 | try_convert_error(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1603:37:1603:55 | try_convert_error(...) | E | main.rs:1559:5:1560:14 | S2 | +| main.rs:1603:37:1603:55 | try_convert_error(...) | T | main.rs:1556:5:1557:14 | S1 | +| main.rs:1604:22:1604:27 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1604:22:1604:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1604:22:1604:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1604:22:1604:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1604:30:1604:35 | result | | main.rs:1556:5:1557:14 | S1 | +| main.rs:1607:16:1607:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1607:16:1607:33 | ...::Ok(...) | E | main.rs:1559:5:1560:14 | S2 | +| main.rs:1607:16:1607:33 | ...::Ok(...) | T | main.rs:1556:5:1557:14 | S1 | +| main.rs:1607:27:1607:32 | result | | main.rs:1556:5:1557:14 | S1 | +| main.rs:1607:37:1607:49 | try_chained(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1607:37:1607:49 | try_chained(...) | E | main.rs:1559:5:1560:14 | S2 | +| main.rs:1607:37:1607:49 | try_chained(...) | T | main.rs:1556:5:1557:14 | S1 | +| main.rs:1608:22:1608:27 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1608:22:1608:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1608:22:1608:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1608:22:1608:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1608:30:1608:35 | result | | main.rs:1556:5:1557:14 | S1 | +| main.rs:1611:16:1611:33 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1611:16:1611:33 | ...::Ok(...) | E | main.rs:1556:5:1557:14 | S1 | +| main.rs:1611:16:1611:33 | ...::Ok(...) | T | main.rs:1556:5:1557:14 | S1 | +| main.rs:1611:27:1611:32 | result | | main.rs:1556:5:1557:14 | S1 | +| main.rs:1611:37:1611:63 | try_complex(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1611:37:1611:63 | try_complex(...) | E | main.rs:1556:5:1557:14 | S1 | +| main.rs:1611:37:1611:63 | try_complex(...) | T | main.rs:1556:5:1557:14 | S1 | +| main.rs:1611:49:1611:62 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1611:49:1611:62 | ...::Ok(...) | E | main.rs:1556:5:1557:14 | S1 | +| main.rs:1611:49:1611:62 | ...::Ok(...) | T | main.rs:1556:5:1557:14 | S1 | +| main.rs:1611:60:1611:61 | S1 | | main.rs:1556:5:1557:14 | S1 | +| main.rs:1612:22:1612:27 | "{:?}\\n" | | file://:0:0:0:0 | & | +| main.rs:1612:22:1612:27 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1612:22:1612:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1612:22:1612:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1612:30:1612:35 | result | | main.rs:1556:5:1557:14 | S1 | +| main.rs:1619:13:1619:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1619:22:1619:22 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1620:13:1620:13 | y | | {EXTERNAL LOCATION} | i32 | +| main.rs:1620:17:1620:17 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1621:13:1621:13 | z | | {EXTERNAL LOCATION} | i32 | +| main.rs:1621:17:1621:17 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1621:17:1621:21 | ... + ... | | {EXTERNAL LOCATION} | i32 | +| main.rs:1621:21:1621:21 | y | | {EXTERNAL LOCATION} | i32 | +| main.rs:1622:13:1622:13 | z | | {EXTERNAL LOCATION} | i32 | +| main.rs:1622:17:1622:17 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1622:17:1622:23 | x.abs() | | {EXTERNAL LOCATION} | i32 | +| main.rs:1623:13:1623:13 | c | | {EXTERNAL LOCATION} | char | +| main.rs:1623:17:1623:19 | 'c' | | {EXTERNAL LOCATION} | char | +| main.rs:1624:13:1624:17 | hello | | file://:0:0:0:0 | & | +| main.rs:1624:13:1624:17 | hello | &T | {EXTERNAL LOCATION} | str | +| main.rs:1624:21:1624:27 | "Hello" | | file://:0:0:0:0 | & | +| main.rs:1624:21:1624:27 | "Hello" | &T | {EXTERNAL LOCATION} | str | +| main.rs:1625:13:1625:13 | f | | {EXTERNAL LOCATION} | f64 | +| main.rs:1625:17:1625:24 | 123.0f64 | | {EXTERNAL LOCATION} | f64 | +| main.rs:1626:13:1626:13 | t | | {EXTERNAL LOCATION} | bool | +| main.rs:1626:17:1626:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1627:13:1627:13 | f | | {EXTERNAL LOCATION} | bool | +| main.rs:1627:17:1627:21 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1634:13:1634:13 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:1634:17:1634:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1634:17:1634:29 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1634:25:1634:29 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1635:13:1635:13 | y | | {EXTERNAL LOCATION} | bool | +| main.rs:1635:17:1635:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1635:17:1635:29 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1635:25:1635:29 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1637:17:1637:17 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1638:13:1638:16 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:1638:20:1638:21 | 34 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1638:20:1638:27 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1638:26:1638:27 | 33 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1639:12:1639:15 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:1640:17:1640:17 | z | | file://:0:0:0:0 | () | +| main.rs:1640:21:1640:27 | (...) | | file://:0:0:0:0 | () | +| main.rs:1640:22:1640:22 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1640:22:1640:26 | ... = ... | | file://:0:0:0:0 | () | +| main.rs:1640:26:1640:26 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1642:13:1642:13 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1642:13:1642:17 | ... = ... | | file://:0:0:0:0 | () | +| main.rs:1642:17:1642:17 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1644:9:1644:9 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1658:30:1660:9 | { ... } | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1659:13:1659:31 | Vec2 {...} | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1659:23:1659:23 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1659:23:1659:23 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1659:29:1659:29 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1659:29:1659:29 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1666:16:1666:19 | SelfParam | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1666:22:1666:24 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1666:41:1671:9 | { ... } | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1667:13:1670:13 | Vec2 {...} | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1668:20:1668:23 | self | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1668:20:1668:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1668:20:1668:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1668:29:1668:31 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1668:29:1668:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1669:20:1669:23 | self | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1669:20:1669:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1669:20:1669:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1669:29:1669:31 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1669:29:1669:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1676:23:1676:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1676:23:1676:31 | SelfParam | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1676:34:1676:36 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1677:13:1677:16 | self | | file://:0:0:0:0 | & | +| main.rs:1677:13:1677:16 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1677:13:1677:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1677:13:1677:27 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:1677:23:1677:25 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1677:23:1677:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1678:13:1678:16 | self | | file://:0:0:0:0 | & | +| main.rs:1678:13:1678:16 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1678:13:1678:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1678:13:1678:27 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:1678:23:1678:25 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1678:23:1678:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1684:16:1684:19 | SelfParam | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1684:22:1684:24 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1684:41:1689:9 | { ... } | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1685:13:1688:13 | Vec2 {...} | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1686:20:1686:23 | self | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1686:20:1686:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1686:20:1686:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1686:29:1686:31 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1686:29:1686:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1687:20:1687:23 | self | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1687:20:1687:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1687:20:1687:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1687:29:1687:31 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1687:29:1687:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1694:23:1694:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1694:23:1694:31 | SelfParam | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1694:34:1694:36 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1695:13:1695:16 | self | | file://:0:0:0:0 | & | +| main.rs:1695:13:1695:16 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1695:13:1695:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1695:13:1695:27 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:1695:23:1695:25 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1695:23:1695:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1696:13:1696:16 | self | | file://:0:0:0:0 | & | +| main.rs:1696:13:1696:16 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1696:13:1696:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1696:13:1696:27 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:1696:23:1696:25 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1696:23:1696:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1702:16:1702:19 | SelfParam | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1702:22:1702:24 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1702:41:1707:9 | { ... } | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1703:13:1706:13 | Vec2 {...} | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1704:20:1704:23 | self | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1704:20:1704:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1704:20:1704:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1704:29:1704:31 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1704:29:1704:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1705:20:1705:23 | self | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1705:20:1705:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1705:20:1705:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1705:29:1705:31 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1705:29:1705:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1711:23:1711:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1711:23:1711:31 | SelfParam | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1711:34:1711:36 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1712:13:1712:16 | self | | file://:0:0:0:0 | & | +| main.rs:1712:13:1712:16 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1712:13:1712:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1712:13:1712:27 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:1712:23:1712:25 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1712:23:1712:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1713:13:1713:16 | self | | file://:0:0:0:0 | & | +| main.rs:1713:13:1713:16 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1713:13:1713:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1713:13:1713:27 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:1713:23:1713:25 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1713:23:1713:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1719:16:1719:19 | SelfParam | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1719:22:1719:24 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1719:41:1724:9 | { ... } | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1720:13:1723:13 | Vec2 {...} | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1721:20:1721:23 | self | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1721:20:1721:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1721:20:1721:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1721:29:1721:31 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1721:29:1721:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1722:20:1722:23 | self | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1722:20:1722:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1722:20:1722:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1722:29:1722:31 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1722:29:1722:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1728:23:1728:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1728:23:1728:31 | SelfParam | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1728:34:1728:36 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1729:13:1729:16 | self | | file://:0:0:0:0 | & | +| main.rs:1729:13:1729:16 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1729:13:1729:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1729:13:1729:27 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:1729:23:1729:25 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1729:23:1729:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1730:13:1730:16 | self | | file://:0:0:0:0 | & | +| main.rs:1730:13:1730:16 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1730:13:1730:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1730:13:1730:27 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:1730:23:1730:25 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1730:23:1730:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1736:16:1736:19 | SelfParam | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1736:22:1736:24 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1736:41:1741:9 | { ... } | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1737:13:1740:13 | Vec2 {...} | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1738:20:1738:23 | self | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1738:20:1738:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1738:20:1738:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1738:29:1738:31 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1738:29:1738:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1739:20:1739:23 | self | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1739:20:1739:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1739:20:1739:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1739:29:1739:31 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1739:29:1739:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1745:23:1745:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1745:23:1745:31 | SelfParam | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1745:34:1745:36 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1746:13:1746:16 | self | | file://:0:0:0:0 | & | +| main.rs:1746:13:1746:16 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1746:13:1746:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1746:13:1746:27 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:1746:23:1746:25 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1746:23:1746:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1747:13:1747:16 | self | | file://:0:0:0:0 | & | +| main.rs:1747:13:1747:16 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1747:13:1747:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1747:13:1747:27 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:1747:23:1747:25 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1747:23:1747:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1753:19:1753:22 | SelfParam | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1753:25:1753:27 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1753:44:1758:9 | { ... } | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1754:13:1757:13 | Vec2 {...} | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1755:20:1755:23 | self | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1755:20:1755:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1755:20:1755:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1755:29:1755:31 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1755:29:1755:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1756:20:1756:23 | self | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1756:20:1756:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1756:20:1756:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1756:29:1756:31 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1756:29:1756:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1762:26:1762:34 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1762:26:1762:34 | SelfParam | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1762:37:1762:39 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1763:13:1763:16 | self | | file://:0:0:0:0 | & | +| main.rs:1763:13:1763:16 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1763:13:1763:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1763:13:1763:27 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:1763:23:1763:25 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1763:23:1763:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1764:13:1764:16 | self | | file://:0:0:0:0 | & | +| main.rs:1764:13:1764:16 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1764:13:1764:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1764:13:1764:27 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:1764:23:1764:25 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1764:23:1764:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1770:18:1770:21 | SelfParam | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1770:24:1770:26 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1770:43:1775:9 | { ... } | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1771:13:1774:13 | Vec2 {...} | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1772:20:1772:23 | self | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1772:20:1772:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1772:20:1772:33 | ... \| ... | | {EXTERNAL LOCATION} | NonZero | +| main.rs:1772:20:1772:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1772:20:1772:33 | ... \| ... | T | {EXTERNAL LOCATION} | i64 | +| main.rs:1772:29:1772:31 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1772:29:1772:33 | rhs.x | | {EXTERNAL LOCATION} | NonZero | +| main.rs:1772:29:1772:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1772:29:1772:33 | rhs.x | T | {EXTERNAL LOCATION} | i64 | +| main.rs:1773:20:1773:23 | self | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1773:20:1773:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1773:20:1773:33 | ... \| ... | | {EXTERNAL LOCATION} | NonZero | +| main.rs:1773:20:1773:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1773:20:1773:33 | ... \| ... | T | {EXTERNAL LOCATION} | i64 | +| main.rs:1773:29:1773:31 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1773:29:1773:33 | rhs.y | | {EXTERNAL LOCATION} | NonZero | +| main.rs:1773:29:1773:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1773:29:1773:33 | rhs.y | T | {EXTERNAL LOCATION} | i64 | +| main.rs:1779:25:1779:33 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1779:25:1779:33 | SelfParam | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1779:36:1779:38 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1780:13:1780:16 | self | | file://:0:0:0:0 | & | +| main.rs:1780:13:1780:16 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1780:13:1780:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1780:13:1780:27 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:1780:23:1780:25 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1780:23:1780:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1781:13:1781:16 | self | | file://:0:0:0:0 | & | +| main.rs:1781:13:1781:16 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1781:13:1781:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1781:13:1781:27 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:1781:23:1781:25 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1781:23:1781:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1787:19:1787:22 | SelfParam | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1787:25:1787:27 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1787:44:1792:9 | { ... } | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1788:13:1791:13 | Vec2 {...} | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1789:20:1789:23 | self | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1789:20:1789:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1789:20:1789:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1789:29:1789:31 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1789:29:1789:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1790:20:1790:23 | self | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1790:20:1790:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1790:20:1790:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1790:29:1790:31 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1790:29:1790:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1796:26:1796:34 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1796:26:1796:34 | SelfParam | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1796:37:1796:39 | rhs | | main.rs:1651:5:1656:5 | Vec2 | | main.rs:1797:13:1797:16 | self | | file://:0:0:0:0 | & | -| main.rs:1797:13:1797:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | +| main.rs:1797:13:1797:16 | self | &T | main.rs:1651:5:1656:5 | Vec2 | | main.rs:1797:13:1797:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1797:13:1797:29 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1797:13:1797:50 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1797:23:1797:27 | other | | file://:0:0:0:0 | & | -| main.rs:1797:23:1797:27 | other | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1797:23:1797:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1797:34:1797:37 | self | | file://:0:0:0:0 | & | -| main.rs:1797:34:1797:37 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1797:34:1797:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1797:34:1797:50 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1797:44:1797:48 | other | | file://:0:0:0:0 | & | -| main.rs:1797:44:1797:48 | other | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1797:44:1797:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1802:24:1802:28 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1802:24:1802:28 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1802:31:1802:35 | other | | file://:0:0:0:0 | & | -| main.rs:1802:31:1802:35 | other | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1802:75:1804:9 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:1802:75:1804:9 | { ... } | T | {EXTERNAL LOCATION} | Ordering | -| main.rs:1803:13:1803:29 | (...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:1803:13:1803:63 | ... .partial_cmp(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:1803:13:1803:63 | ... .partial_cmp(...) | T | {EXTERNAL LOCATION} | Ordering | -| main.rs:1803:14:1803:17 | self | | file://:0:0:0:0 | & | -| main.rs:1803:14:1803:17 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1803:14:1803:19 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1803:14:1803:28 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1803:23:1803:26 | self | | file://:0:0:0:0 | & | -| main.rs:1803:23:1803:26 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1803:23:1803:28 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1803:43:1803:62 | &... | | file://:0:0:0:0 | & | -| main.rs:1803:43:1803:62 | &... | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:1803:44:1803:62 | (...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:1803:45:1803:49 | other | | file://:0:0:0:0 | & | -| main.rs:1803:45:1803:49 | other | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1803:45:1803:51 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1803:45:1803:61 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1803:55:1803:59 | other | | file://:0:0:0:0 | & | -| main.rs:1803:55:1803:59 | other | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1803:55:1803:61 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1806:15:1806:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1806:15:1806:19 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1806:22:1806:26 | other | | file://:0:0:0:0 | & | -| main.rs:1806:22:1806:26 | other | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1806:44:1808:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1807:13:1807:16 | self | | file://:0:0:0:0 | & | -| main.rs:1807:13:1807:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1807:13:1807:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1807:13:1807:28 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1807:13:1807:48 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1807:22:1807:26 | other | | file://:0:0:0:0 | & | -| main.rs:1807:22:1807:26 | other | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1807:22:1807:28 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1807:33:1807:36 | self | | file://:0:0:0:0 | & | -| main.rs:1807:33:1807:36 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1807:33:1807:38 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1807:33:1807:48 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1807:42:1807:46 | other | | file://:0:0:0:0 | & | -| main.rs:1807:42:1807:46 | other | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1807:42:1807:48 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1810:15:1810:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1810:15:1810:19 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1810:22:1810:26 | other | | file://:0:0:0:0 | & | -| main.rs:1810:22:1810:26 | other | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1810:44:1812:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1811:13:1811:16 | self | | file://:0:0:0:0 | & | -| main.rs:1811:13:1811:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1811:13:1811:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1811:13:1811:29 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1811:13:1811:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1811:23:1811:27 | other | | file://:0:0:0:0 | & | -| main.rs:1811:23:1811:27 | other | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1811:23:1811:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1811:34:1811:37 | self | | file://:0:0:0:0 | & | -| main.rs:1811:34:1811:37 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1811:34:1811:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1811:34:1811:50 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1811:44:1811:48 | other | | file://:0:0:0:0 | & | -| main.rs:1811:44:1811:48 | other | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1811:44:1811:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1814:15:1814:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1814:15:1814:19 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1814:22:1814:26 | other | | file://:0:0:0:0 | & | -| main.rs:1814:22:1814:26 | other | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1814:44:1816:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1797:13:1797:27 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:1797:23:1797:25 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1797:23:1797:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1798:13:1798:16 | self | | file://:0:0:0:0 | & | +| main.rs:1798:13:1798:16 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1798:13:1798:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1798:13:1798:27 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:1798:23:1798:25 | rhs | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1798:23:1798:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1804:16:1804:19 | SelfParam | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1804:22:1804:24 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1804:40:1809:9 | { ... } | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1805:13:1808:13 | Vec2 {...} | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1806:20:1806:23 | self | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1806:20:1806:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1806:20:1806:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1806:30:1806:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1807:20:1807:23 | self | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1807:20:1807:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1807:20:1807:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1807:30:1807:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1813:23:1813:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1813:23:1813:31 | SelfParam | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1813:34:1813:36 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1814:13:1814:16 | self | | file://:0:0:0:0 | & | +| main.rs:1814:13:1814:16 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1814:13:1814:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1814:13:1814:26 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:1814:24:1814:26 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:1815:13:1815:16 | self | | file://:0:0:0:0 | & | -| main.rs:1815:13:1815:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1815:13:1815:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1815:13:1815:28 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1815:13:1815:48 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1815:22:1815:26 | other | | file://:0:0:0:0 | & | -| main.rs:1815:22:1815:26 | other | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1815:22:1815:28 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1815:33:1815:36 | self | | file://:0:0:0:0 | & | -| main.rs:1815:33:1815:36 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1815:33:1815:38 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1815:33:1815:48 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1815:42:1815:46 | other | | file://:0:0:0:0 | & | -| main.rs:1815:42:1815:46 | other | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1815:42:1815:48 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1818:15:1818:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1818:15:1818:19 | SelfParam | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1818:22:1818:26 | other | | file://:0:0:0:0 | & | -| main.rs:1818:22:1818:26 | other | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1818:44:1820:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1819:13:1819:16 | self | | file://:0:0:0:0 | & | -| main.rs:1819:13:1819:16 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1819:13:1819:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1819:13:1819:29 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1819:13:1819:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1819:23:1819:27 | other | | file://:0:0:0:0 | & | -| main.rs:1819:23:1819:27 | other | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1819:23:1819:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1819:34:1819:37 | self | | file://:0:0:0:0 | & | -| main.rs:1819:34:1819:37 | self | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1819:34:1819:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1819:34:1819:50 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1819:44:1819:48 | other | | file://:0:0:0:0 | & | -| main.rs:1819:44:1819:48 | other | &T | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1819:44:1819:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1826:13:1826:18 | i64_eq | | {EXTERNAL LOCATION} | bool | -| main.rs:1826:22:1826:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1826:23:1826:26 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1826:23:1826:34 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1826:31:1826:34 | 2i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1827:13:1827:18 | i64_ne | | {EXTERNAL LOCATION} | bool | -| main.rs:1827:22:1827:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1827:23:1827:26 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1827:23:1827:34 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1827:31:1827:34 | 4i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1828:13:1828:18 | i64_lt | | {EXTERNAL LOCATION} | bool | -| main.rs:1828:22:1828:34 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1828:23:1828:26 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1828:23:1828:33 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1828:30:1828:33 | 6i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1829:13:1829:18 | i64_le | | {EXTERNAL LOCATION} | bool | -| main.rs:1829:22:1829:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1829:23:1829:26 | 7i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1829:23:1829:34 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1829:31:1829:34 | 8i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1830:13:1830:18 | i64_gt | | {EXTERNAL LOCATION} | bool | -| main.rs:1830:22:1830:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1830:23:1830:26 | 9i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1830:23:1830:34 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1830:30:1830:34 | 10i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1831:13:1831:18 | i64_ge | | {EXTERNAL LOCATION} | bool | -| main.rs:1831:22:1831:37 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1831:23:1831:27 | 11i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1831:23:1831:36 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1831:32:1831:36 | 12i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1834:13:1834:19 | i64_add | | {EXTERNAL LOCATION} | i64 | -| main.rs:1834:23:1834:27 | 13i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1834:23:1834:35 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1834:31:1834:35 | 14i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1835:13:1835:19 | i64_sub | | {EXTERNAL LOCATION} | i64 | -| main.rs:1835:23:1835:27 | 15i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1835:23:1835:35 | ... - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1835:31:1835:35 | 16i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1836:13:1836:19 | i64_mul | | {EXTERNAL LOCATION} | i64 | -| main.rs:1836:23:1836:27 | 17i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1836:23:1836:35 | ... * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1836:31:1836:35 | 18i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1837:13:1837:19 | i64_div | | {EXTERNAL LOCATION} | i64 | -| main.rs:1837:23:1837:27 | 19i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1837:23:1837:35 | ... / ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1837:31:1837:35 | 20i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1838:13:1838:19 | i64_rem | | {EXTERNAL LOCATION} | i64 | -| main.rs:1838:23:1838:27 | 21i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1838:23:1838:35 | ... % ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1838:31:1838:35 | 22i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1841:17:1841:30 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1841:34:1841:38 | 23i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1842:9:1842:22 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1842:9:1842:31 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:1842:27:1842:31 | 24i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1844:17:1844:30 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1844:34:1844:38 | 25i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1845:9:1845:22 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1845:9:1845:31 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:1845:27:1845:31 | 26i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1847:17:1847:30 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1847:34:1847:38 | 27i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1848:9:1848:22 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1848:9:1848:31 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:1848:27:1848:31 | 28i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1850:17:1850:30 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1850:34:1850:38 | 29i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1851:9:1851:22 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1851:9:1851:31 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:1851:27:1851:31 | 30i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1853:17:1853:30 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1853:34:1853:38 | 31i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1854:9:1854:22 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1854:9:1854:31 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:1854:27:1854:31 | 32i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1857:13:1857:22 | i64_bitand | | {EXTERNAL LOCATION} | i64 | -| main.rs:1857:26:1857:30 | 33i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1857:26:1857:38 | ... & ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1857:34:1857:38 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1858:13:1858:21 | i64_bitor | | {EXTERNAL LOCATION} | NonZero | -| main.rs:1858:13:1858:21 | i64_bitor | | {EXTERNAL LOCATION} | i64 | -| main.rs:1858:13:1858:21 | i64_bitor | T | {EXTERNAL LOCATION} | i64 | -| main.rs:1858:25:1858:29 | 35i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1858:25:1858:37 | ... \| ... | | {EXTERNAL LOCATION} | NonZero | -| main.rs:1858:25:1858:37 | ... \| ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1858:25:1858:37 | ... \| ... | T | {EXTERNAL LOCATION} | i64 | -| main.rs:1858:33:1858:37 | 36i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1859:13:1859:22 | i64_bitxor | | {EXTERNAL LOCATION} | i64 | -| main.rs:1859:26:1859:30 | 37i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1859:26:1859:38 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1859:34:1859:38 | 38i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1860:13:1860:19 | i64_shl | | {EXTERNAL LOCATION} | i64 | -| main.rs:1860:23:1860:27 | 39i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1860:23:1860:36 | ... << ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1860:32:1860:36 | 40i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1861:13:1861:19 | i64_shr | | {EXTERNAL LOCATION} | i64 | -| main.rs:1861:23:1861:27 | 41i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1861:23:1861:36 | ... >> ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1861:32:1861:36 | 42i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1864:17:1864:33 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1864:37:1864:41 | 43i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1865:9:1865:25 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1865:9:1865:34 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:1865:30:1865:34 | 44i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1867:17:1867:32 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1867:36:1867:40 | 45i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1868:9:1868:24 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1868:9:1868:33 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:1868:29:1868:33 | 46i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1870:17:1870:33 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1870:37:1870:41 | 47i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1871:9:1871:25 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1871:9:1871:34 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:1871:30:1871:34 | 48i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1873:17:1873:30 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1873:34:1873:38 | 49i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1874:9:1874:22 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1874:9:1874:32 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1874:28:1874:32 | 50i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1876:17:1876:30 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1876:34:1876:38 | 51i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1877:9:1877:22 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1877:9:1877:32 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1877:28:1877:32 | 52i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1879:13:1879:19 | i64_neg | | {EXTERNAL LOCATION} | i64 | -| main.rs:1879:23:1879:28 | - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1879:24:1879:28 | 53i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1880:13:1880:19 | i64_not | | {EXTERNAL LOCATION} | i64 | -| main.rs:1880:23:1880:28 | ! ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1880:24:1880:28 | 54i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1883:13:1883:14 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1883:18:1883:36 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1883:28:1883:28 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1883:28:1883:28 | 1 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1883:34:1883:34 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1883:34:1883:34 | 2 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1884:13:1884:14 | v2 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1884:18:1884:36 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1884:28:1884:28 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1884:28:1884:28 | 3 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1884:34:1884:34 | 4 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1884:34:1884:34 | 4 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1887:13:1887:19 | vec2_eq | | {EXTERNAL LOCATION} | bool | -| main.rs:1887:23:1887:24 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1887:23:1887:30 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1887:29:1887:30 | v2 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1888:13:1888:19 | vec2_ne | | {EXTERNAL LOCATION} | bool | -| main.rs:1888:23:1888:24 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1888:23:1888:30 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1888:29:1888:30 | v2 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1889:13:1889:19 | vec2_lt | | {EXTERNAL LOCATION} | bool | -| main.rs:1889:23:1889:24 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1889:23:1889:29 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1889:28:1889:29 | v2 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1890:13:1890:19 | vec2_le | | {EXTERNAL LOCATION} | bool | -| main.rs:1890:23:1890:24 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1890:23:1890:30 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1890:29:1890:30 | v2 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1891:13:1891:19 | vec2_gt | | {EXTERNAL LOCATION} | bool | -| main.rs:1891:23:1891:24 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1891:23:1891:29 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1891:28:1891:29 | v2 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1892:13:1892:19 | vec2_ge | | {EXTERNAL LOCATION} | bool | -| main.rs:1892:23:1892:24 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1892:23:1892:30 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1892:29:1892:30 | v2 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1895:13:1895:20 | vec2_add | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1895:24:1895:25 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1895:24:1895:30 | ... + ... | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1895:29:1895:30 | v2 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1896:13:1896:20 | vec2_sub | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1896:24:1896:25 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1896:24:1896:30 | ... - ... | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1896:29:1896:30 | v2 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1897:13:1897:20 | vec2_mul | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1897:24:1897:25 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1897:24:1897:30 | ... * ... | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1897:29:1897:30 | v2 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1898:13:1898:20 | vec2_div | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1898:24:1898:25 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1898:24:1898:30 | ... / ... | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1898:29:1898:30 | v2 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1899:13:1899:20 | vec2_rem | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1899:24:1899:25 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1899:24:1899:30 | ... % ... | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1899:29:1899:30 | v2 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1902:17:1902:31 | vec2_add_assign | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1902:35:1902:36 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1903:9:1903:23 | vec2_add_assign | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1903:9:1903:29 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:1903:28:1903:29 | v2 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1905:17:1905:31 | vec2_sub_assign | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1905:35:1905:36 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1906:9:1906:23 | vec2_sub_assign | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1906:9:1906:29 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:1906:28:1906:29 | v2 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1908:17:1908:31 | vec2_mul_assign | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1908:35:1908:36 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1909:9:1909:23 | vec2_mul_assign | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1909:9:1909:29 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:1909:28:1909:29 | v2 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1911:17:1911:31 | vec2_div_assign | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1911:35:1911:36 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1912:9:1912:23 | vec2_div_assign | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1912:9:1912:29 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:1912:28:1912:29 | v2 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1914:17:1914:31 | vec2_rem_assign | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1914:35:1914:36 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1915:9:1915:23 | vec2_rem_assign | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1915:9:1915:29 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:1915:28:1915:29 | v2 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1918:13:1918:23 | vec2_bitand | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1918:27:1918:28 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1918:27:1918:33 | ... & ... | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1918:32:1918:33 | v2 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1919:13:1919:22 | vec2_bitor | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1919:26:1919:27 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1919:26:1919:32 | ... \| ... | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1919:31:1919:32 | v2 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1920:13:1920:23 | vec2_bitxor | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1920:27:1920:28 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1920:27:1920:33 | ... ^ ... | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1920:32:1920:33 | v2 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1921:13:1921:20 | vec2_shl | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1921:24:1921:25 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1921:24:1921:33 | ... << ... | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1921:30:1921:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:1922:13:1922:20 | vec2_shr | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1922:24:1922:25 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1922:24:1922:33 | ... >> ... | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1922:30:1922:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:1925:17:1925:34 | vec2_bitand_assign | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1925:38:1925:39 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1926:9:1926:26 | vec2_bitand_assign | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1926:9:1926:32 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:1926:31:1926:32 | v2 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1928:17:1928:33 | vec2_bitor_assign | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1928:37:1928:38 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1929:9:1929:25 | vec2_bitor_assign | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1929:9:1929:31 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:1929:30:1929:31 | v2 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1931:17:1931:34 | vec2_bitxor_assign | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1931:38:1931:39 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1932:9:1932:26 | vec2_bitxor_assign | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1932:9:1932:32 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:1932:31:1932:32 | v2 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1934:17:1934:31 | vec2_shl_assign | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1934:35:1934:36 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1935:9:1935:23 | vec2_shl_assign | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1935:9:1935:32 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1935:29:1935:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:1937:17:1937:31 | vec2_shr_assign | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1937:35:1937:36 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1938:9:1938:23 | vec2_shr_assign | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1938:9:1938:32 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1938:29:1938:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:1941:13:1941:20 | vec2_neg | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1941:24:1941:26 | - ... | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1941:25:1941:26 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1942:13:1942:20 | vec2_not | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1942:24:1942:26 | ! ... | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1942:25:1942:26 | v1 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1945:13:1945:24 | default_vec2 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1945:28:1945:45 | ...::default(...) | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1946:13:1946:26 | vec2_zero_plus | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1946:30:1946:48 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1946:30:1946:63 | ... + ... | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1946:40:1946:40 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1946:40:1946:40 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1946:46:1946:46 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1946:46:1946:46 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1946:52:1946:63 | default_vec2 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1950:13:1950:24 | default_vec2 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1950:28:1950:45 | ...::default(...) | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1951:13:1951:26 | vec2_zero_plus | | {EXTERNAL LOCATION} | bool | -| main.rs:1951:30:1951:48 | Vec2 {...} | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1951:30:1951:64 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1951:40:1951:40 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1951:40:1951:40 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1951:46:1951:46 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1951:46:1951:46 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1951:53:1951:64 | default_vec2 | | main.rs:1586:5:1591:5 | Vec2 | -| main.rs:1961:18:1961:21 | SelfParam | | main.rs:1958:5:1958:14 | S1 | -| main.rs:1964:25:1966:5 | { ... } | | main.rs:1958:5:1958:14 | S1 | -| main.rs:1965:9:1965:10 | S1 | | main.rs:1958:5:1958:14 | S1 | -| main.rs:1968:41:1970:5 | { ... } | | main.rs:1968:16:1968:39 | impl ... | -| main.rs:1969:9:1969:20 | { ... } | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1969:9:1969:20 | { ... } | Output | main.rs:1958:5:1958:14 | S1 | -| main.rs:1969:17:1969:18 | S1 | | main.rs:1958:5:1958:14 | S1 | -| main.rs:1978:13:1978:42 | SelfParam | | {EXTERNAL LOCATION} | Pin | -| main.rs:1978:13:1978:42 | SelfParam | Ptr | file://:0:0:0:0 | & | -| main.rs:1978:13:1978:42 | SelfParam | Ptr.&T | main.rs:1972:5:1972:14 | S2 | -| main.rs:1979:13:1979:15 | _cx | | file://:0:0:0:0 | & | -| main.rs:1979:13:1979:15 | _cx | &T | {EXTERNAL LOCATION} | Context | -| main.rs:1980:44:1982:9 | { ... } | | {EXTERNAL LOCATION} | Poll | -| main.rs:1980:44:1982:9 | { ... } | T | main.rs:1958:5:1958:14 | S1 | -| main.rs:1981:13:1981:38 | ...::Ready(...) | | {EXTERNAL LOCATION} | Poll | -| main.rs:1981:13:1981:38 | ...::Ready(...) | T | main.rs:1958:5:1958:14 | S1 | -| main.rs:1981:36:1981:37 | S1 | | main.rs:1958:5:1958:14 | S1 | -| main.rs:1985:41:1987:5 | { ... } | | main.rs:1985:16:1985:39 | impl ... | -| main.rs:1986:9:1986:10 | S2 | | main.rs:1972:5:1972:14 | S2 | -| main.rs:1986:9:1986:10 | S2 | | main.rs:1985:16:1985:39 | impl ... | -| main.rs:1990:9:1990:12 | f1(...) | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1990:9:1990:12 | f1(...) | Output | main.rs:1958:5:1958:14 | S1 | -| main.rs:1990:9:1990:18 | await ... | | main.rs:1958:5:1958:14 | S1 | -| main.rs:1991:9:1991:12 | f2(...) | | main.rs:1968:16:1968:39 | impl ... | -| main.rs:1991:9:1991:18 | await ... | | main.rs:1958:5:1958:14 | S1 | -| main.rs:1992:9:1992:12 | f3(...) | | main.rs:1985:16:1985:39 | impl ... | -| main.rs:1992:9:1992:18 | await ... | | main.rs:1958:5:1958:14 | S1 | -| main.rs:1993:9:1993:10 | S2 | | main.rs:1972:5:1972:14 | S2 | -| main.rs:1993:9:1993:16 | await S2 | | main.rs:1958:5:1958:14 | S1 | -| main.rs:1994:13:1994:13 | b | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1994:13:1994:13 | b | Output | main.rs:1958:5:1958:14 | S1 | -| main.rs:1994:17:1994:28 | { ... } | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1994:17:1994:28 | { ... } | Output | main.rs:1958:5:1958:14 | S1 | -| main.rs:1994:25:1994:26 | S1 | | main.rs:1958:5:1958:14 | S1 | -| main.rs:1995:9:1995:9 | b | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1995:9:1995:9 | b | Output | main.rs:1958:5:1958:14 | S1 | -| main.rs:1995:9:1995:15 | await b | | main.rs:1958:5:1958:14 | S1 | -| main.rs:2006:15:2006:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2006:15:2006:19 | SelfParam | &T | main.rs:2005:5:2007:5 | Self [trait Trait1] | -| main.rs:2010:15:2010:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2010:15:2010:19 | SelfParam | &T | main.rs:2009:5:2011:5 | Self [trait Trait2] | -| main.rs:2014:15:2014:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2014:15:2014:19 | SelfParam | &T | main.rs:2000:5:2001:14 | S1 | -| main.rs:2018:15:2018:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2018:15:2018:19 | SelfParam | &T | main.rs:2000:5:2001:14 | S1 | -| main.rs:2021:37:2023:5 | { ... } | | main.rs:2021:16:2021:35 | impl ... + ... | -| main.rs:2022:9:2022:10 | S1 | | main.rs:2000:5:2001:14 | S1 | -| main.rs:2022:9:2022:10 | S1 | | main.rs:2021:16:2021:35 | impl ... + ... | -| main.rs:2026:18:2026:22 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2026:18:2026:22 | SelfParam | &T | main.rs:2025:5:2027:5 | Self [trait MyTrait] | -| main.rs:2030:18:2030:22 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2030:18:2030:22 | SelfParam | &T | main.rs:2000:5:2001:14 | S1 | -| main.rs:2030:31:2032:9 | { ... } | | main.rs:2002:5:2002:14 | S2 | -| main.rs:2031:13:2031:14 | S2 | | main.rs:2002:5:2002:14 | S2 | -| main.rs:2036:18:2036:22 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2036:18:2036:22 | SelfParam | &T | main.rs:2003:5:2003:22 | S3 | -| main.rs:2036:18:2036:22 | SelfParam | &T.T3 | main.rs:2035:10:2035:17 | T | -| main.rs:2036:30:2039:9 | { ... } | | main.rs:2035:10:2035:17 | T | -| main.rs:2037:17:2037:21 | S3(...) | | file://:0:0:0:0 | & | -| main.rs:2037:17:2037:21 | S3(...) | | main.rs:2003:5:2003:22 | S3 | -| main.rs:2037:17:2037:21 | S3(...) | &T | main.rs:2003:5:2003:22 | S3 | -| main.rs:2037:17:2037:21 | S3(...) | &T.T3 | main.rs:2035:10:2035:17 | T | -| main.rs:2037:25:2037:28 | self | | file://:0:0:0:0 | & | -| main.rs:2037:25:2037:28 | self | &T | main.rs:2003:5:2003:22 | S3 | -| main.rs:2037:25:2037:28 | self | &T.T3 | main.rs:2035:10:2035:17 | T | -| main.rs:2038:13:2038:21 | t.clone() | | main.rs:2035:10:2035:17 | T | -| main.rs:2042:45:2044:5 | { ... } | | main.rs:2042:28:2042:43 | impl ... | -| main.rs:2043:9:2043:10 | S1 | | main.rs:2000:5:2001:14 | S1 | -| main.rs:2043:9:2043:10 | S1 | | main.rs:2042:28:2042:43 | impl ... | -| main.rs:2046:41:2046:41 | t | | main.rs:2046:26:2046:38 | B | -| main.rs:2046:52:2048:5 | { ... } | | main.rs:2046:23:2046:23 | A | -| main.rs:2047:9:2047:9 | t | | main.rs:2046:26:2046:38 | B | -| main.rs:2047:9:2047:17 | t.get_a() | | main.rs:2046:23:2046:23 | A | -| main.rs:2050:34:2050:34 | x | | main.rs:2050:24:2050:31 | T | -| main.rs:2050:59:2052:5 | { ... } | | main.rs:2050:43:2050:57 | impl ... | -| main.rs:2050:59:2052:5 | { ... } | impl(T) | main.rs:2050:24:2050:31 | T | -| main.rs:2051:9:2051:13 | S3(...) | | main.rs:2003:5:2003:22 | S3 | -| main.rs:2051:9:2051:13 | S3(...) | | main.rs:2050:43:2050:57 | impl ... | -| main.rs:2051:9:2051:13 | S3(...) | T3 | main.rs:2050:24:2050:31 | T | -| main.rs:2051:9:2051:13 | S3(...) | impl(T) | main.rs:2050:24:2050:31 | T | -| main.rs:2051:12:2051:12 | x | | main.rs:2050:24:2050:31 | T | -| main.rs:2054:34:2054:34 | x | | main.rs:2054:24:2054:31 | T | -| main.rs:2054:67:2056:5 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:2054:67:2056:5 | { ... } | T | main.rs:2054:50:2054:64 | impl ... | -| main.rs:2054:67:2056:5 | { ... } | T.impl(T) | main.rs:2054:24:2054:31 | T | -| main.rs:2055:9:2055:19 | Some(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2055:9:2055:19 | Some(...) | T | main.rs:2003:5:2003:22 | S3 | -| main.rs:2055:9:2055:19 | Some(...) | T | main.rs:2054:50:2054:64 | impl ... | -| main.rs:2055:9:2055:19 | Some(...) | T.T3 | main.rs:2054:24:2054:31 | T | -| main.rs:2055:9:2055:19 | Some(...) | T.impl(T) | main.rs:2054:24:2054:31 | T | -| main.rs:2055:14:2055:18 | S3(...) | | main.rs:2003:5:2003:22 | S3 | -| main.rs:2055:14:2055:18 | S3(...) | | main.rs:2054:50:2054:64 | impl ... | -| main.rs:2055:14:2055:18 | S3(...) | T3 | main.rs:2054:24:2054:31 | T | -| main.rs:2055:14:2055:18 | S3(...) | impl(T) | main.rs:2054:24:2054:31 | T | -| main.rs:2055:17:2055:17 | x | | main.rs:2054:24:2054:31 | T | -| main.rs:2058:34:2058:34 | x | | main.rs:2058:24:2058:31 | T | -| main.rs:2058:78:2060:5 | { ... } | | file://:0:0:0:0 | (T_2) | -| main.rs:2058:78:2060:5 | { ... } | 0(2) | main.rs:2058:44:2058:58 | impl ... | -| main.rs:2058:78:2060:5 | { ... } | 0(2).impl(T) | main.rs:2058:24:2058:31 | T | -| main.rs:2058:78:2060:5 | { ... } | 1(2) | main.rs:2058:61:2058:75 | impl ... | -| main.rs:2058:78:2060:5 | { ... } | 1(2).impl(T) | main.rs:2058:24:2058:31 | T | -| main.rs:2059:9:2059:30 | TupleExpr | | file://:0:0:0:0 | (T_2) | -| main.rs:2059:9:2059:30 | TupleExpr | 0(2) | main.rs:2003:5:2003:22 | S3 | -| main.rs:2059:9:2059:30 | TupleExpr | 0(2) | main.rs:2058:44:2058:58 | impl ... | -| main.rs:2059:9:2059:30 | TupleExpr | 0(2).T3 | main.rs:2058:24:2058:31 | T | -| main.rs:2059:9:2059:30 | TupleExpr | 0(2).impl(T) | main.rs:2058:24:2058:31 | T | -| main.rs:2059:9:2059:30 | TupleExpr | 1(2) | main.rs:2003:5:2003:22 | S3 | -| main.rs:2059:9:2059:30 | TupleExpr | 1(2) | main.rs:2058:61:2058:75 | impl ... | -| main.rs:2059:9:2059:30 | TupleExpr | 1(2).T3 | main.rs:2058:24:2058:31 | T | -| main.rs:2059:9:2059:30 | TupleExpr | 1(2).impl(T) | main.rs:2058:24:2058:31 | T | -| main.rs:2059:10:2059:22 | S3(...) | | main.rs:2003:5:2003:22 | S3 | -| main.rs:2059:10:2059:22 | S3(...) | | main.rs:2058:44:2058:58 | impl ... | -| main.rs:2059:10:2059:22 | S3(...) | T3 | main.rs:2058:24:2058:31 | T | -| main.rs:2059:10:2059:22 | S3(...) | impl(T) | main.rs:2058:24:2058:31 | T | -| main.rs:2059:13:2059:13 | x | | main.rs:2058:24:2058:31 | T | -| main.rs:2059:13:2059:21 | x.clone() | | main.rs:2058:24:2058:31 | T | -| main.rs:2059:25:2059:29 | S3(...) | | main.rs:2003:5:2003:22 | S3 | -| main.rs:2059:25:2059:29 | S3(...) | | main.rs:2058:61:2058:75 | impl ... | -| main.rs:2059:25:2059:29 | S3(...) | T3 | main.rs:2058:24:2058:31 | T | -| main.rs:2059:25:2059:29 | S3(...) | impl(T) | main.rs:2058:24:2058:31 | T | -| main.rs:2059:28:2059:28 | x | | main.rs:2058:24:2058:31 | T | -| main.rs:2062:26:2062:26 | t | | main.rs:2062:29:2062:43 | impl ... | -| main.rs:2062:51:2064:5 | { ... } | | main.rs:2062:23:2062:23 | A | -| main.rs:2063:9:2063:9 | t | | main.rs:2062:29:2062:43 | impl ... | -| main.rs:2063:9:2063:17 | t.get_a() | | main.rs:2062:23:2062:23 | A | -| main.rs:2067:13:2067:13 | x | | main.rs:2021:16:2021:35 | impl ... + ... | -| main.rs:2067:17:2067:20 | f1(...) | | main.rs:2021:16:2021:35 | impl ... + ... | -| main.rs:2068:9:2068:9 | x | | main.rs:2021:16:2021:35 | impl ... + ... | -| main.rs:2069:9:2069:9 | x | | main.rs:2021:16:2021:35 | impl ... + ... | -| main.rs:2070:13:2070:13 | a | | main.rs:2042:28:2042:43 | impl ... | -| main.rs:2070:17:2070:32 | get_a_my_trait(...) | | main.rs:2042:28:2042:43 | impl ... | -| main.rs:2071:13:2071:13 | b | | main.rs:2002:5:2002:14 | S2 | -| main.rs:2071:17:2071:33 | uses_my_trait1(...) | | main.rs:2002:5:2002:14 | S2 | -| main.rs:2071:32:2071:32 | a | | main.rs:2042:28:2042:43 | impl ... | -| main.rs:2072:13:2072:13 | a | | main.rs:2042:28:2042:43 | impl ... | -| main.rs:2072:17:2072:32 | get_a_my_trait(...) | | main.rs:2042:28:2042:43 | impl ... | -| main.rs:2073:13:2073:13 | c | | main.rs:2002:5:2002:14 | S2 | -| main.rs:2073:17:2073:33 | uses_my_trait2(...) | | main.rs:2002:5:2002:14 | S2 | -| main.rs:2073:32:2073:32 | a | | main.rs:2042:28:2042:43 | impl ... | -| main.rs:2074:13:2074:13 | d | | main.rs:2002:5:2002:14 | S2 | -| main.rs:2074:17:2074:34 | uses_my_trait2(...) | | main.rs:2002:5:2002:14 | S2 | -| main.rs:2074:32:2074:33 | S1 | | main.rs:2000:5:2001:14 | S1 | -| main.rs:2075:13:2075:13 | e | | main.rs:2000:5:2001:14 | S1 | -| main.rs:2075:17:2075:35 | get_a_my_trait2(...) | | main.rs:2050:43:2050:57 | impl ... | -| main.rs:2075:17:2075:35 | get_a_my_trait2(...) | impl(T) | main.rs:2000:5:2001:14 | S1 | -| main.rs:2075:17:2075:43 | ... .get_a() | | main.rs:2000:5:2001:14 | S1 | -| main.rs:2075:33:2075:34 | S1 | | main.rs:2000:5:2001:14 | S1 | -| main.rs:2078:13:2078:13 | f | | main.rs:2000:5:2001:14 | S1 | -| main.rs:2078:17:2078:35 | get_a_my_trait3(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2078:17:2078:35 | get_a_my_trait3(...) | T | main.rs:2054:50:2054:64 | impl ... | -| main.rs:2078:17:2078:35 | get_a_my_trait3(...) | T.impl(T) | main.rs:2000:5:2001:14 | S1 | -| main.rs:2078:17:2078:44 | ... .unwrap() | | main.rs:2054:50:2054:64 | impl ... | -| main.rs:2078:17:2078:44 | ... .unwrap() | impl(T) | main.rs:2000:5:2001:14 | S1 | -| main.rs:2078:17:2078:52 | ... .get_a() | | main.rs:2000:5:2001:14 | S1 | -| main.rs:2078:33:2078:34 | S1 | | main.rs:2000:5:2001:14 | S1 | -| main.rs:2079:13:2079:13 | g | | main.rs:2000:5:2001:14 | S1 | -| main.rs:2079:17:2079:35 | get_a_my_trait4(...) | | file://:0:0:0:0 | (T_2) | -| main.rs:2079:17:2079:35 | get_a_my_trait4(...) | 0(2) | main.rs:2058:44:2058:58 | impl ... | -| main.rs:2079:17:2079:35 | get_a_my_trait4(...) | 0(2).impl(T) | main.rs:2000:5:2001:14 | S1 | -| main.rs:2079:17:2079:35 | get_a_my_trait4(...) | 1(2) | main.rs:2058:61:2058:75 | impl ... | -| main.rs:2079:17:2079:35 | get_a_my_trait4(...) | 1(2).impl(T) | main.rs:2000:5:2001:14 | S1 | -| main.rs:2079:17:2079:37 | ... .0 | | main.rs:2058:44:2058:58 | impl ... | -| main.rs:2079:17:2079:37 | ... .0 | impl(T) | main.rs:2000:5:2001:14 | S1 | -| main.rs:2079:17:2079:45 | ... .get_a() | | main.rs:2000:5:2001:14 | S1 | -| main.rs:2079:33:2079:34 | S1 | | main.rs:2000:5:2001:14 | S1 | -| main.rs:2090:16:2090:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2090:16:2090:20 | SelfParam | &T | main.rs:2086:5:2087:13 | S | -| main.rs:2090:31:2092:9 | { ... } | | main.rs:2086:5:2087:13 | S | -| main.rs:2091:13:2091:13 | S | | main.rs:2086:5:2087:13 | S | -| main.rs:2101:26:2103:9 | { ... } | | main.rs:2095:5:2098:5 | MyVec | -| main.rs:2101:26:2103:9 | { ... } | T | main.rs:2100:10:2100:10 | T | -| main.rs:2102:13:2102:38 | MyVec {...} | | main.rs:2095:5:2098:5 | MyVec | -| main.rs:2102:13:2102:38 | MyVec {...} | T | main.rs:2100:10:2100:10 | T | -| main.rs:2102:27:2102:36 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2102:27:2102:36 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2102:27:2102:36 | ...::new(...) | T | main.rs:2100:10:2100:10 | T | -| main.rs:2105:17:2105:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2105:17:2105:25 | SelfParam | &T | main.rs:2095:5:2098:5 | MyVec | -| main.rs:2105:17:2105:25 | SelfParam | &T.T | main.rs:2100:10:2100:10 | T | -| main.rs:2105:28:2105:32 | value | | main.rs:2100:10:2100:10 | T | -| main.rs:2106:13:2106:16 | self | | file://:0:0:0:0 | & | -| main.rs:2106:13:2106:16 | self | &T | main.rs:2095:5:2098:5 | MyVec | -| main.rs:2106:13:2106:16 | self | &T.T | main.rs:2100:10:2100:10 | T | -| main.rs:2106:13:2106:21 | self.data | | {EXTERNAL LOCATION} | Vec | -| main.rs:2106:13:2106:21 | self.data | A | {EXTERNAL LOCATION} | Global | -| main.rs:2106:13:2106:21 | self.data | T | main.rs:2100:10:2100:10 | T | -| main.rs:2106:28:2106:32 | value | | main.rs:2100:10:2100:10 | T | -| main.rs:2114:18:2114:22 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2114:18:2114:22 | SelfParam | &T | main.rs:2095:5:2098:5 | MyVec | -| main.rs:2114:18:2114:22 | SelfParam | &T.T | main.rs:2110:10:2110:10 | T | -| main.rs:2114:25:2114:29 | index | | {EXTERNAL LOCATION} | usize | -| main.rs:2114:56:2116:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:2114:56:2116:9 | { ... } | &T | main.rs:2110:10:2110:10 | T | -| main.rs:2115:13:2115:29 | &... | | file://:0:0:0:0 | & | -| main.rs:2115:13:2115:29 | &... | &T | main.rs:2110:10:2110:10 | T | -| main.rs:2115:14:2115:17 | self | | file://:0:0:0:0 | & | -| main.rs:2115:14:2115:17 | self | &T | main.rs:2095:5:2098:5 | MyVec | -| main.rs:2115:14:2115:17 | self | &T.T | main.rs:2110:10:2110:10 | T | -| main.rs:2115:14:2115:22 | self.data | | {EXTERNAL LOCATION} | Vec | -| main.rs:2115:14:2115:22 | self.data | A | {EXTERNAL LOCATION} | Global | -| main.rs:2115:14:2115:22 | self.data | T | main.rs:2110:10:2110:10 | T | -| main.rs:2115:14:2115:29 | ...[index] | | main.rs:2110:10:2110:10 | T | -| main.rs:2115:24:2115:28 | index | | {EXTERNAL LOCATION} | usize | -| main.rs:2119:22:2119:26 | slice | | file://:0:0:0:0 | & | -| main.rs:2119:22:2119:26 | slice | &T | file://:0:0:0:0 | [] | -| main.rs:2119:22:2119:26 | slice | &T.[T] | main.rs:2086:5:2087:13 | S | -| main.rs:2120:13:2120:13 | x | | main.rs:2086:5:2087:13 | S | -| main.rs:2120:17:2120:21 | slice | | file://:0:0:0:0 | & | -| main.rs:2120:17:2120:21 | slice | &T | file://:0:0:0:0 | [] | -| main.rs:2120:17:2120:21 | slice | &T.[T] | main.rs:2086:5:2087:13 | S | -| main.rs:2120:17:2120:24 | slice[0] | | main.rs:2086:5:2087:13 | S | -| main.rs:2120:17:2120:30 | ... .foo() | | main.rs:2086:5:2087:13 | S | -| main.rs:2120:23:2120:23 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2124:17:2124:19 | vec | | main.rs:2095:5:2098:5 | MyVec | -| main.rs:2124:17:2124:19 | vec | T | main.rs:2086:5:2087:13 | S | -| main.rs:2124:23:2124:34 | ...::new(...) | | main.rs:2095:5:2098:5 | MyVec | -| main.rs:2124:23:2124:34 | ...::new(...) | T | main.rs:2086:5:2087:13 | S | -| main.rs:2125:9:2125:11 | vec | | main.rs:2095:5:2098:5 | MyVec | -| main.rs:2125:9:2125:11 | vec | T | main.rs:2086:5:2087:13 | S | -| main.rs:2125:18:2125:18 | S | | main.rs:2086:5:2087:13 | S | -| main.rs:2126:9:2126:11 | vec | | main.rs:2095:5:2098:5 | MyVec | -| main.rs:2126:9:2126:11 | vec | T | main.rs:2086:5:2087:13 | S | -| main.rs:2126:9:2126:14 | vec[0] | | main.rs:2086:5:2087:13 | S | -| main.rs:2126:9:2126:20 | ... .foo() | | main.rs:2086:5:2087:13 | S | -| main.rs:2126:13:2126:13 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2126:13:2126:13 | 0 | | {EXTERNAL LOCATION} | usize | -| main.rs:2128:13:2128:14 | xs | | file://:0:0:0:0 | [] | -| main.rs:2128:13:2128:14 | xs | [T;...] | main.rs:2086:5:2087:13 | S | -| main.rs:2128:21:2128:21 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2128:26:2128:28 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2128:26:2128:28 | [...] | [T;...] | main.rs:2086:5:2087:13 | S | -| main.rs:2128:27:2128:27 | S | | main.rs:2086:5:2087:13 | S | -| main.rs:2129:13:2129:13 | x | | main.rs:2086:5:2087:13 | S | -| main.rs:2129:17:2129:18 | xs | | file://:0:0:0:0 | [] | -| main.rs:2129:17:2129:18 | xs | [T;...] | main.rs:2086:5:2087:13 | S | -| main.rs:2129:17:2129:21 | xs[0] | | main.rs:2086:5:2087:13 | S | -| main.rs:2129:17:2129:27 | ... .foo() | | main.rs:2086:5:2087:13 | S | -| main.rs:2129:20:2129:20 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2131:23:2131:25 | &xs | | file://:0:0:0:0 | & | -| main.rs:2131:23:2131:25 | &xs | &T | file://:0:0:0:0 | [] | -| main.rs:2131:23:2131:25 | &xs | &T | file://:0:0:0:0 | [] | -| main.rs:2131:23:2131:25 | &xs | &T.[T;...] | main.rs:2086:5:2087:13 | S | -| main.rs:2131:23:2131:25 | &xs | &T.[T] | main.rs:2086:5:2087:13 | S | -| main.rs:2131:24:2131:25 | xs | | file://:0:0:0:0 | [] | -| main.rs:2131:24:2131:25 | xs | [T;...] | main.rs:2086:5:2087:13 | S | -| main.rs:2137:13:2137:13 | x | | {EXTERNAL LOCATION} | String | -| main.rs:2137:17:2137:46 | MacroExpr | | {EXTERNAL LOCATION} | String | -| main.rs:2137:25:2137:35 | "Hello, {}" | | file://:0:0:0:0 | & | -| main.rs:2137:25:2137:35 | "Hello, {}" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2137:25:2137:45 | ...::format(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2137:25:2137:45 | ...::must_use(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2137:25:2137:45 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2137:25:2137:45 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2137:25:2137:45 | { ... } | | {EXTERNAL LOCATION} | String | -| main.rs:2137:38:2137:45 | "World!" | | file://:0:0:0:0 | & | -| main.rs:2137:38:2137:45 | "World!" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2146:19:2146:22 | SelfParam | | main.rs:2142:5:2147:5 | Self [trait MyAdd] | -| main.rs:2146:25:2146:27 | rhs | | main.rs:2142:17:2142:26 | Rhs | -| main.rs:2153:19:2153:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | -| main.rs:2153:25:2153:29 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2153:45:2155:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2154:13:2154:17 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2162:19:2162:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | -| main.rs:2162:25:2162:29 | value | | file://:0:0:0:0 | & | -| main.rs:2162:25:2162:29 | value | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:2162:46:2164:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2163:13:2163:18 | * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2163:14:2163:18 | value | | file://:0:0:0:0 | & | -| main.rs:2163:14:2163:18 | value | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:2171:19:2171:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | -| main.rs:2171:25:2171:29 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2171:46:2177:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2172:13:2176:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | -| main.rs:2172:13:2176:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | -| main.rs:2172:16:2172:20 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2172:22:2174:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2172:22:2174:13 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2173:17:2173:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2173:17:2173:17 | 1 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2174:20:2176:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2174:20:2176:13 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2175:17:2175:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2175:17:2175:17 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2186:19:2186:22 | SelfParam | | main.rs:2180:5:2180:19 | S | -| main.rs:2186:19:2186:22 | SelfParam | T | main.rs:2182:10:2182:17 | T | -| main.rs:2186:25:2186:29 | other | | main.rs:2180:5:2180:19 | S | -| main.rs:2186:25:2186:29 | other | T | main.rs:2182:10:2182:17 | T | -| main.rs:2186:54:2188:9 | { ... } | | main.rs:2180:5:2180:19 | S | -| main.rs:2186:54:2188:9 | { ... } | T | main.rs:2143:9:2143:20 | Output | -| main.rs:2187:13:2187:39 | S(...) | | main.rs:2180:5:2180:19 | S | -| main.rs:2187:13:2187:39 | S(...) | T | main.rs:2143:9:2143:20 | Output | -| main.rs:2187:15:2187:22 | (...) | | main.rs:2182:10:2182:17 | T | -| main.rs:2187:15:2187:38 | ... .my_add(...) | | main.rs:2143:9:2143:20 | Output | -| main.rs:2187:16:2187:19 | self | | main.rs:2180:5:2180:19 | S | -| main.rs:2187:16:2187:19 | self | T | main.rs:2182:10:2182:17 | T | -| main.rs:2187:16:2187:21 | self.0 | | main.rs:2182:10:2182:17 | T | -| main.rs:2187:31:2187:35 | other | | main.rs:2180:5:2180:19 | S | -| main.rs:2187:31:2187:35 | other | T | main.rs:2182:10:2182:17 | T | -| main.rs:2187:31:2187:37 | other.0 | | main.rs:2142:5:2147:5 | Self [trait MyAdd] | -| main.rs:2187:31:2187:37 | other.0 | | main.rs:2182:10:2182:17 | T | -| main.rs:2195:19:2195:22 | SelfParam | | main.rs:2180:5:2180:19 | S | -| main.rs:2195:19:2195:22 | SelfParam | T | main.rs:2191:10:2191:17 | T | -| main.rs:2195:25:2195:29 | other | | main.rs:2191:10:2191:17 | T | -| main.rs:2195:51:2197:9 | { ... } | | main.rs:2180:5:2180:19 | S | -| main.rs:2195:51:2197:9 | { ... } | T | main.rs:2143:9:2143:20 | Output | -| main.rs:2196:13:2196:37 | S(...) | | main.rs:2180:5:2180:19 | S | -| main.rs:2196:13:2196:37 | S(...) | T | main.rs:2143:9:2143:20 | Output | -| main.rs:2196:15:2196:22 | (...) | | main.rs:2191:10:2191:17 | T | -| main.rs:2196:15:2196:36 | ... .my_add(...) | | main.rs:2143:9:2143:20 | Output | -| main.rs:2196:16:2196:19 | self | | main.rs:2180:5:2180:19 | S | -| main.rs:2196:16:2196:19 | self | T | main.rs:2191:10:2191:17 | T | -| main.rs:2196:16:2196:21 | self.0 | | main.rs:2191:10:2191:17 | T | -| main.rs:2196:31:2196:35 | other | | main.rs:2191:10:2191:17 | T | -| main.rs:2207:19:2207:22 | SelfParam | | main.rs:2180:5:2180:19 | S | -| main.rs:2207:19:2207:22 | SelfParam | T | main.rs:2200:14:2200:14 | T | -| main.rs:2207:25:2207:29 | other | | file://:0:0:0:0 | & | -| main.rs:2207:25:2207:29 | other | &T | main.rs:2200:14:2200:14 | T | -| main.rs:2207:55:2209:9 | { ... } | | main.rs:2180:5:2180:19 | S | -| main.rs:2208:13:2208:37 | S(...) | | main.rs:2180:5:2180:19 | S | -| main.rs:2208:15:2208:22 | (...) | | main.rs:2200:14:2200:14 | T | -| main.rs:2208:16:2208:19 | self | | main.rs:2180:5:2180:19 | S | -| main.rs:2208:16:2208:19 | self | T | main.rs:2200:14:2200:14 | T | -| main.rs:2208:16:2208:21 | self.0 | | main.rs:2200:14:2200:14 | T | -| main.rs:2208:31:2208:35 | other | | file://:0:0:0:0 | & | -| main.rs:2208:31:2208:35 | other | &T | main.rs:2200:14:2200:14 | T | -| main.rs:2214:20:2214:24 | value | | main.rs:2212:18:2212:18 | T | -| main.rs:2219:20:2219:24 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2219:40:2221:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2220:13:2220:17 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2226:20:2226:24 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2226:41:2232:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2227:13:2231:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | -| main.rs:2227:13:2231:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | -| main.rs:2227:16:2227:20 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2227:22:2229:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2227:22:2229:13 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2228:17:2228:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2228:17:2228:17 | 1 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2229:20:2231:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2229:20:2231:13 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2230:17:2230:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2230:17:2230:17 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2237:21:2237:25 | value | | main.rs:2235:19:2235:19 | T | -| main.rs:2237:31:2237:31 | x | | main.rs:2235:5:2238:5 | Self [trait MyFrom2] | -| main.rs:2242:21:2242:25 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2242:33:2242:33 | _ | | {EXTERNAL LOCATION} | i64 | -| main.rs:2242:48:2244:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2243:13:2243:17 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:2249:21:2249:25 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2249:34:2249:34 | _ | | {EXTERNAL LOCATION} | i64 | -| main.rs:2249:49:2255:9 | { ... } | | file://:0:0:0:0 | () | -| main.rs:2250:13:2254:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | -| main.rs:2250:16:2250:20 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:2250:22:2252:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2251:17:2251:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2252:20:2254:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2253:17:2253:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2260:15:2260:15 | x | | main.rs:2258:5:2264:5 | Self [trait MySelfTrait] | -| main.rs:2263:15:2263:15 | x | | main.rs:2258:5:2264:5 | Self [trait MySelfTrait] | -| main.rs:2268:15:2268:15 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2268:31:2270:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2269:13:2269:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2269:13:2269:17 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2269:17:2269:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2273:15:2273:15 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2273:32:2275:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2274:13:2274:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2274:13:2274:17 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:2274:17:2274:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2280:15:2280:15 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:2280:31:2282:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2281:13:2281:13 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2281:13:2281:13 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2285:15:2285:15 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:2285:32:2287:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:2286:13:2286:13 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:2291:13:2291:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2291:22:2291:23 | 73 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2291:22:2291:23 | 73 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2292:9:2292:9 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2292:9:2292:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2292:18:2292:21 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2293:9:2293:9 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2293:9:2293:23 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2293:18:2293:22 | &5i64 | | file://:0:0:0:0 | & | -| main.rs:2293:18:2293:22 | &5i64 | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:2293:19:2293:22 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2294:9:2294:9 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2294:9:2294:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2294:18:2294:21 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2296:9:2296:15 | S(...) | | main.rs:2180:5:2180:19 | S | -| main.rs:2296:9:2296:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | -| main.rs:2296:9:2296:31 | ... .my_add(...) | | main.rs:2180:5:2180:19 | S | -| main.rs:2296:11:2296:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2296:24:2296:30 | S(...) | | main.rs:2180:5:2180:19 | S | -| main.rs:2296:24:2296:30 | S(...) | T | {EXTERNAL LOCATION} | i64 | -| main.rs:2296:26:2296:29 | 2i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2297:9:2297:15 | S(...) | | main.rs:2180:5:2180:19 | S | -| main.rs:2297:9:2297:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | -| main.rs:2297:11:2297:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2297:24:2297:27 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2298:9:2298:15 | S(...) | | main.rs:2180:5:2180:19 | S | -| main.rs:2298:9:2298:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | -| main.rs:2298:9:2298:29 | ... .my_add(...) | | main.rs:2180:5:2180:19 | S | -| main.rs:2298:11:2298:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2298:24:2298:28 | &3i64 | | file://:0:0:0:0 | & | -| main.rs:2298:24:2298:28 | &3i64 | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:2298:25:2298:28 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2300:13:2300:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:2300:17:2300:35 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2300:30:2300:34 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2301:13:2301:13 | y | | {EXTERNAL LOCATION} | i64 | -| main.rs:2301:17:2301:34 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2301:30:2301:33 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2302:13:2302:13 | z | | {EXTERNAL LOCATION} | i64 | -| main.rs:2302:22:2302:43 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2302:38:2302:42 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2303:9:2303:34 | ...::my_from2(...) | | file://:0:0:0:0 | () | -| main.rs:2303:23:2303:27 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2303:30:2303:33 | 0i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2304:9:2304:33 | ...::my_from2(...) | | file://:0:0:0:0 | () | -| main.rs:2304:23:2304:26 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2304:29:2304:32 | 0i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2305:9:2305:38 | ...::my_from2(...) | | file://:0:0:0:0 | () | -| main.rs:2305:27:2305:31 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2305:34:2305:37 | 0i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2307:9:2307:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2307:17:2307:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2308:9:2308:22 | ...::f2(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2308:17:2308:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2309:9:2309:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2309:18:2309:21 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2310:9:2310:22 | ...::f2(...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2310:18:2310:21 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2311:9:2311:30 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2311:25:2311:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2312:9:2312:30 | ...::f2(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2312:25:2312:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2313:9:2313:29 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2313:25:2313:28 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2314:9:2314:29 | ...::f2(...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2314:25:2314:28 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2322:26:2324:9 | { ... } | | main.rs:2319:5:2319:24 | MyCallable | -| main.rs:2323:13:2323:25 | MyCallable {...} | | main.rs:2319:5:2319:24 | MyCallable | -| main.rs:2326:17:2326:21 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2326:17:2326:21 | SelfParam | &T | main.rs:2319:5:2319:24 | MyCallable | -| main.rs:2326:31:2328:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2327:13:2327:13 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2327:13:2327:13 | 1 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2334:13:2334:13 | i | | {EXTERNAL LOCATION} | i32 | -| main.rs:2334:18:2334:26 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2334:18:2334:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2334:19:2334:19 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2334:22:2334:22 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2334:25:2334:25 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2335:18:2335:26 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2335:18:2335:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2335:18:2335:41 | ... .map(...) | | file://:0:0:0:0 | [] | -| main.rs:2335:19:2335:19 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2335:22:2335:22 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2335:25:2335:25 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2335:32:2335:40 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | -| main.rs:2335:32:2335:40 | \|...\| ... | dyn(Args) | file://:0:0:0:0 | (T_1) | -| main.rs:2335:40:2335:40 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2336:13:2336:13 | i | | {EXTERNAL LOCATION} | Item | -| main.rs:2336:13:2336:13 | i | | {EXTERNAL LOCATION} | i32 | -| main.rs:2336:18:2336:26 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2336:18:2336:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2336:18:2336:38 | ... .into_iter() | | {EXTERNAL LOCATION} | IntoIter | -| main.rs:2336:18:2336:38 | ... .into_iter() | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2336:19:2336:19 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2336:22:2336:22 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2336:25:2336:25 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2338:13:2338:17 | vals1 | | file://:0:0:0:0 | [] | -| main.rs:2338:13:2338:17 | vals1 | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2338:13:2338:17 | vals1 | [T;...] | {EXTERNAL LOCATION} | u8 | -| main.rs:2338:21:2338:31 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2338:21:2338:31 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2338:21:2338:31 | [...] | [T;...] | {EXTERNAL LOCATION} | u8 | -| main.rs:2338:22:2338:24 | 1u8 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2338:27:2338:27 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2338:27:2338:27 | 2 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2338:30:2338:30 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2338:30:2338:30 | 3 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2339:13:2339:13 | u | | {EXTERNAL LOCATION} | i32 | -| main.rs:2339:13:2339:13 | u | | {EXTERNAL LOCATION} | u8 | -| main.rs:2339:18:2339:22 | vals1 | | file://:0:0:0:0 | [] | -| main.rs:2339:18:2339:22 | vals1 | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2339:18:2339:22 | vals1 | [T;...] | {EXTERNAL LOCATION} | u8 | -| main.rs:2341:13:2341:17 | vals2 | | file://:0:0:0:0 | [] | -| main.rs:2341:13:2341:17 | vals2 | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2341:21:2341:29 | [1u16; 3] | | file://:0:0:0:0 | [] | -| main.rs:2341:21:2341:29 | [1u16; 3] | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2341:22:2341:25 | 1u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2341:28:2341:28 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2342:13:2342:13 | u | | {EXTERNAL LOCATION} | u16 | -| main.rs:2342:18:2342:22 | vals2 | | file://:0:0:0:0 | [] | -| main.rs:2342:18:2342:22 | vals2 | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2344:13:2344:17 | vals3 | | file://:0:0:0:0 | [] | -| main.rs:2344:13:2344:17 | vals3 | [T;...] | {EXTERNAL LOCATION} | u32 | -| main.rs:2344:26:2344:26 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2344:31:2344:39 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2344:31:2344:39 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2344:31:2344:39 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | -| main.rs:2344:32:2344:32 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2344:32:2344:32 | 1 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2344:35:2344:35 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2344:35:2344:35 | 2 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2344:38:2344:38 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2344:38:2344:38 | 3 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2345:13:2345:13 | u | | {EXTERNAL LOCATION} | u32 | -| main.rs:2345:18:2345:22 | vals3 | | file://:0:0:0:0 | [] | -| main.rs:2345:18:2345:22 | vals3 | [T;...] | {EXTERNAL LOCATION} | u32 | -| main.rs:2347:13:2347:17 | vals4 | | file://:0:0:0:0 | [] | -| main.rs:2347:13:2347:17 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | -| main.rs:2347:26:2347:26 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2347:31:2347:36 | [1; 3] | | file://:0:0:0:0 | [] | -| main.rs:2347:31:2347:36 | [1; 3] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2347:31:2347:36 | [1; 3] | [T;...] | {EXTERNAL LOCATION} | u64 | -| main.rs:2347:32:2347:32 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2347:32:2347:32 | 1 | | {EXTERNAL LOCATION} | u64 | -| main.rs:2347:35:2347:35 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2348:13:2348:13 | u | | {EXTERNAL LOCATION} | u64 | -| main.rs:2348:18:2348:22 | vals4 | | file://:0:0:0:0 | [] | -| main.rs:2348:18:2348:22 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | -| main.rs:2350:17:2350:24 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2350:17:2350:24 | strings1 | [T;...] | file://:0:0:0:0 | & | -| main.rs:2350:17:2350:24 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2350:28:2350:48 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2350:28:2350:48 | [...] | [T;...] | file://:0:0:0:0 | & | -| main.rs:2350:28:2350:48 | [...] | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2350:29:2350:33 | "foo" | | file://:0:0:0:0 | & | -| main.rs:2350:29:2350:33 | "foo" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2350:36:2350:40 | "bar" | | file://:0:0:0:0 | & | -| main.rs:2350:36:2350:40 | "bar" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2350:43:2350:47 | "baz" | | file://:0:0:0:0 | & | -| main.rs:2350:43:2350:47 | "baz" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2351:13:2351:13 | s | | {EXTERNAL LOCATION} | Item | -| main.rs:2351:13:2351:13 | s | | file://:0:0:0:0 | & | -| main.rs:2351:13:2351:13 | s | &T | file://:0:0:0:0 | & | -| main.rs:2351:13:2351:13 | s | &T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2351:18:2351:26 | &strings1 | | file://:0:0:0:0 | & | -| main.rs:2351:18:2351:26 | &strings1 | &T | file://:0:0:0:0 | [] | -| main.rs:2351:18:2351:26 | &strings1 | &T.[T;...] | file://:0:0:0:0 | & | -| main.rs:2351:18:2351:26 | &strings1 | &T.[T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2351:19:2351:26 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2351:19:2351:26 | strings1 | [T;...] | file://:0:0:0:0 | & | -| main.rs:2351:19:2351:26 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2352:13:2352:13 | s | | {EXTERNAL LOCATION} | Item | -| main.rs:2352:13:2352:13 | s | | file://:0:0:0:0 | & | -| main.rs:2352:13:2352:13 | s | &T | file://:0:0:0:0 | & | -| main.rs:2352:13:2352:13 | s | &T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2352:18:2352:30 | &mut strings1 | | file://:0:0:0:0 | & | -| main.rs:2352:18:2352:30 | &mut strings1 | &T | file://:0:0:0:0 | [] | -| main.rs:2352:18:2352:30 | &mut strings1 | &T.[T;...] | file://:0:0:0:0 | & | -| main.rs:2352:18:2352:30 | &mut strings1 | &T.[T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2352:23:2352:30 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2352:23:2352:30 | strings1 | [T;...] | file://:0:0:0:0 | & | -| main.rs:2352:23:2352:30 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2353:13:2353:13 | s | | file://:0:0:0:0 | & | -| main.rs:2353:13:2353:13 | s | &T | {EXTERNAL LOCATION} | str | -| main.rs:2353:18:2353:25 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2353:18:2353:25 | strings1 | [T;...] | file://:0:0:0:0 | & | -| main.rs:2353:18:2353:25 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | -| main.rs:2355:13:2355:20 | strings2 | | file://:0:0:0:0 | [] | -| main.rs:2355:13:2355:20 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2356:9:2360:9 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2356:9:2360:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2357:13:2357:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2357:26:2357:30 | "foo" | | file://:0:0:0:0 | & | -| main.rs:2357:26:2357:30 | "foo" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2358:13:2358:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2358:26:2358:30 | "bar" | | file://:0:0:0:0 | & | -| main.rs:2358:26:2358:30 | "bar" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2359:13:2359:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2359:26:2359:30 | "baz" | | file://:0:0:0:0 | & | -| main.rs:2359:26:2359:30 | "baz" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2361:13:2361:13 | s | | {EXTERNAL LOCATION} | String | -| main.rs:2361:18:2361:25 | strings2 | | file://:0:0:0:0 | [] | -| main.rs:2361:18:2361:25 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2363:13:2363:20 | strings3 | | file://:0:0:0:0 | & | -| main.rs:2363:13:2363:20 | strings3 | &T | file://:0:0:0:0 | [] | -| main.rs:2363:13:2363:20 | strings3 | &T.[T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2364:9:2368:9 | &... | | file://:0:0:0:0 | & | -| main.rs:2364:9:2368:9 | &... | &T | file://:0:0:0:0 | [] | -| main.rs:2364:9:2368:9 | &... | &T.[T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2364:10:2368:9 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2364:10:2368:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2365:13:2365:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2365:26:2365:30 | "foo" | | file://:0:0:0:0 | & | -| main.rs:2365:26:2365:30 | "foo" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2366:13:2366:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2366:26:2366:30 | "bar" | | file://:0:0:0:0 | & | -| main.rs:2366:26:2366:30 | "bar" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2367:13:2367:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2367:26:2367:30 | "baz" | | file://:0:0:0:0 | & | -| main.rs:2367:26:2367:30 | "baz" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2369:13:2369:13 | s | | {EXTERNAL LOCATION} | Item | -| main.rs:2369:13:2369:13 | s | | file://:0:0:0:0 | & | -| main.rs:2369:13:2369:13 | s | &T | {EXTERNAL LOCATION} | String | -| main.rs:2369:18:2369:25 | strings3 | | file://:0:0:0:0 | & | -| main.rs:2369:18:2369:25 | strings3 | &T | file://:0:0:0:0 | [] | -| main.rs:2369:18:2369:25 | strings3 | &T.[T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2371:13:2371:21 | callables | | file://:0:0:0:0 | [] | -| main.rs:2371:13:2371:21 | callables | [T;...] | main.rs:2319:5:2319:24 | MyCallable | -| main.rs:2371:25:2371:81 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2371:25:2371:81 | [...] | [T;...] | main.rs:2319:5:2319:24 | MyCallable | -| main.rs:2371:26:2371:42 | ...::new(...) | | main.rs:2319:5:2319:24 | MyCallable | -| main.rs:2371:45:2371:61 | ...::new(...) | | main.rs:2319:5:2319:24 | MyCallable | -| main.rs:2371:64:2371:80 | ...::new(...) | | main.rs:2319:5:2319:24 | MyCallable | -| main.rs:2372:13:2372:13 | c | | main.rs:2319:5:2319:24 | MyCallable | -| main.rs:2373:12:2373:20 | callables | | file://:0:0:0:0 | [] | -| main.rs:2373:12:2373:20 | callables | [T;...] | main.rs:2319:5:2319:24 | MyCallable | -| main.rs:2375:17:2375:22 | result | | {EXTERNAL LOCATION} | i64 | -| main.rs:2375:26:2375:26 | c | | main.rs:2319:5:2319:24 | MyCallable | -| main.rs:2375:26:2375:33 | c.call() | | {EXTERNAL LOCATION} | i64 | -| main.rs:2380:13:2380:13 | i | | {EXTERNAL LOCATION} | Item | -| main.rs:2380:13:2380:13 | i | | {EXTERNAL LOCATION} | i32 | -| main.rs:2380:18:2380:18 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2380:18:2380:22 | 0..10 | | {EXTERNAL LOCATION} | Range | -| main.rs:2380:18:2380:22 | 0..10 | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2380:21:2380:22 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2381:13:2381:13 | u | | {EXTERNAL LOCATION} | Range | -| main.rs:2381:13:2381:13 | u | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2381:13:2381:13 | u | Idx | {EXTERNAL LOCATION} | u8 | -| main.rs:2381:18:2381:26 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2381:18:2381:26 | [...] | [T;...] | {EXTERNAL LOCATION} | Range | -| main.rs:2381:18:2381:26 | [...] | [T;...].Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2381:18:2381:26 | [...] | [T;...].Idx | {EXTERNAL LOCATION} | u8 | -| main.rs:2381:19:2381:21 | 0u8 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2381:19:2381:25 | 0u8..10 | | {EXTERNAL LOCATION} | Range | -| main.rs:2381:19:2381:25 | 0u8..10 | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2381:19:2381:25 | 0u8..10 | Idx | {EXTERNAL LOCATION} | u8 | -| main.rs:2381:24:2381:25 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2381:24:2381:25 | 10 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2382:13:2382:17 | range | | {EXTERNAL LOCATION} | Range | -| main.rs:2382:13:2382:17 | range | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2382:21:2382:21 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2382:21:2382:25 | 0..10 | | {EXTERNAL LOCATION} | Range | -| main.rs:2382:21:2382:25 | 0..10 | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2382:24:2382:25 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2383:13:2383:13 | i | | {EXTERNAL LOCATION} | Item | -| main.rs:2383:13:2383:13 | i | | {EXTERNAL LOCATION} | i32 | -| main.rs:2383:18:2383:22 | range | | {EXTERNAL LOCATION} | Range | -| main.rs:2383:18:2383:22 | range | Idx | {EXTERNAL LOCATION} | i32 | -| main.rs:2384:13:2384:22 | range_full | | {EXTERNAL LOCATION} | RangeFull | -| main.rs:2384:26:2384:27 | .. | | {EXTERNAL LOCATION} | RangeFull | -| main.rs:2385:13:2385:13 | i | | {EXTERNAL LOCATION} | Item | -| main.rs:2385:18:2385:48 | &... | | file://:0:0:0:0 | & | -| main.rs:2385:19:2385:36 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2385:19:2385:36 | [...] | [T;...] | {EXTERNAL LOCATION} | i64 | -| main.rs:2385:20:2385:23 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2385:26:2385:29 | 2i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2385:32:2385:35 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2385:38:2385:47 | range_full | | {EXTERNAL LOCATION} | RangeFull | -| main.rs:2387:13:2387:18 | range1 | | {EXTERNAL LOCATION} | Range | -| main.rs:2387:13:2387:18 | range1 | Idx | {EXTERNAL LOCATION} | u16 | -| main.rs:2388:9:2391:9 | ...::Range {...} | | {EXTERNAL LOCATION} | Range | -| main.rs:2388:9:2391:9 | ...::Range {...} | Idx | {EXTERNAL LOCATION} | u16 | -| main.rs:2389:20:2389:23 | 0u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2390:18:2390:22 | 10u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2392:13:2392:13 | u | | {EXTERNAL LOCATION} | Item | -| main.rs:2392:13:2392:13 | u | | {EXTERNAL LOCATION} | u16 | -| main.rs:2392:18:2392:23 | range1 | | {EXTERNAL LOCATION} | Range | -| main.rs:2392:18:2392:23 | range1 | Idx | {EXTERNAL LOCATION} | u16 | -| main.rs:2396:26:2396:26 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2396:29:2396:29 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2396:32:2396:32 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2399:13:2399:18 | vals4a | | {EXTERNAL LOCATION} | Vec | -| main.rs:2399:13:2399:18 | vals4a | A | {EXTERNAL LOCATION} | Global | -| main.rs:2399:13:2399:18 | vals4a | T | {EXTERNAL LOCATION} | u16 | -| main.rs:2399:32:2399:43 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2399:32:2399:43 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2399:32:2399:43 | [...] | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2399:32:2399:52 | ... .to_vec() | | {EXTERNAL LOCATION} | Vec | -| main.rs:2399:32:2399:52 | ... .to_vec() | A | {EXTERNAL LOCATION} | Global | -| main.rs:2399:32:2399:52 | ... .to_vec() | T | {EXTERNAL LOCATION} | u16 | -| main.rs:2399:33:2399:36 | 1u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2399:39:2399:39 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2399:39:2399:39 | 2 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2399:42:2399:42 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2399:42:2399:42 | 3 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2400:13:2400:13 | u | | {EXTERNAL LOCATION} | u16 | -| main.rs:2400:13:2400:13 | u | | file://:0:0:0:0 | & | -| main.rs:2400:18:2400:23 | vals4a | | {EXTERNAL LOCATION} | Vec | -| main.rs:2400:18:2400:23 | vals4a | A | {EXTERNAL LOCATION} | Global | -| main.rs:2400:18:2400:23 | vals4a | T | {EXTERNAL LOCATION} | u16 | -| main.rs:2402:22:2402:33 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2402:22:2402:33 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2402:22:2402:33 | [...] | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2402:23:2402:26 | 1u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2402:29:2402:29 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2402:29:2402:29 | 2 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2402:32:2402:32 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2402:32:2402:32 | 3 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2405:13:2405:17 | vals5 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2405:13:2405:17 | vals5 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2405:13:2405:17 | vals5 | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2405:13:2405:17 | vals5 | T | {EXTERNAL LOCATION} | u32 | -| main.rs:2405:21:2405:43 | ...::from(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2405:21:2405:43 | ...::from(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2405:21:2405:43 | ...::from(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2405:21:2405:43 | ...::from(...) | T | {EXTERNAL LOCATION} | u32 | -| main.rs:2405:31:2405:42 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2405:31:2405:42 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2405:31:2405:42 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | -| main.rs:2405:32:2405:35 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2405:38:2405:38 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2405:38:2405:38 | 2 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2405:41:2405:41 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2405:41:2405:41 | 3 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2406:13:2406:13 | u | | {EXTERNAL LOCATION} | i32 | -| main.rs:2406:13:2406:13 | u | | {EXTERNAL LOCATION} | u32 | -| main.rs:2406:13:2406:13 | u | | file://:0:0:0:0 | & | -| main.rs:2406:18:2406:22 | vals5 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2406:18:2406:22 | vals5 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2406:18:2406:22 | vals5 | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2406:18:2406:22 | vals5 | T | {EXTERNAL LOCATION} | u32 | -| main.rs:2408:13:2408:17 | vals6 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2408:13:2408:17 | vals6 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2408:13:2408:17 | vals6 | T | file://:0:0:0:0 | & | -| main.rs:2408:13:2408:17 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 | -| main.rs:2408:32:2408:43 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2408:32:2408:43 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2408:32:2408:43 | [...] | [T;...] | {EXTERNAL LOCATION} | u64 | -| main.rs:2408:32:2408:60 | ... .collect() | | {EXTERNAL LOCATION} | Vec | -| main.rs:2408:32:2408:60 | ... .collect() | A | {EXTERNAL LOCATION} | Global | -| main.rs:2408:32:2408:60 | ... .collect() | T | file://:0:0:0:0 | & | -| main.rs:2408:32:2408:60 | ... .collect() | T.&T | {EXTERNAL LOCATION} | u64 | -| main.rs:2408:33:2408:36 | 1u64 | | {EXTERNAL LOCATION} | u64 | -| main.rs:2408:39:2408:39 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2408:39:2408:39 | 2 | | {EXTERNAL LOCATION} | u64 | -| main.rs:2408:42:2408:42 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2408:42:2408:42 | 3 | | {EXTERNAL LOCATION} | u64 | -| main.rs:2409:13:2409:13 | u | | file://:0:0:0:0 | & | -| main.rs:2409:13:2409:13 | u | &T | {EXTERNAL LOCATION} | u64 | -| main.rs:2409:18:2409:22 | vals6 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2409:18:2409:22 | vals6 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2409:18:2409:22 | vals6 | T | file://:0:0:0:0 | & | -| main.rs:2409:18:2409:22 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 | -| main.rs:2411:17:2411:21 | vals7 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2411:17:2411:21 | vals7 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2411:17:2411:21 | vals7 | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2411:25:2411:34 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2411:25:2411:34 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2411:25:2411:34 | ...::new(...) | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2412:9:2412:13 | vals7 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2412:9:2412:13 | vals7 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2412:9:2412:13 | vals7 | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2412:20:2412:22 | 1u8 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2413:13:2413:13 | u | | {EXTERNAL LOCATION} | u8 | -| main.rs:2413:13:2413:13 | u | | file://:0:0:0:0 | & | -| main.rs:2413:18:2413:22 | vals7 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2413:18:2413:22 | vals7 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2413:18:2413:22 | vals7 | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2415:33:2415:33 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2415:36:2415:36 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2415:45:2415:45 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2415:48:2415:48 | 4 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2422:17:2422:20 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2422:17:2422:20 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2422:17:2422:20 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2422:17:2422:20 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2422:17:2422:20 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2422:17:2422:20 | map1 | V.T | file://:0:0:0:0 | & | -| main.rs:2422:17:2422:20 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2422:24:2422:55 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2422:24:2422:55 | ...::new(...) | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2422:24:2422:55 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2422:24:2422:55 | ...::new(...) | V | {EXTERNAL LOCATION} | Box | -| main.rs:2422:24:2422:55 | ...::new(...) | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2422:24:2422:55 | ...::new(...) | V.T | file://:0:0:0:0 | & | -| main.rs:2422:24:2422:55 | ...::new(...) | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2423:9:2423:12 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2423:9:2423:12 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2423:9:2423:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2423:9:2423:12 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2423:9:2423:12 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2423:9:2423:12 | map1 | V.T | file://:0:0:0:0 | & | -| main.rs:2423:9:2423:12 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2423:9:2423:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2423:9:2423:39 | map1.insert(...) | T | {EXTERNAL LOCATION} | Box | -| main.rs:2423:9:2423:39 | map1.insert(...) | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2423:9:2423:39 | map1.insert(...) | T.T | file://:0:0:0:0 | & | -| main.rs:2423:9:2423:39 | map1.insert(...) | T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2423:21:2423:21 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2423:24:2423:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2423:24:2423:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2423:24:2423:38 | ...::new(...) | T | file://:0:0:0:0 | & | -| main.rs:2423:24:2423:38 | ...::new(...) | T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2423:33:2423:37 | "one" | | file://:0:0:0:0 | & | -| main.rs:2423:33:2423:37 | "one" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2424:9:2424:12 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2424:9:2424:12 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2424:9:2424:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2424:9:2424:12 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2424:9:2424:12 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2424:9:2424:12 | map1 | V.T | file://:0:0:0:0 | & | -| main.rs:2424:9:2424:12 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2424:9:2424:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2424:9:2424:39 | map1.insert(...) | T | {EXTERNAL LOCATION} | Box | -| main.rs:2424:9:2424:39 | map1.insert(...) | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2424:9:2424:39 | map1.insert(...) | T.T | file://:0:0:0:0 | & | -| main.rs:2424:9:2424:39 | map1.insert(...) | T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2424:21:2424:21 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2424:24:2424:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2424:24:2424:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2424:24:2424:38 | ...::new(...) | T | file://:0:0:0:0 | & | -| main.rs:2424:24:2424:38 | ...::new(...) | T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2424:33:2424:37 | "two" | | file://:0:0:0:0 | & | -| main.rs:2424:33:2424:37 | "two" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2425:13:2425:15 | key | | {EXTERNAL LOCATION} | Item | -| main.rs:2425:13:2425:15 | key | | file://:0:0:0:0 | & | -| main.rs:2425:13:2425:15 | key | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:2425:20:2425:23 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2425:20:2425:23 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2425:20:2425:23 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2425:20:2425:23 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2425:20:2425:23 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2425:20:2425:23 | map1 | V.T | file://:0:0:0:0 | & | -| main.rs:2425:20:2425:23 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2425:20:2425:30 | map1.keys() | | {EXTERNAL LOCATION} | Keys | -| main.rs:2425:20:2425:30 | map1.keys() | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2425:20:2425:30 | map1.keys() | V | {EXTERNAL LOCATION} | Box | -| main.rs:2425:20:2425:30 | map1.keys() | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2425:20:2425:30 | map1.keys() | V.T | file://:0:0:0:0 | & | -| main.rs:2425:20:2425:30 | map1.keys() | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2426:13:2426:17 | value | | {EXTERNAL LOCATION} | Item | -| main.rs:2426:13:2426:17 | value | | file://:0:0:0:0 | & | -| main.rs:2426:13:2426:17 | value | &T | {EXTERNAL LOCATION} | Box | -| main.rs:2426:13:2426:17 | value | &T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2426:13:2426:17 | value | &T.T | file://:0:0:0:0 | & | -| main.rs:2426:13:2426:17 | value | &T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2426:22:2426:25 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2426:22:2426:25 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2426:22:2426:25 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2426:22:2426:25 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2426:22:2426:25 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2426:22:2426:25 | map1 | V.T | file://:0:0:0:0 | & | -| main.rs:2426:22:2426:25 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2426:22:2426:34 | map1.values() | | {EXTERNAL LOCATION} | Values | -| main.rs:2426:22:2426:34 | map1.values() | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2426:22:2426:34 | map1.values() | V | {EXTERNAL LOCATION} | Box | -| main.rs:2426:22:2426:34 | map1.values() | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2426:22:2426:34 | map1.values() | V.T | file://:0:0:0:0 | & | -| main.rs:2426:22:2426:34 | map1.values() | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2427:13:2427:24 | TuplePat | | file://:0:0:0:0 | (T_2) | -| main.rs:2427:13:2427:24 | TuplePat | 0(2) | file://:0:0:0:0 | & | -| main.rs:2427:13:2427:24 | TuplePat | 0(2).&T | {EXTERNAL LOCATION} | i32 | -| main.rs:2427:13:2427:24 | TuplePat | 1(2) | file://:0:0:0:0 | & | -| main.rs:2427:13:2427:24 | TuplePat | 1(2).&T | {EXTERNAL LOCATION} | Box | -| main.rs:2427:13:2427:24 | TuplePat | 1(2).&T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2427:13:2427:24 | TuplePat | 1(2).&T.T | file://:0:0:0:0 | & | -| main.rs:2427:13:2427:24 | TuplePat | 1(2).&T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2427:14:2427:16 | key | | file://:0:0:0:0 | & | -| main.rs:2427:14:2427:16 | key | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:2427:19:2427:23 | value | | file://:0:0:0:0 | & | -| main.rs:2427:19:2427:23 | value | &T | {EXTERNAL LOCATION} | Box | -| main.rs:2427:19:2427:23 | value | &T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2427:19:2427:23 | value | &T.T | file://:0:0:0:0 | & | -| main.rs:2427:19:2427:23 | value | &T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2427:29:2427:32 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2427:29:2427:32 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2427:29:2427:32 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2427:29:2427:32 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2427:29:2427:32 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2427:29:2427:32 | map1 | V.T | file://:0:0:0:0 | & | -| main.rs:2427:29:2427:32 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2427:29:2427:39 | map1.iter() | | {EXTERNAL LOCATION} | Iter | -| main.rs:2427:29:2427:39 | map1.iter() | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2427:29:2427:39 | map1.iter() | V | {EXTERNAL LOCATION} | Box | -| main.rs:2427:29:2427:39 | map1.iter() | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2427:29:2427:39 | map1.iter() | V.T | file://:0:0:0:0 | & | -| main.rs:2427:29:2427:39 | map1.iter() | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2428:13:2428:24 | TuplePat | | file://:0:0:0:0 | (T_2) | -| main.rs:2428:13:2428:24 | TuplePat | 0(2) | file://:0:0:0:0 | & | -| main.rs:2428:13:2428:24 | TuplePat | 0(2).&T | {EXTERNAL LOCATION} | i32 | -| main.rs:2428:13:2428:24 | TuplePat | 1(2) | file://:0:0:0:0 | & | -| main.rs:2428:13:2428:24 | TuplePat | 1(2).&T | {EXTERNAL LOCATION} | Box | -| main.rs:2428:13:2428:24 | TuplePat | 1(2).&T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2428:13:2428:24 | TuplePat | 1(2).&T.T | file://:0:0:0:0 | & | -| main.rs:2428:13:2428:24 | TuplePat | 1(2).&T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2428:14:2428:16 | key | | file://:0:0:0:0 | & | -| main.rs:2428:14:2428:16 | key | &T | {EXTERNAL LOCATION} | i32 | -| main.rs:2428:19:2428:23 | value | | file://:0:0:0:0 | & | -| main.rs:2428:19:2428:23 | value | &T | {EXTERNAL LOCATION} | Box | -| main.rs:2428:19:2428:23 | value | &T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2428:19:2428:23 | value | &T.T | file://:0:0:0:0 | & | -| main.rs:2428:19:2428:23 | value | &T.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2428:29:2428:33 | &map1 | | file://:0:0:0:0 | & | -| main.rs:2428:29:2428:33 | &map1 | &T | {EXTERNAL LOCATION} | HashMap | -| main.rs:2428:29:2428:33 | &map1 | &T.K | {EXTERNAL LOCATION} | i32 | -| main.rs:2428:29:2428:33 | &map1 | &T.S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2428:29:2428:33 | &map1 | &T.V | {EXTERNAL LOCATION} | Box | -| main.rs:2428:29:2428:33 | &map1 | &T.V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2428:29:2428:33 | &map1 | &T.V.T | file://:0:0:0:0 | & | -| main.rs:2428:29:2428:33 | &map1 | &T.V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2428:30:2428:33 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2428:30:2428:33 | map1 | K | {EXTERNAL LOCATION} | i32 | -| main.rs:2428:30:2428:33 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2428:30:2428:33 | map1 | V | {EXTERNAL LOCATION} | Box | -| main.rs:2428:30:2428:33 | map1 | V.A | {EXTERNAL LOCATION} | Global | -| main.rs:2428:30:2428:33 | map1 | V.T | file://:0:0:0:0 | & | -| main.rs:2428:30:2428:33 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | -| main.rs:2432:17:2432:17 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2432:26:2432:26 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2432:26:2432:26 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2434:23:2434:23 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2434:23:2434:28 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2434:27:2434:28 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2434:27:2434:28 | 10 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2436:13:2436:13 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2436:13:2436:18 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:2436:18:2436:18 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2448:40:2450:9 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:2448:40:2450:9 | { ... } | T | main.rs:2442:5:2442:20 | S1 | -| main.rs:2448:40:2450:9 | { ... } | T.T | main.rs:2447:10:2447:19 | T | -| main.rs:2449:13:2449:16 | None | | {EXTERNAL LOCATION} | Option | -| main.rs:2449:13:2449:16 | None | T | main.rs:2442:5:2442:20 | S1 | -| main.rs:2449:13:2449:16 | None | T.T | main.rs:2447:10:2447:19 | T | -| main.rs:2452:30:2454:9 | { ... } | | main.rs:2442:5:2442:20 | S1 | -| main.rs:2452:30:2454:9 | { ... } | T | main.rs:2447:10:2447:19 | T | -| main.rs:2453:13:2453:28 | S1(...) | | main.rs:2442:5:2442:20 | S1 | -| main.rs:2453:13:2453:28 | S1(...) | T | main.rs:2447:10:2447:19 | T | -| main.rs:2453:16:2453:27 | ...::default(...) | | main.rs:2447:10:2447:19 | T | -| main.rs:2456:19:2456:22 | SelfParam | | main.rs:2442:5:2442:20 | S1 | -| main.rs:2456:19:2456:22 | SelfParam | T | main.rs:2447:10:2447:19 | T | -| main.rs:2456:33:2458:9 | { ... } | | main.rs:2442:5:2442:20 | S1 | -| main.rs:2456:33:2458:9 | { ... } | T | main.rs:2447:10:2447:19 | T | -| main.rs:2457:13:2457:16 | self | | main.rs:2442:5:2442:20 | S1 | -| main.rs:2457:13:2457:16 | self | T | main.rs:2447:10:2447:19 | T | -| main.rs:2469:15:2469:15 | x | | main.rs:2469:12:2469:12 | T | -| main.rs:2469:26:2471:5 | { ... } | | main.rs:2469:12:2469:12 | T | -| main.rs:2470:9:2470:9 | x | | main.rs:2469:12:2469:12 | T | -| main.rs:2474:13:2474:14 | x1 | | {EXTERNAL LOCATION} | Option | -| main.rs:2474:13:2474:14 | x1 | T | main.rs:2442:5:2442:20 | S1 | -| main.rs:2474:13:2474:14 | x1 | T.T | main.rs:2444:5:2445:14 | S2 | -| main.rs:2474:34:2474:48 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2474:34:2474:48 | ...::assoc_fun(...) | T | main.rs:2442:5:2442:20 | S1 | -| main.rs:2474:34:2474:48 | ...::assoc_fun(...) | T.T | main.rs:2444:5:2445:14 | S2 | -| main.rs:2475:13:2475:14 | x2 | | {EXTERNAL LOCATION} | Option | -| main.rs:2475:13:2475:14 | x2 | T | main.rs:2442:5:2442:20 | S1 | -| main.rs:2475:13:2475:14 | x2 | T.T | main.rs:2444:5:2445:14 | S2 | -| main.rs:2475:18:2475:38 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2475:18:2475:38 | ...::assoc_fun(...) | T | main.rs:2442:5:2442:20 | S1 | -| main.rs:2475:18:2475:38 | ...::assoc_fun(...) | T.T | main.rs:2444:5:2445:14 | S2 | -| main.rs:2476:13:2476:14 | x3 | | {EXTERNAL LOCATION} | Option | -| main.rs:2476:13:2476:14 | x3 | T | main.rs:2442:5:2442:20 | S1 | -| main.rs:2476:13:2476:14 | x3 | T.T | main.rs:2444:5:2445:14 | S2 | -| main.rs:2476:18:2476:32 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2476:18:2476:32 | ...::assoc_fun(...) | T | main.rs:2442:5:2442:20 | S1 | -| main.rs:2476:18:2476:32 | ...::assoc_fun(...) | T.T | main.rs:2444:5:2445:14 | S2 | -| main.rs:2477:13:2477:14 | x4 | | main.rs:2442:5:2442:20 | S1 | -| main.rs:2477:13:2477:14 | x4 | T | main.rs:2444:5:2445:14 | S2 | -| main.rs:2477:18:2477:48 | ...::method(...) | | main.rs:2442:5:2442:20 | S1 | -| main.rs:2477:18:2477:48 | ...::method(...) | T | main.rs:2444:5:2445:14 | S2 | -| main.rs:2477:35:2477:47 | ...::default(...) | | main.rs:2442:5:2442:20 | S1 | -| main.rs:2477:35:2477:47 | ...::default(...) | T | main.rs:2444:5:2445:14 | S2 | -| main.rs:2478:13:2478:14 | x5 | | main.rs:2442:5:2442:20 | S1 | -| main.rs:2478:13:2478:14 | x5 | T | main.rs:2444:5:2445:14 | S2 | -| main.rs:2478:18:2478:42 | ...::method(...) | | main.rs:2442:5:2442:20 | S1 | -| main.rs:2478:18:2478:42 | ...::method(...) | T | main.rs:2444:5:2445:14 | S2 | -| main.rs:2478:29:2478:41 | ...::default(...) | | main.rs:2442:5:2442:20 | S1 | -| main.rs:2478:29:2478:41 | ...::default(...) | T | main.rs:2444:5:2445:14 | S2 | -| main.rs:2479:13:2479:14 | x6 | | main.rs:2463:5:2463:27 | S4 | -| main.rs:2479:13:2479:14 | x6 | T4 | main.rs:2444:5:2445:14 | S2 | -| main.rs:2479:18:2479:45 | S4::<...>(...) | | main.rs:2463:5:2463:27 | S4 | -| main.rs:2479:18:2479:45 | S4::<...>(...) | T4 | main.rs:2444:5:2445:14 | S2 | -| main.rs:2479:27:2479:44 | ...::default(...) | | main.rs:2444:5:2445:14 | S2 | -| main.rs:2480:13:2480:14 | x7 | | main.rs:2463:5:2463:27 | S4 | -| main.rs:2480:13:2480:14 | x7 | T4 | main.rs:2444:5:2445:14 | S2 | -| main.rs:2480:18:2480:23 | S4(...) | | main.rs:2463:5:2463:27 | S4 | -| main.rs:2480:18:2480:23 | S4(...) | T4 | main.rs:2444:5:2445:14 | S2 | -| main.rs:2480:21:2480:22 | S2 | | main.rs:2444:5:2445:14 | S2 | -| main.rs:2481:13:2481:14 | x8 | | main.rs:2463:5:2463:27 | S4 | -| main.rs:2481:13:2481:14 | x8 | T4 | {EXTERNAL LOCATION} | i32 | -| main.rs:2481:18:2481:22 | S4(...) | | main.rs:2463:5:2463:27 | S4 | -| main.rs:2481:18:2481:22 | S4(...) | T4 | {EXTERNAL LOCATION} | i32 | -| main.rs:2481:21:2481:21 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2482:13:2482:14 | x9 | | main.rs:2463:5:2463:27 | S4 | -| main.rs:2482:13:2482:14 | x9 | T4 | main.rs:2444:5:2445:14 | S2 | -| main.rs:2482:18:2482:34 | S4(...) | | main.rs:2463:5:2463:27 | S4 | -| main.rs:2482:18:2482:34 | S4(...) | T4 | main.rs:2444:5:2445:14 | S2 | -| main.rs:2482:21:2482:33 | ...::default(...) | | main.rs:2444:5:2445:14 | S2 | -| main.rs:2483:13:2483:15 | x10 | | main.rs:2465:5:2467:5 | S5 | -| main.rs:2483:13:2483:15 | x10 | T5 | main.rs:2444:5:2445:14 | S2 | -| main.rs:2483:19:2486:9 | S5::<...> {...} | | main.rs:2465:5:2467:5 | S5 | -| main.rs:2483:19:2486:9 | S5::<...> {...} | T5 | main.rs:2444:5:2445:14 | S2 | -| main.rs:2485:20:2485:37 | ...::default(...) | | main.rs:2444:5:2445:14 | S2 | -| main.rs:2487:13:2487:15 | x11 | | main.rs:2465:5:2467:5 | S5 | -| main.rs:2487:13:2487:15 | x11 | T5 | main.rs:2444:5:2445:14 | S2 | -| main.rs:2487:19:2487:34 | S5 {...} | | main.rs:2465:5:2467:5 | S5 | -| main.rs:2487:19:2487:34 | S5 {...} | T5 | main.rs:2444:5:2445:14 | S2 | -| main.rs:2487:31:2487:32 | S2 | | main.rs:2444:5:2445:14 | S2 | -| main.rs:2488:13:2488:15 | x12 | | main.rs:2465:5:2467:5 | S5 | -| main.rs:2488:13:2488:15 | x12 | T5 | {EXTERNAL LOCATION} | i32 | -| main.rs:2488:19:2488:33 | S5 {...} | | main.rs:2465:5:2467:5 | S5 | -| main.rs:2488:19:2488:33 | S5 {...} | T5 | {EXTERNAL LOCATION} | i32 | -| main.rs:2488:31:2488:31 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2489:13:2489:15 | x13 | | main.rs:2465:5:2467:5 | S5 | -| main.rs:2489:13:2489:15 | x13 | T5 | main.rs:2444:5:2445:14 | S2 | -| main.rs:2489:19:2492:9 | S5 {...} | | main.rs:2465:5:2467:5 | S5 | -| main.rs:2489:19:2492:9 | S5 {...} | T5 | main.rs:2444:5:2445:14 | S2 | -| main.rs:2491:20:2491:32 | ...::default(...) | | main.rs:2444:5:2445:14 | S2 | -| main.rs:2493:13:2493:15 | x14 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2493:19:2493:48 | foo::<...>(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:2493:30:2493:47 | ...::default(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:2502:35:2504:9 | { ... } | | file://:0:0:0:0 | (T_2) | -| main.rs:2502:35:2504:9 | { ... } | 0(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2502:35:2504:9 | { ... } | 1(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2503:13:2503:26 | TupleExpr | | file://:0:0:0:0 | (T_2) | -| main.rs:2503:13:2503:26 | TupleExpr | 0(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2503:13:2503:26 | TupleExpr | 1(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2503:14:2503:18 | S1 {...} | | main.rs:2498:5:2499:16 | S1 | -| main.rs:2503:21:2503:25 | S1 {...} | | main.rs:2498:5:2499:16 | S1 | -| main.rs:2505:16:2505:19 | SelfParam | | main.rs:2498:5:2499:16 | S1 | -| main.rs:2509:13:2509:13 | a | | file://:0:0:0:0 | (T_2) | -| main.rs:2509:13:2509:13 | a | 0(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2509:13:2509:13 | a | 1(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2509:17:2509:30 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | -| main.rs:2509:17:2509:30 | ...::get_pair(...) | 0(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2509:17:2509:30 | ...::get_pair(...) | 1(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2510:17:2510:17 | b | | file://:0:0:0:0 | (T_2) | -| main.rs:2510:17:2510:17 | b | 0(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2510:17:2510:17 | b | 1(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2510:21:2510:34 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | -| main.rs:2510:21:2510:34 | ...::get_pair(...) | 0(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2510:21:2510:34 | ...::get_pair(...) | 1(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2511:13:2511:18 | TuplePat | | file://:0:0:0:0 | (T_2) | -| main.rs:2511:13:2511:18 | TuplePat | 0(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2511:13:2511:18 | TuplePat | 1(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2511:14:2511:14 | c | | main.rs:2498:5:2499:16 | S1 | -| main.rs:2511:17:2511:17 | d | | main.rs:2498:5:2499:16 | S1 | -| main.rs:2511:22:2511:35 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | -| main.rs:2511:22:2511:35 | ...::get_pair(...) | 0(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2511:22:2511:35 | ...::get_pair(...) | 1(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2512:13:2512:22 | TuplePat | | file://:0:0:0:0 | (T_2) | -| main.rs:2512:13:2512:22 | TuplePat | 0(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2512:13:2512:22 | TuplePat | 1(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2512:18:2512:18 | e | | main.rs:2498:5:2499:16 | S1 | -| main.rs:2512:21:2512:21 | f | | main.rs:2498:5:2499:16 | S1 | -| main.rs:2512:26:2512:39 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | -| main.rs:2512:26:2512:39 | ...::get_pair(...) | 0(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2512:26:2512:39 | ...::get_pair(...) | 1(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2513:13:2513:26 | TuplePat | | file://:0:0:0:0 | (T_2) | -| main.rs:2513:13:2513:26 | TuplePat | 0(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2513:13:2513:26 | TuplePat | 1(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2513:18:2513:18 | g | | main.rs:2498:5:2499:16 | S1 | -| main.rs:2513:25:2513:25 | h | | main.rs:2498:5:2499:16 | S1 | -| main.rs:2513:30:2513:43 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | -| main.rs:2513:30:2513:43 | ...::get_pair(...) | 0(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2513:30:2513:43 | ...::get_pair(...) | 1(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2515:9:2515:9 | a | | file://:0:0:0:0 | (T_2) | -| main.rs:2515:9:2515:9 | a | 0(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2515:9:2515:9 | a | 1(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2515:9:2515:11 | a.0 | | main.rs:2498:5:2499:16 | S1 | -| main.rs:2516:9:2516:9 | b | | file://:0:0:0:0 | (T_2) | -| main.rs:2516:9:2516:9 | b | 0(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2516:9:2516:9 | b | 1(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2516:9:2516:11 | b.1 | | main.rs:2498:5:2499:16 | S1 | -| main.rs:2517:9:2517:9 | c | | main.rs:2498:5:2499:16 | S1 | -| main.rs:2518:9:2518:9 | d | | main.rs:2498:5:2499:16 | S1 | -| main.rs:2519:9:2519:9 | e | | main.rs:2498:5:2499:16 | S1 | -| main.rs:2520:9:2520:9 | f | | main.rs:2498:5:2499:16 | S1 | -| main.rs:2521:9:2521:9 | g | | main.rs:2498:5:2499:16 | S1 | -| main.rs:2522:9:2522:9 | h | | main.rs:2498:5:2499:16 | S1 | -| main.rs:2527:13:2527:13 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2527:17:2527:34 | ...::default(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:2528:13:2528:13 | b | | {EXTERNAL LOCATION} | bool | -| main.rs:2528:17:2528:34 | ...::default(...) | | {EXTERNAL LOCATION} | bool | -| main.rs:2529:13:2529:16 | pair | | file://:0:0:0:0 | (T_2) | -| main.rs:2529:13:2529:16 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | -| main.rs:2529:13:2529:16 | pair | 1(2) | {EXTERNAL LOCATION} | bool | -| main.rs:2529:20:2529:25 | TupleExpr | | file://:0:0:0:0 | (T_2) | -| main.rs:2529:20:2529:25 | TupleExpr | 0(2) | {EXTERNAL LOCATION} | i64 | -| main.rs:2529:20:2529:25 | TupleExpr | 1(2) | {EXTERNAL LOCATION} | bool | -| main.rs:2529:21:2529:21 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2529:24:2529:24 | b | | {EXTERNAL LOCATION} | bool | -| main.rs:2530:13:2530:13 | i | | {EXTERNAL LOCATION} | i64 | -| main.rs:2530:22:2530:25 | pair | | file://:0:0:0:0 | (T_2) | -| main.rs:2530:22:2530:25 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | -| main.rs:2530:22:2530:25 | pair | 1(2) | {EXTERNAL LOCATION} | bool | -| main.rs:2530:22:2530:27 | pair.0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2531:13:2531:13 | j | | {EXTERNAL LOCATION} | bool | -| main.rs:2531:23:2531:26 | pair | | file://:0:0:0:0 | (T_2) | -| main.rs:2531:23:2531:26 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | -| main.rs:2531:23:2531:26 | pair | 1(2) | {EXTERNAL LOCATION} | bool | -| main.rs:2531:23:2531:28 | pair.1 | | {EXTERNAL LOCATION} | bool | -| main.rs:2533:13:2533:16 | pair | | file://:0:0:0:0 | (T_2) | -| main.rs:2533:13:2533:16 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2533:13:2533:16 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2533:20:2533:25 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2533:20:2533:25 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2533:20:2533:32 | ... .into() | | file://:0:0:0:0 | (T_2) | -| main.rs:2533:20:2533:32 | ... .into() | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2533:20:2533:32 | ... .into() | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2533:21:2533:21 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2533:24:2533:24 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2534:15:2534:18 | pair | | file://:0:0:0:0 | (T_2) | -| main.rs:2534:15:2534:18 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2534:15:2534:18 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2535:13:2535:18 | TuplePat | | file://:0:0:0:0 | (T_2) | -| main.rs:2535:13:2535:18 | TuplePat | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2535:13:2535:18 | TuplePat | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2535:14:2535:14 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2535:17:2535:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2535:30:2535:41 | "unexpected" | | file://:0:0:0:0 | & | -| main.rs:2535:30:2535:41 | "unexpected" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2535:30:2535:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2535:30:2535:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2536:13:2536:13 | _ | | file://:0:0:0:0 | (T_2) | -| main.rs:2536:13:2536:13 | _ | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2536:13:2536:13 | _ | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2536:25:2536:34 | "expected" | | file://:0:0:0:0 | & | -| main.rs:2536:25:2536:34 | "expected" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2536:25:2536:34 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2536:25:2536:34 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2538:13:2538:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2538:17:2538:20 | pair | | file://:0:0:0:0 | (T_2) | -| main.rs:2538:17:2538:20 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2538:17:2538:20 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | -| main.rs:2538:17:2538:22 | pair.0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2540:13:2540:13 | y | | file://:0:0:0:0 | & | -| main.rs:2540:13:2540:13 | y | &T | file://:0:0:0:0 | (T_2) | -| main.rs:2540:13:2540:13 | y | &T.0(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2540:13:2540:13 | y | &T.1(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2540:17:2540:31 | &... | | file://:0:0:0:0 | & | -| main.rs:2540:17:2540:31 | &... | &T | file://:0:0:0:0 | (T_2) | -| main.rs:2540:17:2540:31 | &... | &T.0(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2540:17:2540:31 | &... | &T.1(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2540:18:2540:31 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | -| main.rs:2540:18:2540:31 | ...::get_pair(...) | 0(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2540:18:2540:31 | ...::get_pair(...) | 1(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2541:9:2541:9 | y | | file://:0:0:0:0 | & | -| main.rs:2541:9:2541:9 | y | &T | file://:0:0:0:0 | (T_2) | -| main.rs:2541:9:2541:9 | y | &T.0(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2541:9:2541:9 | y | &T.1(2) | main.rs:2498:5:2499:16 | S1 | -| main.rs:2541:9:2541:11 | y.0 | | main.rs:2498:5:2499:16 | S1 | -| main.rs:2548:13:2548:23 | boxed_value | | {EXTERNAL LOCATION} | Box | -| main.rs:2548:13:2548:23 | boxed_value | A | {EXTERNAL LOCATION} | Global | -| main.rs:2548:13:2548:23 | boxed_value | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2548:27:2548:42 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2548:27:2548:42 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2548:27:2548:42 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2548:36:2548:41 | 100i32 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2551:15:2551:25 | boxed_value | | {EXTERNAL LOCATION} | Box | -| main.rs:2551:15:2551:25 | boxed_value | A | {EXTERNAL LOCATION} | Global | -| main.rs:2551:15:2551:25 | boxed_value | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2552:13:2552:19 | box 100 | | {EXTERNAL LOCATION} | Box | -| main.rs:2552:13:2552:19 | box 100 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2552:13:2552:19 | box 100 | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2552:17:2552:19 | 100 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2553:26:2553:36 | "Boxed 100\\n" | | file://:0:0:0:0 | & | -| main.rs:2553:26:2553:36 | "Boxed 100\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2553:26:2553:36 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2553:26:2553:36 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2555:13:2555:17 | box ... | | {EXTERNAL LOCATION} | Box | -| main.rs:2555:13:2555:17 | box ... | A | {EXTERNAL LOCATION} | Global | -| main.rs:2555:13:2555:17 | box ... | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2557:26:2557:42 | "Boxed value: {}\\n" | | file://:0:0:0:0 | & | -| main.rs:2557:26:2557:42 | "Boxed value: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2557:26:2557:51 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2557:26:2557:51 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2562:13:2562:22 | nested_box | | {EXTERNAL LOCATION} | Box | -| main.rs:2562:13:2562:22 | nested_box | A | {EXTERNAL LOCATION} | Global | -| main.rs:2562:13:2562:22 | nested_box | T | {EXTERNAL LOCATION} | Box | -| main.rs:2562:13:2562:22 | nested_box | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2562:13:2562:22 | nested_box | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2562:26:2562:50 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2562:26:2562:50 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2562:26:2562:50 | ...::new(...) | T | {EXTERNAL LOCATION} | Box | -| main.rs:2562:26:2562:50 | ...::new(...) | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2562:26:2562:50 | ...::new(...) | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2562:35:2562:49 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2562:35:2562:49 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2562:35:2562:49 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2562:44:2562:48 | 42i32 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2563:15:2563:24 | nested_box | | {EXTERNAL LOCATION} | Box | -| main.rs:2563:15:2563:24 | nested_box | A | {EXTERNAL LOCATION} | Global | -| main.rs:2563:15:2563:24 | nested_box | T | {EXTERNAL LOCATION} | Box | -| main.rs:2563:15:2563:24 | nested_box | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2563:15:2563:24 | nested_box | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2564:13:2564:21 | box ... | | {EXTERNAL LOCATION} | Box | -| main.rs:2564:13:2564:21 | box ... | A | {EXTERNAL LOCATION} | Global | -| main.rs:2564:13:2564:21 | box ... | T | {EXTERNAL LOCATION} | Box | -| main.rs:2564:13:2564:21 | box ... | T.A | {EXTERNAL LOCATION} | Global | -| main.rs:2564:13:2564:21 | box ... | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2566:26:2566:43 | "Nested boxed: {}\\n" | | file://:0:0:0:0 | & | -| main.rs:2566:26:2566:43 | "Nested boxed: {}\\n" | &T | {EXTERNAL LOCATION} | str | -| main.rs:2566:26:2566:59 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2566:26:2566:59 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | -| main.rs:2578:36:2580:9 | { ... } | | main.rs:2575:5:2575:22 | Path | -| main.rs:2579:13:2579:19 | Path {...} | | main.rs:2575:5:2575:22 | Path | -| main.rs:2582:29:2582:33 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2582:29:2582:33 | SelfParam | &T | main.rs:2575:5:2575:22 | Path | -| main.rs:2582:59:2584:9 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:2582:59:2584:9 | { ... } | E | file://:0:0:0:0 | () | -| main.rs:2582:59:2584:9 | { ... } | T | main.rs:2587:5:2587:25 | PathBuf | -| main.rs:2583:13:2583:30 | Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:2583:13:2583:30 | Ok(...) | E | file://:0:0:0:0 | () | -| main.rs:2583:13:2583:30 | Ok(...) | T | main.rs:2587:5:2587:25 | PathBuf | -| main.rs:2583:16:2583:29 | ...::new(...) | | main.rs:2587:5:2587:25 | PathBuf | -| main.rs:2590:39:2592:9 | { ... } | | main.rs:2587:5:2587:25 | PathBuf | -| main.rs:2591:13:2591:22 | PathBuf {...} | | main.rs:2587:5:2587:25 | PathBuf | -| main.rs:2600:18:2600:22 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2600:18:2600:22 | SelfParam | &T | main.rs:2587:5:2587:25 | PathBuf | -| main.rs:2600:34:2604:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:2600:34:2604:9 | { ... } | &T | main.rs:2575:5:2575:22 | Path | -| main.rs:2602:33:2602:43 | ...::new(...) | | main.rs:2575:5:2575:22 | Path | -| main.rs:2603:13:2603:17 | &path | | file://:0:0:0:0 | & | -| main.rs:2603:13:2603:17 | &path | &T | main.rs:2575:5:2575:22 | Path | -| main.rs:2603:14:2603:17 | path | | main.rs:2575:5:2575:22 | Path | -| main.rs:2608:13:2608:17 | path1 | | main.rs:2575:5:2575:22 | Path | -| main.rs:2608:21:2608:31 | ...::new(...) | | main.rs:2575:5:2575:22 | Path | -| main.rs:2609:13:2609:17 | path2 | | {EXTERNAL LOCATION} | Result | -| main.rs:2609:13:2609:17 | path2 | E | file://:0:0:0:0 | () | -| main.rs:2609:13:2609:17 | path2 | T | main.rs:2587:5:2587:25 | PathBuf | -| main.rs:2609:21:2609:25 | path1 | | main.rs:2575:5:2575:22 | Path | -| main.rs:2609:21:2609:40 | path1.canonicalize() | | {EXTERNAL LOCATION} | Result | -| main.rs:2609:21:2609:40 | path1.canonicalize() | E | file://:0:0:0:0 | () | -| main.rs:2609:21:2609:40 | path1.canonicalize() | T | main.rs:2587:5:2587:25 | PathBuf | -| main.rs:2610:13:2610:17 | path3 | | main.rs:2587:5:2587:25 | PathBuf | -| main.rs:2610:21:2610:25 | path2 | | {EXTERNAL LOCATION} | Result | -| main.rs:2610:21:2610:25 | path2 | E | file://:0:0:0:0 | () | -| main.rs:2610:21:2610:25 | path2 | T | main.rs:2587:5:2587:25 | PathBuf | -| main.rs:2610:21:2610:34 | path2.unwrap() | | main.rs:2587:5:2587:25 | PathBuf | -| main.rs:2612:13:2612:20 | pathbuf1 | | main.rs:2587:5:2587:25 | PathBuf | -| main.rs:2612:24:2612:37 | ...::new(...) | | main.rs:2587:5:2587:25 | PathBuf | -| main.rs:2613:24:2613:31 | pathbuf1 | | main.rs:2587:5:2587:25 | PathBuf | -| main.rs:2625:5:2625:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2626:5:2626:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2626:20:2626:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2626:41:2626:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2642:5:2642:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1815:13:1815:16 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1815:13:1815:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1815:13:1815:26 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:1815:24:1815:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1821:16:1821:19 | SelfParam | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1821:22:1821:24 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1821:40:1826:9 | { ... } | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1822:13:1825:13 | Vec2 {...} | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1823:20:1823:23 | self | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1823:20:1823:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1823:20:1823:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1823:30:1823:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1824:20:1824:23 | self | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1824:20:1824:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1824:20:1824:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1824:30:1824:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1830:23:1830:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1830:23:1830:31 | SelfParam | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1830:34:1830:36 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1831:13:1831:16 | self | | file://:0:0:0:0 | & | +| main.rs:1831:13:1831:16 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1831:13:1831:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1831:13:1831:26 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:1831:24:1831:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1832:13:1832:16 | self | | file://:0:0:0:0 | & | +| main.rs:1832:13:1832:16 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1832:13:1832:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1832:13:1832:26 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:1832:24:1832:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1838:16:1838:19 | SelfParam | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1838:30:1843:9 | { ... } | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1839:13:1842:13 | Vec2 {...} | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1840:20:1840:26 | - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1840:21:1840:24 | self | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1840:21:1840:26 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1841:20:1841:26 | - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1841:21:1841:24 | self | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1841:21:1841:26 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1848:16:1848:19 | SelfParam | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1848:30:1853:9 | { ... } | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1849:13:1852:13 | Vec2 {...} | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1850:20:1850:26 | ! ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1850:21:1850:24 | self | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1850:21:1850:26 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1851:20:1851:26 | ! ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1851:21:1851:24 | self | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1851:21:1851:26 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1857:15:1857:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1857:15:1857:19 | SelfParam | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1857:22:1857:26 | other | | file://:0:0:0:0 | & | +| main.rs:1857:22:1857:26 | other | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1857:44:1859:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1858:13:1858:16 | self | | file://:0:0:0:0 | & | +| main.rs:1858:13:1858:16 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1858:13:1858:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1858:13:1858:29 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1858:13:1858:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1858:23:1858:27 | other | | file://:0:0:0:0 | & | +| main.rs:1858:23:1858:27 | other | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1858:23:1858:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1858:34:1858:37 | self | | file://:0:0:0:0 | & | +| main.rs:1858:34:1858:37 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1858:34:1858:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1858:34:1858:50 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1858:44:1858:48 | other | | file://:0:0:0:0 | & | +| main.rs:1858:44:1858:48 | other | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1858:44:1858:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1861:15:1861:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1861:15:1861:19 | SelfParam | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1861:22:1861:26 | other | | file://:0:0:0:0 | & | +| main.rs:1861:22:1861:26 | other | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1861:44:1863:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1862:13:1862:16 | self | | file://:0:0:0:0 | & | +| main.rs:1862:13:1862:16 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1862:13:1862:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1862:13:1862:29 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1862:13:1862:50 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1862:23:1862:27 | other | | file://:0:0:0:0 | & | +| main.rs:1862:23:1862:27 | other | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1862:23:1862:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1862:34:1862:37 | self | | file://:0:0:0:0 | & | +| main.rs:1862:34:1862:37 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1862:34:1862:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1862:34:1862:50 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1862:44:1862:48 | other | | file://:0:0:0:0 | & | +| main.rs:1862:44:1862:48 | other | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1862:44:1862:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1867:24:1867:28 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1867:24:1867:28 | SelfParam | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1867:31:1867:35 | other | | file://:0:0:0:0 | & | +| main.rs:1867:31:1867:35 | other | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1867:75:1869:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| main.rs:1867:75:1869:9 | { ... } | T | {EXTERNAL LOCATION} | Ordering | +| main.rs:1868:13:1868:29 | (...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:1868:13:1868:63 | ... .partial_cmp(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:1868:13:1868:63 | ... .partial_cmp(...) | T | {EXTERNAL LOCATION} | Ordering | +| main.rs:1868:14:1868:17 | self | | file://:0:0:0:0 | & | +| main.rs:1868:14:1868:17 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1868:14:1868:19 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1868:14:1868:28 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1868:23:1868:26 | self | | file://:0:0:0:0 | & | +| main.rs:1868:23:1868:26 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1868:23:1868:28 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1868:43:1868:62 | &... | | file://:0:0:0:0 | & | +| main.rs:1868:43:1868:62 | &... | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:1868:44:1868:62 | (...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:1868:45:1868:49 | other | | file://:0:0:0:0 | & | +| main.rs:1868:45:1868:49 | other | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1868:45:1868:51 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1868:45:1868:61 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1868:55:1868:59 | other | | file://:0:0:0:0 | & | +| main.rs:1868:55:1868:59 | other | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1868:55:1868:61 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1871:15:1871:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1871:15:1871:19 | SelfParam | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1871:22:1871:26 | other | | file://:0:0:0:0 | & | +| main.rs:1871:22:1871:26 | other | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1871:44:1873:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1872:13:1872:16 | self | | file://:0:0:0:0 | & | +| main.rs:1872:13:1872:16 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1872:13:1872:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1872:13:1872:28 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1872:13:1872:48 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1872:22:1872:26 | other | | file://:0:0:0:0 | & | +| main.rs:1872:22:1872:26 | other | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1872:22:1872:28 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1872:33:1872:36 | self | | file://:0:0:0:0 | & | +| main.rs:1872:33:1872:36 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1872:33:1872:38 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1872:33:1872:48 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1872:42:1872:46 | other | | file://:0:0:0:0 | & | +| main.rs:1872:42:1872:46 | other | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1872:42:1872:48 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1875:15:1875:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1875:15:1875:19 | SelfParam | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1875:22:1875:26 | other | | file://:0:0:0:0 | & | +| main.rs:1875:22:1875:26 | other | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1875:44:1877:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1876:13:1876:16 | self | | file://:0:0:0:0 | & | +| main.rs:1876:13:1876:16 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1876:13:1876:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1876:13:1876:29 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1876:13:1876:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1876:23:1876:27 | other | | file://:0:0:0:0 | & | +| main.rs:1876:23:1876:27 | other | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1876:23:1876:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1876:34:1876:37 | self | | file://:0:0:0:0 | & | +| main.rs:1876:34:1876:37 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1876:34:1876:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1876:34:1876:50 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1876:44:1876:48 | other | | file://:0:0:0:0 | & | +| main.rs:1876:44:1876:48 | other | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1876:44:1876:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1879:15:1879:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1879:15:1879:19 | SelfParam | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1879:22:1879:26 | other | | file://:0:0:0:0 | & | +| main.rs:1879:22:1879:26 | other | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1879:44:1881:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1880:13:1880:16 | self | | file://:0:0:0:0 | & | +| main.rs:1880:13:1880:16 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1880:13:1880:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1880:13:1880:28 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1880:13:1880:48 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1880:22:1880:26 | other | | file://:0:0:0:0 | & | +| main.rs:1880:22:1880:26 | other | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1880:22:1880:28 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1880:33:1880:36 | self | | file://:0:0:0:0 | & | +| main.rs:1880:33:1880:36 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1880:33:1880:38 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1880:33:1880:48 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1880:42:1880:46 | other | | file://:0:0:0:0 | & | +| main.rs:1880:42:1880:46 | other | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1880:42:1880:48 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1883:15:1883:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1883:15:1883:19 | SelfParam | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1883:22:1883:26 | other | | file://:0:0:0:0 | & | +| main.rs:1883:22:1883:26 | other | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1883:44:1885:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1884:13:1884:16 | self | | file://:0:0:0:0 | & | +| main.rs:1884:13:1884:16 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1884:13:1884:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1884:13:1884:29 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1884:13:1884:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1884:23:1884:27 | other | | file://:0:0:0:0 | & | +| main.rs:1884:23:1884:27 | other | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1884:23:1884:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1884:34:1884:37 | self | | file://:0:0:0:0 | & | +| main.rs:1884:34:1884:37 | self | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1884:34:1884:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1884:34:1884:50 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1884:44:1884:48 | other | | file://:0:0:0:0 | & | +| main.rs:1884:44:1884:48 | other | &T | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1884:44:1884:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1888:26:1888:26 | a | | main.rs:1888:18:1888:23 | T | +| main.rs:1888:32:1888:32 | b | | main.rs:1888:18:1888:23 | T | +| main.rs:1888:51:1890:5 | { ... } | | {EXTERNAL LOCATION} | Output | +| main.rs:1889:9:1889:9 | a | | main.rs:1888:18:1888:23 | T | +| main.rs:1889:9:1889:13 | ... + ... | | {EXTERNAL LOCATION} | Output | +| main.rs:1889:13:1889:13 | b | | main.rs:1888:18:1888:23 | T | +| main.rs:1896:13:1896:18 | i64_eq | | {EXTERNAL LOCATION} | bool | +| main.rs:1896:22:1896:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1896:23:1896:26 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1896:23:1896:34 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1896:31:1896:34 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1897:13:1897:18 | i64_ne | | {EXTERNAL LOCATION} | bool | +| main.rs:1897:22:1897:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1897:23:1897:26 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1897:23:1897:34 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1897:31:1897:34 | 4i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1898:13:1898:18 | i64_lt | | {EXTERNAL LOCATION} | bool | +| main.rs:1898:22:1898:34 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1898:23:1898:26 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1898:23:1898:33 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1898:30:1898:33 | 6i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1899:13:1899:18 | i64_le | | {EXTERNAL LOCATION} | bool | +| main.rs:1899:22:1899:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1899:23:1899:26 | 7i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1899:23:1899:34 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1899:31:1899:34 | 8i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1900:13:1900:18 | i64_gt | | {EXTERNAL LOCATION} | bool | +| main.rs:1900:22:1900:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1900:23:1900:26 | 9i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1900:23:1900:34 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1900:30:1900:34 | 10i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1901:13:1901:18 | i64_ge | | {EXTERNAL LOCATION} | bool | +| main.rs:1901:22:1901:37 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1901:23:1901:27 | 11i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1901:23:1901:36 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1901:32:1901:36 | 12i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1904:13:1904:19 | i64_add | | {EXTERNAL LOCATION} | i64 | +| main.rs:1904:23:1904:27 | 13i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1904:23:1904:35 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1904:31:1904:35 | 14i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1905:13:1905:19 | i64_sub | | {EXTERNAL LOCATION} | i64 | +| main.rs:1905:23:1905:27 | 15i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1905:23:1905:35 | ... - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1905:31:1905:35 | 16i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1906:13:1906:19 | i64_mul | | {EXTERNAL LOCATION} | i64 | +| main.rs:1906:23:1906:27 | 17i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1906:23:1906:35 | ... * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1906:31:1906:35 | 18i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1907:13:1907:19 | i64_div | | {EXTERNAL LOCATION} | i64 | +| main.rs:1907:23:1907:27 | 19i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1907:23:1907:35 | ... / ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1907:31:1907:35 | 20i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1908:13:1908:19 | i64_rem | | {EXTERNAL LOCATION} | i64 | +| main.rs:1908:23:1908:27 | 21i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1908:23:1908:35 | ... % ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1908:31:1908:35 | 22i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1909:39:1909:42 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1909:45:1909:48 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1912:17:1912:30 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1912:34:1912:38 | 23i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1913:9:1913:22 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1913:9:1913:31 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:1913:27:1913:31 | 24i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1915:17:1915:30 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1915:34:1915:38 | 25i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1916:9:1916:22 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1916:9:1916:31 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:1916:27:1916:31 | 26i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1918:17:1918:30 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1918:34:1918:38 | 27i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1919:9:1919:22 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1919:9:1919:31 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:1919:27:1919:31 | 28i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1921:17:1921:30 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1921:34:1921:38 | 29i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1922:9:1922:22 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1922:9:1922:31 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:1922:27:1922:31 | 30i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1924:17:1924:30 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1924:34:1924:38 | 31i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1925:9:1925:22 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1925:9:1925:31 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:1925:27:1925:31 | 32i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1928:13:1928:22 | i64_bitand | | {EXTERNAL LOCATION} | i64 | +| main.rs:1928:26:1928:30 | 33i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1928:26:1928:38 | ... & ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1928:34:1928:38 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1929:13:1929:21 | i64_bitor | | {EXTERNAL LOCATION} | NonZero | +| main.rs:1929:13:1929:21 | i64_bitor | | {EXTERNAL LOCATION} | i64 | +| main.rs:1929:13:1929:21 | i64_bitor | T | {EXTERNAL LOCATION} | i64 | +| main.rs:1929:25:1929:29 | 35i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1929:25:1929:37 | ... \| ... | | {EXTERNAL LOCATION} | NonZero | +| main.rs:1929:25:1929:37 | ... \| ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1929:25:1929:37 | ... \| ... | T | {EXTERNAL LOCATION} | i64 | +| main.rs:1929:33:1929:37 | 36i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1930:13:1930:22 | i64_bitxor | | {EXTERNAL LOCATION} | i64 | +| main.rs:1930:26:1930:30 | 37i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1930:26:1930:38 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1930:34:1930:38 | 38i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1931:13:1931:19 | i64_shl | | {EXTERNAL LOCATION} | i64 | +| main.rs:1931:23:1931:27 | 39i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1931:23:1931:36 | ... << ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1931:32:1931:36 | 40i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1932:13:1932:19 | i64_shr | | {EXTERNAL LOCATION} | i64 | +| main.rs:1932:23:1932:27 | 41i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1932:23:1932:36 | ... >> ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1932:32:1932:36 | 42i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1935:17:1935:33 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1935:37:1935:41 | 43i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1936:9:1936:25 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1936:9:1936:34 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:1936:30:1936:34 | 44i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1938:17:1938:32 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1938:36:1938:40 | 45i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1939:9:1939:24 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1939:9:1939:33 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:1939:29:1939:33 | 46i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1941:17:1941:33 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1941:37:1941:41 | 47i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1942:9:1942:25 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1942:9:1942:34 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:1942:30:1942:34 | 48i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1944:17:1944:30 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1944:34:1944:38 | 49i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1945:9:1945:22 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1945:9:1945:32 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:1945:28:1945:32 | 50i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1947:17:1947:30 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1947:34:1947:38 | 51i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1948:9:1948:22 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1948:9:1948:32 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:1948:28:1948:32 | 52i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1950:13:1950:19 | i64_neg | | {EXTERNAL LOCATION} | i64 | +| main.rs:1950:23:1950:28 | - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1950:24:1950:28 | 53i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1951:13:1951:19 | i64_not | | {EXTERNAL LOCATION} | i64 | +| main.rs:1951:23:1951:28 | ! ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1951:24:1951:28 | 54i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1954:13:1954:14 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1954:18:1954:36 | Vec2 {...} | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1954:28:1954:28 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1954:28:1954:28 | 1 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1954:34:1954:34 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1954:34:1954:34 | 2 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1955:13:1955:14 | v2 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1955:18:1955:36 | Vec2 {...} | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1955:28:1955:28 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1955:28:1955:28 | 3 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1955:34:1955:34 | 4 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1955:34:1955:34 | 4 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1958:13:1958:19 | vec2_eq | | {EXTERNAL LOCATION} | bool | +| main.rs:1958:23:1958:24 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1958:23:1958:30 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1958:29:1958:30 | v2 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1959:13:1959:19 | vec2_ne | | {EXTERNAL LOCATION} | bool | +| main.rs:1959:23:1959:24 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1959:23:1959:30 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1959:29:1959:30 | v2 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1960:13:1960:19 | vec2_lt | | {EXTERNAL LOCATION} | bool | +| main.rs:1960:23:1960:24 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1960:23:1960:29 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1960:28:1960:29 | v2 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1961:13:1961:19 | vec2_le | | {EXTERNAL LOCATION} | bool | +| main.rs:1961:23:1961:24 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1961:23:1961:30 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1961:29:1961:30 | v2 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1962:13:1962:19 | vec2_gt | | {EXTERNAL LOCATION} | bool | +| main.rs:1962:23:1962:24 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1962:23:1962:29 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1962:28:1962:29 | v2 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1963:13:1963:19 | vec2_ge | | {EXTERNAL LOCATION} | bool | +| main.rs:1963:23:1963:24 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1963:23:1963:30 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1963:29:1963:30 | v2 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1966:13:1966:20 | vec2_add | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1966:24:1966:25 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1966:24:1966:30 | ... + ... | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1966:29:1966:30 | v2 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1967:13:1967:20 | vec2_sub | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1967:24:1967:25 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1967:24:1967:30 | ... - ... | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1967:29:1967:30 | v2 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1968:13:1968:20 | vec2_mul | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1968:24:1968:25 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1968:24:1968:30 | ... * ... | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1968:29:1968:30 | v2 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1969:13:1969:20 | vec2_div | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1969:24:1969:25 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1969:24:1969:30 | ... / ... | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1969:29:1969:30 | v2 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1970:13:1970:20 | vec2_rem | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1970:24:1970:25 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1970:24:1970:30 | ... % ... | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1970:29:1970:30 | v2 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1973:17:1973:31 | vec2_add_assign | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1973:35:1973:36 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1974:9:1974:23 | vec2_add_assign | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1974:9:1974:29 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:1974:28:1974:29 | v2 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1976:17:1976:31 | vec2_sub_assign | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1976:35:1976:36 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1977:9:1977:23 | vec2_sub_assign | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1977:9:1977:29 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:1977:28:1977:29 | v2 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1979:17:1979:31 | vec2_mul_assign | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1979:35:1979:36 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1980:9:1980:23 | vec2_mul_assign | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1980:9:1980:29 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:1980:28:1980:29 | v2 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1982:17:1982:31 | vec2_div_assign | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1982:35:1982:36 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1983:9:1983:23 | vec2_div_assign | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1983:9:1983:29 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:1983:28:1983:29 | v2 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1985:17:1985:31 | vec2_rem_assign | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1985:35:1985:36 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1986:9:1986:23 | vec2_rem_assign | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1986:9:1986:29 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:1986:28:1986:29 | v2 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1989:13:1989:23 | vec2_bitand | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1989:27:1989:28 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1989:27:1989:33 | ... & ... | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1989:32:1989:33 | v2 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1990:13:1990:22 | vec2_bitor | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1990:26:1990:27 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1990:26:1990:32 | ... \| ... | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1990:31:1990:32 | v2 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1991:13:1991:23 | vec2_bitxor | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1991:27:1991:28 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1991:27:1991:33 | ... ^ ... | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1991:32:1991:33 | v2 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1992:13:1992:20 | vec2_shl | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1992:24:1992:25 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1992:24:1992:33 | ... << ... | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1992:30:1992:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1993:13:1993:20 | vec2_shr | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1993:24:1993:25 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1993:24:1993:33 | ... >> ... | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1993:30:1993:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1996:17:1996:34 | vec2_bitand_assign | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1996:38:1996:39 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1997:9:1997:26 | vec2_bitand_assign | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1997:9:1997:32 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:1997:31:1997:32 | v2 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1999:17:1999:33 | vec2_bitor_assign | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:1999:37:1999:38 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2000:9:2000:25 | vec2_bitor_assign | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2000:9:2000:31 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:2000:30:2000:31 | v2 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2002:17:2002:34 | vec2_bitxor_assign | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2002:38:2002:39 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2003:9:2003:26 | vec2_bitxor_assign | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2003:9:2003:32 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:2003:31:2003:32 | v2 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2005:17:2005:31 | vec2_shl_assign | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2005:35:2005:36 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2006:9:2006:23 | vec2_shl_assign | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2006:9:2006:32 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:2006:29:2006:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2008:17:2008:31 | vec2_shr_assign | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2008:35:2008:36 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2009:9:2009:23 | vec2_shr_assign | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2009:9:2009:32 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:2009:29:2009:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2012:13:2012:20 | vec2_neg | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2012:24:2012:26 | - ... | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2012:25:2012:26 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2013:13:2013:20 | vec2_not | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2013:24:2013:26 | ! ... | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2013:25:2013:26 | v1 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2016:13:2016:24 | default_vec2 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2016:28:2016:45 | ...::default(...) | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2017:13:2017:26 | vec2_zero_plus | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2017:30:2017:48 | Vec2 {...} | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2017:30:2017:63 | ... + ... | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2017:40:2017:40 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2017:40:2017:40 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2017:46:2017:46 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2017:46:2017:46 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2017:52:2017:63 | default_vec2 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2021:13:2021:24 | default_vec2 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2021:28:2021:45 | ...::default(...) | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2022:13:2022:26 | vec2_zero_plus | | {EXTERNAL LOCATION} | bool | +| main.rs:2022:30:2022:48 | Vec2 {...} | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2022:30:2022:64 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2022:40:2022:40 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2022:40:2022:40 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2022:46:2022:46 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2022:46:2022:46 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2022:53:2022:64 | default_vec2 | | main.rs:1651:5:1656:5 | Vec2 | +| main.rs:2032:18:2032:21 | SelfParam | | main.rs:2029:5:2029:14 | S1 | +| main.rs:2035:25:2037:5 | { ... } | | main.rs:2029:5:2029:14 | S1 | +| main.rs:2036:9:2036:10 | S1 | | main.rs:2029:5:2029:14 | S1 | +| main.rs:2039:41:2041:5 | { ... } | | main.rs:2039:16:2039:39 | impl ... | +| main.rs:2040:9:2040:20 | { ... } | | {EXTERNAL LOCATION} | trait Future | +| main.rs:2040:9:2040:20 | { ... } | Output | main.rs:2029:5:2029:14 | S1 | +| main.rs:2040:17:2040:18 | S1 | | main.rs:2029:5:2029:14 | S1 | +| main.rs:2049:13:2049:42 | SelfParam | | {EXTERNAL LOCATION} | Pin | +| main.rs:2049:13:2049:42 | SelfParam | Ptr | file://:0:0:0:0 | & | +| main.rs:2049:13:2049:42 | SelfParam | Ptr.&T | main.rs:2043:5:2043:14 | S2 | +| main.rs:2050:13:2050:15 | _cx | | file://:0:0:0:0 | & | +| main.rs:2050:13:2050:15 | _cx | &T | {EXTERNAL LOCATION} | Context | +| main.rs:2051:44:2053:9 | { ... } | | {EXTERNAL LOCATION} | Poll | +| main.rs:2051:44:2053:9 | { ... } | T | main.rs:2029:5:2029:14 | S1 | +| main.rs:2052:13:2052:38 | ...::Ready(...) | | {EXTERNAL LOCATION} | Poll | +| main.rs:2052:13:2052:38 | ...::Ready(...) | T | main.rs:2029:5:2029:14 | S1 | +| main.rs:2052:36:2052:37 | S1 | | main.rs:2029:5:2029:14 | S1 | +| main.rs:2056:41:2058:5 | { ... } | | main.rs:2056:16:2056:39 | impl ... | +| main.rs:2057:9:2057:10 | S2 | | main.rs:2043:5:2043:14 | S2 | +| main.rs:2057:9:2057:10 | S2 | | main.rs:2056:16:2056:39 | impl ... | +| main.rs:2061:9:2061:12 | f1(...) | | {EXTERNAL LOCATION} | trait Future | +| main.rs:2061:9:2061:12 | f1(...) | Output | main.rs:2029:5:2029:14 | S1 | +| main.rs:2061:9:2061:18 | await ... | | main.rs:2029:5:2029:14 | S1 | +| main.rs:2062:9:2062:12 | f2(...) | | main.rs:2039:16:2039:39 | impl ... | +| main.rs:2062:9:2062:18 | await ... | | main.rs:2029:5:2029:14 | S1 | +| main.rs:2063:9:2063:12 | f3(...) | | main.rs:2056:16:2056:39 | impl ... | +| main.rs:2063:9:2063:18 | await ... | | main.rs:2029:5:2029:14 | S1 | +| main.rs:2064:9:2064:10 | S2 | | main.rs:2043:5:2043:14 | S2 | +| main.rs:2064:9:2064:16 | await S2 | | main.rs:2029:5:2029:14 | S1 | +| main.rs:2065:13:2065:13 | b | | {EXTERNAL LOCATION} | trait Future | +| main.rs:2065:13:2065:13 | b | Output | main.rs:2029:5:2029:14 | S1 | +| main.rs:2065:17:2065:28 | { ... } | | {EXTERNAL LOCATION} | trait Future | +| main.rs:2065:17:2065:28 | { ... } | Output | main.rs:2029:5:2029:14 | S1 | +| main.rs:2065:25:2065:26 | S1 | | main.rs:2029:5:2029:14 | S1 | +| main.rs:2066:9:2066:9 | b | | {EXTERNAL LOCATION} | trait Future | +| main.rs:2066:9:2066:9 | b | Output | main.rs:2029:5:2029:14 | S1 | +| main.rs:2066:9:2066:15 | await b | | main.rs:2029:5:2029:14 | S1 | +| main.rs:2077:15:2077:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2077:15:2077:19 | SelfParam | &T | main.rs:2076:5:2078:5 | Self [trait Trait1] | +| main.rs:2081:15:2081:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2081:15:2081:19 | SelfParam | &T | main.rs:2080:5:2082:5 | Self [trait Trait2] | +| main.rs:2085:15:2085:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2085:15:2085:19 | SelfParam | &T | main.rs:2071:5:2072:14 | S1 | +| main.rs:2089:15:2089:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2089:15:2089:19 | SelfParam | &T | main.rs:2071:5:2072:14 | S1 | +| main.rs:2092:37:2094:5 | { ... } | | main.rs:2092:16:2092:35 | impl ... + ... | +| main.rs:2093:9:2093:10 | S1 | | main.rs:2071:5:2072:14 | S1 | +| main.rs:2093:9:2093:10 | S1 | | main.rs:2092:16:2092:35 | impl ... + ... | +| main.rs:2097:18:2097:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2097:18:2097:22 | SelfParam | &T | main.rs:2096:5:2098:5 | Self [trait MyTrait] | +| main.rs:2101:18:2101:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2101:18:2101:22 | SelfParam | &T | main.rs:2071:5:2072:14 | S1 | +| main.rs:2101:31:2103:9 | { ... } | | main.rs:2073:5:2073:14 | S2 | +| main.rs:2102:13:2102:14 | S2 | | main.rs:2073:5:2073:14 | S2 | +| main.rs:2107:18:2107:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2107:18:2107:22 | SelfParam | &T | main.rs:2074:5:2074:22 | S3 | +| main.rs:2107:18:2107:22 | SelfParam | &T.T3 | main.rs:2106:10:2106:17 | T | +| main.rs:2107:30:2110:9 | { ... } | | main.rs:2106:10:2106:17 | T | +| main.rs:2108:17:2108:21 | S3(...) | | file://:0:0:0:0 | & | +| main.rs:2108:17:2108:21 | S3(...) | | main.rs:2074:5:2074:22 | S3 | +| main.rs:2108:17:2108:21 | S3(...) | &T | main.rs:2074:5:2074:22 | S3 | +| main.rs:2108:17:2108:21 | S3(...) | &T.T3 | main.rs:2106:10:2106:17 | T | +| main.rs:2108:25:2108:28 | self | | file://:0:0:0:0 | & | +| main.rs:2108:25:2108:28 | self | &T | main.rs:2074:5:2074:22 | S3 | +| main.rs:2108:25:2108:28 | self | &T.T3 | main.rs:2106:10:2106:17 | T | +| main.rs:2109:13:2109:21 | t.clone() | | main.rs:2106:10:2106:17 | T | +| main.rs:2113:45:2115:5 | { ... } | | main.rs:2113:28:2113:43 | impl ... | +| main.rs:2114:9:2114:10 | S1 | | main.rs:2071:5:2072:14 | S1 | +| main.rs:2114:9:2114:10 | S1 | | main.rs:2113:28:2113:43 | impl ... | +| main.rs:2117:41:2117:41 | t | | main.rs:2117:26:2117:38 | B | +| main.rs:2117:52:2119:5 | { ... } | | main.rs:2117:23:2117:23 | A | +| main.rs:2118:9:2118:9 | t | | main.rs:2117:26:2117:38 | B | +| main.rs:2118:9:2118:17 | t.get_a() | | main.rs:2117:23:2117:23 | A | +| main.rs:2121:34:2121:34 | x | | main.rs:2121:24:2121:31 | T | +| main.rs:2121:59:2123:5 | { ... } | | main.rs:2121:43:2121:57 | impl ... | +| main.rs:2121:59:2123:5 | { ... } | impl(T) | main.rs:2121:24:2121:31 | T | +| main.rs:2122:9:2122:13 | S3(...) | | main.rs:2074:5:2074:22 | S3 | +| main.rs:2122:9:2122:13 | S3(...) | | main.rs:2121:43:2121:57 | impl ... | +| main.rs:2122:9:2122:13 | S3(...) | T3 | main.rs:2121:24:2121:31 | T | +| main.rs:2122:9:2122:13 | S3(...) | impl(T) | main.rs:2121:24:2121:31 | T | +| main.rs:2122:12:2122:12 | x | | main.rs:2121:24:2121:31 | T | +| main.rs:2125:34:2125:34 | x | | main.rs:2125:24:2125:31 | T | +| main.rs:2125:67:2127:5 | { ... } | | {EXTERNAL LOCATION} | Option | +| main.rs:2125:67:2127:5 | { ... } | T | main.rs:2125:50:2125:64 | impl ... | +| main.rs:2125:67:2127:5 | { ... } | T.impl(T) | main.rs:2125:24:2125:31 | T | +| main.rs:2126:9:2126:19 | Some(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2126:9:2126:19 | Some(...) | T | main.rs:2074:5:2074:22 | S3 | +| main.rs:2126:9:2126:19 | Some(...) | T | main.rs:2125:50:2125:64 | impl ... | +| main.rs:2126:9:2126:19 | Some(...) | T.T3 | main.rs:2125:24:2125:31 | T | +| main.rs:2126:9:2126:19 | Some(...) | T.impl(T) | main.rs:2125:24:2125:31 | T | +| main.rs:2126:14:2126:18 | S3(...) | | main.rs:2074:5:2074:22 | S3 | +| main.rs:2126:14:2126:18 | S3(...) | | main.rs:2125:50:2125:64 | impl ... | +| main.rs:2126:14:2126:18 | S3(...) | T3 | main.rs:2125:24:2125:31 | T | +| main.rs:2126:14:2126:18 | S3(...) | impl(T) | main.rs:2125:24:2125:31 | T | +| main.rs:2126:17:2126:17 | x | | main.rs:2125:24:2125:31 | T | +| main.rs:2129:34:2129:34 | x | | main.rs:2129:24:2129:31 | T | +| main.rs:2129:78:2131:5 | { ... } | | file://:0:0:0:0 | (T_2) | +| main.rs:2129:78:2131:5 | { ... } | 0(2) | main.rs:2129:44:2129:58 | impl ... | +| main.rs:2129:78:2131:5 | { ... } | 0(2).impl(T) | main.rs:2129:24:2129:31 | T | +| main.rs:2129:78:2131:5 | { ... } | 1(2) | main.rs:2129:61:2129:75 | impl ... | +| main.rs:2129:78:2131:5 | { ... } | 1(2).impl(T) | main.rs:2129:24:2129:31 | T | +| main.rs:2130:9:2130:30 | TupleExpr | | file://:0:0:0:0 | (T_2) | +| main.rs:2130:9:2130:30 | TupleExpr | 0(2) | main.rs:2074:5:2074:22 | S3 | +| main.rs:2130:9:2130:30 | TupleExpr | 0(2) | main.rs:2129:44:2129:58 | impl ... | +| main.rs:2130:9:2130:30 | TupleExpr | 0(2).T3 | main.rs:2129:24:2129:31 | T | +| main.rs:2130:9:2130:30 | TupleExpr | 0(2).impl(T) | main.rs:2129:24:2129:31 | T | +| main.rs:2130:9:2130:30 | TupleExpr | 1(2) | main.rs:2074:5:2074:22 | S3 | +| main.rs:2130:9:2130:30 | TupleExpr | 1(2) | main.rs:2129:61:2129:75 | impl ... | +| main.rs:2130:9:2130:30 | TupleExpr | 1(2).T3 | main.rs:2129:24:2129:31 | T | +| main.rs:2130:9:2130:30 | TupleExpr | 1(2).impl(T) | main.rs:2129:24:2129:31 | T | +| main.rs:2130:10:2130:22 | S3(...) | | main.rs:2074:5:2074:22 | S3 | +| main.rs:2130:10:2130:22 | S3(...) | | main.rs:2129:44:2129:58 | impl ... | +| main.rs:2130:10:2130:22 | S3(...) | T3 | main.rs:2129:24:2129:31 | T | +| main.rs:2130:10:2130:22 | S3(...) | impl(T) | main.rs:2129:24:2129:31 | T | +| main.rs:2130:13:2130:13 | x | | main.rs:2129:24:2129:31 | T | +| main.rs:2130:13:2130:21 | x.clone() | | main.rs:2129:24:2129:31 | T | +| main.rs:2130:25:2130:29 | S3(...) | | main.rs:2074:5:2074:22 | S3 | +| main.rs:2130:25:2130:29 | S3(...) | | main.rs:2129:61:2129:75 | impl ... | +| main.rs:2130:25:2130:29 | S3(...) | T3 | main.rs:2129:24:2129:31 | T | +| main.rs:2130:25:2130:29 | S3(...) | impl(T) | main.rs:2129:24:2129:31 | T | +| main.rs:2130:28:2130:28 | x | | main.rs:2129:24:2129:31 | T | +| main.rs:2133:26:2133:26 | t | | main.rs:2133:29:2133:43 | impl ... | +| main.rs:2133:51:2135:5 | { ... } | | main.rs:2133:23:2133:23 | A | +| main.rs:2134:9:2134:9 | t | | main.rs:2133:29:2133:43 | impl ... | +| main.rs:2134:9:2134:17 | t.get_a() | | main.rs:2133:23:2133:23 | A | +| main.rs:2138:13:2138:13 | x | | main.rs:2092:16:2092:35 | impl ... + ... | +| main.rs:2138:17:2138:20 | f1(...) | | main.rs:2092:16:2092:35 | impl ... + ... | +| main.rs:2139:9:2139:9 | x | | main.rs:2092:16:2092:35 | impl ... + ... | +| main.rs:2140:9:2140:9 | x | | main.rs:2092:16:2092:35 | impl ... + ... | +| main.rs:2141:13:2141:13 | a | | main.rs:2113:28:2113:43 | impl ... | +| main.rs:2141:17:2141:32 | get_a_my_trait(...) | | main.rs:2113:28:2113:43 | impl ... | +| main.rs:2142:13:2142:13 | b | | main.rs:2073:5:2073:14 | S2 | +| main.rs:2142:17:2142:33 | uses_my_trait1(...) | | main.rs:2073:5:2073:14 | S2 | +| main.rs:2142:32:2142:32 | a | | main.rs:2113:28:2113:43 | impl ... | +| main.rs:2143:13:2143:13 | a | | main.rs:2113:28:2113:43 | impl ... | +| main.rs:2143:17:2143:32 | get_a_my_trait(...) | | main.rs:2113:28:2113:43 | impl ... | +| main.rs:2144:13:2144:13 | c | | main.rs:2073:5:2073:14 | S2 | +| main.rs:2144:17:2144:33 | uses_my_trait2(...) | | main.rs:2073:5:2073:14 | S2 | +| main.rs:2144:32:2144:32 | a | | main.rs:2113:28:2113:43 | impl ... | +| main.rs:2145:13:2145:13 | d | | main.rs:2073:5:2073:14 | S2 | +| main.rs:2145:17:2145:34 | uses_my_trait2(...) | | main.rs:2073:5:2073:14 | S2 | +| main.rs:2145:32:2145:33 | S1 | | main.rs:2071:5:2072:14 | S1 | +| main.rs:2146:13:2146:13 | e | | main.rs:2071:5:2072:14 | S1 | +| main.rs:2146:17:2146:35 | get_a_my_trait2(...) | | main.rs:2121:43:2121:57 | impl ... | +| main.rs:2146:17:2146:35 | get_a_my_trait2(...) | impl(T) | main.rs:2071:5:2072:14 | S1 | +| main.rs:2146:17:2146:43 | ... .get_a() | | main.rs:2071:5:2072:14 | S1 | +| main.rs:2146:33:2146:34 | S1 | | main.rs:2071:5:2072:14 | S1 | +| main.rs:2149:13:2149:13 | f | | main.rs:2071:5:2072:14 | S1 | +| main.rs:2149:17:2149:35 | get_a_my_trait3(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2149:17:2149:35 | get_a_my_trait3(...) | T | main.rs:2125:50:2125:64 | impl ... | +| main.rs:2149:17:2149:35 | get_a_my_trait3(...) | T.impl(T) | main.rs:2071:5:2072:14 | S1 | +| main.rs:2149:17:2149:44 | ... .unwrap() | | main.rs:2125:50:2125:64 | impl ... | +| main.rs:2149:17:2149:44 | ... .unwrap() | impl(T) | main.rs:2071:5:2072:14 | S1 | +| main.rs:2149:17:2149:52 | ... .get_a() | | main.rs:2071:5:2072:14 | S1 | +| main.rs:2149:33:2149:34 | S1 | | main.rs:2071:5:2072:14 | S1 | +| main.rs:2150:13:2150:13 | g | | main.rs:2071:5:2072:14 | S1 | +| main.rs:2150:17:2150:35 | get_a_my_trait4(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2150:17:2150:35 | get_a_my_trait4(...) | 0(2) | main.rs:2129:44:2129:58 | impl ... | +| main.rs:2150:17:2150:35 | get_a_my_trait4(...) | 0(2).impl(T) | main.rs:2071:5:2072:14 | S1 | +| main.rs:2150:17:2150:35 | get_a_my_trait4(...) | 1(2) | main.rs:2129:61:2129:75 | impl ... | +| main.rs:2150:17:2150:35 | get_a_my_trait4(...) | 1(2).impl(T) | main.rs:2071:5:2072:14 | S1 | +| main.rs:2150:17:2150:37 | ... .0 | | main.rs:2129:44:2129:58 | impl ... | +| main.rs:2150:17:2150:37 | ... .0 | impl(T) | main.rs:2071:5:2072:14 | S1 | +| main.rs:2150:17:2150:45 | ... .get_a() | | main.rs:2071:5:2072:14 | S1 | +| main.rs:2150:33:2150:34 | S1 | | main.rs:2071:5:2072:14 | S1 | +| main.rs:2161:16:2161:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2161:16:2161:20 | SelfParam | &T | main.rs:2157:5:2158:13 | S | +| main.rs:2161:31:2163:9 | { ... } | | main.rs:2157:5:2158:13 | S | +| main.rs:2162:13:2162:13 | S | | main.rs:2157:5:2158:13 | S | +| main.rs:2172:26:2174:9 | { ... } | | main.rs:2166:5:2169:5 | MyVec | +| main.rs:2172:26:2174:9 | { ... } | T | main.rs:2171:10:2171:10 | T | +| main.rs:2173:13:2173:38 | MyVec {...} | | main.rs:2166:5:2169:5 | MyVec | +| main.rs:2173:13:2173:38 | MyVec {...} | T | main.rs:2171:10:2171:10 | T | +| main.rs:2173:27:2173:36 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2173:27:2173:36 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2173:27:2173:36 | ...::new(...) | T | main.rs:2171:10:2171:10 | T | +| main.rs:2176:17:2176:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2176:17:2176:25 | SelfParam | &T | main.rs:2166:5:2169:5 | MyVec | +| main.rs:2176:17:2176:25 | SelfParam | &T.T | main.rs:2171:10:2171:10 | T | +| main.rs:2176:28:2176:32 | value | | main.rs:2171:10:2171:10 | T | +| main.rs:2177:13:2177:16 | self | | file://:0:0:0:0 | & | +| main.rs:2177:13:2177:16 | self | &T | main.rs:2166:5:2169:5 | MyVec | +| main.rs:2177:13:2177:16 | self | &T.T | main.rs:2171:10:2171:10 | T | +| main.rs:2177:13:2177:21 | self.data | | {EXTERNAL LOCATION} | Vec | +| main.rs:2177:13:2177:21 | self.data | A | {EXTERNAL LOCATION} | Global | +| main.rs:2177:13:2177:21 | self.data | T | main.rs:2171:10:2171:10 | T | +| main.rs:2177:28:2177:32 | value | | main.rs:2171:10:2171:10 | T | +| main.rs:2185:18:2185:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2185:18:2185:22 | SelfParam | &T | main.rs:2166:5:2169:5 | MyVec | +| main.rs:2185:18:2185:22 | SelfParam | &T.T | main.rs:2181:10:2181:10 | T | +| main.rs:2185:25:2185:29 | index | | {EXTERNAL LOCATION} | usize | +| main.rs:2185:56:2187:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:2185:56:2187:9 | { ... } | &T | main.rs:2181:10:2181:10 | T | +| main.rs:2186:13:2186:29 | &... | | file://:0:0:0:0 | & | +| main.rs:2186:13:2186:29 | &... | &T | main.rs:2181:10:2181:10 | T | +| main.rs:2186:14:2186:17 | self | | file://:0:0:0:0 | & | +| main.rs:2186:14:2186:17 | self | &T | main.rs:2166:5:2169:5 | MyVec | +| main.rs:2186:14:2186:17 | self | &T.T | main.rs:2181:10:2181:10 | T | +| main.rs:2186:14:2186:22 | self.data | | {EXTERNAL LOCATION} | Vec | +| main.rs:2186:14:2186:22 | self.data | A | {EXTERNAL LOCATION} | Global | +| main.rs:2186:14:2186:22 | self.data | T | main.rs:2181:10:2181:10 | T | +| main.rs:2186:14:2186:29 | ...[index] | | main.rs:2181:10:2181:10 | T | +| main.rs:2186:24:2186:28 | index | | {EXTERNAL LOCATION} | usize | +| main.rs:2190:22:2190:26 | slice | | file://:0:0:0:0 | & | +| main.rs:2190:22:2190:26 | slice | &T | file://:0:0:0:0 | [] | +| main.rs:2190:22:2190:26 | slice | &T.[T] | main.rs:2157:5:2158:13 | S | +| main.rs:2191:13:2191:13 | x | | main.rs:2157:5:2158:13 | S | +| main.rs:2191:17:2191:21 | slice | | file://:0:0:0:0 | & | +| main.rs:2191:17:2191:21 | slice | &T | file://:0:0:0:0 | [] | +| main.rs:2191:17:2191:21 | slice | &T.[T] | main.rs:2157:5:2158:13 | S | +| main.rs:2191:17:2191:24 | slice[0] | | main.rs:2157:5:2158:13 | S | +| main.rs:2191:17:2191:30 | ... .foo() | | main.rs:2157:5:2158:13 | S | +| main.rs:2191:23:2191:23 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2194:37:2194:37 | a | | main.rs:2194:20:2194:34 | T | +| main.rs:2194:43:2194:43 | b | | {EXTERNAL LOCATION} | usize | +| main.rs:2197:5:2199:5 | { ... } | | {EXTERNAL LOCATION} | Output | +| main.rs:2198:9:2198:9 | a | | main.rs:2194:20:2194:34 | T | +| main.rs:2198:9:2198:12 | a[b] | | {EXTERNAL LOCATION} | Output | +| main.rs:2198:11:2198:11 | b | | {EXTERNAL LOCATION} | usize | +| main.rs:2202:17:2202:19 | vec | | main.rs:2166:5:2169:5 | MyVec | +| main.rs:2202:17:2202:19 | vec | T | main.rs:2157:5:2158:13 | S | +| main.rs:2202:23:2202:34 | ...::new(...) | | main.rs:2166:5:2169:5 | MyVec | +| main.rs:2202:23:2202:34 | ...::new(...) | T | main.rs:2157:5:2158:13 | S | +| main.rs:2203:9:2203:11 | vec | | main.rs:2166:5:2169:5 | MyVec | +| main.rs:2203:9:2203:11 | vec | T | main.rs:2157:5:2158:13 | S | +| main.rs:2203:18:2203:18 | S | | main.rs:2157:5:2158:13 | S | +| main.rs:2204:9:2204:11 | vec | | main.rs:2166:5:2169:5 | MyVec | +| main.rs:2204:9:2204:11 | vec | T | main.rs:2157:5:2158:13 | S | +| main.rs:2204:9:2204:14 | vec[0] | | main.rs:2157:5:2158:13 | S | +| main.rs:2204:9:2204:20 | ... .foo() | | main.rs:2157:5:2158:13 | S | +| main.rs:2204:13:2204:13 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2204:13:2204:13 | 0 | | {EXTERNAL LOCATION} | usize | +| main.rs:2206:13:2206:14 | xs | | file://:0:0:0:0 | [] | +| main.rs:2206:13:2206:14 | xs | [T;...] | main.rs:2157:5:2158:13 | S | +| main.rs:2206:21:2206:21 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2206:26:2206:28 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2206:26:2206:28 | [...] | [T;...] | main.rs:2157:5:2158:13 | S | +| main.rs:2206:27:2206:27 | S | | main.rs:2157:5:2158:13 | S | +| main.rs:2207:13:2207:13 | x | | main.rs:2157:5:2158:13 | S | +| main.rs:2207:17:2207:18 | xs | | file://:0:0:0:0 | [] | +| main.rs:2207:17:2207:18 | xs | [T;...] | main.rs:2157:5:2158:13 | S | +| main.rs:2207:17:2207:21 | xs[0] | | main.rs:2157:5:2158:13 | S | +| main.rs:2207:17:2207:27 | ... .foo() | | main.rs:2157:5:2158:13 | S | +| main.rs:2207:20:2207:20 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2209:29:2209:31 | vec | | main.rs:2166:5:2169:5 | MyVec | +| main.rs:2209:29:2209:31 | vec | T | main.rs:2157:5:2158:13 | S | +| main.rs:2209:34:2209:34 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2209:34:2209:34 | 0 | | {EXTERNAL LOCATION} | usize | +| main.rs:2211:23:2211:25 | &xs | | file://:0:0:0:0 | & | +| main.rs:2211:23:2211:25 | &xs | &T | file://:0:0:0:0 | [] | +| main.rs:2211:23:2211:25 | &xs | &T | file://:0:0:0:0 | [] | +| main.rs:2211:23:2211:25 | &xs | &T.[T;...] | main.rs:2157:5:2158:13 | S | +| main.rs:2211:23:2211:25 | &xs | &T.[T] | main.rs:2157:5:2158:13 | S | +| main.rs:2211:24:2211:25 | xs | | file://:0:0:0:0 | [] | +| main.rs:2211:24:2211:25 | xs | [T;...] | main.rs:2157:5:2158:13 | S | +| main.rs:2217:13:2217:13 | x | | {EXTERNAL LOCATION} | String | +| main.rs:2217:17:2217:46 | MacroExpr | | {EXTERNAL LOCATION} | String | +| main.rs:2217:25:2217:35 | "Hello, {}" | | file://:0:0:0:0 | & | +| main.rs:2217:25:2217:35 | "Hello, {}" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2217:25:2217:45 | ...::format(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2217:25:2217:45 | ...::must_use(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2217:25:2217:45 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2217:25:2217:45 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2217:25:2217:45 | { ... } | | {EXTERNAL LOCATION} | String | +| main.rs:2217:38:2217:45 | "World!" | | file://:0:0:0:0 | & | +| main.rs:2217:38:2217:45 | "World!" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2226:19:2226:22 | SelfParam | | main.rs:2222:5:2227:5 | Self [trait MyAdd] | +| main.rs:2226:25:2226:27 | rhs | | main.rs:2222:17:2222:26 | Rhs | +| main.rs:2233:19:2233:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | +| main.rs:2233:25:2233:29 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2233:45:2235:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2234:13:2234:17 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2242:19:2242:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | +| main.rs:2242:25:2242:29 | value | | file://:0:0:0:0 | & | +| main.rs:2242:25:2242:29 | value | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:2242:46:2244:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2243:13:2243:18 | * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2243:14:2243:18 | value | | file://:0:0:0:0 | & | +| main.rs:2243:14:2243:18 | value | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:2251:19:2251:22 | SelfParam | | {EXTERNAL LOCATION} | i64 | +| main.rs:2251:25:2251:29 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2251:46:2257:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2252:13:2256:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | +| main.rs:2252:13:2256:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | +| main.rs:2252:16:2252:20 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2252:22:2254:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2252:22:2254:13 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2253:17:2253:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2253:17:2253:17 | 1 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2254:20:2256:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2254:20:2256:13 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2255:17:2255:17 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2255:17:2255:17 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2266:19:2266:22 | SelfParam | | main.rs:2260:5:2260:19 | S | +| main.rs:2266:19:2266:22 | SelfParam | T | main.rs:2262:10:2262:17 | T | +| main.rs:2266:25:2266:29 | other | | main.rs:2260:5:2260:19 | S | +| main.rs:2266:25:2266:29 | other | T | main.rs:2262:10:2262:17 | T | +| main.rs:2266:54:2268:9 | { ... } | | main.rs:2260:5:2260:19 | S | +| main.rs:2266:54:2268:9 | { ... } | T | main.rs:2223:9:2223:20 | Output | +| main.rs:2267:13:2267:39 | S(...) | | main.rs:2260:5:2260:19 | S | +| main.rs:2267:13:2267:39 | S(...) | T | main.rs:2223:9:2223:20 | Output | +| main.rs:2267:15:2267:22 | (...) | | main.rs:2262:10:2262:17 | T | +| main.rs:2267:15:2267:38 | ... .my_add(...) | | main.rs:2223:9:2223:20 | Output | +| main.rs:2267:16:2267:19 | self | | main.rs:2260:5:2260:19 | S | +| main.rs:2267:16:2267:19 | self | T | main.rs:2262:10:2262:17 | T | +| main.rs:2267:16:2267:21 | self.0 | | main.rs:2262:10:2262:17 | T | +| main.rs:2267:31:2267:35 | other | | main.rs:2260:5:2260:19 | S | +| main.rs:2267:31:2267:35 | other | T | main.rs:2262:10:2262:17 | T | +| main.rs:2267:31:2267:37 | other.0 | | main.rs:2222:5:2227:5 | Self [trait MyAdd] | +| main.rs:2267:31:2267:37 | other.0 | | main.rs:2262:10:2262:17 | T | +| main.rs:2275:19:2275:22 | SelfParam | | main.rs:2260:5:2260:19 | S | +| main.rs:2275:19:2275:22 | SelfParam | T | main.rs:2271:10:2271:17 | T | +| main.rs:2275:25:2275:29 | other | | main.rs:2271:10:2271:17 | T | +| main.rs:2275:51:2277:9 | { ... } | | main.rs:2260:5:2260:19 | S | +| main.rs:2275:51:2277:9 | { ... } | T | main.rs:2223:9:2223:20 | Output | +| main.rs:2276:13:2276:37 | S(...) | | main.rs:2260:5:2260:19 | S | +| main.rs:2276:13:2276:37 | S(...) | T | main.rs:2223:9:2223:20 | Output | +| main.rs:2276:15:2276:22 | (...) | | main.rs:2271:10:2271:17 | T | +| main.rs:2276:15:2276:36 | ... .my_add(...) | | main.rs:2223:9:2223:20 | Output | +| main.rs:2276:16:2276:19 | self | | main.rs:2260:5:2260:19 | S | +| main.rs:2276:16:2276:19 | self | T | main.rs:2271:10:2271:17 | T | +| main.rs:2276:16:2276:21 | self.0 | | main.rs:2271:10:2271:17 | T | +| main.rs:2276:31:2276:35 | other | | main.rs:2271:10:2271:17 | T | +| main.rs:2287:19:2287:22 | SelfParam | | main.rs:2260:5:2260:19 | S | +| main.rs:2287:19:2287:22 | SelfParam | T | main.rs:2280:14:2280:14 | T | +| main.rs:2287:25:2287:29 | other | | file://:0:0:0:0 | & | +| main.rs:2287:25:2287:29 | other | &T | main.rs:2280:14:2280:14 | T | +| main.rs:2287:55:2289:9 | { ... } | | main.rs:2260:5:2260:19 | S | +| main.rs:2288:13:2288:37 | S(...) | | main.rs:2260:5:2260:19 | S | +| main.rs:2288:15:2288:22 | (...) | | main.rs:2280:14:2280:14 | T | +| main.rs:2288:16:2288:19 | self | | main.rs:2260:5:2260:19 | S | +| main.rs:2288:16:2288:19 | self | T | main.rs:2280:14:2280:14 | T | +| main.rs:2288:16:2288:21 | self.0 | | main.rs:2280:14:2280:14 | T | +| main.rs:2288:31:2288:35 | other | | file://:0:0:0:0 | & | +| main.rs:2288:31:2288:35 | other | &T | main.rs:2280:14:2280:14 | T | +| main.rs:2294:20:2294:24 | value | | main.rs:2292:18:2292:18 | T | +| main.rs:2299:20:2299:24 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2299:40:2301:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2300:13:2300:17 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2306:20:2306:24 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2306:41:2312:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2307:13:2311:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | +| main.rs:2307:13:2311:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | +| main.rs:2307:16:2307:20 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2307:22:2309:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2307:22:2309:13 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2308:17:2308:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2308:17:2308:17 | 1 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2309:20:2311:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2309:20:2311:13 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2310:17:2310:17 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2310:17:2310:17 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2317:21:2317:25 | value | | main.rs:2315:19:2315:19 | T | +| main.rs:2317:31:2317:31 | x | | main.rs:2315:5:2318:5 | Self [trait MyFrom2] | +| main.rs:2322:21:2322:25 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2322:33:2322:33 | _ | | {EXTERNAL LOCATION} | i64 | +| main.rs:2322:48:2324:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2323:13:2323:17 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:2329:21:2329:25 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2329:34:2329:34 | _ | | {EXTERNAL LOCATION} | i64 | +| main.rs:2329:49:2335:9 | { ... } | | file://:0:0:0:0 | () | +| main.rs:2330:13:2334:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | +| main.rs:2330:16:2330:20 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:2330:22:2332:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2331:17:2331:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2332:20:2334:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2333:17:2333:17 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2340:15:2340:15 | x | | main.rs:2338:5:2344:5 | Self [trait MySelfTrait] | +| main.rs:2343:15:2343:15 | x | | main.rs:2338:5:2344:5 | Self [trait MySelfTrait] | +| main.rs:2348:15:2348:15 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2348:31:2350:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2349:13:2349:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2349:13:2349:17 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2349:17:2349:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2353:15:2353:15 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2353:32:2355:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2354:13:2354:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2354:13:2354:17 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:2354:17:2354:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2360:15:2360:15 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:2360:31:2362:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2361:13:2361:13 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2361:13:2361:13 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2365:15:2365:15 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:2365:32:2367:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:2366:13:2366:13 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:2371:13:2371:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2371:22:2371:23 | 73 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2371:22:2371:23 | 73 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2372:9:2372:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2372:9:2372:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2372:18:2372:21 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2373:9:2373:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2373:9:2373:23 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2373:18:2373:22 | &5i64 | | file://:0:0:0:0 | & | +| main.rs:2373:18:2373:22 | &5i64 | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:2373:19:2373:22 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2374:9:2374:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2374:9:2374:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2374:18:2374:21 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2376:9:2376:15 | S(...) | | main.rs:2260:5:2260:19 | S | +| main.rs:2376:9:2376:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | +| main.rs:2376:9:2376:31 | ... .my_add(...) | | main.rs:2260:5:2260:19 | S | +| main.rs:2376:11:2376:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2376:24:2376:30 | S(...) | | main.rs:2260:5:2260:19 | S | +| main.rs:2376:24:2376:30 | S(...) | T | {EXTERNAL LOCATION} | i64 | +| main.rs:2376:26:2376:29 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2377:9:2377:15 | S(...) | | main.rs:2260:5:2260:19 | S | +| main.rs:2377:9:2377:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | +| main.rs:2377:11:2377:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2377:24:2377:27 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2378:9:2378:15 | S(...) | | main.rs:2260:5:2260:19 | S | +| main.rs:2378:9:2378:15 | S(...) | T | {EXTERNAL LOCATION} | i64 | +| main.rs:2378:9:2378:29 | ... .my_add(...) | | main.rs:2260:5:2260:19 | S | +| main.rs:2378:11:2378:14 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2378:24:2378:28 | &3i64 | | file://:0:0:0:0 | & | +| main.rs:2378:24:2378:28 | &3i64 | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:2378:25:2378:28 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2380:13:2380:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:2380:17:2380:35 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2380:30:2380:34 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2381:13:2381:13 | y | | {EXTERNAL LOCATION} | i64 | +| main.rs:2381:17:2381:34 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2381:30:2381:33 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2382:13:2382:13 | z | | {EXTERNAL LOCATION} | i64 | +| main.rs:2382:22:2382:43 | ...::my_from(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2382:38:2382:42 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2383:9:2383:34 | ...::my_from2(...) | | file://:0:0:0:0 | () | +| main.rs:2383:23:2383:27 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2383:30:2383:33 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2384:9:2384:33 | ...::my_from2(...) | | file://:0:0:0:0 | () | +| main.rs:2384:23:2384:26 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2384:29:2384:32 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2385:9:2385:38 | ...::my_from2(...) | | file://:0:0:0:0 | () | +| main.rs:2385:27:2385:31 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2385:34:2385:37 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2387:9:2387:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2387:17:2387:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2388:9:2388:22 | ...::f2(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2388:17:2388:21 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2389:9:2389:22 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2389:18:2389:21 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2390:9:2390:22 | ...::f2(...) | | {EXTERNAL LOCATION} | bool | +| main.rs:2390:18:2390:21 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2391:9:2391:30 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2391:25:2391:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2392:9:2392:30 | ...::f2(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2392:25:2392:29 | 73i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2393:9:2393:29 | ...::f1(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2393:25:2393:28 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2394:9:2394:29 | ...::f2(...) | | {EXTERNAL LOCATION} | bool | +| main.rs:2394:25:2394:28 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2402:26:2404:9 | { ... } | | main.rs:2399:5:2399:24 | MyCallable | +| main.rs:2403:13:2403:25 | MyCallable {...} | | main.rs:2399:5:2399:24 | MyCallable | +| main.rs:2406:17:2406:21 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2406:17:2406:21 | SelfParam | &T | main.rs:2399:5:2399:24 | MyCallable | +| main.rs:2406:31:2408:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:2407:13:2407:13 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2407:13:2407:13 | 1 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2414:13:2414:13 | i | | {EXTERNAL LOCATION} | i32 | +| main.rs:2414:18:2414:26 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2414:18:2414:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2414:19:2414:19 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2414:22:2414:22 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2414:25:2414:25 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2415:18:2415:26 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2415:18:2415:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2415:18:2415:41 | ... .map(...) | | file://:0:0:0:0 | [] | +| main.rs:2415:19:2415:19 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2415:22:2415:22 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2415:25:2415:25 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2415:32:2415:40 | \|...\| ... | | {EXTERNAL LOCATION} | dyn FnOnce | +| main.rs:2415:32:2415:40 | \|...\| ... | dyn(Args) | file://:0:0:0:0 | (T_1) | +| main.rs:2415:40:2415:40 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2416:13:2416:13 | i | | {EXTERNAL LOCATION} | Item | +| main.rs:2416:13:2416:13 | i | | {EXTERNAL LOCATION} | i32 | +| main.rs:2416:18:2416:26 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2416:18:2416:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2416:18:2416:38 | ... .into_iter() | | {EXTERNAL LOCATION} | IntoIter | +| main.rs:2416:18:2416:38 | ... .into_iter() | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2416:19:2416:19 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2416:22:2416:22 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2416:25:2416:25 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2418:13:2418:17 | vals1 | | file://:0:0:0:0 | [] | +| main.rs:2418:13:2418:17 | vals1 | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2418:13:2418:17 | vals1 | [T;...] | {EXTERNAL LOCATION} | u8 | +| main.rs:2418:21:2418:31 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2418:21:2418:31 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2418:21:2418:31 | [...] | [T;...] | {EXTERNAL LOCATION} | u8 | +| main.rs:2418:22:2418:24 | 1u8 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2418:27:2418:27 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2418:27:2418:27 | 2 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2418:30:2418:30 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2418:30:2418:30 | 3 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2419:13:2419:13 | u | | {EXTERNAL LOCATION} | i32 | +| main.rs:2419:13:2419:13 | u | | {EXTERNAL LOCATION} | u8 | +| main.rs:2419:18:2419:22 | vals1 | | file://:0:0:0:0 | [] | +| main.rs:2419:18:2419:22 | vals1 | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2419:18:2419:22 | vals1 | [T;...] | {EXTERNAL LOCATION} | u8 | +| main.rs:2421:13:2421:17 | vals2 | | file://:0:0:0:0 | [] | +| main.rs:2421:13:2421:17 | vals2 | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2421:21:2421:29 | [1u16; 3] | | file://:0:0:0:0 | [] | +| main.rs:2421:21:2421:29 | [1u16; 3] | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2421:22:2421:25 | 1u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2421:28:2421:28 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2422:13:2422:13 | u | | {EXTERNAL LOCATION} | u16 | +| main.rs:2422:18:2422:22 | vals2 | | file://:0:0:0:0 | [] | +| main.rs:2422:18:2422:22 | vals2 | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2424:13:2424:17 | vals3 | | file://:0:0:0:0 | [] | +| main.rs:2424:13:2424:17 | vals3 | [T;...] | {EXTERNAL LOCATION} | u32 | +| main.rs:2424:26:2424:26 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2424:31:2424:39 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2424:31:2424:39 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2424:31:2424:39 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | +| main.rs:2424:32:2424:32 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2424:32:2424:32 | 1 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2424:35:2424:35 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2424:35:2424:35 | 2 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2424:38:2424:38 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2424:38:2424:38 | 3 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2425:13:2425:13 | u | | {EXTERNAL LOCATION} | u32 | +| main.rs:2425:18:2425:22 | vals3 | | file://:0:0:0:0 | [] | +| main.rs:2425:18:2425:22 | vals3 | [T;...] | {EXTERNAL LOCATION} | u32 | +| main.rs:2427:13:2427:17 | vals4 | | file://:0:0:0:0 | [] | +| main.rs:2427:13:2427:17 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | +| main.rs:2427:26:2427:26 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2427:31:2427:36 | [1; 3] | | file://:0:0:0:0 | [] | +| main.rs:2427:31:2427:36 | [1; 3] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2427:31:2427:36 | [1; 3] | [T;...] | {EXTERNAL LOCATION} | u64 | +| main.rs:2427:32:2427:32 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2427:32:2427:32 | 1 | | {EXTERNAL LOCATION} | u64 | +| main.rs:2427:35:2427:35 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2428:13:2428:13 | u | | {EXTERNAL LOCATION} | u64 | +| main.rs:2428:18:2428:22 | vals4 | | file://:0:0:0:0 | [] | +| main.rs:2428:18:2428:22 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | +| main.rs:2430:17:2430:24 | strings1 | | file://:0:0:0:0 | [] | +| main.rs:2430:17:2430:24 | strings1 | [T;...] | file://:0:0:0:0 | & | +| main.rs:2430:17:2430:24 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2430:28:2430:48 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2430:28:2430:48 | [...] | [T;...] | file://:0:0:0:0 | & | +| main.rs:2430:28:2430:48 | [...] | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2430:29:2430:33 | "foo" | | file://:0:0:0:0 | & | +| main.rs:2430:29:2430:33 | "foo" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2430:36:2430:40 | "bar" | | file://:0:0:0:0 | & | +| main.rs:2430:36:2430:40 | "bar" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2430:43:2430:47 | "baz" | | file://:0:0:0:0 | & | +| main.rs:2430:43:2430:47 | "baz" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2431:13:2431:13 | s | | {EXTERNAL LOCATION} | Item | +| main.rs:2431:13:2431:13 | s | | file://:0:0:0:0 | & | +| main.rs:2431:13:2431:13 | s | &T | file://:0:0:0:0 | & | +| main.rs:2431:13:2431:13 | s | &T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2431:18:2431:26 | &strings1 | | file://:0:0:0:0 | & | +| main.rs:2431:18:2431:26 | &strings1 | &T | file://:0:0:0:0 | [] | +| main.rs:2431:18:2431:26 | &strings1 | &T.[T;...] | file://:0:0:0:0 | & | +| main.rs:2431:18:2431:26 | &strings1 | &T.[T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2431:19:2431:26 | strings1 | | file://:0:0:0:0 | [] | +| main.rs:2431:19:2431:26 | strings1 | [T;...] | file://:0:0:0:0 | & | +| main.rs:2431:19:2431:26 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2432:13:2432:13 | s | | {EXTERNAL LOCATION} | Item | +| main.rs:2432:13:2432:13 | s | | file://:0:0:0:0 | & | +| main.rs:2432:13:2432:13 | s | &T | file://:0:0:0:0 | & | +| main.rs:2432:13:2432:13 | s | &T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2432:18:2432:30 | &mut strings1 | | file://:0:0:0:0 | & | +| main.rs:2432:18:2432:30 | &mut strings1 | &T | file://:0:0:0:0 | [] | +| main.rs:2432:18:2432:30 | &mut strings1 | &T.[T;...] | file://:0:0:0:0 | & | +| main.rs:2432:18:2432:30 | &mut strings1 | &T.[T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2432:23:2432:30 | strings1 | | file://:0:0:0:0 | [] | +| main.rs:2432:23:2432:30 | strings1 | [T;...] | file://:0:0:0:0 | & | +| main.rs:2432:23:2432:30 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2433:13:2433:13 | s | | file://:0:0:0:0 | & | +| main.rs:2433:13:2433:13 | s | &T | {EXTERNAL LOCATION} | str | +| main.rs:2433:18:2433:25 | strings1 | | file://:0:0:0:0 | [] | +| main.rs:2433:18:2433:25 | strings1 | [T;...] | file://:0:0:0:0 | & | +| main.rs:2433:18:2433:25 | strings1 | [T;...].&T | {EXTERNAL LOCATION} | str | +| main.rs:2435:13:2435:20 | strings2 | | file://:0:0:0:0 | [] | +| main.rs:2435:13:2435:20 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2436:9:2440:9 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2436:9:2440:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2437:13:2437:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2437:26:2437:30 | "foo" | | file://:0:0:0:0 | & | +| main.rs:2437:26:2437:30 | "foo" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2438:13:2438:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2438:26:2438:30 | "bar" | | file://:0:0:0:0 | & | +| main.rs:2438:26:2438:30 | "bar" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2439:13:2439:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2439:26:2439:30 | "baz" | | file://:0:0:0:0 | & | +| main.rs:2439:26:2439:30 | "baz" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2441:13:2441:13 | s | | {EXTERNAL LOCATION} | String | +| main.rs:2441:18:2441:25 | strings2 | | file://:0:0:0:0 | [] | +| main.rs:2441:18:2441:25 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2443:13:2443:20 | strings3 | | file://:0:0:0:0 | & | +| main.rs:2443:13:2443:20 | strings3 | &T | file://:0:0:0:0 | [] | +| main.rs:2443:13:2443:20 | strings3 | &T.[T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2444:9:2448:9 | &... | | file://:0:0:0:0 | & | +| main.rs:2444:9:2448:9 | &... | &T | file://:0:0:0:0 | [] | +| main.rs:2444:9:2448:9 | &... | &T.[T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2444:10:2448:9 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2444:10:2448:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2445:13:2445:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2445:26:2445:30 | "foo" | | file://:0:0:0:0 | & | +| main.rs:2445:26:2445:30 | "foo" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2446:13:2446:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2446:26:2446:30 | "bar" | | file://:0:0:0:0 | & | +| main.rs:2446:26:2446:30 | "bar" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2447:13:2447:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2447:26:2447:30 | "baz" | | file://:0:0:0:0 | & | +| main.rs:2447:26:2447:30 | "baz" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2449:13:2449:13 | s | | {EXTERNAL LOCATION} | Item | +| main.rs:2449:13:2449:13 | s | | file://:0:0:0:0 | & | +| main.rs:2449:13:2449:13 | s | &T | {EXTERNAL LOCATION} | String | +| main.rs:2449:18:2449:25 | strings3 | | file://:0:0:0:0 | & | +| main.rs:2449:18:2449:25 | strings3 | &T | file://:0:0:0:0 | [] | +| main.rs:2449:18:2449:25 | strings3 | &T.[T;...] | {EXTERNAL LOCATION} | String | +| main.rs:2451:13:2451:21 | callables | | file://:0:0:0:0 | [] | +| main.rs:2451:13:2451:21 | callables | [T;...] | main.rs:2399:5:2399:24 | MyCallable | +| main.rs:2451:25:2451:81 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2451:25:2451:81 | [...] | [T;...] | main.rs:2399:5:2399:24 | MyCallable | +| main.rs:2451:26:2451:42 | ...::new(...) | | main.rs:2399:5:2399:24 | MyCallable | +| main.rs:2451:45:2451:61 | ...::new(...) | | main.rs:2399:5:2399:24 | MyCallable | +| main.rs:2451:64:2451:80 | ...::new(...) | | main.rs:2399:5:2399:24 | MyCallable | +| main.rs:2452:13:2452:13 | c | | main.rs:2399:5:2399:24 | MyCallable | +| main.rs:2453:12:2453:20 | callables | | file://:0:0:0:0 | [] | +| main.rs:2453:12:2453:20 | callables | [T;...] | main.rs:2399:5:2399:24 | MyCallable | +| main.rs:2455:17:2455:22 | result | | {EXTERNAL LOCATION} | i64 | +| main.rs:2455:26:2455:26 | c | | main.rs:2399:5:2399:24 | MyCallable | +| main.rs:2455:26:2455:33 | c.call() | | {EXTERNAL LOCATION} | i64 | +| main.rs:2460:13:2460:13 | i | | {EXTERNAL LOCATION} | Item | +| main.rs:2460:13:2460:13 | i | | {EXTERNAL LOCATION} | i32 | +| main.rs:2460:18:2460:18 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2460:18:2460:22 | 0..10 | | {EXTERNAL LOCATION} | Range | +| main.rs:2460:18:2460:22 | 0..10 | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2460:21:2460:22 | 10 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2461:13:2461:13 | u | | {EXTERNAL LOCATION} | Range | +| main.rs:2461:13:2461:13 | u | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2461:13:2461:13 | u | Idx | {EXTERNAL LOCATION} | u8 | +| main.rs:2461:18:2461:26 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2461:18:2461:26 | [...] | [T;...] | {EXTERNAL LOCATION} | Range | +| main.rs:2461:18:2461:26 | [...] | [T;...].Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2461:18:2461:26 | [...] | [T;...].Idx | {EXTERNAL LOCATION} | u8 | +| main.rs:2461:19:2461:21 | 0u8 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2461:19:2461:25 | 0u8..10 | | {EXTERNAL LOCATION} | Range | +| main.rs:2461:19:2461:25 | 0u8..10 | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2461:19:2461:25 | 0u8..10 | Idx | {EXTERNAL LOCATION} | u8 | +| main.rs:2461:24:2461:25 | 10 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2461:24:2461:25 | 10 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2462:13:2462:17 | range | | {EXTERNAL LOCATION} | Range | +| main.rs:2462:13:2462:17 | range | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2462:21:2462:21 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2462:21:2462:25 | 0..10 | | {EXTERNAL LOCATION} | Range | +| main.rs:2462:21:2462:25 | 0..10 | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2462:24:2462:25 | 10 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2463:13:2463:13 | i | | {EXTERNAL LOCATION} | Item | +| main.rs:2463:13:2463:13 | i | | {EXTERNAL LOCATION} | i32 | +| main.rs:2463:18:2463:22 | range | | {EXTERNAL LOCATION} | Range | +| main.rs:2463:18:2463:22 | range | Idx | {EXTERNAL LOCATION} | i32 | +| main.rs:2464:13:2464:22 | range_full | | {EXTERNAL LOCATION} | RangeFull | +| main.rs:2464:26:2464:27 | .. | | {EXTERNAL LOCATION} | RangeFull | +| main.rs:2465:13:2465:13 | i | | {EXTERNAL LOCATION} | Item | +| main.rs:2465:18:2465:48 | &... | | file://:0:0:0:0 | & | +| main.rs:2465:19:2465:36 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2465:19:2465:36 | [...] | [T;...] | {EXTERNAL LOCATION} | i64 | +| main.rs:2465:20:2465:23 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2465:26:2465:29 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2465:32:2465:35 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2465:38:2465:47 | range_full | | {EXTERNAL LOCATION} | RangeFull | +| main.rs:2467:13:2467:18 | range1 | | {EXTERNAL LOCATION} | Range | +| main.rs:2467:13:2467:18 | range1 | Idx | {EXTERNAL LOCATION} | u16 | +| main.rs:2468:9:2471:9 | ...::Range {...} | | {EXTERNAL LOCATION} | Range | +| main.rs:2468:9:2471:9 | ...::Range {...} | Idx | {EXTERNAL LOCATION} | u16 | +| main.rs:2469:20:2469:23 | 0u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2470:18:2470:22 | 10u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2472:13:2472:13 | u | | {EXTERNAL LOCATION} | Item | +| main.rs:2472:13:2472:13 | u | | {EXTERNAL LOCATION} | u16 | +| main.rs:2472:18:2472:23 | range1 | | {EXTERNAL LOCATION} | Range | +| main.rs:2472:18:2472:23 | range1 | Idx | {EXTERNAL LOCATION} | u16 | +| main.rs:2476:26:2476:26 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2476:29:2476:29 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2476:32:2476:32 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2479:13:2479:18 | vals4a | | {EXTERNAL LOCATION} | Vec | +| main.rs:2479:13:2479:18 | vals4a | A | {EXTERNAL LOCATION} | Global | +| main.rs:2479:13:2479:18 | vals4a | T | {EXTERNAL LOCATION} | u16 | +| main.rs:2479:32:2479:43 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2479:32:2479:43 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2479:32:2479:43 | [...] | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2479:32:2479:52 | ... .to_vec() | | {EXTERNAL LOCATION} | Vec | +| main.rs:2479:32:2479:52 | ... .to_vec() | A | {EXTERNAL LOCATION} | Global | +| main.rs:2479:32:2479:52 | ... .to_vec() | T | {EXTERNAL LOCATION} | u16 | +| main.rs:2479:33:2479:36 | 1u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2479:39:2479:39 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2479:39:2479:39 | 2 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2479:42:2479:42 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2479:42:2479:42 | 3 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2480:13:2480:13 | u | | {EXTERNAL LOCATION} | u16 | +| main.rs:2480:13:2480:13 | u | | file://:0:0:0:0 | & | +| main.rs:2480:18:2480:23 | vals4a | | {EXTERNAL LOCATION} | Vec | +| main.rs:2480:18:2480:23 | vals4a | A | {EXTERNAL LOCATION} | Global | +| main.rs:2480:18:2480:23 | vals4a | T | {EXTERNAL LOCATION} | u16 | +| main.rs:2482:22:2482:33 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2482:22:2482:33 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2482:22:2482:33 | [...] | [T;...] | {EXTERNAL LOCATION} | u16 | +| main.rs:2482:23:2482:26 | 1u16 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2482:29:2482:29 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2482:29:2482:29 | 2 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2482:32:2482:32 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2482:32:2482:32 | 3 | | {EXTERNAL LOCATION} | u16 | +| main.rs:2485:13:2485:17 | vals5 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2485:13:2485:17 | vals5 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2485:13:2485:17 | vals5 | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2485:13:2485:17 | vals5 | T | {EXTERNAL LOCATION} | u32 | +| main.rs:2485:21:2485:43 | ...::from(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2485:21:2485:43 | ...::from(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2485:21:2485:43 | ...::from(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2485:21:2485:43 | ...::from(...) | T | {EXTERNAL LOCATION} | u32 | +| main.rs:2485:31:2485:42 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2485:31:2485:42 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2485:31:2485:42 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | +| main.rs:2485:32:2485:35 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2485:38:2485:38 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2485:38:2485:38 | 2 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2485:41:2485:41 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2485:41:2485:41 | 3 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2486:13:2486:13 | u | | {EXTERNAL LOCATION} | i32 | +| main.rs:2486:13:2486:13 | u | | {EXTERNAL LOCATION} | u32 | +| main.rs:2486:13:2486:13 | u | | file://:0:0:0:0 | & | +| main.rs:2486:18:2486:22 | vals5 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2486:18:2486:22 | vals5 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2486:18:2486:22 | vals5 | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2486:18:2486:22 | vals5 | T | {EXTERNAL LOCATION} | u32 | +| main.rs:2488:13:2488:17 | vals6 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2488:13:2488:17 | vals6 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2488:13:2488:17 | vals6 | T | file://:0:0:0:0 | & | +| main.rs:2488:13:2488:17 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 | +| main.rs:2488:32:2488:43 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2488:32:2488:43 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2488:32:2488:43 | [...] | [T;...] | {EXTERNAL LOCATION} | u64 | +| main.rs:2488:32:2488:60 | ... .collect() | | {EXTERNAL LOCATION} | Vec | +| main.rs:2488:32:2488:60 | ... .collect() | A | {EXTERNAL LOCATION} | Global | +| main.rs:2488:32:2488:60 | ... .collect() | T | file://:0:0:0:0 | & | +| main.rs:2488:32:2488:60 | ... .collect() | T.&T | {EXTERNAL LOCATION} | u64 | +| main.rs:2488:33:2488:36 | 1u64 | | {EXTERNAL LOCATION} | u64 | +| main.rs:2488:39:2488:39 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2488:39:2488:39 | 2 | | {EXTERNAL LOCATION} | u64 | +| main.rs:2488:42:2488:42 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2488:42:2488:42 | 3 | | {EXTERNAL LOCATION} | u64 | +| main.rs:2489:13:2489:13 | u | | file://:0:0:0:0 | & | +| main.rs:2489:13:2489:13 | u | &T | {EXTERNAL LOCATION} | u64 | +| main.rs:2489:18:2489:22 | vals6 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2489:18:2489:22 | vals6 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2489:18:2489:22 | vals6 | T | file://:0:0:0:0 | & | +| main.rs:2489:18:2489:22 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 | +| main.rs:2491:17:2491:21 | vals7 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2491:17:2491:21 | vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2491:17:2491:21 | vals7 | T | {EXTERNAL LOCATION} | u8 | +| main.rs:2491:25:2491:34 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2491:25:2491:34 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2491:25:2491:34 | ...::new(...) | T | {EXTERNAL LOCATION} | u8 | +| main.rs:2492:9:2492:13 | vals7 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2492:9:2492:13 | vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2492:9:2492:13 | vals7 | T | {EXTERNAL LOCATION} | u8 | +| main.rs:2492:20:2492:22 | 1u8 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2493:13:2493:13 | u | | {EXTERNAL LOCATION} | u8 | +| main.rs:2493:13:2493:13 | u | | file://:0:0:0:0 | & | +| main.rs:2493:18:2493:22 | vals7 | | {EXTERNAL LOCATION} | Vec | +| main.rs:2493:18:2493:22 | vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2493:18:2493:22 | vals7 | T | {EXTERNAL LOCATION} | u8 | +| main.rs:2495:33:2495:33 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2495:36:2495:36 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2495:45:2495:45 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2495:48:2495:48 | 4 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2502:17:2502:20 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2502:17:2502:20 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2502:17:2502:20 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2502:17:2502:20 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2502:17:2502:20 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2502:17:2502:20 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2502:17:2502:20 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2502:24:2502:55 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2502:24:2502:55 | ...::new(...) | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2502:24:2502:55 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2502:24:2502:55 | ...::new(...) | V | {EXTERNAL LOCATION} | Box | +| main.rs:2502:24:2502:55 | ...::new(...) | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2502:24:2502:55 | ...::new(...) | V.T | file://:0:0:0:0 | & | +| main.rs:2502:24:2502:55 | ...::new(...) | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2503:9:2503:12 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2503:9:2503:12 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2503:9:2503:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2503:9:2503:12 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2503:9:2503:12 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2503:9:2503:12 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2503:9:2503:12 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2503:9:2503:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2503:9:2503:39 | map1.insert(...) | T | {EXTERNAL LOCATION} | Box | +| main.rs:2503:9:2503:39 | map1.insert(...) | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2503:9:2503:39 | map1.insert(...) | T.T | file://:0:0:0:0 | & | +| main.rs:2503:9:2503:39 | map1.insert(...) | T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2503:21:2503:21 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2503:24:2503:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2503:24:2503:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2503:24:2503:38 | ...::new(...) | T | file://:0:0:0:0 | & | +| main.rs:2503:24:2503:38 | ...::new(...) | T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2503:33:2503:37 | "one" | | file://:0:0:0:0 | & | +| main.rs:2503:33:2503:37 | "one" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2504:9:2504:12 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2504:9:2504:12 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2504:9:2504:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2504:9:2504:12 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2504:9:2504:12 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2504:9:2504:12 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2504:9:2504:12 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2504:9:2504:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2504:9:2504:39 | map1.insert(...) | T | {EXTERNAL LOCATION} | Box | +| main.rs:2504:9:2504:39 | map1.insert(...) | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2504:9:2504:39 | map1.insert(...) | T.T | file://:0:0:0:0 | & | +| main.rs:2504:9:2504:39 | map1.insert(...) | T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2504:21:2504:21 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2504:24:2504:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2504:24:2504:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2504:24:2504:38 | ...::new(...) | T | file://:0:0:0:0 | & | +| main.rs:2504:24:2504:38 | ...::new(...) | T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2504:33:2504:37 | "two" | | file://:0:0:0:0 | & | +| main.rs:2504:33:2504:37 | "two" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2505:13:2505:15 | key | | {EXTERNAL LOCATION} | Item | +| main.rs:2505:13:2505:15 | key | | file://:0:0:0:0 | & | +| main.rs:2505:13:2505:15 | key | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:2505:20:2505:23 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2505:20:2505:23 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2505:20:2505:23 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2505:20:2505:23 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2505:20:2505:23 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2505:20:2505:23 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2505:20:2505:23 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2505:20:2505:30 | map1.keys() | | {EXTERNAL LOCATION} | Keys | +| main.rs:2505:20:2505:30 | map1.keys() | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2505:20:2505:30 | map1.keys() | V | {EXTERNAL LOCATION} | Box | +| main.rs:2505:20:2505:30 | map1.keys() | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2505:20:2505:30 | map1.keys() | V.T | file://:0:0:0:0 | & | +| main.rs:2505:20:2505:30 | map1.keys() | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2506:13:2506:17 | value | | {EXTERNAL LOCATION} | Item | +| main.rs:2506:13:2506:17 | value | | file://:0:0:0:0 | & | +| main.rs:2506:13:2506:17 | value | &T | {EXTERNAL LOCATION} | Box | +| main.rs:2506:13:2506:17 | value | &T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2506:13:2506:17 | value | &T.T | file://:0:0:0:0 | & | +| main.rs:2506:13:2506:17 | value | &T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2506:22:2506:25 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2506:22:2506:25 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2506:22:2506:25 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2506:22:2506:25 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2506:22:2506:25 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2506:22:2506:25 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2506:22:2506:25 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2506:22:2506:34 | map1.values() | | {EXTERNAL LOCATION} | Values | +| main.rs:2506:22:2506:34 | map1.values() | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2506:22:2506:34 | map1.values() | V | {EXTERNAL LOCATION} | Box | +| main.rs:2506:22:2506:34 | map1.values() | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2506:22:2506:34 | map1.values() | V.T | file://:0:0:0:0 | & | +| main.rs:2506:22:2506:34 | map1.values() | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2507:13:2507:24 | TuplePat | | file://:0:0:0:0 | (T_2) | +| main.rs:2507:13:2507:24 | TuplePat | 0(2) | file://:0:0:0:0 | & | +| main.rs:2507:13:2507:24 | TuplePat | 0(2).&T | {EXTERNAL LOCATION} | i32 | +| main.rs:2507:13:2507:24 | TuplePat | 1(2) | file://:0:0:0:0 | & | +| main.rs:2507:13:2507:24 | TuplePat | 1(2).&T | {EXTERNAL LOCATION} | Box | +| main.rs:2507:13:2507:24 | TuplePat | 1(2).&T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2507:13:2507:24 | TuplePat | 1(2).&T.T | file://:0:0:0:0 | & | +| main.rs:2507:13:2507:24 | TuplePat | 1(2).&T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2507:14:2507:16 | key | | file://:0:0:0:0 | & | +| main.rs:2507:14:2507:16 | key | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:2507:19:2507:23 | value | | file://:0:0:0:0 | & | +| main.rs:2507:19:2507:23 | value | &T | {EXTERNAL LOCATION} | Box | +| main.rs:2507:19:2507:23 | value | &T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2507:19:2507:23 | value | &T.T | file://:0:0:0:0 | & | +| main.rs:2507:19:2507:23 | value | &T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2507:29:2507:32 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2507:29:2507:32 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2507:29:2507:32 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2507:29:2507:32 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2507:29:2507:32 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2507:29:2507:32 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2507:29:2507:32 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2507:29:2507:39 | map1.iter() | | {EXTERNAL LOCATION} | Iter | +| main.rs:2507:29:2507:39 | map1.iter() | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2507:29:2507:39 | map1.iter() | V | {EXTERNAL LOCATION} | Box | +| main.rs:2507:29:2507:39 | map1.iter() | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2507:29:2507:39 | map1.iter() | V.T | file://:0:0:0:0 | & | +| main.rs:2507:29:2507:39 | map1.iter() | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2508:13:2508:24 | TuplePat | | file://:0:0:0:0 | (T_2) | +| main.rs:2508:13:2508:24 | TuplePat | 0(2) | file://:0:0:0:0 | & | +| main.rs:2508:13:2508:24 | TuplePat | 0(2).&T | {EXTERNAL LOCATION} | i32 | +| main.rs:2508:13:2508:24 | TuplePat | 1(2) | file://:0:0:0:0 | & | +| main.rs:2508:13:2508:24 | TuplePat | 1(2).&T | {EXTERNAL LOCATION} | Box | +| main.rs:2508:13:2508:24 | TuplePat | 1(2).&T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2508:13:2508:24 | TuplePat | 1(2).&T.T | file://:0:0:0:0 | & | +| main.rs:2508:13:2508:24 | TuplePat | 1(2).&T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2508:14:2508:16 | key | | file://:0:0:0:0 | & | +| main.rs:2508:14:2508:16 | key | &T | {EXTERNAL LOCATION} | i32 | +| main.rs:2508:19:2508:23 | value | | file://:0:0:0:0 | & | +| main.rs:2508:19:2508:23 | value | &T | {EXTERNAL LOCATION} | Box | +| main.rs:2508:19:2508:23 | value | &T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2508:19:2508:23 | value | &T.T | file://:0:0:0:0 | & | +| main.rs:2508:19:2508:23 | value | &T.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2508:29:2508:33 | &map1 | | file://:0:0:0:0 | & | +| main.rs:2508:29:2508:33 | &map1 | &T | {EXTERNAL LOCATION} | HashMap | +| main.rs:2508:29:2508:33 | &map1 | &T.K | {EXTERNAL LOCATION} | i32 | +| main.rs:2508:29:2508:33 | &map1 | &T.S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2508:29:2508:33 | &map1 | &T.V | {EXTERNAL LOCATION} | Box | +| main.rs:2508:29:2508:33 | &map1 | &T.V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2508:29:2508:33 | &map1 | &T.V.T | file://:0:0:0:0 | & | +| main.rs:2508:29:2508:33 | &map1 | &T.V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2508:30:2508:33 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2508:30:2508:33 | map1 | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2508:30:2508:33 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2508:30:2508:33 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2508:30:2508:33 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2508:30:2508:33 | map1 | V.T | file://:0:0:0:0 | & | +| main.rs:2508:30:2508:33 | map1 | V.T.&T | {EXTERNAL LOCATION} | str | +| main.rs:2512:17:2512:17 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2512:26:2512:26 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2512:26:2512:26 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2514:23:2514:23 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2514:23:2514:28 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2514:27:2514:28 | 10 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2514:27:2514:28 | 10 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2516:13:2516:13 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2516:13:2516:18 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:2516:18:2516:18 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2528:40:2530:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| main.rs:2528:40:2530:9 | { ... } | T | main.rs:2522:5:2522:20 | S1 | +| main.rs:2528:40:2530:9 | { ... } | T.T | main.rs:2527:10:2527:19 | T | +| main.rs:2529:13:2529:16 | None | | {EXTERNAL LOCATION} | Option | +| main.rs:2529:13:2529:16 | None | T | main.rs:2522:5:2522:20 | S1 | +| main.rs:2529:13:2529:16 | None | T.T | main.rs:2527:10:2527:19 | T | +| main.rs:2532:30:2534:9 | { ... } | | main.rs:2522:5:2522:20 | S1 | +| main.rs:2532:30:2534:9 | { ... } | T | main.rs:2527:10:2527:19 | T | +| main.rs:2533:13:2533:28 | S1(...) | | main.rs:2522:5:2522:20 | S1 | +| main.rs:2533:13:2533:28 | S1(...) | T | main.rs:2527:10:2527:19 | T | +| main.rs:2533:16:2533:27 | ...::default(...) | | main.rs:2527:10:2527:19 | T | +| main.rs:2536:19:2536:22 | SelfParam | | main.rs:2522:5:2522:20 | S1 | +| main.rs:2536:19:2536:22 | SelfParam | T | main.rs:2527:10:2527:19 | T | +| main.rs:2536:33:2538:9 | { ... } | | main.rs:2522:5:2522:20 | S1 | +| main.rs:2536:33:2538:9 | { ... } | T | main.rs:2527:10:2527:19 | T | +| main.rs:2537:13:2537:16 | self | | main.rs:2522:5:2522:20 | S1 | +| main.rs:2537:13:2537:16 | self | T | main.rs:2527:10:2527:19 | T | +| main.rs:2549:15:2549:15 | x | | main.rs:2549:12:2549:12 | T | +| main.rs:2549:26:2551:5 | { ... } | | main.rs:2549:12:2549:12 | T | +| main.rs:2550:9:2550:9 | x | | main.rs:2549:12:2549:12 | T | +| main.rs:2554:13:2554:14 | x1 | | {EXTERNAL LOCATION} | Option | +| main.rs:2554:13:2554:14 | x1 | T | main.rs:2522:5:2522:20 | S1 | +| main.rs:2554:13:2554:14 | x1 | T.T | main.rs:2524:5:2525:14 | S2 | +| main.rs:2554:34:2554:48 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2554:34:2554:48 | ...::assoc_fun(...) | T | main.rs:2522:5:2522:20 | S1 | +| main.rs:2554:34:2554:48 | ...::assoc_fun(...) | T.T | main.rs:2524:5:2525:14 | S2 | +| main.rs:2555:13:2555:14 | x2 | | {EXTERNAL LOCATION} | Option | +| main.rs:2555:13:2555:14 | x2 | T | main.rs:2522:5:2522:20 | S1 | +| main.rs:2555:13:2555:14 | x2 | T.T | main.rs:2524:5:2525:14 | S2 | +| main.rs:2555:18:2555:38 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2555:18:2555:38 | ...::assoc_fun(...) | T | main.rs:2522:5:2522:20 | S1 | +| main.rs:2555:18:2555:38 | ...::assoc_fun(...) | T.T | main.rs:2524:5:2525:14 | S2 | +| main.rs:2556:13:2556:14 | x3 | | {EXTERNAL LOCATION} | Option | +| main.rs:2556:13:2556:14 | x3 | T | main.rs:2522:5:2522:20 | S1 | +| main.rs:2556:13:2556:14 | x3 | T.T | main.rs:2524:5:2525:14 | S2 | +| main.rs:2556:18:2556:32 | ...::assoc_fun(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2556:18:2556:32 | ...::assoc_fun(...) | T | main.rs:2522:5:2522:20 | S1 | +| main.rs:2556:18:2556:32 | ...::assoc_fun(...) | T.T | main.rs:2524:5:2525:14 | S2 | +| main.rs:2557:13:2557:14 | x4 | | main.rs:2522:5:2522:20 | S1 | +| main.rs:2557:13:2557:14 | x4 | T | main.rs:2524:5:2525:14 | S2 | +| main.rs:2557:18:2557:48 | ...::method(...) | | main.rs:2522:5:2522:20 | S1 | +| main.rs:2557:18:2557:48 | ...::method(...) | T | main.rs:2524:5:2525:14 | S2 | +| main.rs:2557:35:2557:47 | ...::default(...) | | main.rs:2522:5:2522:20 | S1 | +| main.rs:2557:35:2557:47 | ...::default(...) | T | main.rs:2524:5:2525:14 | S2 | +| main.rs:2558:13:2558:14 | x5 | | main.rs:2522:5:2522:20 | S1 | +| main.rs:2558:13:2558:14 | x5 | T | main.rs:2524:5:2525:14 | S2 | +| main.rs:2558:18:2558:42 | ...::method(...) | | main.rs:2522:5:2522:20 | S1 | +| main.rs:2558:18:2558:42 | ...::method(...) | T | main.rs:2524:5:2525:14 | S2 | +| main.rs:2558:29:2558:41 | ...::default(...) | | main.rs:2522:5:2522:20 | S1 | +| main.rs:2558:29:2558:41 | ...::default(...) | T | main.rs:2524:5:2525:14 | S2 | +| main.rs:2559:13:2559:14 | x6 | | main.rs:2543:5:2543:27 | S4 | +| main.rs:2559:13:2559:14 | x6 | T4 | main.rs:2524:5:2525:14 | S2 | +| main.rs:2559:18:2559:45 | S4::<...>(...) | | main.rs:2543:5:2543:27 | S4 | +| main.rs:2559:18:2559:45 | S4::<...>(...) | T4 | main.rs:2524:5:2525:14 | S2 | +| main.rs:2559:27:2559:44 | ...::default(...) | | main.rs:2524:5:2525:14 | S2 | +| main.rs:2560:13:2560:14 | x7 | | main.rs:2543:5:2543:27 | S4 | +| main.rs:2560:13:2560:14 | x7 | T4 | main.rs:2524:5:2525:14 | S2 | +| main.rs:2560:18:2560:23 | S4(...) | | main.rs:2543:5:2543:27 | S4 | +| main.rs:2560:18:2560:23 | S4(...) | T4 | main.rs:2524:5:2525:14 | S2 | +| main.rs:2560:21:2560:22 | S2 | | main.rs:2524:5:2525:14 | S2 | +| main.rs:2561:13:2561:14 | x8 | | main.rs:2543:5:2543:27 | S4 | +| main.rs:2561:13:2561:14 | x8 | T4 | {EXTERNAL LOCATION} | i32 | +| main.rs:2561:18:2561:22 | S4(...) | | main.rs:2543:5:2543:27 | S4 | +| main.rs:2561:18:2561:22 | S4(...) | T4 | {EXTERNAL LOCATION} | i32 | +| main.rs:2561:21:2561:21 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2562:13:2562:14 | x9 | | main.rs:2543:5:2543:27 | S4 | +| main.rs:2562:13:2562:14 | x9 | T4 | main.rs:2524:5:2525:14 | S2 | +| main.rs:2562:18:2562:34 | S4(...) | | main.rs:2543:5:2543:27 | S4 | +| main.rs:2562:18:2562:34 | S4(...) | T4 | main.rs:2524:5:2525:14 | S2 | +| main.rs:2562:21:2562:33 | ...::default(...) | | main.rs:2524:5:2525:14 | S2 | +| main.rs:2563:13:2563:15 | x10 | | main.rs:2545:5:2547:5 | S5 | +| main.rs:2563:13:2563:15 | x10 | T5 | main.rs:2524:5:2525:14 | S2 | +| main.rs:2563:19:2566:9 | S5::<...> {...} | | main.rs:2545:5:2547:5 | S5 | +| main.rs:2563:19:2566:9 | S5::<...> {...} | T5 | main.rs:2524:5:2525:14 | S2 | +| main.rs:2565:20:2565:37 | ...::default(...) | | main.rs:2524:5:2525:14 | S2 | +| main.rs:2567:13:2567:15 | x11 | | main.rs:2545:5:2547:5 | S5 | +| main.rs:2567:13:2567:15 | x11 | T5 | main.rs:2524:5:2525:14 | S2 | +| main.rs:2567:19:2567:34 | S5 {...} | | main.rs:2545:5:2547:5 | S5 | +| main.rs:2567:19:2567:34 | S5 {...} | T5 | main.rs:2524:5:2525:14 | S2 | +| main.rs:2567:31:2567:32 | S2 | | main.rs:2524:5:2525:14 | S2 | +| main.rs:2568:13:2568:15 | x12 | | main.rs:2545:5:2547:5 | S5 | +| main.rs:2568:13:2568:15 | x12 | T5 | {EXTERNAL LOCATION} | i32 | +| main.rs:2568:19:2568:33 | S5 {...} | | main.rs:2545:5:2547:5 | S5 | +| main.rs:2568:19:2568:33 | S5 {...} | T5 | {EXTERNAL LOCATION} | i32 | +| main.rs:2568:31:2568:31 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2569:13:2569:15 | x13 | | main.rs:2545:5:2547:5 | S5 | +| main.rs:2569:13:2569:15 | x13 | T5 | main.rs:2524:5:2525:14 | S2 | +| main.rs:2569:19:2572:9 | S5 {...} | | main.rs:2545:5:2547:5 | S5 | +| main.rs:2569:19:2572:9 | S5 {...} | T5 | main.rs:2524:5:2525:14 | S2 | +| main.rs:2571:20:2571:32 | ...::default(...) | | main.rs:2524:5:2525:14 | S2 | +| main.rs:2573:13:2573:15 | x14 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2573:19:2573:48 | foo::<...>(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:2573:30:2573:47 | ...::default(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:2574:13:2574:15 | x15 | | main.rs:2522:5:2522:20 | S1 | +| main.rs:2574:13:2574:15 | x15 | T | main.rs:2524:5:2525:14 | S2 | +| main.rs:2574:19:2574:37 | ...::default(...) | | main.rs:2522:5:2522:20 | S1 | +| main.rs:2574:19:2574:37 | ...::default(...) | T | main.rs:2524:5:2525:14 | S2 | +| main.rs:2583:35:2585:9 | { ... } | | file://:0:0:0:0 | (T_2) | +| main.rs:2583:35:2585:9 | { ... } | 0(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2583:35:2585:9 | { ... } | 1(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2584:13:2584:26 | TupleExpr | | file://:0:0:0:0 | (T_2) | +| main.rs:2584:13:2584:26 | TupleExpr | 0(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2584:13:2584:26 | TupleExpr | 1(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2584:14:2584:18 | S1 {...} | | main.rs:2579:5:2580:16 | S1 | +| main.rs:2584:21:2584:25 | S1 {...} | | main.rs:2579:5:2580:16 | S1 | +| main.rs:2586:16:2586:19 | SelfParam | | main.rs:2579:5:2580:16 | S1 | +| main.rs:2590:13:2590:13 | a | | file://:0:0:0:0 | (T_2) | +| main.rs:2590:13:2590:13 | a | 0(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2590:13:2590:13 | a | 1(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2590:17:2590:30 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2590:17:2590:30 | ...::get_pair(...) | 0(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2590:17:2590:30 | ...::get_pair(...) | 1(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2591:17:2591:17 | b | | file://:0:0:0:0 | (T_2) | +| main.rs:2591:17:2591:17 | b | 0(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2591:17:2591:17 | b | 1(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2591:21:2591:34 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2591:21:2591:34 | ...::get_pair(...) | 0(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2591:21:2591:34 | ...::get_pair(...) | 1(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2592:13:2592:18 | TuplePat | | file://:0:0:0:0 | (T_2) | +| main.rs:2592:13:2592:18 | TuplePat | 0(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2592:13:2592:18 | TuplePat | 1(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2592:14:2592:14 | c | | main.rs:2579:5:2580:16 | S1 | +| main.rs:2592:17:2592:17 | d | | main.rs:2579:5:2580:16 | S1 | +| main.rs:2592:22:2592:35 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2592:22:2592:35 | ...::get_pair(...) | 0(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2592:22:2592:35 | ...::get_pair(...) | 1(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2593:13:2593:22 | TuplePat | | file://:0:0:0:0 | (T_2) | +| main.rs:2593:13:2593:22 | TuplePat | 0(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2593:13:2593:22 | TuplePat | 1(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2593:18:2593:18 | e | | main.rs:2579:5:2580:16 | S1 | +| main.rs:2593:21:2593:21 | f | | main.rs:2579:5:2580:16 | S1 | +| main.rs:2593:26:2593:39 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2593:26:2593:39 | ...::get_pair(...) | 0(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2593:26:2593:39 | ...::get_pair(...) | 1(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2594:13:2594:26 | TuplePat | | file://:0:0:0:0 | (T_2) | +| main.rs:2594:13:2594:26 | TuplePat | 0(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2594:13:2594:26 | TuplePat | 1(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2594:18:2594:18 | g | | main.rs:2579:5:2580:16 | S1 | +| main.rs:2594:25:2594:25 | h | | main.rs:2579:5:2580:16 | S1 | +| main.rs:2594:30:2594:43 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2594:30:2594:43 | ...::get_pair(...) | 0(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2594:30:2594:43 | ...::get_pair(...) | 1(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2596:9:2596:9 | a | | file://:0:0:0:0 | (T_2) | +| main.rs:2596:9:2596:9 | a | 0(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2596:9:2596:9 | a | 1(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2596:9:2596:11 | a.0 | | main.rs:2579:5:2580:16 | S1 | +| main.rs:2597:9:2597:9 | b | | file://:0:0:0:0 | (T_2) | +| main.rs:2597:9:2597:9 | b | 0(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2597:9:2597:9 | b | 1(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2597:9:2597:11 | b.1 | | main.rs:2579:5:2580:16 | S1 | +| main.rs:2598:9:2598:9 | c | | main.rs:2579:5:2580:16 | S1 | +| main.rs:2599:9:2599:9 | d | | main.rs:2579:5:2580:16 | S1 | +| main.rs:2600:9:2600:9 | e | | main.rs:2579:5:2580:16 | S1 | +| main.rs:2601:9:2601:9 | f | | main.rs:2579:5:2580:16 | S1 | +| main.rs:2602:9:2602:9 | g | | main.rs:2579:5:2580:16 | S1 | +| main.rs:2603:9:2603:9 | h | | main.rs:2579:5:2580:16 | S1 | +| main.rs:2608:13:2608:13 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2608:17:2608:34 | ...::default(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2609:13:2609:13 | b | | {EXTERNAL LOCATION} | bool | +| main.rs:2609:17:2609:34 | ...::default(...) | | {EXTERNAL LOCATION} | bool | +| main.rs:2610:13:2610:16 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2610:13:2610:16 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | +| main.rs:2610:13:2610:16 | pair | 1(2) | {EXTERNAL LOCATION} | bool | +| main.rs:2610:20:2610:25 | TupleExpr | | file://:0:0:0:0 | (T_2) | +| main.rs:2610:20:2610:25 | TupleExpr | 0(2) | {EXTERNAL LOCATION} | i64 | +| main.rs:2610:20:2610:25 | TupleExpr | 1(2) | {EXTERNAL LOCATION} | bool | +| main.rs:2610:21:2610:21 | a | | {EXTERNAL LOCATION} | i64 | +| main.rs:2610:24:2610:24 | b | | {EXTERNAL LOCATION} | bool | +| main.rs:2611:13:2611:13 | i | | {EXTERNAL LOCATION} | i64 | +| main.rs:2611:22:2611:25 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2611:22:2611:25 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | +| main.rs:2611:22:2611:25 | pair | 1(2) | {EXTERNAL LOCATION} | bool | +| main.rs:2611:22:2611:27 | pair.0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:2612:13:2612:13 | j | | {EXTERNAL LOCATION} | bool | +| main.rs:2612:23:2612:26 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2612:23:2612:26 | pair | 0(2) | {EXTERNAL LOCATION} | i64 | +| main.rs:2612:23:2612:26 | pair | 1(2) | {EXTERNAL LOCATION} | bool | +| main.rs:2612:23:2612:28 | pair.1 | | {EXTERNAL LOCATION} | bool | +| main.rs:2614:13:2614:16 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2614:13:2614:16 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2614:13:2614:16 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2614:20:2614:25 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2614:20:2614:25 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2614:20:2614:32 | ... .into() | | file://:0:0:0:0 | (T_2) | +| main.rs:2614:20:2614:32 | ... .into() | 0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2614:20:2614:32 | ... .into() | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2614:21:2614:21 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2614:24:2614:24 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2615:15:2615:18 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2615:15:2615:18 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2615:15:2615:18 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2616:13:2616:18 | TuplePat | | file://:0:0:0:0 | (T_2) | +| main.rs:2616:13:2616:18 | TuplePat | 0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2616:13:2616:18 | TuplePat | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2616:14:2616:14 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2616:17:2616:17 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2616:30:2616:41 | "unexpected" | | file://:0:0:0:0 | & | +| main.rs:2616:30:2616:41 | "unexpected" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2616:30:2616:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2616:30:2616:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2617:13:2617:13 | _ | | file://:0:0:0:0 | (T_2) | +| main.rs:2617:13:2617:13 | _ | 0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2617:13:2617:13 | _ | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2617:25:2617:34 | "expected" | | file://:0:0:0:0 | & | +| main.rs:2617:25:2617:34 | "expected" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2617:25:2617:34 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2617:25:2617:34 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2619:13:2619:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2619:17:2619:20 | pair | | file://:0:0:0:0 | (T_2) | +| main.rs:2619:17:2619:20 | pair | 0(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2619:17:2619:20 | pair | 1(2) | {EXTERNAL LOCATION} | i32 | +| main.rs:2619:17:2619:22 | pair.0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2621:13:2621:13 | y | | file://:0:0:0:0 | & | +| main.rs:2621:13:2621:13 | y | &T | file://:0:0:0:0 | (T_2) | +| main.rs:2621:13:2621:13 | y | &T.0(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2621:13:2621:13 | y | &T.1(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2621:17:2621:31 | &... | | file://:0:0:0:0 | & | +| main.rs:2621:17:2621:31 | &... | &T | file://:0:0:0:0 | (T_2) | +| main.rs:2621:17:2621:31 | &... | &T.0(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2621:17:2621:31 | &... | &T.1(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2621:18:2621:31 | ...::get_pair(...) | | file://:0:0:0:0 | (T_2) | +| main.rs:2621:18:2621:31 | ...::get_pair(...) | 0(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2621:18:2621:31 | ...::get_pair(...) | 1(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2622:9:2622:9 | y | | file://:0:0:0:0 | & | +| main.rs:2622:9:2622:9 | y | &T | file://:0:0:0:0 | (T_2) | +| main.rs:2622:9:2622:9 | y | &T.0(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2622:9:2622:9 | y | &T.1(2) | main.rs:2579:5:2580:16 | S1 | +| main.rs:2622:9:2622:11 | y.0 | | main.rs:2579:5:2580:16 | S1 | +| main.rs:2629:13:2629:23 | boxed_value | | {EXTERNAL LOCATION} | Box | +| main.rs:2629:13:2629:23 | boxed_value | A | {EXTERNAL LOCATION} | Global | +| main.rs:2629:13:2629:23 | boxed_value | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2629:27:2629:42 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2629:27:2629:42 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2629:27:2629:42 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2629:36:2629:41 | 100i32 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2632:15:2632:25 | boxed_value | | {EXTERNAL LOCATION} | Box | +| main.rs:2632:15:2632:25 | boxed_value | A | {EXTERNAL LOCATION} | Global | +| main.rs:2632:15:2632:25 | boxed_value | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2633:13:2633:19 | box 100 | | {EXTERNAL LOCATION} | Box | +| main.rs:2633:13:2633:19 | box 100 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2633:13:2633:19 | box 100 | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2633:17:2633:19 | 100 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2634:26:2634:36 | "Boxed 100\\n" | | file://:0:0:0:0 | & | +| main.rs:2634:26:2634:36 | "Boxed 100\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2634:26:2634:36 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2634:26:2634:36 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2636:13:2636:17 | box ... | | {EXTERNAL LOCATION} | Box | +| main.rs:2636:13:2636:17 | box ... | A | {EXTERNAL LOCATION} | Global | +| main.rs:2636:13:2636:17 | box ... | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2638:26:2638:42 | "Boxed value: {}\\n" | | file://:0:0:0:0 | & | +| main.rs:2638:26:2638:42 | "Boxed value: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2638:26:2638:51 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2638:26:2638:51 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2643:13:2643:22 | nested_box | | {EXTERNAL LOCATION} | Box | +| main.rs:2643:13:2643:22 | nested_box | A | {EXTERNAL LOCATION} | Global | +| main.rs:2643:13:2643:22 | nested_box | T | {EXTERNAL LOCATION} | Box | +| main.rs:2643:13:2643:22 | nested_box | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2643:13:2643:22 | nested_box | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2643:26:2643:50 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2643:26:2643:50 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2643:26:2643:50 | ...::new(...) | T | {EXTERNAL LOCATION} | Box | +| main.rs:2643:26:2643:50 | ...::new(...) | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2643:26:2643:50 | ...::new(...) | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2643:35:2643:49 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2643:35:2643:49 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2643:35:2643:49 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2643:44:2643:48 | 42i32 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2644:15:2644:24 | nested_box | | {EXTERNAL LOCATION} | Box | +| main.rs:2644:15:2644:24 | nested_box | A | {EXTERNAL LOCATION} | Global | +| main.rs:2644:15:2644:24 | nested_box | T | {EXTERNAL LOCATION} | Box | +| main.rs:2644:15:2644:24 | nested_box | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2644:15:2644:24 | nested_box | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2645:13:2645:21 | box ... | | {EXTERNAL LOCATION} | Box | +| main.rs:2645:13:2645:21 | box ... | A | {EXTERNAL LOCATION} | Global | +| main.rs:2645:13:2645:21 | box ... | T | {EXTERNAL LOCATION} | Box | +| main.rs:2645:13:2645:21 | box ... | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2645:13:2645:21 | box ... | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2647:26:2647:43 | "Nested boxed: {}\\n" | | file://:0:0:0:0 | & | +| main.rs:2647:26:2647:43 | "Nested boxed: {}\\n" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2647:26:2647:59 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2647:26:2647:59 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:2659:36:2661:9 | { ... } | | main.rs:2656:5:2656:22 | Path | +| main.rs:2660:13:2660:19 | Path {...} | | main.rs:2656:5:2656:22 | Path | +| main.rs:2663:29:2663:33 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2663:29:2663:33 | SelfParam | &T | main.rs:2656:5:2656:22 | Path | +| main.rs:2663:59:2665:9 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:2663:59:2665:9 | { ... } | E | file://:0:0:0:0 | () | +| main.rs:2663:59:2665:9 | { ... } | T | main.rs:2668:5:2668:25 | PathBuf | +| main.rs:2664:13:2664:30 | Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:2664:13:2664:30 | Ok(...) | E | file://:0:0:0:0 | () | +| main.rs:2664:13:2664:30 | Ok(...) | T | main.rs:2668:5:2668:25 | PathBuf | +| main.rs:2664:16:2664:29 | ...::new(...) | | main.rs:2668:5:2668:25 | PathBuf | +| main.rs:2671:39:2673:9 | { ... } | | main.rs:2668:5:2668:25 | PathBuf | +| main.rs:2672:13:2672:22 | PathBuf {...} | | main.rs:2668:5:2668:25 | PathBuf | +| main.rs:2681:18:2681:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2681:18:2681:22 | SelfParam | &T | main.rs:2668:5:2668:25 | PathBuf | +| main.rs:2681:34:2685:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:2681:34:2685:9 | { ... } | &T | main.rs:2656:5:2656:22 | Path | +| main.rs:2683:33:2683:43 | ...::new(...) | | main.rs:2656:5:2656:22 | Path | +| main.rs:2684:13:2684:17 | &path | | file://:0:0:0:0 | & | +| main.rs:2684:13:2684:17 | &path | &T | main.rs:2656:5:2656:22 | Path | +| main.rs:2684:14:2684:17 | path | | main.rs:2656:5:2656:22 | Path | +| main.rs:2689:13:2689:17 | path1 | | main.rs:2656:5:2656:22 | Path | +| main.rs:2689:21:2689:31 | ...::new(...) | | main.rs:2656:5:2656:22 | Path | +| main.rs:2690:13:2690:17 | path2 | | {EXTERNAL LOCATION} | Result | +| main.rs:2690:13:2690:17 | path2 | E | file://:0:0:0:0 | () | +| main.rs:2690:13:2690:17 | path2 | T | main.rs:2668:5:2668:25 | PathBuf | +| main.rs:2690:21:2690:25 | path1 | | main.rs:2656:5:2656:22 | Path | +| main.rs:2690:21:2690:40 | path1.canonicalize() | | {EXTERNAL LOCATION} | Result | +| main.rs:2690:21:2690:40 | path1.canonicalize() | E | file://:0:0:0:0 | () | +| main.rs:2690:21:2690:40 | path1.canonicalize() | T | main.rs:2668:5:2668:25 | PathBuf | +| main.rs:2691:13:2691:17 | path3 | | main.rs:2668:5:2668:25 | PathBuf | +| main.rs:2691:21:2691:25 | path2 | | {EXTERNAL LOCATION} | Result | +| main.rs:2691:21:2691:25 | path2 | E | file://:0:0:0:0 | () | +| main.rs:2691:21:2691:25 | path2 | T | main.rs:2668:5:2668:25 | PathBuf | +| main.rs:2691:21:2691:34 | path2.unwrap() | | main.rs:2668:5:2668:25 | PathBuf | +| main.rs:2693:13:2693:20 | pathbuf1 | | main.rs:2668:5:2668:25 | PathBuf | +| main.rs:2693:24:2693:37 | ...::new(...) | | main.rs:2668:5:2668:25 | PathBuf | +| main.rs:2694:24:2694:31 | pathbuf1 | | main.rs:2668:5:2668:25 | PathBuf | +| main.rs:2706:5:2706:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2707:5:2707:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2707:20:2707:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2707:41:2707:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2723:5:2723:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future | | pattern_matching.rs:13:26:133:1 | { ... } | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:13:26:133:1 | { ... } | T | file://:0:0:0:0 | () | | pattern_matching.rs:14:9:14:13 | value | | {EXTERNAL LOCATION} | Option | From 1febb8cd0408595d11d5603d83a021d93b2c040d Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 23 Sep 2025 09:40:08 +0200 Subject: [PATCH 2/7] Rust: Rework call resolution and type inference for calls --- .../rust/elements/internal/OperationImpl.qll | 2 +- .../rust/elements/internal/TypeParamImpl.qll | 3 + .../codeql/rust/frameworks/stdlib/Stdlib.qll | 93 + .../codeql/rust/internal/PathResolution.qll | 8 +- rust/ql/lib/codeql/rust/internal/Type.qll | 25 + .../codeql/rust/internal/TypeInference.qll | 3289 ++++++++++------- .../lib/codeql/rust/internal/TypeMention.qll | 104 +- .../typeinference/BlanketImplementation.qll | 135 + .../typeinference/FunctionOverloading.qll | 127 + .../internal/typeinference/FunctionType.qll | 434 +++ .../typeinference/internal/TypeInference.qll | 231 +- 11 files changed, 2895 insertions(+), 1556 deletions(-) create mode 100644 rust/ql/lib/codeql/rust/internal/typeinference/BlanketImplementation.qll create mode 100644 rust/ql/lib/codeql/rust/internal/typeinference/FunctionOverloading.qll create mode 100644 rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll diff --git a/rust/ql/lib/codeql/rust/elements/internal/OperationImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/OperationImpl.qll index ea76293a1bd9..f22c95759d6e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/OperationImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/OperationImpl.qll @@ -12,7 +12,7 @@ private import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl * the canonical path `path` and the method name `method`, and if it borrows its * first `borrows` arguments. */ -private predicate isOverloaded(string op, int arity, string path, string method, int borrows) { +predicate isOverloaded(string op, int arity, string path, string method, int borrows) { arity = 1 and ( // Negation diff --git a/rust/ql/lib/codeql/rust/elements/internal/TypeParamImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/TypeParamImpl.qll index cf057831a4fd..755c5399a204 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/TypeParamImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/TypeParamImpl.qll @@ -47,6 +47,9 @@ module Impl { */ TypeBound getATypeBound() { result = this.getTypeBound(_) } + /** Holds if this type parameter has at least one type bound. */ + predicate hasTypeBound() { exists(this.getATypeBound()) } + override string toAbbreviatedString() { result = this.getName().getText() } override string toStringImpl() { result = this.getName().getText() } diff --git a/rust/ql/lib/codeql/rust/frameworks/stdlib/Stdlib.qll b/rust/ql/lib/codeql/rust/frameworks/stdlib/Stdlib.qll index 728c632759cd..773aa77f80f7 100644 --- a/rust/ql/lib/codeql/rust/frameworks/stdlib/Stdlib.qll +++ b/rust/ql/lib/codeql/rust/frameworks/stdlib/Stdlib.qll @@ -213,3 +213,96 @@ class StringStruct extends Struct { pragma[nomagic] StringStruct() { this.getCanonicalPath() = "alloc::string::String" } } + +/** + * The [`Deref` trait][1]. + * + * [1]: https://doc.rust-lang.org/core/ops/trait.Deref.html + */ +class DerefTrait extends Trait { + pragma[nomagic] + DerefTrait() { this.getCanonicalPath() = "core::ops::deref::Deref" } + + /** Gets the `deref` function. */ + Function getDerefFunction() { result = this.(TraitItemNode).getAssocItem("deref") } + + /** Gets the `Target` associated type. */ + pragma[nomagic] + TypeAlias getTargetType() { + result = this.getAssocItemList().getAnAssocItem() and + result.getName().getText() = "Target" + } +} + +/** + * The [`Index` trait][1]. + * + * [1]: https://doc.rust-lang.org/std/ops/trait.Index.html + */ +class IndexTrait extends Trait { + pragma[nomagic] + IndexTrait() { this.getCanonicalPath() = "core::ops::index::Index" } + + /** Gets the `index` function. */ + Function getIndexFunction() { result = this.(TraitItemNode).getAssocItem("index") } + + /** Gets the `Output` associated type. */ + pragma[nomagic] + TypeAlias getOutputType() { + result = this.getAssocItemList().getAnAssocItem() and + result.getName().getText() = "Output" + } +} + +/** + * The [`Box` struct][1]. + * + * [1]: https://doc.rust-lang.org/std/boxed/struct.Box.html + */ +class BoxStruct extends Struct { + pragma[nomagic] + BoxStruct() { this.getCanonicalPath() = "alloc::boxed::Box" } +} + +/** + * The [`Rc` struct][1]. + * + * [1]: https://doc.rust-lang.org/std/rc/struct.Rc.html + */ +class RcStruct extends Struct { + pragma[nomagic] + RcStruct() { this.getCanonicalPath() = "alloc::rc::Rc" } +} + +/** + * The [`Arc` struct][1]. + * + * [1]: https://doc.rust-lang.org/std/sync/struct.Arc.html + */ +class ArcStruct extends Struct { + pragma[nomagic] + ArcStruct() { this.getCanonicalPath() = "alloc::sync::Arc" } +} + +/** + * The [`Pin` struct][1]. + * + * [1]: https://doc.rust-lang.org/std/pin/struct.Pin.html + */ +class PinStruct extends Struct { + pragma[nomagic] + PinStruct() { this.getCanonicalPath() = "core::pin::Pin" } +} + +/** + * The [`Vec` struct][1]. + * + * [1]: https://doc.rust-lang.org/alloc/vec/struct.Vec.html + */ +class Vec extends Struct { + pragma[nomagic] + Vec() { this.getCanonicalPath() = "alloc::vec::Vec" } + + /** Gets the type parameter representing the element type. */ + TypeParam getElementTypeParam() { result = this.getGenericParamList().getTypeParam(0) } +} diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index 8f55a4215384..9694aa47bcba 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -840,7 +840,7 @@ final class ImplItemNode extends ImplOrTraitItemNode instanceof Impl { } } -final private class ImplTraitTypeReprItemNode extends TypeItemNode instanceof ImplTraitTypeRepr { +final class ImplTraitTypeReprItemNode extends TypeItemNode instanceof ImplTraitTypeRepr { pragma[nomagic] Path getABoundPath() { result = super.getTypeBoundList().getABound().getTypeRepr().(PathTypeRepr).getPath() @@ -963,7 +963,9 @@ final class TraitItemNode extends ImplOrTraitItemNode, TypeItemNode instanceof T Path getABoundPath() { result = super.getATypeBound().getTypeRepr().(PathTypeRepr).getPath() } pragma[nomagic] - ItemNode resolveABound() { result = resolvePath(this.getABoundPath()) } + ItemNode resolveBound(Path path) { path = this.getABoundPath() and result = resolvePath(path) } + + ItemNode resolveABound() { result = this.resolveBound(_) } override AssocItemNode getAnAssocItem() { result = this.getADescendant() } @@ -2101,7 +2103,7 @@ private predicate builtin(string name, ItemNode i) { /** Provides predicates for debugging the path resolution implementation. */ private module Debug { - private Locatable getRelevantLocatable() { + Locatable getRelevantLocatable() { exists(string filepath, int startline, int startcolumn, int endline, int endcolumn | result.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) and filepath.matches("%/main.rs") and diff --git a/rust/ql/lib/codeql/rust/internal/Type.qll b/rust/ql/lib/codeql/rust/internal/Type.qll index 9dc15e31d996..15c3d13f9d8c 100644 --- a/rust/ql/lib/codeql/rust/internal/Type.qll +++ b/rust/ql/lib/codeql/rust/internal/Type.qll @@ -6,6 +6,7 @@ private import TypeMention private import codeql.rust.internal.CachedStages private import codeql.rust.elements.internal.generated.Raw private import codeql.rust.elements.internal.generated.Synth +private import codeql.rust.frameworks.stdlib.Stdlib /** * Holds if a dyn trait type should have a type parameter associated with `n`. A @@ -624,3 +625,27 @@ final class ImplTraitTypeReprAbstraction extends TypeAbstraction, ImplTraitTypeR implTraitTypeParam(this, _, result.(TypeParamTypeParameter).getTypeParam()) } } + +/** + * Holds if `root` is a valid complex [`self` root type][1], with type + * parameter `tp`. + * + * [1]: https://doc.rust-lang.org/stable/reference/items/associated-items.html#r-items.associated.fn.method.self-ty + */ +pragma[nomagic] +predicate complexSelfRoot(Type root, TypeParameter tp) { + tp = root.(RefType).getPositionalTypeParameter(_) + or + exists(Struct s | + root = TStruct(s) and + tp = root.getPositionalTypeParameter(0) + | + s instanceof BoxStruct + or + s instanceof RcStruct + or + s instanceof ArcStruct + or + s instanceof PinStruct + ) +} diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index c450670a1fc9..de7b4447236e 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -6,6 +6,9 @@ private import PathResolution private import Type private import Type as T private import TypeMention +private import typeinference.FunctionType +private import typeinference.FunctionOverloading as FunctionOverloading +private import typeinference.BlanketImplementation as BlanketImplementation private import codeql.typeinference.internal.TypeInference private import codeql.rust.frameworks.stdlib.Stdlib private import codeql.rust.frameworks.stdlib.Builtins as Builtins @@ -140,7 +143,7 @@ private import Input1 private module M1 = Make1; -private import M1 +import M1 predicate getTypePathLimit = Input1::getTypePathLimit/0; @@ -224,7 +227,7 @@ private module Input2 implements InputSig2 { private module M2 = Make2; -private import M2 +import M2 module Consistency { import M2::Consistency @@ -241,6 +244,25 @@ module Consistency { } } +/** A method, that is, a function with a `self` parameter. */ +private class Method extends Function { + Method() { this.hasSelfParam() } +} + +/** A function without a `self` parameter. */ +private class NonMethodFunction extends Function { + NonMethodFunction() { not this.hasSelfParam() } +} + +pragma[nomagic] +private TypeMention getCallExprTypeArgument(CallExpr ce, TypeArgumentPosition apos) { + exists(Path p, int i | + p = CallExprImpl::getFunctionPath(ce) and + result = p.getSegment().getGenericArgList().getTypeArg(pragma[only_bind_into](i)) and + apos.asTypeParam() = resolvePath(p).getTypeParam(pragma[only_bind_into](i)) + ) +} + /** Gets the type annotation that applies to `n`, if any. */ private TypeMention getTypeAnnotation(AstNode n) { exists(LetStmt let | @@ -261,62 +283,12 @@ private TypeMention getTypeAnnotation(AstNode n) { ) } -/** - * Gets the type of the implicitly typed `self` parameter, taking into account - * whether the parameter is passed by value or by reference. - */ -bindingset[self, suffix, t] -pragma[inline_late] -private Type getRefAdjustShorthandSelfType(SelfParam self, TypePath suffix, Type t, TypePath path) { - not self.hasTypeRepr() and - ( - if self.isRef() - then - // `fn f(&self, ...)` - path.isEmpty() and - result = TRefType() - or - path = TypePath::cons(TRefTypeParameter(), suffix) and - result = t - else ( - // `fn f(self, ...)` - path = suffix and - result = t - ) - ) -} - -pragma[nomagic] -private Type resolveImplSelfType(Impl i, TypePath path) { - result = i.getSelfTy().(TypeMention).resolveTypeAt(path) -} - -/** - * Gets the type at `path` of the parameter `self` which uses the [shorthand - * syntax][1] which is sugar for an explicit annotation. - * - * [1]: https://doc.rust-lang.org/stable/reference/items/associated-items.html#r-associated.fn.method.self-pat-shorthands - */ -pragma[nomagic] -private Type inferShorthandSelfType(SelfParam self, TypePath path) { - exists(ImplOrTraitItemNode i, TypePath suffix, Type t | - self = i.getAnAssocItem().(Function).getParamList().getSelfParam() and - result = getRefAdjustShorthandSelfType(self, suffix, t, path) - | - t = resolveImplSelfType(i, suffix) - or - t = TSelfTypeParameter(i) and suffix.isEmpty() - ) -} - /** Gets the type of `n`, which has an explicit type annotation. */ pragma[nomagic] private Type inferAnnotatedType(AstNode n, TypePath path) { result = getTypeAnnotation(n).resolveTypeAt(path) or - // The shorthand self syntax (i.e., a self parameter without a type - // annotation) is sugar for a self parameter with an annotation. - result = inferShorthandSelfType(n, path) + result = n.(ShorthandSelfParameterMention).resolveTypeAt(path) } /** Module for inferring certain type information. */ @@ -328,11 +300,13 @@ module CertainTypeInference { } pragma[nomagic] - private Type getCallExprType( - CallExpr ce, Path p, CallExprBaseMatchingInput::FunctionDecl f, TypePath tp - ) { + private Type getCallExprType(CallExpr ce, Path p, Function f, TypePath tp) { callResolvesTo(ce, p, f) and - result = f.getReturnType(tp) + result = + [ + f.(MethodCallMatchingInput::Declaration).getReturnType(tp), + f.(NonMethodCallMatchingInput::Declaration).getReturnType(tp) + ] } pragma[nomagic] @@ -367,8 +341,7 @@ module CertainTypeInference { // instantiation from the path. For instance, for `fn bar(a: A) -> A` // and the path `bar`, we must resolve `A` to `i64`. result = - ce.(CallExprBaseMatchingInput::Access) - .getTypeArgument(TTypeParamTypeArgumentPosition(tp), suffix) + getCallExprTypeArgument(ce, TTypeParamTypeArgumentPosition(tp)).resolveTypeAt(suffix) ) or not ty instanceof TypeParameter and @@ -818,1663 +791,2181 @@ private Type inferPathExprType(PathExpr pe, TypePath path) { ) } -/** Gets the explicit type qualifier of the call `ce`, if any. */ -private Type getTypeQualifier(CallExpr ce, TypePath path) { - exists(PathExpr pe, TypeMention tm | - pe = ce.getFunction() and - tm = pe.getPath().getQualifier() and - result = tm.resolveTypeAt(path) +pragma[nomagic] +private Path getCallExprPathQualifier(CallExpr ce) { + result = CallExprImpl::getFunctionPath(ce).getQualifier() +} + +/** + * Gets the type qualifier of function call `ce`, if any. + * + * For example, the type qualifier of `Foo::::default()` is `Foo::`, + * but only when `Foo` is not a trait. + */ +pragma[nomagic] +private Type getCallExprTypeQualifier(CallExpr ce, TypePath path) { + exists(TypeMention tm | + tm = getCallExprPathQualifier(ce) and + result = tm.resolveTypeAt(path) and + not resolvePath(tm) instanceof Trait ) } /** - * A matching configuration for resolving types of call expressions - * like `foo::bar(baz)` and `foo.bar(baz)`. + * Holds if function `f` with the name `name` and the arity `arity` exists in + * `i`, and the type at position `pos` is `t`. */ -private module CallExprBaseMatchingInput implements MatchingInputSig { - private predicate paramPos(ParamList pl, Param p, int pos) { p = pl.getParam(pos) } +pragma[nomagic] +private predicate assocFunctionInfo( + Function f, string name, int arity, ImplOrTraitItemNode i, FunctionTypePosition pos, + AssocFunctionType t +) { + f = i.getASuccessor(name) and + arity = f.getParamList().getNumberOfParams() and + t.appliesTo(f, pos, i) +} - private newtype TDeclarationPosition = - TArgumentDeclarationPosition(ArgumentPosition pos) or - TReturnDeclarationPosition() +/** + * Holds if function `f` with the name `name` and the arity `arity` exists in + * blanket implementation `impl` of `trait`, and the type at position + * `pos` is `t`. + * + * `blanketPath` points to the type `blanketTypeParam` inside `t`, which + * is the type parameter used in the blanket implementation. + */ +pragma[nomagic] +private predicate functionInfoBlanket( + Function f, string name, int arity, ImplItemNode impl, Trait trait, FunctionTypePosition pos, + AssocFunctionType t, TypePath blanketPath, TypeParam blanketTypeParam +) { + exists(TypePath blanketSelfPath | + assocFunctionInfo(f, name, arity, impl, pos, t) and + TTypeParamTypeParameter(blanketTypeParam) = t.getTypeAt(blanketPath) and + blanketPath = any(string s) + blanketSelfPath and + BlanketImplementation::isBlanketLike(impl, blanketSelfPath, blanketTypeParam) and + trait = impl.resolveTraitTy() + ) +} - class DeclarationPosition extends TDeclarationPosition { - predicate isSelf() { this.asArgumentPosition().isSelf() } +/** + * Holds if the type path `path` pointing to `type` is stripped of any leading + * complex root type allowed for `self` parameters, such as `&`, `Box`, `Rc`, + * `Arc`, and `Pin`. + * + * We strip away the complex root type for performance reasons only, which will + * allow us to construct a much smaller set of candidate call targets (otherwise, + * for example _a lot_ of methods have a `self` parameter with a `&` root type). + */ +bindingset[path, type] +private predicate isComplexRootStripped(TypePath path, Type type) { + path.isEmpty() and + not complexSelfRoot(type, _) + or + exists(TypeParameter tp | + complexSelfRoot(_, tp) and + path = TypePath::singleton(tp) and + exists(type) + ) +} + +/** + * Provides logic for resolving calls to methods. + * + * When resolving a method call, a list of [candidate receiver types][1] is constructed + * + * > by repeatedly dereferencing the receiver expression's type, adding each type + * > encountered to the list, then finally attempting an unsized coercion at the end, + * > and adding the result type if that is successful. + * > + * > Then, for each candidate `T`, add `&T` and `&mut T` to the list immediately after `T`. + * + * We do not currently model unsized coercions, and we do not yet model the `Deref` trait, + * instead we limit dereferencing to standard dereferencing and the fact that `String` + * dereferences to `str`. + * + * Instead of constructing the full list of candidate receiver types + * + * ``` + * T1, &T1, &mut T1, ..., Tn, &Tn, &mut Tn + * ``` + * + * we recursively compute a set of candidates, only adding a new candidate receiver type + * to the set when we can rule out that the method cannot be found for the current + * candidate: + * + * ```text + * forall method: + * not current_candidate matches method + * ``` + * + * Care must be taken to ensure that the `not current_candidate matches method` check is + * monotonic, which we achieve using the monotonic `isNotInstantiationOf` predicate. + * + * [1]: https://doc.rust-lang.org/reference/expressions/method-call-expr.html#r-expr.method.candidate-receivers + */ +private module MethodResolution { + /** + * Holds if method `m` with the name `name` and the arity `arity` exists in + * `i`, and the type of the `self` parameter is `selfType`. + * + * `strippedTypePath` points to the type `strippedType` inside `selfType`, + * which is the (possibly complex-stripped) root type of `selfType`. For example, + * if `m` has a `&self` parameter, then `strippedTypePath` is `TRefTypeParameter()` + * and `strippedType` is the type inside the reference. + */ + pragma[nomagic] + private predicate methodInfo( + Method m, string name, int arity, ImplOrTraitItemNode i, AssocFunctionType selfType, + TypePath strippedTypePath, Type strippedType + ) { + exists(FunctionTypePosition pos | + assocFunctionInfo(m, name, arity, i, pos, selfType) and + strippedType = selfType.getTypeAt(strippedTypePath) and + isComplexRootStripped(strippedTypePath, strippedType) and + pos.isSelf() + ) + } - int asPosition() { result = this.asArgumentPosition().asPosition() } + pragma[nomagic] + private predicate methodInfoTypeParam( + Method m, string name, int arity, ImplOrTraitItemNode i, AssocFunctionType selfType, + TypePath strippedTypePath, TypeParam tp + ) { + methodInfo(m, name, arity, i, selfType, strippedTypePath, TTypeParamTypeParameter(tp)) + } - ArgumentPosition asArgumentPosition() { this = TArgumentDeclarationPosition(result) } + /** + * Same as `methodInfo`, but restricted to non-blanket implementations, and + * allowing for any `strippedType` when the corresponding type inside `m` is + * a type parameter. + */ + pragma[inline] + private predicate methodInfoNonBlanket( + Method m, string name, int arity, ImplOrTraitItemNode i, AssocFunctionType selfType, + TypePath strippedTypePath, Type strippedType + ) { + ( + methodInfo(m, name, arity, i, selfType, strippedTypePath, strippedType) or + methodInfoTypeParam(m, name, arity, i, selfType, strippedTypePath, _) + ) and + not BlanketImplementation::isBlanketLike(i, _, _) + } - predicate isReturn() { this = TReturnDeclarationPosition() } + /** + * Holds if method `m` with the name `name` and the arity `arity` exists in + * blanket implementation `impl` of `trait`, and the type of the `self` + * parameter is `selfType`. + * + * `blanketPath` points to the type `blanketTypeParam` inside `selfType`, which + * is the type parameter used in the blanket implementation. + */ + pragma[nomagic] + private predicate methodInfoBlanket( + Method m, string name, int arity, ImplItemNode impl, Trait trait, AssocFunctionType selfType, + TypePath blanketPath, TypeParam blanketTypeParam + ) { + exists(FunctionTypePosition pos | + functionInfoBlanket(m, name, arity, impl, trait, pos, selfType, blanketPath, blanketTypeParam) and + pos.isSelf() + ) + } - string toString() { - result = this.asArgumentPosition().toString() + pragma[nomagic] + private predicate methodTraitInfo(string name, int arity, Trait trait) { + exists(ImplItemNode i | + methodInfo(_, name, arity, i, _, _, _) and + trait = i.resolveTraitTy() + ) + or + methodInfo(_, name, arity, trait, _, _, _) + } + + pragma[nomagic] + private predicate methodCallTraitCandidate(Element mc, Trait trait) { + exists(string name, int arity | + mc.(MethodCall).hasNameAndArity(name, arity) and + methodTraitInfo(name, arity, trait) + | + not mc.(Call).hasTrait() or - this.isReturn() and - result = "(return)" - } + trait = mc.(Call).getTrait() + ) } - abstract class Declaration extends AstNode { - abstract TypeParameter getTypeParameter(TypeParameterPosition ppos); + private module MethodTraitIsVisible = TraitIsVisible; - pragma[nomagic] - abstract Type getParameterType(DeclarationPosition dpos, TypePath path); + private predicate methodCallVisibleTraitCandidate(MethodCall mc, Trait trait) { + MethodTraitIsVisible::traitIsVisible(mc, trait) + } - abstract Type getReturnType(TypePath path); + bindingset[mc, impl] + pragma[inline_late] + private predicate methodCallVisibleImplTraitCandidate(MethodCall mc, ImplItemNode impl) { + methodCallVisibleTraitCandidate(mc, impl.resolveTraitTy()) + } - Type getDeclaredType(DeclarationPosition dpos, TypePath path) { - result = this.getParameterType(dpos, path) + /** + * Holds if method call `mc` may target a method in `i` with `self` parameter having + * type `selfType`. + * + * `strippedTypePath` points to the type `strippedType` inside `selfType`, + * which is the (possibly complex-stripped) root type of `selfType`. + * + * This predicate only checks for matching method names and arities, and whether + * the trait being implemented by `i` (when `i` is not a trait itself) is visible + * at `mc`. + */ + bindingset[mc, strippedTypePath, strippedType] + pragma[inline_late] + private predicate methodCallNonBlanketCandidate( + MethodCall mc, Method m, ImplOrTraitItemNode i, AssocFunctionType self, + TypePath strippedTypePath, Type strippedType + ) { + exists(string name, int arity | + mc.hasNameAndArity(name, arity) and + methodInfoNonBlanket(m, name, arity, i, self, strippedTypePath, strippedType) + | + i = + any(Impl impl | + not impl.hasTrait() + or + methodCallVisibleImplTraitCandidate(mc, impl) + ) or - dpos.isReturn() and - result = this.getReturnType(path) - } + methodCallVisibleTraitCandidate(mc, i) + or + i.(ImplItemNode).resolveTraitTy() = mc.(Call).getTrait() + ) } - abstract additional class TupleDeclaration extends Declaration { - override Type getDeclaredType(DeclarationPosition dpos, TypePath path) { - result = super.getDeclaredType(dpos, path) + /** + * Holds if method call `mc` may target a method in blanket implementation `i` + * with `self` parameter having type `selfType`. + * + * `blanketPath` points to the type `blanketTypeParam` inside `selfType`, which + * is the type parameter used in the blanket implementation. + * + * This predicate only checks for matching method names and arities, and whether + * the trait being implemented by `i` (when `i` is not a trait itself) is visible + * at `mc`. + */ + bindingset[mc] + pragma[inline_late] + private predicate methodCallBlanketCandidate( + MethodCall mc, Method m, ImplItemNode impl, AssocFunctionType self, TypePath blanketPath, + TypeParam blanketTypeParam + ) { + exists(string name, int arity | + mc.hasNameAndArity(name, arity) and + methodInfoBlanket(m, name, arity, impl, _, self, blanketPath, blanketTypeParam) + | + methodCallVisibleImplTraitCandidate(mc, impl) or - dpos.isSelf() and - result = this.getReturnType(path) - } + impl.resolveTraitTy() = mc.(Call).getTrait() + ) } - private class TupleStructDecl extends TupleDeclaration, Struct { - TupleStructDecl() { this.isTuple() } + /** + * A method call. + * + * This is either: + * + * 1. `MethodCallMethodCallExpr`: an actual method call, `x.m()`; + * 2. `MethodCallIndexExpr`: an index expression, `x[i]`, which is [syntactic sugar][1] + * for `*x.index(i)`; + * 3. `MethodCallCallExpr`: a qualified function call, `Q::m(x)`, where `m` is a method; + * or + * 4. `MethodCallOperation`: an operation expression, `x + y`, which is syntactic sugar + * for `Add::add(x, y)`. + * + * Note that only in case 1 and 2 is auto-dereferencing and borrowing allowed. + * + * [1]: https://doc.rust-lang.org/std/ops/trait.Index.html + */ + abstract class MethodCall extends Expr { + abstract predicate hasNameAndArity(string name, int arity); - override TypeParameter getTypeParameter(TypeParameterPosition ppos) { - typeParamMatchPosition(this.getGenericParamList().getATypeParam(), result, ppos) - } + abstract Expr getArgument(ArgumentPosition pos); - override Type getParameterType(DeclarationPosition dpos, TypePath path) { - exists(int pos | - result = this.getTupleField(pos).getTypeRepr().(TypeMention).resolveTypeAt(path) and - pos = dpos.asPosition() - ) - } + abstract predicate supportsAutoDerefAndBorrow(); - override Type getReturnType(TypePath path) { - result = TStruct(this) and - path.isEmpty() + AstNode getNodeAt(FunctionTypePosition apos) { + result = this.getArgument(apos.asArgumentPosition()) or - result = TTypeParamTypeParameter(this.getGenericParamList().getATypeParam()) and - path = TypePath::singleton(result) + result = this and apos.isReturn() } - } - - private class TupleVariantDecl extends TupleDeclaration, Variant { - TupleVariantDecl() { this.isTuple() } - override TypeParameter getTypeParameter(TypeParameterPosition ppos) { - typeParamMatchPosition(this.getEnum().getGenericParamList().getATypeParam(), result, ppos) + Type getArgumentTypeAt(ArgumentPosition pos, TypePath path) { + result = inferType(this.getArgument(pos), path) } - override Type getParameterType(DeclarationPosition dpos, TypePath path) { - exists(int pos | - result = this.getTupleField(pos).getTypeRepr().(TypeMention).resolveTypeAt(path) and - pos = dpos.asPosition() - ) + private Type getReceiverTypeAt(TypePath path) { + result = this.getArgumentTypeAt(any(ArgumentPosition pos | pos.isSelf()), path) } - override Type getReturnType(TypePath path) { - exists(Enum enum | enum = this.getEnum() | - result = TEnum(enum) and - path.isEmpty() + /** + * Same as `getACandidateReceiverTypeAt`, but without borrows. + */ + pragma[nomagic] + private Type getACandidateReceiverTypeAtNoBorrow(TypePath path, string derefChain) { + result = this.getReceiverTypeAt(path) and + derefChain = "" + or + this.supportsAutoDerefAndBorrow() and + exists(TypePath path0, Type t0, string derefChain0 | + this.hasNoCompatibleTarget(derefChain0, _) and + t0 = this.getACandidateReceiverTypeAtNoBorrow(path0, derefChain0) + | + path0.isCons(TRefTypeParameter(), path) and + result = t0 and + derefChain = derefChain0 + ".ref" or - result = TTypeParamTypeParameter(enum.getGenericParamList().getATypeParam()) and - path = TypePath::singleton(result) + path0.isEmpty() and + path = path0 and + t0 = getStringStruct() and + result = getStrStruct() and + derefChain = derefChain0 + ".str" ) } - } - additional class FunctionDecl extends Declaration, Function { - override TypeParameter getTypeParameter(TypeParameterPosition ppos) { - typeParamMatchPosition(this.getGenericParamList().getATypeParam(), result, ppos) + /** + * Holds if the method inside `i` with matching name and arity can be ruled + * out as a target of this call, because the candidate receiver type represented + * by `derefChainBorrow` is incompatible with the `self` parameter type. + */ + pragma[nomagic] + private predicate hasIncompatibleTarget(ImplOrTraitItemNode i, string derefChainBorrow) { + ReceiverIsInstantiationOfSelfParam::argIsNotInstantiationOf(MkMethodCallCand(this, + derefChainBorrow), i, _) or - exists(ImplOrTraitItemNode i | this = i.getAnAssocItem() | - typeParamMatchPosition(i.getTypeParam(_), result, ppos) - or - ppos.isImplicit() and result = TSelfTypeParameter(i) + TypeQualifierIsInstantiationOfImplSelf::isNotInstantiationOf(this, i, _) and + derefChainBorrow = ";" + } + + /** + * Same as `getACandidateReceiverTypeAt`, but with traits substituted in for types + * with trait bounds. + */ + pragma[nomagic] + Type getACandidateReceiverTypeAtSubstituteLookupTraits(TypePath path, string derefChainBorrow) { + result = substituteLookupTraits(this.getACandidateReceiverTypeAt(path, derefChainBorrow)) + } + + pragma[nomagic] + private Type getComplexStrippedType(TypePath strippedTypePath, string derefChainBorrow) { + result = + this.getACandidateReceiverTypeAtSubstituteLookupTraits(strippedTypePath, derefChainBorrow) and + isComplexRootStripped(strippedTypePath, result) + } + + bindingset[strippedTypePath, strippedType, derefChainBorrow] + private predicate hasNoCompatibleTargetCheck( + TypePath strippedTypePath, Type strippedType, string derefChainBorrow + ) { + // todo: also check that all blanket implementation candidates are incompatible + forall(ImplOrTraitItemNode i | + methodCallNonBlanketCandidate(this, _, i, _, strippedTypePath, strippedType) or - ppos.isImplicit() and - result.(AssociatedTypeTypeParameter).getTrait() = i + this.(MethodCallCallExpr).hasTypeQualifiedCandidate(i) + | + this.hasIncompatibleTarget(i, derefChainBorrow) ) - or - ppos.isImplicit() and - this = result.(ImplTraitTypeTypeParameter).getFunction() } - override Type getParameterType(DeclarationPosition dpos, TypePath path) { - exists(Param p, int i | - paramPos(this.getParamList(), p, i) and - i = dpos.asPosition() and - result = p.getTypeRepr().(TypeMention).resolveTypeAt(path) - ) - or - exists(SelfParam self | - self = pragma[only_bind_into](this.getSelfParam()) and - dpos.isSelf() and - result = inferAnnotatedType(self, path) // `self` parameter with type annotation - ) - or - // For associated functions, we may also need to match type arguments against - // the `Self` type. For example, in - // - // ```rust - // struct Foo(T); - // - // impl Foo { - // fn default() -> Self { - // Foo(Default::default()) - // } - // } - // - // Foo::::default(); - // ``` - // - // we need to match `i32` against the type parameter `T` of the `impl` block. - exists(ImplOrTraitItemNode i | - this = i.getAnAssocItem() and - dpos.isSelf() and - not this.hasSelfParam() - | - result = TSelfTypeParameter(i) and - path.isEmpty() + /** + * Holds if the candidate receiver type represented by + * `derefChainBorrow = derefChain;` does not have a matching method target. + */ + pragma[nomagic] + predicate hasNoCompatibleTargetNoBorrow(string derefChain, string derefChainBorrow) { + ( + this.supportsAutoDerefAndBorrow() or - result = resolveImplSelfType(i, path) + // needed for the `hasNoCompatibleTarget` check in + // `SatisfiesBlanketConstraintInput::hasBlanketCandidate` + derefChain = "" + ) and + exists(TypePath strippedTypePath, Type strippedType | + derefChainBorrow = derefChain + ";" and + not derefChain.matches("%.ref") and // no need to try a borrow if the last thing we did was a deref + strippedType = this.getComplexStrippedType(strippedTypePath, derefChainBorrow) and + this.hasNoCompatibleTargetCheck(strippedTypePath, strippedType, derefChainBorrow) ) } - private Type resolveRetType(TypePath path) { - result = this.getRetType().getTypeRepr().(TypeMention).resolveTypeAt(path) + /** + * Holds if the candidate receiver type represented by + * `derefChainBorrow = derefChain;borrow` does not have a matching method + * target. + */ + pragma[nomagic] + predicate hasNoCompatibleTarget(string derefChain, string derefChainBorrow) { + exists(TypePath strippedTypePath, Type strippedType | + derefChainBorrow = derefChain + ";borrow" and + this.hasNoCompatibleTargetNoBorrow(derefChain, _) and + strippedType = this.getComplexStrippedType(strippedTypePath, derefChainBorrow) and + this.hasNoCompatibleTargetCheck(strippedTypePath, strippedType, derefChainBorrow) + ) } - override Type getReturnType(TypePath path) { - if this.isAsync() - then - path.isEmpty() and - result = getFutureTraitType() + /** + * Gets a [candidate receiver type][1] of this method call at `path`. + * + * The type is obtained by repeatedly dereferencing the receiver expression's type, + * as long as the method cannot be resolved in an earlier candidate type, and possibly + * applying a borrow at the end. + * + * The string `derefChainBorrow` encodes the sequence of dereferences and whether a + * borrow has been applied. + * + * [1]: https://doc.rust-lang.org/reference/expressions/method-call-expr.html#r-expr.method.candidate-receivers + */ + pragma[nomagic] + Type getACandidateReceiverTypeAt(TypePath path, string derefChainBorrow) { + exists(string derefChain | + result = this.getACandidateReceiverTypeAtNoBorrow(path, derefChain) and + derefChainBorrow = derefChain + ";" or - exists(TypePath suffix | - result = this.resolveRetType(suffix) and - path = TypePath::cons(getFutureOutputTypeParameter(), suffix) + this.supportsAutoDerefAndBorrow() and + this.hasNoCompatibleTargetNoBorrow(derefChain, _) and + derefChainBorrow = derefChain + ";borrow" and + ( + path.isEmpty() and + result = TRefType() + or + exists(TypePath suffix | + result = this.getACandidateReceiverTypeAtNoBorrow(suffix, derefChain) and + path = TypePath::cons(TRefTypeParameter(), suffix) + ) ) - else result = this.resolveRetType(path) + ) } - } - private newtype TAccessPosition = - TArgumentAccessPosition(ArgumentPosition pos, Boolean borrowed, Boolean certain) or - TReturnAccessPosition() + /** + * Gets a method that this call resolves to after having applied a sequence of + * dereferences and possibly a borrow on the receiver type, encoded in the string + * `derefChainBorrow`. + */ + pragma[nomagic] + Method resolveCallTarget(string derefChainBorrow) { + exists(MethodCallCand mcc | + mcc = MkMethodCallCand(this, derefChainBorrow) and + result = mcc.resolveCallTarget() + ) + } - class AccessPosition extends TAccessPosition { - ArgumentPosition getArgumentPosition() { this = TArgumentAccessPosition(result, _, _) } + predicate receiverHasImplicitDeref(AstNode receiver) { + exists(this.resolveCallTarget(".ref;")) and + receiver = this.getArgument(CallImpl::TSelfArgumentPosition()) + } - predicate isBorrowed(boolean certain) { this = TArgumentAccessPosition(_, true, certain) } + predicate receiverHasImplicitBorrow(AstNode receiver) { + exists(this.resolveCallTarget(";borrow")) and + receiver = this.getArgument(CallImpl::TSelfArgumentPosition()) + } + } - predicate isReturn() { this = TReturnAccessPosition() } + private class MethodCallMethodCallExpr extends MethodCall instanceof MethodCallExpr { + pragma[nomagic] + override predicate hasNameAndArity(string name, int arity) { + name = super.getIdentifier().getText() and + arity = super.getArgList().getNumberOfArgs() + } - string toString() { - exists(ArgumentPosition pos, boolean borrowed, boolean certain | - this = TArgumentAccessPosition(pos, borrowed, certain) and - result = pos + ":" + borrowed + ":" + certain - ) + override Expr getArgument(ArgumentPosition pos) { + pos.isSelf() and + result = MethodCallExpr.super.getReceiver() or - this.isReturn() and - result = "(return)" + result = super.getArgList().getArg(pos.asPosition()) } + + override predicate supportsAutoDerefAndBorrow() { any() } } - final class Access extends Call { + private class MethodCallIndexExpr extends MethodCall, IndexExpr { pragma[nomagic] - Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { - exists(TypeMention arg | result = arg.resolveTypeAt(path) | - exists(Path p, int i | - p = CallExprImpl::getFunctionPath(this) and - arg = p.getSegment().getGenericArgList().getTypeArg(pragma[only_bind_into](i)) and - apos.asTypeParam() = resolvePath(p).getTypeParam(pragma[only_bind_into](i)) - ) - or - arg = - this.(MethodCallExpr).getGenericArgList().getTypeArg(apos.asMethodTypeArgumentPosition()) - ) + override predicate hasNameAndArity(string name, int arity) { + name = "index" and + arity = 1 } - AstNode getNodeAt(AccessPosition apos) { - exists(ArgumentPosition pos, boolean borrowed, boolean certain | - apos = TArgumentAccessPosition(pos, borrowed, certain) and - result = this.getArgument(pos) - | - if this.implicitBorrowAt(pos, _) - then borrowed = true and this.implicitBorrowAt(pos, certain) - else ( - borrowed = false and certain = true - ) - ) + override Expr getArgument(ArgumentPosition pos) { + pos.isSelf() and + result = this.getBase() or - result = this and apos.isReturn() + pos.asPosition() = 0 and + result = this.getIndex() } - Type getInferredType(AccessPosition apos, TypePath path) { - result = inferType(this.getNodeAt(apos), path) - or - // The `Self` type is supplied explicitly as a type qualifier, e.g. `Foo::::baz()` - apos = TArgumentAccessPosition(CallImpl::TSelfArgumentPosition(), false, false) and - result = getTypeQualifier(this, path) + override predicate supportsAutoDerefAndBorrow() { any() } + } + + private class MethodCallCallExpr extends MethodCall, CallExpr { + MethodCallCallExpr() { + exists(getCallExprPathQualifier(this)) and + // even if a method cannot be resolved by path resolution, it may still + // be possible to resolve a blanket implementation (so not `forex`) + forall(ItemNode i | i = CallExprImpl::getResolvedFunction(this) | i instanceof Method) } - Declaration getTarget() { - result = resolveMethodCallTarget(this) // mutual recursion; resolving method calls requires resolving types and vice versa + /** + * Holds if this call has a type qualifier, and we are able to resolve, + * using path resolution, the method to a member of `impl`. + * + * When this is the case, we still want to check that the type qualifier + * is an instance of the type being implemented, which is done in + * `MethodCallCallExprIsInstantiationOfInput`. + */ + pragma[nomagic] + predicate hasTypeQualifiedCandidate(ImplItemNode impl) { + exists(getCallExprTypeQualifier(this, _)) and + CallExprImpl::getResolvedFunction(this) = impl.getASuccessor(_) + } + + pragma[nomagic] + override predicate hasNameAndArity(string name, int arity) { + name = CallExprImpl::getFunctionPath(this).getText() and + arity = this.getArgList().getNumberOfArgs() - 1 + } + + override Expr getArgument(ArgumentPosition pos) { + pos.isSelf() and + result = this.getArg(0) or - result = resolveFunctionCallTarget(this) // potential mutual recursion; resolving some associated function calls requires resolving types + result = this.getArgList().getArg(pos.asPosition() + 1) } - } - predicate accessDeclarationPositionMatch(AccessPosition apos, DeclarationPosition dpos) { - apos.getArgumentPosition() = dpos.asArgumentPosition() - or - apos.isReturn() and dpos.isReturn() - } + // needed for `MethodCallCallExprIsInstantiationOfInput` + Type getTypeAt(TypePath path) { + result = substituteLookupTraits(getCallExprTypeQualifier(this, path)) + } - bindingset[apos, target, path, t] - pragma[inline_late] - predicate adjustAccessType( - AccessPosition apos, Declaration target, TypePath path, Type t, TypePath pathAdj, Type tAdj - ) { - apos.isBorrowed(true) and - pathAdj = TypePath::cons(TRefTypeParameter(), path) and - tAdj = t - or - apos.isBorrowed(false) and - exists(Type selfParamType | - selfParamType = - target - .getParameterType(TArgumentDeclarationPosition(apos.getArgumentPosition()), - TypePath::nil()) - | - if selfParamType = TRefType() - then - if t != TRefType() and path.isEmpty() - then - // adjust for implicit borrow - pathAdj.isEmpty() and - tAdj = TRefType() - or - // adjust for implicit borrow - pathAdj = TypePath::singleton(TRefTypeParameter()) and - tAdj = t - else - if path.isCons(TRefTypeParameter(), _) - then - pathAdj = path and - tAdj = t - else ( - // adjust for implicit borrow - not (t = TRefType() and path.isEmpty()) and - pathAdj = TypePath::cons(TRefTypeParameter(), path) and - tAdj = t - ) - else ( - // adjust for implicit deref - path.isCons(TRefTypeParameter(), pathAdj) and - tAdj = t - or - not path.isCons(TRefTypeParameter(), _) and - not (t = TRefType() and path.isEmpty()) and - pathAdj = path and - tAdj = t - ) - ) - or - not apos.isBorrowed(_) and - pathAdj = path and - tAdj = t + override predicate supportsAutoDerefAndBorrow() { none() } } -} -private module CallExprBaseMatching = Matching; + final class MethodCallOperation extends MethodCall, Operation { + pragma[nomagic] + override predicate hasNameAndArity(string name, int arity) { + name = this.(Call).getMethodName() and + arity = this.getNumberOfOperands() - 1 + } -/** - * Gets the type of `n` at `path`, where `n` is either a call or an - * argument/receiver of a call. - */ -pragma[nomagic] -private Type inferCallExprBaseType(AstNode n, TypePath path) { - exists( - CallExprBaseMatchingInput::Access a, CallExprBaseMatchingInput::AccessPosition apos, - TypePath path0 - | - n = a.getNodeAt(apos) and - result = CallExprBaseMatching::inferAccessType(a, apos, path0) - | - if - apos.isBorrowed(true) - or - // The desugaring of the unary `*e` is `*Deref::deref(&e)` and the - // desugaring of `a[b]` is `*Index::index(&a, b)`. To handle the deref - // expression after the call we must strip a `&` from the type at the - // return position. - apos.isReturn() and - (a instanceof DerefExpr or a instanceof IndexExpr) - then path0.isCons(TRefTypeParameter(), path) - else - if apos.isBorrowed(false) + override Expr getArgument(ArgumentPosition pos) { result = this.(Call).getArgument(pos) } + + override Type getArgumentTypeAt(ArgumentPosition pos, TypePath path) { + if this.(Call).implicitBorrowAt(pos, true) then - exists(Type argType | argType = inferType(n) | - if argType = TRefType() - then - path = path0 and - path0.isCons(TRefTypeParameter(), _) - or - // adjust for implicit deref - not path0.isCons(TRefTypeParameter(), _) and - not (path0.isEmpty() and result = TRefType()) and - path = TypePath::cons(TRefTypeParameter(), path0) - else ( - not ( - argType.(StructType).getStruct() instanceof StringStruct and - result.(StructType).getStruct() instanceof Builtins::Str - ) and - ( - not path0.isCons(TRefTypeParameter(), _) and - not (path0.isEmpty() and result = TRefType()) and - path = path0 - or - // adjust for implicit borrow - path0.isCons(TRefTypeParameter(), path) - ) - ) + result = TRefType() and + path.isEmpty() + or + exists(TypePath path0 | + result = inferType(this.getArgument(pos), path0) and + path = TypePath::cons(TRefTypeParameter(), path0) ) - else ( - not apos.isBorrowed(_) and - path = path0 + else result = inferType(this.getArgument(pos), path) + } + + override predicate receiverHasImplicitBorrow(AstNode receiver) { + exists(ArgumentPosition pos | + this.(Call).implicitBorrowAt(pos, true) and + receiver = this.getArgument(pos) ) - ) -} + } -pragma[inline] -private Type inferRootTypeDeref(AstNode n) { - result = inferType(n) and - result != TRefType() - or - // for reference types, lookup members in the type being referenced - result = inferType(n, TypePath::singleton(TRefTypeParameter())) -} + override predicate supportsAutoDerefAndBorrow() { none() } + } -pragma[nomagic] -private Type getFieldExprLookupType(FieldExpr fe, string name) { - result = inferRootTypeDeref(fe.getContainer()) and name = fe.getIdentifier().getText() -} + pragma[nomagic] + private Method getMethodSuccessor(ImplOrTraitItemNode i, string name, int arity) { + result = i.getASuccessor(name) and + arity = result.getParamList().getNumberOfParams() + } -pragma[nomagic] -private Type getTupleFieldExprLookupType(FieldExpr fe, int pos) { - exists(string name | - result = getFieldExprLookupType(fe, name) and - pos = name.toInt() - ) -} + private newtype TMethodCallCand = + MkMethodCallCand(MethodCall mc, string derefChainBorrow) { + exists(mc.getACandidateReceiverTypeAt(_, derefChainBorrow)) + } -pragma[nomagic] -private TupleTypeParameter resolveTupleTypeFieldExpr(FieldExpr fe) { - exists(int arity, int i | - TTuple(arity) = getTupleFieldExprLookupType(fe, i) and - result = TTupleTypeParameter(arity, i) - ) -} + /** A method call tagged with a candidate receiver type. */ + private class MethodCallCand extends MkMethodCallCand { + MethodCall mc_; + string derefChainBorrow; -/** - * A matching configuration for resolving types of field expressions - * like `x.field`. - */ -private module FieldExprMatchingInput implements MatchingInputSig { - private newtype TDeclarationPosition = - TSelfDeclarationPosition() or - TFieldPos() + MethodCallCand() { this = MkMethodCallCand(mc_, derefChainBorrow) } - class DeclarationPosition extends TDeclarationPosition { - predicate isSelf() { this = TSelfDeclarationPosition() } + MethodCall getMethodCall() { result = mc_ } - predicate isField() { this = TFieldPos() } + Type getTypeAt(TypePath path) { + result = mc_.getACandidateReceiverTypeAtSubstituteLookupTraits(path, derefChainBorrow) + } - string toString() { - this.isSelf() and - result = "self" + pragma[nomagic] + predicate hasNoCompatibleTarget() { + mc_.hasNoCompatibleTarget(_, derefChainBorrow) or - this.isField() and - result = "(field)" + mc_.hasNoCompatibleTargetNoBorrow(_, derefChainBorrow) } - } - - private newtype TDeclaration = - TStructFieldDecl(StructField sf) or - TTupleFieldDecl(TupleField tf) or - TTupleTypeParameterDecl(TupleTypeParameter ttp) - abstract class Declaration extends TDeclaration { - TypeParameter getTypeParameter(TypeParameterPosition ppos) { none() } + pragma[nomagic] + predicate hasSignature( + MethodCall mc, TypePath strippedTypePath, Type strippedType, string name, int arity + ) { + strippedType = this.getTypeAt(strippedTypePath) and + isComplexRootStripped(strippedTypePath, strippedType) and + mc = mc_ and + mc.hasNameAndArity(name, arity) + } - abstract Type getDeclaredType(DeclarationPosition dpos, TypePath path); + /** + * Holds if the inherent method inside `i` with matching name and arity can be + * ruled out as a candidate for this call. + */ + pragma[nomagic] + private predicate hasIncompatibleInherentTarget(Impl impl) { + ReceiverIsNotInstantiationOfInherentSelfParam::argIsNotInstantiationOf(this, impl, _) + } - abstract string toString(); + /** + * Holds if this method call has no inherent target, i.e., it does not + * resolve to a method in an `impl` block for the type of the receiver. + */ + pragma[nomagic] + predicate hasNoInherentTarget() { + exists(TypePath strippedTypePath, Type strippedType, string name, int arity | + this.hasSignature(_, strippedTypePath, strippedType, name, arity) and + forall(Impl i | + methodInfoNonBlanket(_, name, arity, i, _, strippedTypePath, strippedType) and + not i.hasTrait() + | + this.hasIncompatibleInherentTarget(i) + ) + ) + } - abstract Location getLocation(); - } + pragma[nomagic] + private predicate typeQualifierIsInstantiationOf(ImplOrTraitItemNode i) { + TypeQualifierIsInstantiationOfImplSelf::isInstantiationOf(mc_, i, _) + } - abstract private class StructOrTupleFieldDecl extends Declaration { - abstract AstNode getAstNode(); + pragma[nomagic] + private predicate argIsInstantiationOf(ImplOrTraitItemNode i, string name, int arity) { + ( + ReceiverIsInstantiationOfSelfParam::argIsInstantiationOf(this, i, _) + or + this.typeQualifierIsInstantiationOf(i) + ) and + mc_.hasNameAndArity(name, arity) + } - abstract TypeRepr getTypeRepr(); + pragma[nomagic] + Method resolveCallTargetCand(ImplOrTraitItemNode i) { + exists(string name, int arity | + this.argIsInstantiationOf(i, name, arity) and + result = getMethodSuccessor(i, name, arity) + ) + } - override Type getDeclaredType(DeclarationPosition dpos, TypePath path) { - dpos.isSelf() and - // no case for variants as those can only be destructured using pattern matching - exists(Struct s | this.getAstNode() = [s.getStructField(_).(AstNode), s.getTupleField(_)] | - result = TStruct(s) and - path.isEmpty() - or - result = TTypeParamTypeParameter(s.getGenericParamList().getATypeParam()) and - path = TypePath::singleton(result) + /** Gets a method that matches this method call. */ + pragma[nomagic] + Method resolveCallTarget() { + exists(ImplOrTraitItemNode i | + result = this.resolveCallTargetCand(i) and + not exists(FunctionTypePosition pos | + FunctionOverloading::functionResolutionDependsOnArgument(i, _, pos, _, _) and + pos.isPositional() + ) ) or - dpos.isField() and - result = this.getTypeRepr().(TypeMention).resolveTypeAt(path) + MethodArgsAreInstantiationsOf::argsAreInstantiationsOf(this, _, result) } - override string toString() { result = this.getAstNode().toString() } - - override Location getLocation() { result = this.getAstNode().getLocation() } - } - - private class StructFieldDecl extends StructOrTupleFieldDecl, TStructFieldDecl { - private StructField sf; - - StructFieldDecl() { this = TStructFieldDecl(sf) } + predicate hasNoBorrow() { not derefChainBorrow = any(string s) + ";borrow" } - override AstNode getAstNode() { result = sf } + string toString() { result = mc_.toString() + " [" + derefChainBorrow + "]" } - override TypeRepr getTypeRepr() { result = sf.getTypeRepr() } + Location getLocation() { result = mc_.getLocation() } } - private class TupleFieldDecl extends StructOrTupleFieldDecl, TTupleFieldDecl { - private TupleField tf; - - TupleFieldDecl() { this = TTupleFieldDecl(tf) } - - override AstNode getAstNode() { result = tf } - - override TypeRepr getTypeRepr() { result = tf.getTypeRepr() } + private module ReceiverSatisfiesBlanketConstraintInput implements + BlanketImplementation::SatisfiesBlanketConstraintInputSig + { + pragma[nomagic] + predicate hasBlanketCandidate( + MethodCallCand mcc, ImplItemNode impl, TypePath blanketPath, TypeParam blanketTypeParam + ) { + exists(MethodCall mc, string name, int arity | + mcc.hasSignature(mc, _, _, name, arity) and + methodCallBlanketCandidate(mc, _, impl, _, blanketPath, blanketTypeParam) and + // Only apply blanket implementations when no other implementations are possible; + // this is to account for codebases that use the (unstable) specialization feature + // (https://rust-lang.github.io/rfcs/1210-impl-specialization.html) + mcc.hasNoCompatibleTarget() + | + mcc.hasNoBorrow() + or + blanketPath.getHead() = TRefTypeParameter() + ) + } } - private class TupleTypeParameterDecl extends Declaration, TTupleTypeParameterDecl { - private TupleTypeParameter ttp; - - TupleTypeParameterDecl() { this = TTupleTypeParameterDecl(ttp) } + private module ReceiverSatisfiesBlanketConstraint = + BlanketImplementation::SatisfiesBlanketConstraint; - override Type getDeclaredType(DeclarationPosition dpos, TypePath path) { - dpos.isSelf() and - ( - result = ttp.getTupleType() and - path.isEmpty() + /** + * A configuration for matching the type of a receiver against the type of + * a `self` parameter. + */ + private module ReceiverIsInstantiationOfSelfParamInput implements + IsInstantiationOfInputSig + { + pragma[nomagic] + additional predicate potentialInstantiationOf0( + MethodCallCand mcc, ImplOrTraitItemNode i, AssocFunctionType selfType + ) { + exists( + MethodCall mc, Method m, string name, int arity, TypePath strippedTypePath, + Type strippedType + | + mcc.hasSignature(mc, strippedTypePath, strippedType, name, arity) + | + methodCallNonBlanketCandidate(mc, m, i, selfType, strippedTypePath, strippedType) or - result = ttp and - path = TypePath::singleton(ttp) + methodCallBlanketCandidate(mc, m, i, selfType, _, _) and + ReceiverSatisfiesBlanketConstraint::satisfiesBlanketConstraint(mcc, i) ) - or - dpos.isField() and - result = ttp and - path.isEmpty() } - override string toString() { result = ttp.toString() } + pragma[nomagic] + predicate potentialInstantiationOf( + MethodCallCand mcc, TypeAbstraction abs, AssocFunctionType constraint + ) { + potentialInstantiationOf0(mcc, abs, constraint) and + if abs.(Impl).hasTrait() + then + // inherent methods take precedence over trait methods, so only allow + // trait methods when there are no matching inherent methods + mcc.hasNoInherentTarget() + else any() + } - override Location getLocation() { result = ttp.getLocation() } + predicate relevantConstraint(AssocFunctionType constraint) { + methodInfo(_, _, _, _, constraint, _, _) + } } - class AccessPosition = DeclarationPosition; - - class Access extends FieldExpr { - Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { none() } + private module ReceiverIsInstantiationOfSelfParam = + ArgIsInstantiationOf; - AstNode getNodeAt(AccessPosition apos) { - result = this.getContainer() and - apos.isSelf() - or - result = this and - apos.isField() + /** + * A configuration for matching the type qualifier of a method call + * against the type being implemented in an `impl` block. For example, + * in `Q::m(x)`, we check that the type of `Q` is an instance of the + * type being implemented. + */ + private module TypeQualifierIsInstantiationOfImplSelfInput implements + IsInstantiationOfInputSig + { + pragma[nomagic] + private predicate potentialInstantiationOf0( + MethodCallCallExpr ce, ImplItemNode impl, TypeMentionTypeTree constraint + ) { + ce.hasTypeQualifiedCandidate(impl) and + constraint = impl.getSelfPath() } - Type getInferredType(AccessPosition apos, TypePath path) { - result = inferType(this.getNodeAt(apos), path) + pragma[nomagic] + predicate potentialInstantiationOf( + MethodCallCallExpr ce, TypeAbstraction abs, TypeMentionTypeTree constraint + ) { + potentialInstantiationOf0(ce, abs, constraint) and + if abs.(Impl).hasTrait() + then + // inherent methods take precedence over trait methods, so only allow + // trait methods when there are no matching inherent methods + MkMethodCallCand(ce, _).(MethodCallCand).hasNoInherentTarget() + else any() } - Declaration getTarget() { - // mutual recursion; resolving fields requires resolving types and vice versa - result = - [ - TStructFieldDecl(resolveStructFieldExpr(this)).(TDeclaration), - TTupleFieldDecl(resolveTupleFieldExpr(this)), - TTupleTypeParameterDecl(resolveTupleTypeFieldExpr(this)) - ] + predicate relevantConstraint(TypeMentionTypeTree constraint) { + potentialInstantiationOf0(_, _, constraint) } } - predicate accessDeclarationPositionMatch(AccessPosition apos, DeclarationPosition dpos) { - apos = dpos + private module TypeQualifierIsInstantiationOfImplSelf = + IsInstantiationOf; + + /** + * A configuration for anti-matching the type of a receiver against the type of + * a `self` parameter in an inherent method. + */ + private module ReceiverIsNotInstantiationOfInherentSelfParamInput implements + IsInstantiationOfInputSig + { + pragma[nomagic] + predicate potentialInstantiationOf( + MethodCallCand mcc, TypeAbstraction abs, AssocFunctionType constraint + ) { + ReceiverIsInstantiationOfSelfParamInput::potentialInstantiationOf0(mcc, abs, constraint) and + abs = any(Impl i | not i.hasTrait()) + } + + predicate relevantConstraint(AssocFunctionType constraint) { + methodInfo(_, _, _, _, constraint, _, _) + } } - bindingset[apos, target, path, t] - pragma[inline_late] - predicate adjustAccessType( - AccessPosition apos, Declaration target, TypePath path, Type t, TypePath pathAdj, Type tAdj - ) { - exists(target) and - if apos.isSelf() - then - // adjust for implicit deref - path.isCons(TRefTypeParameter(), pathAdj) and - tAdj = t - or - not path.isCons(TRefTypeParameter(), _) and - not (t = TRefType() and path.isEmpty()) and - pathAdj = path and - tAdj = t - else ( - pathAdj = path and - tAdj = t - ) + private module ReceiverIsNotInstantiationOfInherentSelfParam = + ArgIsInstantiationOf; + + /** + * A configuration for matching the types of positional arguments against the + * types of parameters, when needed to disambiguate the call. + */ + private module MethodArgsAreInstantiationsOfInput implements ArgsAreInstantiationsOfInputSig { + predicate toCheck( + ImplOrTraitItemNode i, Function f, FunctionTypePosition pos, AssocFunctionType t + ) { + exists(TypePath path, Type t0 | + pos.isPositional() and + FunctionOverloading::functionResolutionDependsOnArgument(i, f, pos, path, t0) and + t.appliesTo(f, pos, i) and + // for now, we do not handle ambiguous targets when one of the types it iself + // a type parameter; we should be checking the constraints on that type parameter + // in this case + not t0 instanceof TypeParameter + ) + } + + class Call extends MethodCallCand { + Type getArgType(FunctionTypePosition pos, TypePath path) { + result = inferType(mc_.getNodeAt(pos), path) + } + + predicate hasTargetCand(ImplOrTraitItemNode i, Function f) { + f = this.resolveCallTargetCand(i) + } + } } -} -private module FieldExprMatching = Matching; + private module MethodArgsAreInstantiationsOf = + ArgsAreInstantiationsOf; +} /** - * Gets the type of `n` at `path`, where `n` is either a field expression or - * the receiver of field expression call. + * A matching configuration for resolving types of method call expressions + * like `foo.bar(baz)`. */ +private module MethodCallMatchingInput implements MatchingWithEnvironmentInputSig { + import FunctionTypePositionMatchingInput + + final class Declaration extends Function { + TypeParameter getTypeParameter(TypeParameterPosition ppos) { + typeParamMatchPosition(this.getGenericParamList().getATypeParam(), result, ppos) + or + exists(ImplOrTraitItemNode i | this = i.getAnAssocItem() | + typeParamMatchPosition(i.getTypeParam(_), result, ppos) + or + ppos.isImplicit() and result = TSelfTypeParameter(i) + or + ppos.isImplicit() and + result.(AssociatedTypeTypeParameter).getTrait() = i + ) + or + ppos.isImplicit() and + this = result.(ImplTraitTypeTypeParameter).getFunction() + } + + pragma[nomagic] + Type getParameterType(DeclarationPosition dpos, TypePath path) { + exists(Param p, int i | + p = this.getParam(i) and + i = dpos.asPositional() and + result = p.getTypeRepr().(TypeMention).resolveTypeAt(path) + ) + or + dpos.isSelf() and + exists(SelfParam self | + self = pragma[only_bind_into](this.getSelfParam()) and + result = getSelfParamTypeMention(self).resolveTypeAt(path) + ) + } + + private Type resolveRetType(TypePath path) { + result = this.getRetType().getTypeRepr().(TypeMention).resolveTypeAt(path) + } + + pragma[nomagic] + Type getReturnType(TypePath path) { + if this.isAsync() + then + path.isEmpty() and + result = getFutureTraitType() + or + exists(TypePath suffix | + result = this.resolveRetType(suffix) and + path = TypePath::cons(getFutureOutputTypeParameter(), suffix) + ) + else result = this.resolveRetType(path) + } + + Type getDeclaredType(DeclarationPosition dpos, TypePath path) { + result = this.getParameterType(dpos, path) + or + dpos.isReturn() and + result = this.getReturnType(path) + } + } + + class AccessEnvironment = string; + + final private class MethodCallFinal = MethodResolution::MethodCall; + + class Access extends MethodCallFinal { + Access() { + // handled in the `OperationMatchingInput` module + not this instanceof Operation + } + + pragma[nomagic] + Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { + exists(TypeMention arg | result = arg.resolveTypeAt(path) | + arg = + this.(MethodCallExpr).getGenericArgList().getTypeArg(apos.asMethodTypeArgumentPosition()) + or + arg = getCallExprTypeArgument(this, apos) + ) + } + + pragma[nomagic] + private Type getInferredSelfType(string derefChainBorrow, TypePath path) { + result = this.getACandidateReceiverTypeAt(path, derefChainBorrow) + } + + pragma[nomagic] + Type getInferredNonSelfType(AccessPosition apos, TypePath path) { + if + // index expression `x[i]` desugars to `*x.index(i)`, so we must account for + // the implicit deref + apos.isReturn() and + this instanceof IndexExpr + then + path.isEmpty() and + result = TRefType() + or + exists(TypePath suffix | + result = inferType(this.getNodeAt(apos), suffix) and + path = TypePath::cons(TRefTypeParameter(), suffix) + ) + else ( + not apos.isSelf() and + result = inferType(this.getNodeAt(apos), path) + ) + } + + pragma[nomagic] + Type getInferredType(string derefChainBorrow, AccessPosition apos, TypePath path) { + apos.isSelf() and + result = this.getInferredSelfType(derefChainBorrow, path) + or + result = this.getInferredNonSelfType(apos, path) and + exists(this.getTarget(derefChainBorrow)) + } + + Declaration getTarget(string derefChainBorrow) { + result = this.resolveCallTarget(derefChainBorrow) // mutual recursion; resolving method calls requires resolving types and vice versa + } + } +} + +private module MethodCallMatching = MatchingWithEnvironment; + pragma[nomagic] -private Type inferFieldExprType(AstNode n, TypePath path) { - exists( - FieldExprMatchingInput::Access a, FieldExprMatchingInput::AccessPosition apos, TypePath path0 - | +private Type inferMethodCallType0( + MethodCallMatchingInput::Access a, MethodCallMatchingInput::AccessPosition apos, AstNode n, + string derefChainBorrow, TypePath path +) { + exists(TypePath path0 | n = a.getNodeAt(apos) and - result = FieldExprMatching::inferAccessType(a, apos, path0) + result = MethodCallMatching::inferAccessType(a, derefChainBorrow, apos, path0) | - if apos.isSelf() - then - exists(Type receiverType | receiverType = inferType(n) | - if receiverType = TRefType() - then - // adjust for implicit deref - not path0.isCons(TRefTypeParameter(), _) and - not (path0.isEmpty() and result = TRefType()) and - path = TypePath::cons(TRefTypeParameter(), path0) - else path = path0 - ) + if + // index expression `x[i]` desugars to `*x.index(i)`, so we must account for + // the implicit deref + apos.isReturn() and + a instanceof IndexExpr + then path0.isCons(TRefTypeParameter(), path) else path = path0 ) } -/** Gets the root type of the reference node `ref`. */ -pragma[nomagic] -private Type inferRefNodeType(AstNode ref) { - ( - ref = any(IdentPat ip | ip.isRef()).getName() - or - ref instanceof RefExpr - or - ref instanceof RefPat - ) and - result = TRefType() -} - +/** + * Gets the type of `n` at `path`, where `n` is either a method call or an + * argument/receiver of a method call. + */ pragma[nomagic] -private Type inferTryExprType(TryExpr te, TypePath path) { - exists(TypeParam tp, TypePath path0 | - result = inferType(te.getExpr(), path0) and - path0.isCons(TTypeParamTypeParameter(tp), path) +private Type inferMethodCallType(AstNode n, TypePath path) { + exists( + MethodCallMatchingInput::Access a, MethodCallMatchingInput::AccessPosition apos, + string derefChainBorrow, TypePath path0 | - tp = any(ResultEnum r).getGenericParamList().getGenericParam(0) + result = inferMethodCallType0(a, apos, n, derefChainBorrow, path0) + | + ( + not apos.isSelf() + or + derefChainBorrow = ";" + ) and + path = path0 or - tp = any(OptionEnum o).getGenericParamList().getGenericParam(0) + // adjust for implicit deref + apos.isSelf() and + derefChainBorrow = ".ref;" and + path = TypePath::cons(TRefTypeParameter(), path0) + or + // adjust for implicit borrow + apos.isSelf() and + derefChainBorrow = ";borrow" and + path0.isCons(TRefTypeParameter(), path) ) } -pragma[nomagic] -private StructType getStrStruct() { result = TStruct(any(Builtins::Str s)) } +/** + * Provides logic for resolving calls to non-method items. This includes + * "calls" to tuple variants and tuple structs. + */ +private module NonMethodResolution { + /** + * Holds if the associated function `implFunction` at `impl` implements + * `traitFunction`, which belongs to `trait`, and resolving the function + * `implFunction` requires inspecting the type of applied _arguments_ at + * position `pos` in order to determine whether it is the correct resolution. + * + * `type` is the type at `pos` of `implFunction` which mathces a type parameter of + * `traitFunction` at `pos`. + */ + pragma[nomagic] + private predicate traitFunctionDependsOnArgument( + TraitItemNode trait, NonMethodFunction traitFunction, FunctionTypePosition pos, Type type, + ImplItemNode impl, NonMethodFunction implFunction + ) { + exists(TypePath path | + assocFunctionTypeAtPath(implFunction, impl, pos, path, type) and + implFunction.implements(traitFunction) and + FunctionOverloading::traitTypeParameterOccurrence(trait, traitFunction, _, pos, path, _) + | + not pos.isReturn() + or + // We only check that the context of the call provides relevant type information + // when no argument can + not exists(FunctionTypePosition pos0 | + FunctionOverloading::traitTypeParameterOccurrence(trait, traitFunction, _, pos0, _, _) or + FunctionOverloading::functionResolutionDependsOnArgument(impl, implFunction, pos0, _, _) + | + not pos0.isReturn() + ) + ) + } -pragma[nomagic] -private Type inferLiteralType(LiteralExpr le, TypePath path, boolean certain) { - path.isEmpty() and - exists(Builtins::BuiltinType t | result = TStruct(t) | - le instanceof CharLiteralExpr and - t instanceof Builtins::Char and - certain = true - or - le = - any(NumberLiteralExpr ne | - t.getName() = ne.getSuffix() and - certain = true - or - // When a number literal has no suffix, the type may depend on the context. - // For simplicity, we assume either `i32` or `f64`. - not exists(ne.getSuffix()) and - certain = false and - ( - ne instanceof IntegerLiteralExpr and - t instanceof Builtins::I32 - or - ne instanceof FloatLiteralExpr and - t instanceof Builtins::F64 - ) + pragma[nomagic] + private predicate functionInfoBlanketRelevantPos( + NonMethodFunction f, string name, int arity, ImplItemNode impl, Trait trait, + FunctionTypePosition pos, AssocFunctionType t, TypePath blanketPath, TypeParam blanketTypeParam + ) { + functionInfoBlanket(f, name, arity, impl, trait, pos, t, blanketPath, blanketTypeParam) and + ( + not pos.isReturn() + or + // We only check that the context of the call provides relevant type information + // when no argument can + not exists(FunctionTypePosition pos0 | + functionInfoBlanket(f, name, arity, impl, trait, pos0, _, _, _) and + not pos0.isReturn() ) - or - le instanceof BooleanLiteralExpr and - t instanceof Builtins::Bool and - certain = true - ) - or - le instanceof StringLiteralExpr and - ( - path.isEmpty() and result = TRefType() - or - path = TypePath::singleton(TRefTypeParameter()) and - result = getStrStruct() - ) and - certain = true -} + ) + } -pragma[nomagic] -private TraitType getFutureTraitType() { result.getTrait() instanceof FutureTrait } + pragma[nomagic] + private predicate blanketCallTraitCandidate(Element fc, Trait trait) { + exists(string name, int arity | + fc.(NonMethodCall).hasNameAndArity(name, arity) and + functionInfoBlanketRelevantPos(_, name, arity, _, trait, _, _, _, _) + | + not fc.(Call).hasTrait() + or + trait = fc.(Call).getTrait() + ) + } -pragma[nomagic] -private AssociatedTypeTypeParameter getFutureOutputTypeParameter() { - result.getTypeAlias() = any(FutureTrait ft).getOutputType() -} + private module BlanketTraitIsVisible = TraitIsVisible; -pragma[nomagic] -private TraitType inferAsyncBlockExprRootType(AsyncBlockExpr abe) { - // `typeEquality` handles the non-root case - exists(abe) and - result = getFutureTraitType() -} + /** A non-method call, `f(x)`. */ + final class NonMethodCall extends CallExpr { + NonMethodCall() { + // even if a function cannot be resolved by path resolution, it may still + // be possible to resolve a blanket implementation (so not `forex`) + forall(Function f | f = CallExprImpl::getResolvedFunction(this) | + f instanceof NonMethodFunction + ) + } + + pragma[nomagic] + predicate hasNameAndArity(string name, int arity) { + name = CallExprImpl::getFunctionPath(this).getText() and + arity = this.getArgList().getNumberOfArgs() + } + + /** + * Gets the item that this function call resolves to using path resolution, + * if any. + */ + private ItemNode getPathResolutionResolved() { + result = CallExprImpl::getResolvedFunction(this) and + not result.(Function).hasSelfParam() + } + + /** + * Gets the blanket function that this call may resolve to, if any. + */ + pragma[nomagic] + private NonMethodFunction resolveCallTargetBlanketCand(ImplItemNode impl) { + exists(string name | + this.hasNameAndArity(pragma[only_bind_into](name), _) and + ArgIsInstantiationOfBlanketParam::argIsInstantiationOf(MkCallAndBlanketPos(this, _), impl, _) and + result = impl.getASuccessor(pragma[only_bind_into](name)) + ) + } + + pragma[nomagic] + NonMethodFunction resolveAssocCallTargetCand(ImplItemNode i) { + not this.(Call).hasTrait() and + result = this.getPathResolutionResolved() and + result = i.getASuccessor(_) + or + result = this.resolveCallTargetBlanketCand(i) + } + + AstNode getNodeAt(FunctionTypePosition pos) { + result = this.getArg(pos.asPositional()) + or + result = this and pos.isReturn() + } + + Type getTypeAt(FunctionTypePosition pos, TypePath path) { + result = inferType(this.getNodeAt(pos), path) + } + + pragma[nomagic] + predicate resolveCallTargetBlanketCandidate( + ImplItemNode impl, FunctionTypePosition pos, TypePath blanketPath, TypeParam blanketTypeParam + ) { + exists(string name, int arity, Trait trait, AssocFunctionType t | + this.hasNameAndArity(name, arity) and + exists(this.getTypeAt(pos, blanketPath)) and + functionInfoBlanketRelevantPos(_, name, arity, impl, trait, pos, t, blanketPath, + blanketTypeParam) and + BlanketTraitIsVisible::traitIsVisible(this, trait) + ) + } + + pragma[nomagic] + predicate hasTraitResolved(TraitItemNode trait, NonMethodFunction resolved) { + resolved = this.getPathResolutionResolved() and + trait = this.(Call).getTrait() + } + + pragma[nomagic] + private NonMethodFunction resolveCallTargetRec() { + result = this.resolveCallTargetBlanketCand(_) and + not FunctionOverloading::functionResolutionDependsOnArgument(_, result, _, _, _) + or + NonMethodArgsAreInstantiationsOf::argsAreInstantiationsOf(this, _, result) + } + + pragma[nomagic] + ItemNode resolveCallTargetNonRec() { + not this.(Call).hasTrait() and + result = this.getPathResolutionResolved() and + not FunctionOverloading::functionResolutionDependsOnArgument(_, result, _, _, _) + } + + pragma[inline] + ItemNode resolveCallTarget() { + result = this.resolveCallTargetNonRec() + or + result = this.resolveCallTargetRec() + } + } + + private newtype TCallAndBlanketPos = + MkCallAndBlanketPos(NonMethodCall fc, FunctionTypePosition pos) { + fc.resolveCallTargetBlanketCandidate(_, pos, _, _) + } + + /** A call tagged with a position. */ + private class CallAndBlanketPos extends MkCallAndBlanketPos { + NonMethodCall fc; + FunctionTypePosition pos; + + CallAndBlanketPos() { this = MkCallAndBlanketPos(fc, pos) } + + Location getLocation() { result = fc.getLocation() } + + Type getTypeAt(TypePath path) { result = fc.getTypeAt(pos, path) } + + string toString() { result = fc.toString() + " [arg " + pos + "]" } + } -final private class AwaitTarget extends Expr { - AwaitTarget() { this = any(AwaitExpr ae).getExpr() } + private module ArgSatisfiesBlanketConstraintInput implements + BlanketImplementation::SatisfiesBlanketConstraintInputSig + { + pragma[nomagic] + predicate hasBlanketCandidate( + CallAndBlanketPos fcp, ImplItemNode impl, TypePath blanketPath, TypeParam blanketTypeParam + ) { + exists(NonMethodCall fc, FunctionTypePosition pos | + fcp = MkCallAndBlanketPos(fc, pos) and + fc.resolveCallTargetBlanketCandidate(impl, pos, blanketPath, blanketTypeParam) + ) + } + } - Type getTypeAt(TypePath path) { result = inferType(this, path) } -} + private module ArgSatisfiesBlanketConstraint = + BlanketImplementation::SatisfiesBlanketConstraint; -private module AwaitSatisfiesConstraintInput implements SatisfiesConstraintInputSig { - predicate relevantConstraint(AwaitTarget term, Type constraint) { - exists(term) and - constraint.(TraitType).getTrait() instanceof FutureTrait + /** + * A configuration for matching the type of an argument against the type of + * a parameter that mentions a satisfied blanket type parameter. + */ + private module ArgIsInstantiationOfBlanketParamInput implements + IsInstantiationOfInputSig + { + pragma[nomagic] + predicate potentialInstantiationOf( + CallAndBlanketPos fcp, TypeAbstraction abs, AssocFunctionType constraint + ) { + exists(FunctionTypePosition pos | + ArgSatisfiesBlanketConstraint::satisfiesBlanketConstraint(fcp, abs) and + fcp = MkCallAndBlanketPos(_, pos) and + functionInfoBlanketRelevantPos(_, _, _, abs, _, pos, constraint, _, _) + ) + } + + predicate relevantConstraint(AssocFunctionType constraint) { + functionInfoBlanketRelevantPos(_, _, _, _, _, _, constraint, _, _) + } } -} -pragma[nomagic] -private Type inferAwaitExprType(AstNode n, TypePath path) { - exists(TypePath exprPath | - SatisfiesConstraint::satisfiesConstraintType(n.(AwaitExpr) - .getExpr(), _, exprPath, result) and - exprPath.isCons(getFutureOutputTypeParameter(), path) - ) -} + private module ArgIsInstantiationOfBlanketParam = + ArgIsInstantiationOf; + + private module NonMethodArgsAreInstantiationsOfInput implements ArgsAreInstantiationsOfInputSig { + predicate toCheck( + ImplOrTraitItemNode i, Function f, FunctionTypePosition pos, AssocFunctionType t + ) { + t.appliesTo(f, pos, i) and + ( + exists(Type t0 | + // for now, we do not handle ambiguous targets when one of the types it iself + // a type parameter; we should be checking the constraints on that type parameter + // in this case + not t0 instanceof TypeParameter + | + FunctionOverloading::functionResolutionDependsOnArgument(i, f, pos, _, t0) + or + traitFunctionDependsOnArgument(_, _, pos, t0, i, f) + ) + or + // match against the trait function itself + exists(Trait trait | + FunctionOverloading::traitTypeParameterOccurrence(trait, f, _, pos, _, + TSelfTypeParameter(trait)) + ) + ) + } -private class Vec extends Struct { - Vec() { this.getCanonicalPath() = "alloc::vec::Vec" } + class Call extends NonMethodCall { + Type getArgType(FunctionTypePosition pos, TypePath path) { + result = inferType(this.getNodeAt(pos), path) + } - TypeParamTypeParameter getElementTypeParameter() { - result.getTypeParam() = this.getGenericParamList().getTypeParam(0) + predicate hasTargetCand(ImplOrTraitItemNode i, Function f) { + f = this.resolveAssocCallTargetCand(i) + or + exists(TraitItemNode trait, NonMethodFunction resolved, ImplItemNode i1, Function f1 | + this.hasTraitResolved(trait, resolved) and + traitFunctionDependsOnArgument(trait, resolved, _, _, i1, f1) + | + f = f1 and + i = i1 + or + f = resolved and + i = trait + ) + } + } } + + private module NonMethodArgsAreInstantiationsOf = + ArgsAreInstantiationsOf; } /** - * Gets the root type of the array expression `ae`. + * A matching configuration for resolving types of calls like + * `foo::bar(baz)` where the target is not a method. */ -pragma[nomagic] -private Type inferArrayExprType(ArrayExpr ae) { exists(ae) and result = TArrayType() } +private module NonMethodCallMatchingInput implements MatchingInputSig { + import FunctionTypePositionMatchingInput -/** - * Gets the root type of the range expression `re`. - */ -pragma[nomagic] -private Type inferRangeExprType(RangeExpr re) { result = TStruct(getRangeType(re)) } + abstract class Declaration extends AstNode { + abstract TypeParameter getTypeParameter(TypeParameterPosition ppos); -/** - * According to [the Rust reference][1]: _"array and slice-typed expressions - * can be indexed with a `usize` index ... For other types an index expression - * `a[b]` is equivalent to *std::ops::Index::index(&a, b)"_. - * - * The logic below handles array and slice indexing, but for other types it is - * currently limited to `Vec`. - * - * [1]: https://doc.rust-lang.org/reference/expressions/array-expr.html#r-expr.array.index - */ -pragma[nomagic] -private Type inferIndexExprType(IndexExpr ie, TypePath path) { - // TODO: Method resolution to the `std::ops::Index` trait can handle the - // `Index` instances for slices and arrays. - exists(TypePath exprPath, Builtins::BuiltinType t | - TStruct(t) = inferType(ie.getIndex()) and - ( - // also allow `i32`, since that is currently the type that we infer for - // integer literals like `0` - t instanceof Builtins::I32 + pragma[nomagic] + abstract Type getParameterType(DeclarationPosition dpos, TypePath path); + + abstract Type getReturnType(TypePath path); + + Type getDeclaredType(DeclarationPosition dpos, TypePath path) { + result = this.getParameterType(dpos, path) or - t instanceof Builtins::Usize - ) and - result = inferType(ie.getBase(), exprPath) - | - exprPath.isCons(any(Vec v).getElementTypeParameter(), path) - or - exprPath.isCons(any(ArrayTypeParameter tp), path) - or - exists(TypePath path0 | - exprPath.isCons(any(RefTypeParameter tp), path0) and - path0.isCons(any(SliceTypeParameter tp), path) - ) - ) -} + dpos.isReturn() and + result = this.getReturnType(path) + } + } -/** - * A matching configuration for resolving types of struct patterns - * like `let Foo { bar } = ...`. - */ -private module StructPatMatchingInput implements MatchingInputSig { - class DeclarationPosition = StructExprMatchingInput::DeclarationPosition; + abstract additional class TupleDeclaration extends Declaration { + override Type getDeclaredType(DeclarationPosition dpos, TypePath path) { + result = super.getDeclaredType(dpos, path) + or + dpos.isSelf() and + result = this.getReturnType(path) + } + } - class Declaration = StructExprMatchingInput::Declaration; + private class TupleStructDecl extends TupleDeclaration, Struct { + TupleStructDecl() { this.isTuple() } - class AccessPosition = DeclarationPosition; + override TypeParameter getTypeParameter(TypeParameterPosition ppos) { + typeParamMatchPosition(this.getGenericParamList().getATypeParam(), result, ppos) + } - class Access extends StructPat { - Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { none() } + override Type getParameterType(DeclarationPosition dpos, TypePath path) { + exists(int pos | + result = this.getTupleField(pos).getTypeRepr().(TypeMention).resolveTypeAt(path) and + pos = dpos.asPositional() + ) + } - AstNode getNodeAt(AccessPosition apos) { - result = this.getPatField(apos.asFieldPos()).getPat() + override Type getReturnType(TypePath path) { + result = TStruct(this) and + path.isEmpty() or - result = this and - apos.isStructPos() + result = TTypeParamTypeParameter(this.getGenericParamList().getATypeParam()) and + path = TypePath::singleton(result) } + } - Type getInferredType(AccessPosition apos, TypePath path) { - result = inferType(this.getNodeAt(apos), path) + private class TupleVariantDecl extends TupleDeclaration, Variant { + TupleVariantDecl() { this.isTuple() } + + override TypeParameter getTypeParameter(TypeParameterPosition ppos) { + typeParamMatchPosition(this.getEnum().getGenericParamList().getATypeParam(), result, ppos) + } + + override Type getParameterType(DeclarationPosition dpos, TypePath path) { + exists(int pos | + result = this.getTupleField(pos).getTypeRepr().(TypeMention).resolveTypeAt(path) and + pos = dpos.asPositional() + ) + } + + override Type getReturnType(TypePath path) { + exists(Enum enum | enum = this.getEnum() | + result = TEnum(enum) and + path.isEmpty() + or + result = TTypeParamTypeParameter(enum.getGenericParamList().getATypeParam()) and + path = TypePath::singleton(result) + ) + } + } + + private class NonMethodFunctionDecl extends Declaration, NonMethodFunction instanceof MethodCallMatchingInput::Declaration + { + override TypeParameter getTypeParameter(TypeParameterPosition ppos) { + result = MethodCallMatchingInput::Declaration.super.getTypeParameter(ppos) + } + + override Type getParameterType(DeclarationPosition dpos, TypePath path) { + // For associated functions, we may also need to match type arguments against + // the `Self` type. For example, in + // + // ```rust + // struct Foo(T); + // + // impl Foo { + // fn default() -> Self { + // Foo(Default::default()) + // } + // } + // + // Foo::::default(); + // ``` + // + // we need to match `i32` against the type parameter `T` of the `impl` block. + dpos.isSelf() and + exists(ImplOrTraitItemNode i | + this = i.getAnAssocItem() and + result = resolveImplOrTraitType(i, path) + ) or - // The struct/enum type is supplied explicitly as a type qualifier, e.g. - // `let Foo::Variant { ... } = ...`. - apos.isStructPos() and - result = this.getPath().(TypeMention).resolveTypeAt(path) + exists(FunctionTypePosition fpos | + result = MethodCallMatchingInput::Declaration.super.getParameterType(fpos, path) and + dpos = fpos.getFunctionCallAdjusted(this) + ) } - Declaration getTarget() { result = resolvePath(this.getPath()) } + override Type getReturnType(TypePath path) { + result = MethodCallMatchingInput::Declaration.super.getReturnType(path) + } } - predicate accessDeclarationPositionMatch(AccessPosition apos, DeclarationPosition dpos) { - apos = dpos + class Access extends NonMethodResolution::NonMethodCall { + pragma[nomagic] + Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { + result = getCallExprTypeArgument(this, apos).resolveTypeAt(path) + } + + pragma[nomagic] + Type getInferredType(AccessPosition apos, TypePath path) { + apos.isSelf() and + result = getCallExprTypeQualifier(this, path) + or + result = inferType(this.getNodeAt(apos), path) + } + + Declaration getTarget() { + result = this.resolveCallTarget() // potential mutual recursion; resolving some associated function calls requires resolving types + } } } -private module StructPatMatching = Matching; +private module NonMethodCallMatching = Matching; -/** - * Gets the type of `n` at `path`, where `n` is either a struct pattern or - * a field pattern of a struct pattern. - */ pragma[nomagic] -private Type inferStructPatType(AstNode n, TypePath path) { - exists(StructPatMatchingInput::Access a, StructPatMatchingInput::AccessPosition apos | +private Type inferNonMethodCallType(AstNode n, TypePath path) { + exists(NonMethodCallMatchingInput::Access a, NonMethodCallMatchingInput::AccessPosition apos | n = a.getNodeAt(apos) and - result = StructPatMatching::inferAccessType(a, apos, path) + result = NonMethodCallMatching::inferAccessType(a, apos, path) ) } /** - * A matching configuration for resolving types of tuple struct patterns - * like `let Some(x) = ...`. + * A matching configuration for resolving types of operations like `a + b`. */ -private module TupleStructPatMatchingInput implements MatchingInputSig { - class DeclarationPosition = CallExprBaseMatchingInput::DeclarationPosition; +private module OperationMatchingInput implements MatchingInputSig { + private import codeql.rust.elements.internal.OperationImpl as OperationImpl + import FunctionTypePositionMatchingInput - class Declaration = CallExprBaseMatchingInput::TupleDeclaration; + class Declaration extends MethodCallMatchingInput::Declaration { + private Method getSelfOrImpl() { + result = this + or + this.implements(result) + } - class AccessPosition = DeclarationPosition; + pragma[nomagic] + private predicate borrowsAt(DeclarationPosition pos) { + exists(TraitItemNode t, string path, string method | + this.getSelfOrImpl() = t.getAssocItem(method) and + path = t.getCanonicalPath(_) and + exists(int borrows | OperationImpl::isOverloaded(_, _, path, method, borrows) | + pos.isSelf() and borrows >= 1 + or + pos.asPositional() = 0 and + borrows >= 2 + ) + ) + } - class Access extends TupleStructPat { - Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { none() } + pragma[nomagic] + private Type getParameterType(DeclarationPosition dpos, TypePath path) { + exists(TypePath path0 | + result = super.getParameterType(dpos, path0) and + if this.borrowsAt(dpos) then path0.isCons(TRefTypeParameter(), path) else path0 = path + ) + } - AstNode getNodeAt(AccessPosition apos) { - result = this.getField(apos.asPosition()) + pragma[nomagic] + private predicate derefsReturn() { this.getSelfOrImpl() = any(DerefTrait t).getDerefFunction() } + + pragma[nomagic] + private Type getReturnType(TypePath path) { + exists(TypePath path0 | + result = super.getReturnType(path0) and + if this.derefsReturn() then path0.isCons(TRefTypeParameter(), path) else path0 = path + ) + } + + Type getDeclaredType(DeclarationPosition dpos, TypePath path) { + result = this.getParameterType(dpos, path) or - result = this and - apos.isSelf() + dpos.isReturn() and + result = this.getReturnType(path) } + } + + class Access extends MethodResolution::MethodCallOperation { + Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { none() } + pragma[nomagic] Type getInferredType(AccessPosition apos, TypePath path) { result = inferType(this.getNodeAt(apos), path) - or - // The struct/enum type is supplied explicitly as a type qualifier, e.g. - // `let Option::::Some(x) = ...`. - apos.isSelf() and - result = this.getPath().(TypeMention).resolveTypeAt(path) } - Declaration getTarget() { result = resolvePath(this.getPath()) } - } - - predicate accessDeclarationPositionMatch(AccessPosition apos, DeclarationPosition dpos) { - apos = dpos + Declaration getTarget() { + result = this.resolveCallTarget(_) // mutual recursion + } } } -private module TupleStructPatMatching = Matching; +private module OperationMatching = Matching; -/** - * Gets the type of `n` at `path`, where `n` is either a tuple struct pattern or - * a positional pattern of a tuple struct pattern. - */ pragma[nomagic] -private Type inferTupleStructPatType(AstNode n, TypePath path) { - exists(TupleStructPatMatchingInput::Access a, TupleStructPatMatchingInput::AccessPosition apos | +private Type inferOperationType(AstNode n, TypePath path) { + exists(OperationMatchingInput::Access a, OperationMatchingInput::AccessPosition apos | n = a.getNodeAt(apos) and - result = TupleStructPatMatching::inferAccessType(a, apos, path) + result = OperationMatching::inferAccessType(a, apos, path) ) } -final private class ForIterableExpr extends Expr { - ForIterableExpr() { this = any(ForExpr fe).getIterable() } - - Type getTypeAt(TypePath path) { result = inferType(this, path) } -} - -private module ForIterableSatisfiesConstraintInput implements - SatisfiesConstraintInputSig -{ - predicate relevantConstraint(ForIterableExpr term, Type constraint) { - exists(term) and - exists(Trait t | t = constraint.(TraitType).getTrait() | - // TODO: Remove the line below once we can handle the `impl IntoIterator for I` implementation - t instanceof IteratorTrait or - t instanceof IntoIteratorTrait - ) - } -} - pragma[nomagic] -private AssociatedTypeTypeParameter getIteratorItemTypeParameter() { - result.getTypeAlias() = any(IteratorTrait t).getItemType() +private Type getFieldExprLookupType(FieldExpr fe, string name) { + exists(TypePath path | + result = inferType(fe.getContainer(), path) and + name = fe.getIdentifier().getText() and + isComplexRootStripped(path, result) + ) } pragma[nomagic] -private AssociatedTypeTypeParameter getIntoIteratorItemTypeParameter() { - result.getTypeAlias() = any(IntoIteratorTrait t).getItemType() +private Type getTupleFieldExprLookupType(FieldExpr fe, int pos) { + exists(string name | + result = getFieldExprLookupType(fe, name) and + pos = name.toInt() + ) } pragma[nomagic] -private Type inferForLoopExprType(AstNode n, TypePath path) { - // type of iterable -> type of pattern (loop variable) - exists(ForExpr fe, TypePath exprPath, AssociatedTypeTypeParameter tp | - n = fe.getPat() and - SatisfiesConstraint::satisfiesConstraintType(fe.getIterable(), - _, exprPath, result) and - exprPath.isCons(tp, path) - | - tp = getIntoIteratorItemTypeParameter() - or - // TODO: Remove once we can handle the `impl IntoIterator for I` implementation - tp = getIteratorItemTypeParameter() and - inferType(fe.getIterable()) != TArrayType() +private TupleTypeParameter resolveTupleTypeFieldExpr(FieldExpr fe) { + exists(int arity, int i | + TTuple(arity) = getTupleFieldExprLookupType(fe, i) and + result = TTupleTypeParameter(arity, i) ) } /** - * An invoked expression, the target of a call that is either a local variable - * or a non-path expression. This means that the expression denotes a - * first-class function. + * A matching configuration for resolving types of field expressions like `x.field`. */ -final private class InvokedClosureExpr extends Expr { - private CallExpr call; +private module FieldExprMatchingInput implements MatchingInputSig { + private newtype TDeclarationPosition = + TSelfDeclarationPosition() or + TFieldPos() - InvokedClosureExpr() { - call.getFunction() = this and - (not this instanceof PathExpr or this = any(Variable v).getAnAccess()) + class DeclarationPosition extends TDeclarationPosition { + predicate isSelf() { this = TSelfDeclarationPosition() } + + predicate isField() { this = TFieldPos() } + + string toString() { + this.isSelf() and + result = "self" + or + this.isField() and + result = "(field)" + } } - Type getTypeAt(TypePath path) { result = inferType(this, path) } + private newtype TDeclaration = + TStructFieldDecl(StructField sf) or + TTupleFieldDecl(TupleField tf) or + TTupleTypeParameterDecl(TupleTypeParameter ttp) - CallExpr getCall() { result = call } -} + abstract class Declaration extends TDeclaration { + TypeParameter getTypeParameter(TypeParameterPosition ppos) { none() } -private module InvokedClosureSatisfiesConstraintInput implements - SatisfiesConstraintInputSig -{ - predicate relevantConstraint(InvokedClosureExpr term, Type constraint) { - exists(term) and - constraint.(TraitType).getTrait() instanceof FnOnceTrait + abstract Type getDeclaredType(DeclarationPosition dpos, TypePath path); + + abstract string toString(); + + abstract Location getLocation(); } -} -/** Gets the type of `ce` when viewed as an implementation of `FnOnce`. */ -private Type invokedClosureFnTypeAt(InvokedClosureExpr ce, TypePath path) { - SatisfiesConstraint::satisfiesConstraintType(ce, - _, path, result) -} + abstract private class StructOrTupleFieldDecl extends Declaration { + abstract AstNode getAstNode(); -/** Gets the path to a closure's return type. */ -private TypePath closureReturnPath() { - result = TypePath::singleton(TDynTraitTypeParameter(any(FnOnceTrait t).getOutputType())) -} + abstract TypeRepr getTypeRepr(); -/** Gets the path to a closure with arity `arity`s `index`th parameter type. */ -pragma[nomagic] -private TypePath closureParameterPath(int arity, int index) { - result = - TypePath::cons(TDynTraitTypeParameter(any(FnOnceTrait t).getTypeParam()), - TypePath::singleton(TTupleTypeParameter(arity, index))) -} + override Type getDeclaredType(DeclarationPosition dpos, TypePath path) { + dpos.isSelf() and + // no case for variants as those can only be destructured using pattern matching + exists(Struct s | this.getAstNode() = [s.getStructField(_).(AstNode), s.getTupleField(_)] | + result = TStruct(s) and + path.isEmpty() + or + result = TTypeParamTypeParameter(s.getGenericParamList().getATypeParam()) and + path = TypePath::singleton(result) + ) + or + dpos.isField() and + result = this.getTypeRepr().(TypeMention).resolveTypeAt(path) + } -/** Gets the path to the return type of the `FnOnce` trait. */ -private TypePath fnReturnPath() { - result = TypePath::singleton(TAssociatedTypeTypeParameter(any(FnOnceTrait t).getOutputType())) -} + override string toString() { result = this.getAstNode().toString() } -/** - * Gets the path to the parameter type of the `FnOnce` trait with arity `arity` - * and index `index`. - */ -pragma[nomagic] -private TypePath fnParameterPath(int arity, int index) { - result = - TypePath::cons(TTypeParamTypeParameter(any(FnOnceTrait t).getTypeParam()), - TypePath::singleton(TTupleTypeParameter(arity, index))) -} + override Location getLocation() { result = this.getAstNode().getLocation() } + } -pragma[nomagic] -private Type inferDynamicCallExprType(Expr n, TypePath path) { - exists(InvokedClosureExpr ce | - // Propagate the function's return type to the call expression - exists(TypePath path0 | result = invokedClosureFnTypeAt(ce, path0) | - n = ce.getCall() and - path = path0.stripPrefix(fnReturnPath()) - or - // Propagate the function's parameter type to the arguments - exists(int index | - n = ce.getCall().getArgList().getArg(index) and - path = path0.stripPrefix(fnParameterPath(ce.getCall().getNumberOfArgs(), index)) - ) - ) - or - // _If_ the invoked expression has the type of a closure, then we propagate - // the surrounding types into the closure. - exists(int arity, TypePath path0 | - ce.getTypeAt(TypePath::nil()).(DynTraitType).getTrait() instanceof FnOnceTrait - | - // Propagate the type of arguments to the parameter types of closure - exists(int index | - n = ce and - arity = ce.getCall().getNumberOfArgs() and - result = inferType(ce.getCall().getArg(index), path0) and - path = closureParameterPath(arity, index).append(path0) + private class StructFieldDecl extends StructOrTupleFieldDecl, TStructFieldDecl { + private StructField sf; + + StructFieldDecl() { this = TStructFieldDecl(sf) } + + override AstNode getAstNode() { result = sf } + + override TypeRepr getTypeRepr() { result = sf.getTypeRepr() } + } + + private class TupleFieldDecl extends StructOrTupleFieldDecl, TTupleFieldDecl { + private TupleField tf; + + TupleFieldDecl() { this = TTupleFieldDecl(tf) } + + override AstNode getAstNode() { result = tf } + + override TypeRepr getTypeRepr() { result = tf.getTypeRepr() } + } + + private class TupleTypeParameterDecl extends Declaration, TTupleTypeParameterDecl { + private TupleTypeParameter ttp; + + TupleTypeParameterDecl() { this = TTupleTypeParameterDecl(ttp) } + + override Type getDeclaredType(DeclarationPosition dpos, TypePath path) { + dpos.isSelf() and + ( + result = ttp.getTupleType() and + path.isEmpty() + or + result = ttp and + path = TypePath::singleton(ttp) ) or - // Propagate the type of the call expression to the return type of the closure - n = ce and - arity = ce.getCall().getNumberOfArgs() and - result = inferType(ce.getCall(), path0) and - path = closureReturnPath().append(path0) - ) - ) -} + dpos.isField() and + result = ttp and + path.isEmpty() + } -pragma[nomagic] -private Type inferClosureExprType(AstNode n, TypePath path) { - exists(ClosureExpr ce | - n = ce and - path.isEmpty() and - result = TDynTraitType(any(FnOnceTrait t)) - or - n = ce and - path = TypePath::singleton(TDynTraitTypeParameter(any(FnOnceTrait t).getTypeParam())) and - result = TTuple(ce.getNumberOfParams()) - or - // Propagate return type annotation to body - n = ce.getBody() and - result = ce.getRetType().getTypeRepr().(TypeMention).resolveTypeAt(path) - ) -} + override string toString() { result = ttp.toString() } -pragma[nomagic] -private Type inferCastExprType(CastExpr ce, TypePath path) { - result = ce.getTypeRepr().(TypeMention).resolveTypeAt(path) -} + override Location getLocation() { result = ttp.getLocation() } + } -final class MethodCall extends Call { - MethodCall() { exists(this.getReceiver()) } + class AccessPosition = DeclarationPosition; - private Type getReceiverTypeAt(TypePath path) { - result = inferType(super.getReceiver(), path) - or - result = getTypeQualifier(this, path) - } + class Access extends FieldExpr { + Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { none() } + + AstNode getNodeAt(AccessPosition apos) { + result = this.getContainer() and + apos.isSelf() + or + result = this and + apos.isField() + } - /** Gets the type of the receiver of the method call at `path`. */ - Type getTypeAt(TypePath path) { - if - this.receiverImplicitlyBorrowed() or - this.(CallImpl::CallExprMethodCall).hasExplicitSelfBorrow() - then - exists(TypePath path0, Type t0 | - t0 = this.getReceiverTypeAt(path0) and - ( + Type getInferredType(AccessPosition apos, TypePath path) { + exists(TypePath path0 | result = inferType(this.getNodeAt(apos), path0) | + if apos.isSelf() + then + // adjust for implicit deref path0.isCons(TRefTypeParameter(), path) or - ( - not path0.isCons(TRefTypeParameter(), _) and - not (path0.isEmpty() and result = TRefType()) - or - // Ideally we should find all methods on reference types, but as - // that currently causes a blowup we limit this to the `deref` - // method in order to make dereferencing work. - this.getMethodName() = "deref" - ) and + not path0.isCons(TRefTypeParameter(), _) and + not (result = TRefType() and path0.isEmpty()) and path = path0 - ) - | - result = t0 - or - // We do not yet model the `Deref` trait, so we hard-code the fact that - // `String` dereferences to `str` here. This allows us e.g. to resolve - // `x.parse::()` to the function `::parse` when `x` has - // type `String`. - // - // See also https://doc.rust-lang.org/reference/expressions/method-call-expr.html#r-expr.method.autoref-deref - path.isEmpty() and - t0.(StructType).getStruct() instanceof StringStruct and - result.(StructType).getStruct() instanceof Builtins::Str + else path = path0 ) - else result = this.getReceiverTypeAt(path) + } + + Declaration getTarget() { + // mutual recursion; resolving fields requires resolving types and vice versa + result = + [ + TStructFieldDecl(resolveStructFieldExpr(this)).(TDeclaration), + TTupleFieldDecl(resolveTupleFieldExpr(this)), + TTupleTypeParameterDecl(resolveTupleTypeFieldExpr(this)) + ] + } + } + + predicate accessDeclarationPositionMatch(AccessPosition apos, DeclarationPosition dpos) { + apos = dpos } } +private module FieldExprMatching = Matching; + /** - * Holds if a method for `type` with the name `name` and the arity `arity` - * exists in `impl`. + * Gets the type of `n` at `path`, where `n` is either a field expression or + * the receiver of field expression call. */ pragma[nomagic] -private predicate methodCandidate(Type type, string name, int arity, Impl impl) { - type = impl.getSelfTy().(TypeMention).resolveType() and - exists(Function f | - f = impl.(ImplItemNode).getASuccessor(name) and - f.hasSelfParam() and - arity = f.getParamList().getNumberOfParams() +private Type inferFieldExprType(AstNode n, TypePath path) { + exists( + FieldExprMatchingInput::Access a, FieldExprMatchingInput::AccessPosition apos, TypePath path0 + | + n = a.getNodeAt(apos) and + result = FieldExprMatching::inferAccessType(a, apos, path0) + | + if apos.isSelf() + then + exists(Type receiverType | receiverType = inferType(n) | + if receiverType = TRefType() + then + // adjust for implicit deref + not path0.isCons(TRefTypeParameter(), _) and + not (path0.isEmpty() and result = TRefType()) and + path = TypePath::cons(TRefTypeParameter(), path0) + else path = path0 + ) + else path = path0 ) } -/** - * Holds if a method for `type` for `trait` with the name `name` and the arity - * `arity` exists in `impl`. - */ +/** Gets the root type of the reference node `ref`. */ pragma[nomagic] -private predicate methodCandidateTrait(Type type, Trait trait, string name, int arity, Impl impl) { - trait = impl.(ImplItemNode).resolveTraitTy() and - methodCandidate(type, name, arity, impl) +private Type inferRefNodeType(AstNode ref) { + ( + ref = any(IdentPat ip | ip.isRef()).getName() + or + ref instanceof RefExpr + or + ref instanceof RefPat + ) and + result = TRefType() } -/** - * Holds if `mc` has `rootType` as the root type of the receiver and the target - * method is named `name` and has arity `arity` - */ pragma[nomagic] -private predicate isMethodCall(MethodCall mc, Type rootType, string name, int arity) { - rootType = mc.getTypeAt(TypePath::nil()) and - name = mc.getMethodName() and - arity = mc.getNumberOfArguments() +private Type inferTryExprType(TryExpr te, TypePath path) { + exists(TypeParam tp, TypePath path0 | + result = inferType(te.getExpr(), path0) and + path0.isCons(TTypeParamTypeParameter(tp), path) + | + tp = any(ResultEnum r).getGenericParamList().getGenericParam(0) + or + tp = any(OptionEnum o).getGenericParamList().getGenericParam(0) + ) } -private module IsInstantiationOfInput implements - IsInstantiationOfInputSig -{ - /** Holds if `mc` specifies a trait and might target a method in `impl`. */ - pragma[nomagic] - private predicate methodCallTraitCandidate(MethodCall mc, Impl impl) { - exists(Type rootType, string name, int arity | - isMethodCall(mc, rootType, name, arity) and - methodCandidateTrait(rootType, mc.getTrait(), name, arity, impl) - ) - } - - /** Holds if `mc` does not specify a trait and might target a method in `impl`. */ - pragma[nomagic] - private predicate methodCallCandidate(MethodCall mc, Impl impl) { - exists(Type rootType, string name, int arity | - not exists(mc.getTrait()) and - isMethodCall(mc, rootType, name, arity) and - methodCandidate(rootType, name, arity, impl) - ) - } - - private predicate relevantTraitVisible(Element mc, Trait trait) { - trait = any(ImplItemNode impl | methodCallCandidate(mc, impl)).resolveTraitTy() - } +pragma[nomagic] +private StructType getStrStruct() { result = TStruct(any(Builtins::Str s)) } - bindingset[impl] - pragma[inline_late] - private TypeRepr getImplSelfTy(Impl impl) { result = impl.getSelfTy() } +pragma[nomagic] +private StructType getStringStruct() { result = TStruct(any(StringStruct s)) } - pragma[nomagic] - predicate potentialInstantiationOf( - MethodCall mc, TypeAbstraction impl, TypeMentionTypeTree constraint - ) { - constraint = getImplSelfTy(impl) and - ( - methodCallTraitCandidate(mc, impl) - or - methodCallCandidate(mc, impl) and - ( - not exists(impl.(ImplItemNode).resolveTraitTy()) +pragma[nomagic] +private Type inferLiteralType(LiteralExpr le, TypePath path, boolean certain) { + path.isEmpty() and + exists(Builtins::BuiltinType t | result = TStruct(t) | + le instanceof CharLiteralExpr and + t instanceof Builtins::Char and + certain = true + or + le = + any(NumberLiteralExpr ne | + t.getName() = ne.getSuffix() and + certain = true or - // If the `impl` block implements a trait, that trait must be visible in - // order for the `impl` to be valid. - exists(Trait trait | - pragma[only_bind_into](trait) = impl.(ImplItemNode).resolveTraitTy() and - TraitIsVisible::traitIsVisible(mc, pragma[only_bind_into](trait)) + // When a number literal has no suffix, the type may depend on the context. + // For simplicity, we assume either `i32` or `f64`. + not exists(ne.getSuffix()) and + certain = false and + ( + ne instanceof IntegerLiteralExpr and + t instanceof Builtins::I32 + or + ne instanceof FloatLiteralExpr and + t instanceof Builtins::F64 ) ) - ) - } - - predicate relevantTypeMention(TypeMentionTypeTree constraint) { - exists(Impl impl | methodCandidate(_, _, _, impl) and constraint = impl.getSelfTy()) - } + or + le instanceof BooleanLiteralExpr and + t instanceof Builtins::Bool and + certain = true + ) + or + le instanceof StringLiteralExpr and + ( + path.isEmpty() and result = TRefType() + or + path = TypePath::singleton(TRefTypeParameter()) and + result = getStrStruct() + ) and + certain = true } -bindingset[item, name] -pragma[inline_late] -private Function getMethodSuccessor(ItemNode item, string name) { - result = item.getASuccessor(name) -} +pragma[nomagic] +private TraitType getFutureTraitType() { result.getTrait() instanceof FutureTrait } -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) - or - result = getMethodSuccessor(tp.(ImplTraitTypeTypeParameter).getImplTraitTypeRepr(), name) +pragma[nomagic] +private AssociatedTypeTypeParameter getFutureOutputTypeParameter() { + result.getTypeAlias() = any(FutureTrait ft).getOutputType() } pragma[nomagic] -private Type resolveNonTypeParameterTypeAt(TypeMention tm, TypePath path) { - result = tm.resolveTypeAt(path) and - not result instanceof TypeParameter +private TraitType inferAsyncBlockExprRootType(AsyncBlockExpr abe) { + // `typeEquality` handles the non-root case + exists(abe) and + result = getFutureTraitType() } -bindingset[t1, t2] -private predicate typeMentionEqual(TypeMention t1, TypeMention t2) { - forex(TypePath path, Type type | resolveNonTypeParameterTypeAt(t1, path) = type | - resolveNonTypeParameterTypeAt(t2, path) = type - ) +final private class AwaitTarget extends Expr { + AwaitTarget() { this = any(AwaitExpr ae).getExpr() } + + Type getTypeAt(TypePath path) { result = inferType(this, path) } } -pragma[nomagic] -private predicate implSiblingCandidate( - Impl impl, TraitItemNode trait, Type rootType, TypeMention selfTy -) { - trait = impl.(ImplItemNode).resolveTraitTy() and - // If `impl` has an expansion from a macro attribute, then it's been - // superseded by the output of the expansion (and usually the expansion - // contains the same `impl` block so considering both would give spurious - // siblings). - not exists(impl.getAttributeMacroExpansion()) and - selfTy = impl.getSelfTy() and - rootType = selfTy.resolveType() +private module AwaitSatisfiesConstraintInput implements SatisfiesConstraintInputSig { + predicate relevantConstraint(AwaitTarget term, Type constraint) { + exists(term) and + constraint.(TraitType).getTrait() instanceof FutureTrait + } } -/** - * Holds if `impl1` and `impl2` are a sibling implementations of `trait`. We - * consider implementations to be siblings if they implement the same trait for - * the same type. In that case `Self` is the same type in both implementations, - * and method calls to the implementations cannot be resolved unambiguously - * based only on the receiver type. - */ -pragma[inline] -private predicate implSiblings(TraitItemNode trait, Impl impl1, Impl impl2) { - exists(Type rootType, TypeMention selfTy1, TypeMention selfTy2 | - impl1 != impl2 and - implSiblingCandidate(impl1, trait, rootType, selfTy1) and - implSiblingCandidate(impl2, trait, rootType, selfTy2) and - // In principle the second conjunct below should be superflous, but we still - // have ill-formed type mentions for types that we don't understand. For - // those checking both directions restricts further. Note also that we check - // syntactic equality, whereas equality up to renaming would be more - // correct. - typeMentionEqual(selfTy1, selfTy2) and - typeMentionEqual(selfTy2, selfTy1) +pragma[nomagic] +private Type inferAwaitExprType(AstNode n, TypePath path) { + exists(TypePath exprPath | + SatisfiesConstraint::satisfiesConstraintType(n.(AwaitExpr) + .getExpr(), _, exprPath, result) and + exprPath.isCons(getFutureOutputTypeParameter(), path) ) } /** - * Holds if `impl` is an implementation of `trait` and if another implementation - * exists for the same type. + * Gets the root type of the array expression `ae`. */ pragma[nomagic] -private predicate implHasSibling(Impl impl, Trait trait) { implSiblings(trait, impl, _) } +private Type inferArrayExprType(ArrayExpr ae) { exists(ae) and result = TArrayType() } +/** + * Gets the root type of the range expression `re`. + */ pragma[nomagic] -private predicate functionTypeAtPath(Function f, int pos, TypePath path, Type type) { - exists(TypeMention tm | type = tm.resolveTypeAt(path) | - tm = f.getParam(pos).getTypeRepr() - or - pos = -1 and - tm = f.getRetType().getTypeRepr() - ) -} +private Type inferRangeExprType(RangeExpr re) { result = TStruct(getRangeType(re)) } /** - * Holds if type parameter `tp` of `trait` occurs in the function with the name - * `functionName` at the `pos`th parameter at `path`. + * According to [the Rust reference][1]: _"array and slice-typed expressions + * can be indexed with a `usize` index ... For other types an index expression + * `a[b]` is equivalent to *std::ops::Index::index(&a, b)"_. + * + * The logic below handles array and slice indexing, but for other types it is + * currently limited to `Vec`. * - * The special position `-1` refers to the return type of the function, which - * is sometimes needed to disambiguate associated function calls like - * `Default::default()` (in this case, `tp` is the special `Self` type parameter). + * [1]: https://doc.rust-lang.org/reference/expressions/array-expr.html#r-expr.array.index */ -bindingset[trait] -pragma[inline_late] -private predicate traitTypeParameterOccurrence( - TraitItemNode trait, Function f, string functionName, int pos, TypePath path, TypeParameter tp -) { - f = trait.getAssocItem(functionName) and - functionTypeAtPath(f, pos, path, tp) and - tp = trait.(TraitTypeAbstraction).getATypeParameter() +pragma[nomagic] +private Type inferIndexExprType(IndexExpr ie, TypePath path) { + // TODO: Method resolution to the `std::ops::Index` trait can handle the + // `Index` instances for slices and arrays. + exists(TypePath exprPath, Builtins::BuiltinType t | + TStruct(t) = inferType(ie.getIndex()) and + ( + // also allow `i32`, since that is currently the type that we infer for + // integer literals like `0` + t instanceof Builtins::I32 + or + t instanceof Builtins::Usize + ) and + result = inferType(ie.getBase(), exprPath) + | + // todo: remove? + exprPath.isCons(TTypeParamTypeParameter(any(Vec v).getElementTypeParam()), path) + or + exprPath.isCons(any(ArrayTypeParameter tp), path) + or + exists(TypePath path0 | + exprPath.isCons(any(RefTypeParameter tp), path0) and + path0.isCons(any(SliceTypeParameter tp), path) + ) + ) } /** - * Holds if resolving the function `f` in `impl` with the name `functionName` - * requires inspecting the types of applied _arguments_ in order to determine - * whether it is the correct resolution. + * A matching configuration for resolving types of struct patterns + * like `let Foo { bar } = ...`. */ -pragma[nomagic] -private predicate functionResolutionDependsOnArgument( - ImplItemNode impl, string functionName, Function f, int pos, TypePath path, Type type -) { - /* - * As seen in the example below, when an implementation has a sibling for a - * trait we find occurrences of a type parameter of the trait in a function - * signature in the trait. We then find the type given in the implementation - * at the same position, which is a position that might disambiguate the - * function from its siblings. - * - * ```rust - * trait MyTrait { - * fn method(&self, value: Foo) -> Self; - * // ^^^^^^^^^^^^^ `pos` = 0 - * // ^ `path` = "T" - * } - * impl MyAdd for i64 { - * fn method(&self, value: Foo) -> Self { ... } - * // ^^^ `type` = i64 - * } - * ``` - * - * Note that we only check the root type symbol at the position. If the type - * at that position is a type constructor (for instance `Vec<..>`) then - * inspecting the entire type tree could be necessary to disambiguate the - * method. In that case we will still resolve several methods. - */ +private module StructPatMatchingInput implements MatchingInputSig { + class DeclarationPosition = StructExprMatchingInput::DeclarationPosition; - exists(TraitItemNode trait | - implHasSibling(impl, trait) and - traitTypeParameterOccurrence(trait, _, functionName, pos, path, _) and - functionTypeAtPath(f, pos, path, type) and - f = impl.getAssocItem(functionName) and - pos >= 0 - ) + class Declaration = StructExprMatchingInput::Declaration; + + class AccessPosition = DeclarationPosition; + + class Access extends StructPat { + Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { none() } + + AstNode getNodeAt(AccessPosition apos) { + result = this.getPatField(apos.asFieldPos()).getPat() + or + result = this and + apos.isStructPos() + } + + Type getInferredType(AccessPosition apos, TypePath path) { + result = inferType(this.getNodeAt(apos), path) + or + // The struct/enum type is supplied explicitly as a type qualifier, e.g. + // `let Foo::Variant { ... } = ...`. + apos.isStructPos() and + result = this.getPath().(TypeMention).resolveTypeAt(path) + } + + Declaration getTarget() { result = resolvePath(this.getPath()) } + } + + predicate accessDeclarationPositionMatch(AccessPosition apos, DeclarationPosition dpos) { + apos = dpos + } } +private module StructPatMatching = Matching; + /** - * Holds if the method call `mc` has no inherent target, i.e., it does not - * resolve to a method in an `impl` block for the type of the receiver. + * Gets the type of `n` at `path`, where `n` is either a struct pattern or + * a field pattern of a struct pattern. */ pragma[nomagic] -private predicate methodCallHasNoInherentTarget(MethodCall mc) { - exists(Type rootType, string name, int arity | - isMethodCall(mc, rootType, name, arity) and - forall(Impl impl | - methodCandidate(rootType, name, arity, impl) and - not impl.hasTrait() - | - IsInstantiationOf::isNotInstantiationOf(mc, - impl, _) - ) +private Type inferStructPatType(AstNode n, TypePath path) { + exists(StructPatMatchingInput::Access a, StructPatMatchingInput::AccessPosition apos | + n = a.getNodeAt(apos) and + result = StructPatMatching::inferAccessType(a, apos, path) ) } -pragma[nomagic] -private predicate methodCallHasImplCandidate(MethodCall mc, Impl impl) { - IsInstantiationOf::isInstantiationOf(mc, - impl, _) and - if impl.hasTrait() and not exists(mc.getTrait()) - then - // inherent methods take precedence over trait methods, so only allow - // trait methods when there are no matching inherent methods - methodCallHasNoInherentTarget(mc) - else any() -} - -private module BlanketImplementation { - private ImplItemNode getPotentialDuplicated( - string fileName, string traitName, int arity, string tpName - ) { - tpName = result.getBlanketImplementationTypeParam().getName() and - fileName = result.getLocation().getFile().getBaseName() and - traitName = result.resolveTraitTy().getName() and - arity = result.resolveTraitTy().(Trait).getNumberOfGenericParams() - } - - private predicate duplicatedImpl(Impl impl1, Impl impl2) { - exists(string fileName, string traitName, int arity, string tpName | - impl1 = getPotentialDuplicated(fileName, traitName, arity, tpName) and - impl2 = getPotentialDuplicated(fileName, traitName, arity, tpName) and - impl1.getLocation().getFile().getAbsolutePath() < - impl2.getLocation().getFile().getAbsolutePath() - ) - } +/** + * A matching configuration for resolving types of tuple struct patterns + * like `let Some(x) = ...`. + */ +private module TupleStructPatMatchingInput implements MatchingInputSig { + import FunctionTypePositionMatchingInput - /** - * Holds if `impl` is a canonical blanket implementation. - * - * Libraries can often occur several times in the database for different - * library versions. This causes the same blanket implementations to exist - * multiple times, and these add no useful information. - * - * We detect these duplicates based on some simple heuristics (same trait - * name, file name, etc.). For these duplicates we select the one with the - * greatest file name (which usually is also the one with the greatest library - * version in the path) as the "canonical" implementation. - */ - private predicate isCanonicalImpl(Impl impl) { - not duplicatedImpl(impl, _) and impl.(ImplItemNode).isBlanketImplementation() - } + class Declaration = NonMethodCallMatchingInput::TupleDeclaration; - /** - * Holds if `impl` is a blanket implementation for a type parameter and - * `traitBound` is the first non-trivial trait bound of that type parameter. - */ - private predicate blanketImplementationTraitBound(ImplItemNode impl, Trait traitBound) { - traitBound = - min(Trait trait, int i | - trait = impl.getBlanketImplementationTypeParam().resolveBound(i) and - // Exclude traits that are known to not narrow things down very much. - not trait.getName().getText() = - [ - "Sized", "Clone", - // The auto traits - "Send", "Sync", "Unpin", "UnwindSafe", "RefUnwindSafe" - ] - | - trait order by i - ) - } + class Access extends TupleStructPat { + Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { none() } - /** - * Holds if `impl` is a relevant blanket implementation that requires the - * trait `traitBound` and provides `f`, a method with name `name` and arity - * `arity`. - */ - private predicate blanketImplementationMethod( - ImplItemNode impl, Trait traitBound, string name, int arity, Function f - ) { - isCanonicalImpl(impl) and - blanketImplementationTraitBound(impl, traitBound) and - f.hasSelfParam() and - arity = f.getParamList().getNumberOfParams() and - ( - f = impl.getAssocItem(name) + AstNode getNodeAt(AccessPosition apos) { + result = this.getField(apos.asPositional()) or - // If the trait has a method with a default implementation, then that - // target is interesting as well. - not exists(impl.getAssocItem(name)) and - f = impl.resolveTraitTy().getAssocItem(name) - ) and - // If the method is already available through one of the trait bounds on the - // type parameter (because they implement the trait targeted by the impl - // block) then ignore it. - not impl.getBlanketImplementationTypeParam().resolveABound().(TraitItemNode).getASuccessor(name) = - f - } - - pragma[nomagic] - predicate methodCallMatchesBlanketImpl( - MethodCall mc, Type t, ImplItemNode impl, Trait traitBound, Trait traitImpl, Function f - ) { - // Only check method calls where we have ruled out inherent method targets. - // Ideally we would also check if non-blanket method targets have been ruled - // out. - methodCallHasNoInherentTarget(mc) and - exists(string name, int arity | - isMethodCall(mc, t, name, arity) and - blanketImplementationMethod(impl, traitBound, name, arity, f) - ) and - traitImpl = impl.resolveTraitTy() - } - - private predicate relevantTraitVisible(Element mc, Trait trait) { - methodCallMatchesBlanketImpl(mc, _, _, _, trait, _) - } - - module SatisfiesConstraintInput implements SatisfiesConstraintInputSig { - pragma[nomagic] - predicate relevantConstraint(MethodCall mc, Type constraint) { - exists(Trait traitBound, Trait traitImpl | - methodCallMatchesBlanketImpl(mc, _, _, traitBound, traitImpl, _) and - TraitIsVisible::traitIsVisible(mc, traitImpl) and - traitBound = constraint.(TraitType).getTrait() - ) + result = this and + apos.isSelf() } - predicate useUniversalConditions() { none() } - } + Type getInferredType(AccessPosition apos, TypePath path) { + result = inferType(this.getNodeAt(apos), path) + or + // The struct/enum type is supplied explicitly as a type qualifier, e.g. + // `let Option::::Some(x) = ...`. + apos.isSelf() and + result = this.getPath().(TypeMention).resolveTypeAt(path) + } - predicate hasBlanketImpl(MethodCall mc, Type t, Impl impl, Trait traitBound, Function f) { - SatisfiesConstraint::satisfiesConstraintType(mc, - TTrait(traitBound), _, _) and - methodCallMatchesBlanketImpl(mc, t, impl, traitBound, _, f) + Declaration getTarget() { result = resolvePath(this.getPath()) } } - - pragma[nomagic] - Function getMethodFromBlanketImpl(MethodCall mc) { hasBlanketImpl(mc, _, _, _, result) } } -/** Gets a method from an `impl` block that matches the method call `mc`. */ +private module TupleStructPatMatching = Matching; + +/** + * Gets the type of `n` at `path`, where `n` is either a tuple struct pattern or + * a positional pattern of a tuple struct pattern. + */ pragma[nomagic] -private Function getMethodFromImpl(MethodCall mc) { - exists(Impl impl, string name | - methodCallHasImplCandidate(mc, impl) and - name = mc.getMethodName() and - result = getMethodSuccessor(impl, name) - | - not functionResolutionDependsOnArgument(impl, name, _, _, _, _) - or - exists(int pos, TypePath path, Type type | - functionResolutionDependsOnArgument(impl, name, result, pos, pragma[only_bind_into](path), - type) and - inferType(mc.getPositionalArgument(pos), pragma[only_bind_into](path)) = type - ) +private Type inferTupleStructPatType(AstNode n, TypePath path) { + exists(TupleStructPatMatchingInput::Access a, TupleStructPatMatchingInput::AccessPosition apos | + n = a.getNodeAt(apos) and + result = TupleStructPatMatching::inferAccessType(a, apos, path) ) } -bindingset[trait, name] -pragma[inline_late] -private Function getImplTraitMethod(ImplTraitReturnType trait, string name) { - result = getMethodSuccessor(trait.getImplTraitTypeRepr(), name) +final private class ForIterableExpr extends Expr { + ForIterableExpr() { this = any(ForExpr fe).getIterable() } + + Type getTypeAt(TypePath path) { result = inferType(this, path) } } -bindingset[traitObject, name] -pragma[inline_late] -private Function getDynTraitMethod(DynTraitType traitObject, string name) { - result = getMethodSuccessor(traitObject.getTrait(), name) +private module ForIterableSatisfiesConstraintInput implements + SatisfiesConstraintInputSig +{ + predicate relevantConstraint(ForIterableExpr term, Type constraint) { + exists(term) and + exists(Trait t | t = constraint.(TraitType).getTrait() | + // TODO: Remove the line below once we can handle the `impl IntoIterator for I` implementation + t instanceof IteratorTrait or + t instanceof IntoIteratorTrait + ) + } } pragma[nomagic] -private Function resolveMethodCallTarget(MethodCall mc) { - // The method comes from an `impl` block targeting the type of the receiver. - result = getMethodFromImpl(mc) - or - result = BlanketImplementation::getMethodFromBlanketImpl(mc) - or - // The type of the receiver is a type parameter and the method comes from a - // trait bound on the type parameter. - result = getTypeParameterMethod(mc.getTypeAt(TypePath::nil()), mc.getMethodName()) - or - // The type of the receiver is an `impl Trait` type. - result = getImplTraitMethod(mc.getTypeAt(TypePath::nil()), mc.getMethodName()) - or - // The type of the receiver is a trait object `dyn Trait` type. - result = getDynTraitMethod(mc.getTypeAt(TypePath::nil()), mc.getMethodName()) +private AssociatedTypeTypeParameter getIteratorItemTypeParameter() { + result.getTypeAlias() = any(IteratorTrait t).getItemType() } pragma[nomagic] -private predicate assocFuncResolutionDependsOnArgument(Function f, Impl impl, int pos) { - functionResolutionDependsOnArgument(impl, _, f, pos, _, _) and - not f.hasSelfParam() +private AssociatedTypeTypeParameter getIntoIteratorItemTypeParameter() { + result.getTypeAlias() = any(IntoIteratorTrait t).getItemType() } -private class FunctionCallExpr extends CallImpl::CallExprCall { - ItemNode getResolvedFunction() { result = CallExprImpl::getResolvedFunction(this) } - - /** - * Holds if the target of this call is ambigous, and type information is required - * to disambiguate. - */ - predicate isAmbigous() { - this.hasTrait() +pragma[nomagic] +private Type inferForLoopExprType(AstNode n, TypePath path) { + // type of iterable -> type of pattern (loop variable) + exists(ForExpr fe, TypePath exprPath, AssociatedTypeTypeParameter tp | + n = fe.getPat() and + SatisfiesConstraint::satisfiesConstraintType(fe.getIterable(), + _, exprPath, result) and + exprPath.isCons(tp, path) + | + tp = getIntoIteratorItemTypeParameter() or - assocFuncResolutionDependsOnArgument(this.getResolvedFunction(), _, _) - } - - /** - * Gets a target candidate of this ambigous call, which belongs to `impl`. - * - * In order for the candidate to be a match, the argument type at `pos` must be - * checked against the type of the function at the same position. - * - * `resolved` is the corresponding function resolved through path resolution. - */ - pragma[nomagic] - Function getAnAmbigousCandidate(ImplItemNode impl, int pos, Function resolved) { - resolved = this.getResolvedFunction() and - ( - exists(TraitItemNode trait | - trait = this.getTrait() and - result.implements(resolved) and - result = impl.getAnAssocItem() - | - assocFuncResolutionDependsOnArgument(result, impl, pos) - or - exists(TypeParameter tp | traitTypeParameterOccurrence(trait, resolved, _, pos, _, tp) | - pos >= 0 - or - // We only check that the context of the call provides relevant type information - // when no argument can - not traitTypeParameterOccurrence(trait, resolved, _, any(int pos0 | pos0 >= 0), _, tp) - ) - ) - or - result = resolved and - assocFuncResolutionDependsOnArgument(result, impl, pos) - ) - } - - /** - * Same as `getAnAmbigousCandidate`, ranks the positions to be checked. - */ - Function getAnAmbigousCandidateRanked(ImplItemNode impl, int pos, Function f, int rnk) { - pos = rank[rnk + 1](int pos0 | result = this.getAnAmbigousCandidate(impl, pos0, f) | pos0) - } + // TODO: Remove once we can handle the `impl IntoIterator for I` implementation + tp = getIteratorItemTypeParameter() and + inferType(fe.getIterable()) != TArrayType() + ) } -private newtype TAmbigousAssocFunctionCallExpr = - MkAmbigousAssocFunctionCallExpr(FunctionCallExpr call, Function resolved, int pos) { - exists(call.getAnAmbigousCandidate(_, pos, resolved)) +/** + * An invoked expression, the target of a call that is either a local variable + * or a non-path expression. This means that the expression denotes a + * first-class function. + */ +final private class InvokedClosureExpr extends Expr { + private CallExpr call; + + InvokedClosureExpr() { + call.getFunction() = this and + (not this instanceof PathExpr or this = any(Variable v).getAnAccess()) } -private class AmbigousAssocFunctionCallExpr extends MkAmbigousAssocFunctionCallExpr { - FunctionCallExpr call; - Function resolved; - int pos; + Type getTypeAt(TypePath path) { result = inferType(this, path) } - AmbigousAssocFunctionCallExpr() { this = MkAmbigousAssocFunctionCallExpr(call, resolved, pos) } + CallExpr getCall() { result = call } +} - pragma[nomagic] - Type getTypeAt(TypePath path) { - result = inferType(call.(CallExpr).getArg(pos), path) - or - pos = -1 and - result = inferType(call, path) +private module InvokedClosureSatisfiesConstraintInput implements + SatisfiesConstraintInputSig +{ + predicate relevantConstraint(InvokedClosureExpr term, Type constraint) { + exists(term) and + constraint.(TraitType).getTrait() instanceof FnOnceTrait } +} + +/** Gets the type of `ce` when viewed as an implementation of `FnOnce`. */ +private Type invokedClosureFnTypeAt(InvokedClosureExpr ce, TypePath path) { + SatisfiesConstraint::satisfiesConstraintType(ce, + _, path, result) +} - string toString() { result = call.toString() } +/** Gets the path to a closure's return type. */ +private TypePath closureReturnPath() { + result = TypePath::singleton(TDynTraitTypeParameter(any(FnOnceTrait t).getOutputType())) +} - Location getLocation() { result = call.getLocation() } +/** Gets the path to a closure with arity `arity`s `index`th parameter type. */ +pragma[nomagic] +private TypePath closureParameterPath(int arity, int index) { + result = + TypePath::cons(TDynTraitTypeParameter(any(FnOnceTrait t).getTypeParam()), + TypePath::singleton(TTupleTypeParameter(arity, index))) } -private module AmbigousAssocFuncIsInstantiationOfInput implements - IsInstantiationOfInputSig -{ - pragma[nomagic] - predicate potentialInstantiationOf( - AmbigousAssocFunctionCallExpr ce, TypeAbstraction impl, TypeMentionTypeTree constraint - ) { - exists(FunctionCallExpr call, Function resolved, Function cand, int pos | - ce = MkAmbigousAssocFunctionCallExpr(call, resolved, pos) and - cand = call.getAnAmbigousCandidate(impl, pos, resolved) - | - constraint = cand.getParam(pos).getTypeRepr() - or - pos = -1 and - constraint = cand.getRetType().getTypeRepr() - ) - } +/** Gets the path to the return type of the `FnOnce` trait. */ +private TypePath fnReturnPath() { + result = TypePath::singleton(TAssociatedTypeTypeParameter(any(FnOnceTrait t).getOutputType())) } /** - * Gets the target of `call`, where resolution does not rely on type inference. + * Gets the path to the parameter type of the `FnOnce` trait with arity `arity` + * and index `index`. */ pragma[nomagic] -private ItemNode resolveUnambigousFunctionCallTarget(FunctionCallExpr call) { - result = call.getResolvedFunction() and - not call.isAmbigous() +private TypePath fnParameterPath(int arity, int index) { + result = + TypePath::cons(TTypeParamTypeParameter(any(FnOnceTrait t).getTypeParam()), + TypePath::singleton(TTupleTypeParameter(arity, index))) } pragma[nomagic] -private Function resolveAmbigousFunctionCallTargetFromIndex(FunctionCallExpr call, int index) { - exists(Impl impl, int pos, Function resolved | - IsInstantiationOf::isInstantiationOf(MkAmbigousAssocFunctionCallExpr(call, - resolved, pos), impl, _) and - result = call.getAnAmbigousCandidateRanked(impl, pos, resolved, index) - | - index = 0 +private Type inferDynamicCallExprType(Expr n, TypePath path) { + exists(InvokedClosureExpr ce | + // Propagate the function's return type to the call expression + exists(TypePath path0 | result = invokedClosureFnTypeAt(ce, path0) | + n = ce.getCall() and + path = path0.stripPrefix(fnReturnPath()) + or + // Propagate the function's parameter type to the arguments + exists(int index | + n = ce.getCall().getArgList().getArg(index) and + path = path0.stripPrefix(fnParameterPath(ce.getCall().getNumberOfArgs(), index)) + ) + ) or - result = resolveAmbigousFunctionCallTargetFromIndex(call, index - 1) + // _If_ the invoked expression has the type of a closure, then we propagate + // the surrounding types into the closure. + exists(int arity, TypePath path0 | + ce.getTypeAt(TypePath::nil()).(DynTraitType).getTrait() instanceof FnOnceTrait + | + // Propagate the type of arguments to the parameter types of closure + exists(int index | + n = ce and + arity = ce.getCall().getNumberOfArgs() and + result = inferType(ce.getCall().getArg(index), path0) and + path = closureParameterPath(arity, index).append(path0) + ) + or + // Propagate the type of the call expression to the return type of the closure + n = ce and + arity = ce.getCall().getNumberOfArgs() and + result = inferType(ce.getCall(), path0) and + path = closureReturnPath().append(path0) + ) ) } -/** - * Gets the target of `call`, where resolution relies on type inference. - */ pragma[nomagic] -private Function resolveAmbigousFunctionCallTarget(FunctionCallExpr call) { - result = - resolveAmbigousFunctionCallTargetFromIndex(call, - max(int index | result = call.getAnAmbigousCandidateRanked(_, _, _, index))) +private Type inferClosureExprType(AstNode n, TypePath path) { + exists(ClosureExpr ce | + n = ce and + path.isEmpty() and + result = TDynTraitType(any(FnOnceTrait t)) + or + n = ce and + path = TypePath::singleton(TDynTraitTypeParameter(any(FnOnceTrait t).getTypeParam())) and + result = TTuple(ce.getNumberOfParams()) + or + // Propagate return type annotation to body + n = ce.getBody() and + result = ce.getRetType().getTypeRepr().(TypeMention).resolveTypeAt(path) + ) } -pragma[inline] -private ItemNode resolveFunctionCallTarget(FunctionCallExpr call) { - result = resolveUnambigousFunctionCallTarget(call) - or - result = resolveAmbigousFunctionCallTarget(call) +pragma[nomagic] +private Type inferCastExprType(CastExpr ce, TypePath path) { + result = ce.getTypeRepr().(TypeMention).resolveTypeAt(path) } cached @@ -2484,33 +2975,21 @@ private module Cached { /** Holds if `receiver` is the receiver of a method call with an implicit dereference. */ cached predicate receiverHasImplicitDeref(AstNode receiver) { - exists(CallExprBaseMatchingInput::Access a, CallExprBaseMatchingInput::AccessPosition apos | - apos.getArgumentPosition().isSelf() and - apos.isBorrowed(_) and - receiver = a.getNodeAt(apos) and - inferType(receiver) = TRefType() and - CallExprBaseMatching::inferAccessType(a, apos, TypePath::nil()) != TRefType() - ) + any(MethodResolution::MethodCall mc).receiverHasImplicitDeref(receiver) } /** Holds if `receiver` is the receiver of a method call with an implicit borrow. */ cached predicate receiverHasImplicitBorrow(AstNode receiver) { - exists(CallExprBaseMatchingInput::Access a, CallExprBaseMatchingInput::AccessPosition apos | - apos.getArgumentPosition().isSelf() and - apos.isBorrowed(_) and - receiver = a.getNodeAt(apos) and - CallExprBaseMatching::inferAccessType(a, apos, TypePath::nil()) = TRefType() and - inferType(receiver) != TRefType() - ) + any(MethodResolution::MethodCall mc).receiverHasImplicitBorrow(receiver) } /** Gets an item (function or tuple struct/variant) that `call` resolves to, if any. */ cached Addressable resolveCallTarget(Call call) { - result = resolveMethodCallTarget(call) + result = call.(MethodResolution::MethodCall).resolveCallTarget(_) or - result = resolveFunctionCallTarget(call) + result = call.(NonMethodResolution::NonMethodCall).resolveCallTarget() } /** @@ -2518,9 +2997,9 @@ private module Cached { */ cached StructField resolveStructFieldExpr(FieldExpr fe) { - exists(string name, Type ty | ty = getFieldExprLookupType(fe, name) | - result = ty.(StructType).getStruct().getStructField(name) or - result = ty.(UnionType).getUnion().getStructField(name) + exists(string name, Type ty | ty = getFieldExprLookupType(fe, pragma[only_bind_into](name)) | + result = ty.(StructType).getStruct().getStructField(pragma[only_bind_into](name)) or + result = ty.(UnionType).getUnion().getStructField(pragma[only_bind_into](name)) ) } @@ -2530,7 +3009,11 @@ private module Cached { cached TupleField resolveTupleFieldExpr(FieldExpr fe) { exists(int i | - result = getTupleFieldExprLookupType(fe, i).(StructType).getStruct().getTupleField(i) + result = + getTupleFieldExprLookupType(fe, pragma[only_bind_into](i)) + .(StructType) + .getStruct() + .getTupleField(pragma[only_bind_into](i)) ) } @@ -2594,7 +3077,11 @@ private module Cached { or result = inferPathExprType(n, path) or - result = inferCallExprBaseType(n, path) + result = inferMethodCallType(n, path) + or + result = inferNonMethodCallType(n, path) + or + result = inferOperationType(n, path) or result = inferFieldExprType(n, path) or @@ -2628,7 +3115,7 @@ Type inferType(AstNode n) { result = inferType(n, TypePath::nil()) } /** Provides predicates for debugging the type inference implementation. */ private module Debug { - private Locatable getRelevantLocatable() { + Locatable getRelevantLocatable() { exists(string filepath, int startline, int startcolumn, int endline, int endcolumn | result.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) and filepath.matches("%/sqlx.rs") and @@ -2641,7 +3128,7 @@ private module Debug { result = inferType(n, path) } - Function debugResolveCallTarget(Call c) { + Addressable debugResolveCallTarget(Call c) { c = getRelevantLocatable() and result = resolveCallTarget(c) } @@ -2653,14 +3140,19 @@ private module Debug { Input2::conditionSatisfiesConstraint(abs, condition, constraint) } - predicate debugInferShorthandSelfType(SelfParam self, TypePath path, Type t) { + predicate debugInferShorthandSelfType(ShorthandSelfParameterMention self, TypePath path, Type t) { self = getRelevantLocatable() and - t = inferShorthandSelfType(self, path) + t = self.resolveTypeAt(path) } - predicate debugInferCallExprBaseType(AstNode n, TypePath path, Type t) { + predicate debugInferMethodCallType(AstNode n, TypePath path, Type t) { n = getRelevantLocatable() and - t = inferCallExprBaseType(n, path) + t = inferMethodCallType(n, path) + } + + predicate debugInferNonMethodCallType(AstNode n, TypePath path, Type t) { + n = getRelevantLocatable() and + t = inferNonMethodCallType(n, path) } predicate debugTypeMention(TypeMention tm, TypePath path, Type type) { @@ -2679,9 +3171,14 @@ private module Debug { result = strictcount(Type t0 | t0 = inferType(n, path)) } + pragma[nomagic] + private predicate atLimit(AstNode n) { + exists(TypePath path0 | exists(inferType(n, path0)) and path0.length() >= getTypePathLimit()) + } + Type debugInferTypeForNodeAtLimit(AstNode n, TypePath path) { result = inferType(n, path) and - exists(TypePath path0 | exists(inferType(n, path0)) and path0.length() >= getTypePathLimit()) + atLimit(n) } predicate countTypesForNodeAtLimit(AstNode n, int c) { diff --git a/rust/ql/lib/codeql/rust/internal/TypeMention.qll b/rust/ql/lib/codeql/rust/internal/TypeMention.qll index ba7f4b4659d4..0b669ad40150 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeMention.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeMention.qll @@ -12,6 +12,7 @@ abstract class TypeMention extends AstNode { abstract Type resolveTypeAt(TypePath path); /** Gets the type that this node resolves to, if any. */ + pragma[nomagic] final Type resolveType() { result = this.resolveTypeAt(TypePath::nil()) } } @@ -112,7 +113,8 @@ class NonAliasPathTypeMention extends PathTypeMention { NonAliasPathTypeMention() { resolved = [resolvePath(this), resolvePath(this).(Variant).getEnum().(TypeItemNode)] and - not exists(resolved.(TypeAlias).getTypeRepr()) + not exists(resolved.(TypeAlias).getTypeRepr()) and + not this = any(ImplItemNode i).getASelfPath() // handled by `ImplSelfMention` } TypeItemNode getResolved() { result = resolved } @@ -144,23 +146,6 @@ class NonAliasPathTypeMention extends PathTypeMention { private TypeMention getPositionalTypeArgument0(int i) { result = this.getSegment().getGenericArgList().getTypeArg(i) or - // `Self` paths inside `impl` blocks have implicit type arguments that are - // the type parameters of the `impl` block. For example, in - // - // ```rust - // impl Foo { - // fn m(self) -> Self { - // self - // } - // } - // ``` - // - // the `Self` return type is shorthand for `Foo`. - exists(ImplItemNode node | - this = node.getASelfPath() and - result = node.(ImplItemNode).getSelfPath().getSegment().getGenericArgList().getTypeArg(i) - ) - or // `Option::::Some` is valid in addition to `Option::Some::` resolvePath(this) instanceof Variant and result = this.getQualifier().getSegment().getGenericArgList().getTypeArg(i) @@ -259,6 +244,19 @@ class NonAliasPathTypeMention extends PathTypeMention { } } +pragma[nomagic] +private Type resolveImplSelfType(Impl i, TypePath path) { + result = i.getSelfTy().(TypeMention).resolveTypeAt(path) +} + +class ImplSelfMention extends PathTypeMention { + private ImplItemNode impl; + + ImplSelfMention() { this = impl.getASelfPath() } + + override Type resolveTypeAt(TypePath typePath) { result = resolveImplSelfType(impl, typePath) } +} + class PathTypeReprMention extends TypeMention, PathTypeRepr { private PathTypeMention path; @@ -329,6 +327,76 @@ class SelfTypeParameterMention extends TypeMention instanceof Name { } } +/** + * Gets the type at `path` of the type being implemented in `i`, when + * `i` is an `impl` block, or the synthetic `Self` type parameter when + * `i` is a trait. + */ +pragma[nomagic] +Type resolveImplOrTraitType(ImplOrTraitItemNode i, TypePath path) { + result = resolveImplSelfType(i, path) + or + result = TSelfTypeParameter(i) and path.isEmpty() +} + +pragma[nomagic] +private ImplOrTraitItemNode getSelfParamEnclosingImplOrTrait(SelfParam self) { + exists(Function f | + f = result.getAnAssocItem() and + self = f.getSelfParam() + ) +} + +/** + * An element used to represent the type of a `self` parameter that uses [shorthand + * syntax][1], which is sugar for an explicit annotation. + * + * [1]: https://doc.rust-lang.org/stable/reference/items/associated-items.html#r-associated.fn.method.self-pat-shorthands + */ +class ShorthandSelfParameterMention extends TypeMention instanceof SelfParam { + private ImplOrTraitItemNode encl; + + ShorthandSelfParameterMention() { + not super.hasTypeRepr() and + encl = getSelfParamEnclosingImplOrTrait(this) and + ( + encl instanceof Trait + or + // avoid generating a type mention if the type being implemented cannot be resolved + encl.(Impl).getSelfTy() instanceof TypeMention + ) + } + + pragma[nomagic] + private Type resolveSelfType(TypePath path) { result = resolveImplOrTraitType(encl, path) } + + pragma[nomagic] + private Type inferImplicitSelfType(TypePath path) { + if super.isRef() + then + // `fn f(&self, ...)` + path.isEmpty() and + result = TRefType() + or + exists(TypePath suffix | + result = this.resolveSelfType(suffix) and + path = TypePath::cons(TRefTypeParameter(), suffix) + ) + else + // `fn f(self, ...)` + result = this.resolveSelfType(path) + } + + override Type resolveTypeAt(TypePath typePath) { result = this.inferImplicitSelfType(typePath) } +} + +pragma[nomagic] +TypeMention getSelfParamTypeMention(SelfParam self) { + result = self.(ShorthandSelfParameterMention) + or + result = self.getTypeRepr() +} + class DynTraitTypeReprMention extends TypeMention instanceof DynTraitTypeRepr { private DynTraitType dynType; diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/BlanketImplementation.qll b/rust/ql/lib/codeql/rust/internal/typeinference/BlanketImplementation.qll new file mode 100644 index 000000000000..8f2483c3f684 --- /dev/null +++ b/rust/ql/lib/codeql/rust/internal/typeinference/BlanketImplementation.qll @@ -0,0 +1,135 @@ +/** + * Provides logic for checking argument types against constraints of + * [blanket implementations][1]. + * + * [1]: https://doc.rust-lang.org/book/ch10-02-traits.html#using-trait-bounds-to-conditionally-implement-methods + */ + +private import rust +private import codeql.rust.internal.PathResolution +private import codeql.rust.internal.Type +private import codeql.rust.internal.TypeMention +private import codeql.rust.internal.TypeInference + +/** + * Holds if `traitBound` is the first non-trivial trait bound of `tp`. + */ +pragma[nomagic] +private predicate hasFirstNonTrivialTraitBound(TypeParamItemNode tp, Trait traitBound) { + traitBound = + min(Trait trait, int i | + trait = tp.resolveBound(i) and + // Exclude traits that are known to not narrow things down very much. + not trait.getName().getText() = + [ + "Sized", "Clone", + // The auto traits + "Send", "Sync", "Unpin", "UnwindSafe", "RefUnwindSafe" + ] + | + trait order by i + ) +} + +/** + * Holds if `i` is a blanket-like implementation, meaning either an actual + * blanket implementation, or an implementation for a type like `&` where + * we want to check against the trait bounds of the blanket type parameter. + * + * `blanketSelfPath` points to the type parameter `blanketTypeParam` inside the + * self type of `i` (`blanketSelfPath` is empty for actual blanket implementations). + */ +pragma[nomagic] +predicate isBlanketLike(ImplItemNode i, TypePath blanketSelfPath, TypeParam blanketTypeParam) { + blanketTypeParam = i.getBlanketImplementationTypeParam() and + blanketSelfPath.isEmpty() + or + exists(TypeMention tm, Type root, TypeParameter tp | + tm = i.(Impl).getSelfTy() and + complexSelfRoot(root, tp) and + tm.resolveType() = root and + tm.resolveTypeAt(blanketSelfPath) = TTypeParamTypeParameter(blanketTypeParam) and + blanketSelfPath = TypePath::singleton(tp) and + hasFirstNonTrivialTraitBound(blanketTypeParam, _) + ) +} + +signature module SatisfiesBlanketConstraintInputSig { + /** + * Holds if a call with argument type `at` may potentially target a function belonging + * to blanket implementation `impl` with type parameter `blanketTypeParam`. + * + * `blanketPath` points to the type `blanketTypeParam` inside the type of the parameter + * at the matching position. + */ + predicate hasBlanketCandidate( + ArgumentType at, ImplItemNode impl, TypePath blanketPath, TypeParam blanketTypeParam + ); +} + +module SatisfiesBlanketConstraint< + HasTypeTreeSig ArgumentType, SatisfiesBlanketConstraintInputSig Input> +{ + private predicate hasBlanketCandidate( + ArgumentType at, ImplItemNode impl, TypePath blanketPath, TypeParam blanketTypeParam + ) { + Input::hasBlanketCandidate(at, impl, blanketPath, blanketTypeParam) and + exists(at.getTypeAt(blanketPath)) + } + + private newtype TArgumentTypeAndBlanketOffset = + MkArgumentTypeAndBlanketOffset(ArgumentType at, TypePath blanketPath) { + hasBlanketCandidate(at, _, blanketPath, _) + } + + private class ArgumentTypeAndBlanketOffset extends MkArgumentTypeAndBlanketOffset { + ArgumentType at; + TypePath blanketPath; + + ArgumentTypeAndBlanketOffset() { this = MkArgumentTypeAndBlanketOffset(at, blanketPath) } + + Location getLocation() { result = at.getLocation() } + + Type getTypeAt(TypePath path) { result = at.getTypeAt(blanketPath.appendInverse(path)) } + + string toString() { result = at.toString() + " [blanket at " + blanketPath.toString() + "]" } + } + + private module SatisfiesBlanketConstraintInput implements + SatisfiesConstraintInputSig + { + pragma[nomagic] + additional predicate relevantConstraint( + ArgumentTypeAndBlanketOffset ato, ImplItemNode impl, Trait traitBound + ) { + exists(ArgumentType at, TypePath blanketPath, TypeParam blanketTypeParam | + ato = MkArgumentTypeAndBlanketOffset(at, blanketPath) and + hasBlanketCandidate(at, impl, blanketPath, blanketTypeParam) and + hasFirstNonTrivialTraitBound(blanketTypeParam, traitBound) + ) + } + + pragma[nomagic] + predicate relevantConstraint(ArgumentTypeAndBlanketOffset ato, Type constraint) { + relevantConstraint(ato, _, constraint.(TraitType).getTrait()) + } + + predicate useUniversalConditions() { none() } + } + + private module SatisfiesBlanketConstraint = + SatisfiesConstraint; + + /** + * Holds if the argument type `at` satisfies the first non-trivial blanket + * constraint of `impl`. + */ + pragma[nomagic] + predicate satisfiesBlanketConstraint(ArgumentType at, ImplItemNode impl) { + exists(ArgumentTypeAndBlanketOffset ato, Trait traitBound | + ato = MkArgumentTypeAndBlanketOffset(at, _) and + SatisfiesBlanketConstraintInput::relevantConstraint(ato, impl, traitBound) and + SatisfiesBlanketConstraint::satisfiesConstraintType(ato, TTrait(traitBound), _, _) + ) + } +} diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionOverloading.qll b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionOverloading.qll new file mode 100644 index 000000000000..416f2a1b2d06 --- /dev/null +++ b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionOverloading.qll @@ -0,0 +1,127 @@ +/** + * Provides logic for identifying functions that are overloaded based on their + * argument types. While Rust does not allow for overloading inside a single + * `impl` block, it is still possible for a trait to have multiple implementations + * that differ only in the types of non-`self` arguments. + */ + +private import rust +private import codeql.rust.internal.PathResolution +private import codeql.rust.internal.Type +private import codeql.rust.internal.TypeMention +private import codeql.rust.internal.TypeInference +private import FunctionType + +pragma[nomagic] +private Type resolveNonTypeParameterTypeAt(TypeMention tm, TypePath path) { + result = tm.resolveTypeAt(path) and + not result instanceof TypeParameter +} + +bindingset[t1, t2] +private predicate typeMentionEqual(TypeMention t1, TypeMention t2) { + forex(TypePath path, Type type | resolveNonTypeParameterTypeAt(t1, path) = type | + resolveNonTypeParameterTypeAt(t2, path) = type + ) +} + +pragma[nomagic] +private predicate implSiblingCandidate( + Impl impl, TraitItemNode trait, Type rootType, TypeMention selfTy +) { + trait = impl.(ImplItemNode).resolveTraitTy() and + selfTy = impl.getSelfTy() and + rootType = selfTy.resolveType() +} + +/** + * Holds if `impl1` and `impl2` are a sibling implementations of `trait`. We + * consider implementations to be siblings if they implement the same trait for + * the same type. In that case `Self` is the same type in both implementations, + * and method calls to the implementations cannot be resolved unambiguously + * based only on the receiver type. + */ +pragma[inline] +private predicate implSiblings(TraitItemNode trait, Impl impl1, Impl impl2) { + exists(Type rootType, TypeMention selfTy1, TypeMention selfTy2 | + impl1 != impl2 and + implSiblingCandidate(impl1, trait, rootType, selfTy1) and + implSiblingCandidate(impl2, trait, rootType, selfTy2) and + // In principle the second conjunct below should be superflous, but we still + // have ill-formed type mentions for types that we don't understand. For + // those checking both directions restricts further. Note also that we check + // syntactic equality, whereas equality up to renaming would be more + // correct. + typeMentionEqual(selfTy1, selfTy2) and + typeMentionEqual(selfTy2, selfTy1) + ) +} + +/** + * Holds if `impl` is an implementation of `trait` and if another implementation + * exists for the same type. + */ +pragma[nomagic] +private predicate implHasSibling(Impl impl, Trait trait) { implSiblings(trait, impl, _) } + +/** + * Holds if type parameter `tp` of `trait` occurs in the function `f` with the name + * `functionName` at position `pos` and path `path`. + * + * Note that `pos` can also be the special `return` position, which is sometimes + * needed to disambiguate associated function calls like `Default::default()` + * (in this case, `tp` is the special `Self` type parameter). + */ +bindingset[trait] +pragma[inline_late] +predicate traitTypeParameterOccurrence( + TraitItemNode trait, Function f, string functionName, FunctionTypePosition pos, TypePath path, + TypeParameter tp +) { + f = trait.getASuccessor(functionName) and + assocFunctionTypeAtPath(f, trait, pos, path, tp) and + tp = trait.(TraitTypeAbstraction).getATypeParameter() +} + +/** + * Holds if resolving the function `f` in `impl` with the name `functionName` + * requires inspecting the type of applied _arguments_ at position `pos` in + * order to determine whether it is the correct resolution. + */ +pragma[nomagic] +predicate functionResolutionDependsOnArgument( + ImplItemNode impl, Function f, FunctionTypePosition pos, TypePath path, Type type +) { + /* + * As seen in the example below, when an implementation has a sibling for a + * trait we find occurrences of a type parameter of the trait in a function + * signature in the trait. We then find the type given in the implementation + * at the same position, which is a position that might disambiguate the + * function from its siblings. + * + * ```rust + * trait MyTrait { + * fn method(&self, value: Foo) -> Self; + * // ^^^^^^^^^^^^^ `pos` = 0 + * // ^ `path` = "T" + * } + * impl MyAdd for i64 { + * fn method(&self, value: Foo) -> Self { ... } + * // ^^^ `type` = i64 + * } + * ``` + * + * Note that we only check the root type symbol at the position. If the type + * at that position is a type constructor (for instance `Vec<..>`) then + * inspecting the entire type tree could be necessary to disambiguate the + * method. In that case we will still resolve several methods. + */ + + exists(TraitItemNode trait, string functionName | + implHasSibling(impl, trait) and + traitTypeParameterOccurrence(trait, _, functionName, pos, path, _) and + assocFunctionTypeAtPath(f, impl, pos, path, type) and + f = impl.getASuccessor(functionName) and + not pos.isReturn() + ) +} diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll new file mode 100644 index 000000000000..b203cafbd944 --- /dev/null +++ b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll @@ -0,0 +1,434 @@ +private import rust +private import codeql.rust.internal.TypeInference +private import codeql.rust.internal.PathResolution +private import codeql.rust.internal.Type +private import codeql.rust.internal.TypeMention +private import codeql.rust.elements.Call + +private newtype TFunctionTypePosition = + TArgumentFunctionTypePosition(ArgumentPosition pos) or + TReturnFunctionTypePosition() + +/** + * A position of a type related to a function. + * + * Either `self`, `return`, or a positional parameter index. + */ +class FunctionTypePosition extends TFunctionTypePosition { + predicate isSelf() { this.asArgumentPosition().isSelf() } + + int asPositional() { result = this.asArgumentPosition().asPosition() } + + predicate isPositional() { exists(this.asPositional()) } + + ArgumentPosition asArgumentPosition() { this = TArgumentFunctionTypePosition(result) } + + predicate isReturn() { this = TReturnFunctionTypePosition() } + + /** Gets the corresponding position when `f` is invoked via a function call. */ + bindingset[f] + FunctionTypePosition getFunctionCallAdjusted(Function f) { + this.isReturn() and + result = this + or + if f.hasSelfParam() + then + this.isSelf() and result.asPositional() = 0 + or + result.asPositional() = this.asPositional() + 1 + else result = this + } + + TypeMention getTypeMention(Function f) { + this.isSelf() and + result = getSelfParamTypeMention(f.getSelfParam()) + or + result = f.getParam(this.asPositional()).getTypeRepr() + or + this.isReturn() and + result = f.getRetType().getTypeRepr() + } + + string toString() { + result = this.asArgumentPosition().toString() + or + this.isReturn() and + result = "(return)" + } +} + +/** + * A helper module for implementing `Matching(WithEnvironment)InputSig` with + * `DeclarationPosition = AccessPosition = FunctionTypePosition`. + */ +module FunctionTypePositionMatchingInput { + class DeclarationPosition = FunctionTypePosition; + + class AccessPosition = DeclarationPosition; + + predicate accessDeclarationPositionMatch(AccessPosition apos, DeclarationPosition dpos) { + apos = dpos + } +} + +private newtype TAssocFunctionType = + MkAssocFunctionType(Function f, FunctionTypePosition pos, ImplOrTraitItemNode i) { + f = i.getAnAssocItem() and + exists(pos.getTypeMention(f)) + } or + MkInheritedAssocFunctionType( + Function f, FunctionTypePosition pos, TypeMention parentMention, ImplOrTraitItemNode parent, + ImplOrTraitItemNode i + ) { + exists(AssocFunctionType inherited | + inherited.appliesTo(f, pos, parent) and + f = i.getASuccessor(_) + | + parent = i.(ImplItemNode).resolveTraitTy() and + parentMention = i.(ImplItemNode).getTraitPath() + or + parent = i.(TraitItemNode).resolveBound(parentMention) + ) + } + +/** + * The type of an associated function at a given position, when viewed as a member + * of a given trait or `impl` block. + * + * Example: + * + * ```rust + * trait T1 { + * fn m1(self); // self1 + * + * fn m2(self) { ... } // self2 + * } + * + * trait T2 : T1 { + * fn m3(self); // self3 + * } + * + * impl T2 for X { + * fn m1(self) { ... } // self4 + * + * fn m3(self) { ... } // self5 + * } + * ``` + * + * param | `impl` or trait | type + * ------- | --------------- | ---- + * `self1` | `trait T1` | `T1` + * `self1` | `trait T2` | `T2` + * `self2` | `trait T1` | `T1` + * `self2` | `trait T2` | `T2` + * `self2` | `impl T2 for X` | `X` + * `self3` | `trait T2` | `T2` + * `self4` | `impl T2 for X` | `X` + * `self5` | `impl T2 for X` | `X` + */ +class AssocFunctionType extends TAssocFunctionType { + private predicate isFunctionType(Function f, FunctionTypePosition pos, ImplOrTraitItemNode i) { + this = MkAssocFunctionType(f, pos, i) + } + + private predicate isInheritedFunctionType( + Function f, FunctionTypePosition pos, TypeMention parentMention, ImplOrTraitItemNode parent, + ImplOrTraitItemNode i + ) { + this = MkInheritedAssocFunctionType(f, pos, parentMention, parent, i) + } + + /** + * Holds if this function type applies to the function `f` at position `pos`, + * when viewed as a member of the `impl` or trait item `i`. + */ + predicate appliesTo(Function f, FunctionTypePosition pos, ImplOrTraitItemNode i) { + this.isFunctionType(f, pos, i) + or + this.isInheritedFunctionType(f, pos, _, _, i) + } + + /** Gets the type at the given path. */ + pragma[nomagic] + Type getDeclaredTypeAt(TypePath path) { + exists(Function f, FunctionTypePosition pos | + this.isFunctionType(f, pos, _) and + result = pos.getTypeMention(f).resolveTypeAt(path) + ) + or + exists( + Function f, FunctionTypePosition pos, TypeMention parentMention, ImplOrTraitItemNode parent, + AssocFunctionType parentType, ImplOrTraitItemNode i + | + this.isInheritedFunctionType(f, pos, parentMention, parent, i) and + parentType.appliesTo(f, pos, parent) + | + result = parentType.getDeclaredTypeAt(path) and + not result instanceof TypeParameter + or + exists(TypePath prefix, TypePath suffix | path = prefix.append(suffix) | + parentType.hasSelfTypeParameterAt(prefix) and + result = resolveImplOrTraitType(i, suffix) + or + exists(TypeParameter tp | + parentType.hasTypeParameterAt(prefix, tp) and + result = parentMention.resolveTypeAt(TypePath::singleton(tp).appendInverse(suffix)) + ) + ) + ) + } + + pragma[nomagic] + private predicate hasTypeParameterAt(TypePath path, TypeParameter tp) { + this.getDeclaredTypeAt(path) = tp + } + + pragma[nomagic] + private predicate hasSelfTypeParameterAt(TypePath path) { + this.hasTypeParameterAt(path, TSelfTypeParameter(_)) + } + + /** + * Gets the type at the given path. + * + * For functions belonging to a `trait`, we use the type of the trait itself instead + * of the implicit `Self` type parameter, as otherwise any type will match. + * + * Calls should use `substituteLookupTraits` to map receiver types to the relevant + * traits when matching. + */ + Type getTypeAt(TypePath path) { + exists(Type t | t = this.getDeclaredTypeAt(path) | + not t instanceof SelfTypeParameter and + result = t + or + result = TTrait(t.(SelfTypeParameter).getTrait()) + ) + } + + private AstNode getReportingNode() { + exists(Function f, FunctionTypePosition pos | this.appliesTo(f, pos, _) | + pos.isSelf() and + exists(SelfParam self | self = f.getSelfParam() | + result = self.getTypeRepr() + or + not self.hasTypeRepr() and + result = self + ) + or + result = f.getParam(pos.asPositional()).getTypeRepr() + or + pos.isReturn() and + result = f.getRetType().getTypeRepr() + ) + } + + string toString() { result = this.getReportingNode().toString() } + + Location getLocation() { result = this.getReportingNode().getLocation() } +} + +/** + * Holds if the type of the function `f` at position `pos` and path `path` inside + * `i` is `type`. + */ +pragma[nomagic] +predicate assocFunctionTypeAtPath( + Function f, ImplOrTraitItemNode i, FunctionTypePosition pos, TypePath path, Type type +) { + exists(AssocFunctionType aft | + aft.appliesTo(f, pos, i) and + type = aft.getDeclaredTypeAt(path) + ) +} + +private Trait getALookupTrait(Type t) { + result = t.(TypeParamTypeParameter).getTypeParam().(TypeParamItemNode).resolveABound() + or + result = t.(SelfTypeParameter).getTrait() + or + result = t.(ImplTraitType).getImplTraitTypeRepr().(ImplTraitTypeReprItemNode).resolveABound() + or + result = t.(DynTraitType).getTrait() +} + +/** + * Gets the type obtained by substituting in relevant traits in which to do function + * lookup, or `t` itself when no such trait exist. + */ +bindingset[t] +Type substituteLookupTraits(Type t) { + not exists(getALookupTrait(t)) and + result = t + or + result = TTrait(getALookupTrait(t)) +} + +/** + * A wrapper around `IsInstantiationOf` which ensures to substitute in lookup + * traits when checking whether argument types are instantiations of function + * types. + */ +module ArgIsInstantiationOf< + HasTypeTreeSig Arg, IsInstantiationOfInputSig Input> +{ + final private class ArgFinal = Arg; + + private class ArgSubst extends ArgFinal { + Type getTypeAt(TypePath path) { result = substituteLookupTraits(super.getTypeAt(path)) } + } + + private module IsInstantiationOfInput implements + IsInstantiationOfInputSig + { + pragma[nomagic] + predicate potentialInstantiationOf( + ArgSubst arg, TypeAbstraction abs, AssocFunctionType constraint + ) { + Input::potentialInstantiationOf(arg, abs, constraint) + } + + predicate relevantConstraint(AssocFunctionType constraint) { + Input::relevantConstraint(constraint) + } + } + + private module ArgSubstIsInstantiationOf = + IsInstantiationOf; + + predicate argIsInstantiationOf(Arg arg, ImplOrTraitItemNode i, AssocFunctionType constraint) { + ArgSubstIsInstantiationOf::isInstantiationOf(arg, i, constraint) + } + + predicate argIsNotInstantiationOf(Arg arg, ImplOrTraitItemNode i, AssocFunctionType constraint) { + ArgSubstIsInstantiationOf::isNotInstantiationOf(arg, i, constraint) + } +} + +/** + * Provides the input for `ArgsAreInstantiationsOf`. + */ +signature module ArgsAreInstantiationsOfInputSig { + /** + * Holds if types need to be matched against the type `t` at position `pos` of + * `f` inside `i`. + */ + predicate toCheck(ImplOrTraitItemNode i, Function f, FunctionTypePosition pos, AssocFunctionType t); + + /** A call whose argument types are to be checked. */ + class Call { + string toString(); + + Location getLocation(); + + Type getArgType(FunctionTypePosition pos, TypePath path); + + predicate hasTargetCand(ImplOrTraitItemNode i, Function f); + } +} + +/** + * Provides logic for checking that a set of arguments have types that are + * instantiations of the types at the corresponding positions in a function + * type. + */ +module ArgsAreInstantiationsOf { + pragma[nomagic] + private predicate toCheckRanked( + ImplOrTraitItemNode i, Function f, FunctionTypePosition pos, int rnk + ) { + Input::toCheck(i, f, pos, _) and + pos = + rank[rnk + 1](FunctionTypePosition pos0, int j | + Input::toCheck(i, f, pos0, _) and + ( + j = pos0.asPositional() + or + pos0.isSelf() and j = -1 + or + pos0.isReturn() and j = -2 + ) + | + pos0 order by j + ) + } + + private newtype TCallAndPos = + MkCallAndPos(Input::Call call, FunctionTypePosition pos) { exists(call.getArgType(pos, _)) } + + /** A call tagged with a position. */ + private class CallAndPos extends MkCallAndPos { + Input::Call call; + FunctionTypePosition pos; + + CallAndPos() { this = MkCallAndPos(call, pos) } + + Input::Call getCall() { result = call } + + FunctionTypePosition getPos() { result = pos } + + Location getLocation() { result = call.getLocation() } + + Type getTypeAt(TypePath path) { result = call.getArgType(pos, path) } + + string toString() { result = call.toString() + " [arg " + pos + "]" } + } + + private module ArgIsInstantiationOfInput implements + IsInstantiationOfInputSig + { + pragma[nomagic] + private predicate potentialInstantiationOf0( + CallAndPos cp, Input::Call call, FunctionTypePosition pos, int rnk, Function f, + TypeAbstraction abs, AssocFunctionType constraint + ) { + cp = MkCallAndPos(call, pos) and + call.hasTargetCand(abs, f) and + toCheckRanked(abs, f, pos, rnk) and + Input::toCheck(abs, f, pos, constraint) + } + + pragma[nomagic] + predicate potentialInstantiationOf( + CallAndPos cp, TypeAbstraction abs, AssocFunctionType constraint + ) { + exists(Input::Call call, int rnk, Function f | + potentialInstantiationOf0(cp, call, _, rnk, f, abs, constraint) + | + rnk = 0 + or + argsAreInstantiationsOfFromIndex(call, abs, f, rnk - 1) + ) + } + + predicate relevantConstraint(AssocFunctionType constraint) { + Input::toCheck(_, _, _, constraint) + } + } + + private module ArgIsInstantiationOfFromIndex = + ArgIsInstantiationOf; + + pragma[nomagic] + private predicate argsAreInstantiationsOfFromIndex( + Input::Call call, ImplOrTraitItemNode i, Function f, int rnk + ) { + exists(FunctionTypePosition pos | + ArgIsInstantiationOfFromIndex::argIsInstantiationOf(MkCallAndPos(call, pos), i, _) and + call.hasTargetCand(i, f) and + toCheckRanked(i, f, pos, rnk) + ) + } + + /** + * Holds if all arguments of `call` have types that are instantiations of the + * types of the corresponding parameters of `f` inside `i`. + */ + pragma[nomagic] + predicate argsAreInstantiationsOf(Input::Call call, ImplOrTraitItemNode i, Function f) { + exists(int rnk | + argsAreInstantiationsOfFromIndex(call, i, f, rnk) and + rnk = max(int r | toCheckRanked(i, f, _, r)) + ) + } +} diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index 2cc557ff3071..855912de1f57 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -511,33 +511,35 @@ module Make1 Input1> { /** Provides the input to `IsInstantiationOf`. */ signature module IsInstantiationOfInputSig { /** - * Holds if `abs` is a type abstraction, `tm` occurs in the scope of + * Holds if `abs` is a type abstraction, `constraint` occurs in the scope of * `abs`, and `app` is potentially an application/instantiation of `abs`. * * For example: * ```rust * impl Foo { * // ^^^ `abs` - * // ^^^^^^^^^ `tm` + * // ^^^^^^^^^ `constraint` * fn bar(self) { ... } * } * // ... * foo.bar(); * // ^^^ `app` * ``` - * Here `abs` introduces the type parameter `A` and `tm` occurs in the - * scope of `abs` (i.e., `A` is bound in `tm` by `abs`). On the last line, + * Here `abs` introduces the type parameter `A` and `constraint` occurs in the + * scope of `abs` (i.e., `A` is bound in `constraint` by `abs`). On the last line, * accessing the `bar` method of `foo` potentially instantiates the `impl` * block with a type argument for `A`. */ - predicate potentialInstantiationOf(App app, TypeAbstraction abs, Constraint tm); + predicate potentialInstantiationOf(App app, TypeAbstraction abs, Constraint constraint); /** * Holds if `constraint` might occur as the third argument of * `potentialInstantiationOf`. Defaults to simply projecting the third * argument of `potentialInstantiationOf`. */ - default predicate relevantTypeMention(Constraint tm) { potentialInstantiationOf(_, _, tm) } + default predicate relevantConstraint(Constraint constraint) { + potentialInstantiationOf(_, _, constraint) + } } /** @@ -550,38 +552,48 @@ module Make1 Input1> { { private import Input - /** Gets the `i`th path in `tm` per some arbitrary order. */ + /** Gets the `i`th path in `constraint` per some arbitrary order. */ pragma[nomagic] - private TypePath getNthPath(Constraint tm, int i) { + private TypePath getNthPath(Constraint constraint, int i) { result = - rank[i + 1](TypePath path | exists(tm.getTypeAt(path)) and relevantTypeMention(tm) | path) + rank[i + 1](TypePath path | + exists(constraint.getTypeAt(path)) and relevantConstraint(constraint) + | + path + ) + } + + pragma[nomagic] + private Type resolveTypeAt(App app, TypeAbstraction abs, Constraint constraint, TypePath path) { + potentialInstantiationOf(app, abs, constraint) and + result = constraint.getTypeAt(path) } pragma[nomagic] private Type resolveNthTypeAt( - App app, TypeAbstraction abs, Constraint tm, int i, TypePath path + App app, TypeAbstraction abs, Constraint constraint, int i, TypePath path ) { - potentialInstantiationOf(app, abs, tm) and - path = getNthPath(tm, i) and - result = tm.getTypeAt(path) + path = getNthPath(constraint, i) and + result = resolveTypeAt(app, abs, constraint, path) } pragma[nomagic] private predicate satisfiesConcreteTypesFromIndex( - App app, TypeAbstraction abs, Constraint tm, int i + App app, TypeAbstraction abs, Constraint constraint, int i ) { exists(Type t, TypePath path | - t = resolveNthTypeAt(app, abs, tm, i, path) and + t = resolveNthTypeAt(app, abs, constraint, i, path) and if t = abs.getATypeParameter() then any() else app.getTypeAt(path) = t ) and // Recurse unless we are at the first path - if i = 0 then any() else satisfiesConcreteTypesFromIndex(app, abs, tm, i - 1) + if i = 0 then any() else satisfiesConcreteTypesFromIndex(app, abs, constraint, i - 1) } - /** Holds if all the concrete types in `tm` also occur in `app`. */ + /** Holds if all the concrete types in `constraint` also occur in `app`. */ pragma[nomagic] - private predicate satisfiesConcreteTypes(App app, TypeAbstraction abs, Constraint tm) { - satisfiesConcreteTypesFromIndex(app, abs, tm, max(int i | exists(getNthPath(tm, i)))) + private predicate satisfiesConcreteTypes(App app, TypeAbstraction abs, Constraint constraint) { + satisfiesConcreteTypesFromIndex(app, abs, constraint, + max(int i | exists(getNthPath(constraint, i)))) } private TypeParameter getNthTypeParameter(TypeAbstraction abs, int i) { @@ -594,70 +606,74 @@ module Make1 Input1> { } /** - * Gets the path to the `i`th occurrence of `tp` within `tm` per some + * Gets the path to the `i`th occurrence of `tp` within `constraint` per some * arbitrary order, if any. */ pragma[nomagic] - private TypePath getNthTypeParameterPath(Constraint tm, TypeParameter tp, int i) { + private TypePath getNthTypeParameterPath(Constraint constraint, TypeParameter tp, int i) { result = - rank[i + 1](TypePath path | tp = tm.getTypeAt(path) and relevantTypeMention(tm) | path) + rank[i + 1](TypePath path | + tp = constraint.getTypeAt(path) and relevantConstraint(constraint) + | + path + ) } pragma[nomagic] private predicate typeParametersEqualFromIndexBase( - App app, TypeAbstraction abs, Constraint tm, TypeParameter tp, TypePath path + App app, TypeAbstraction abs, Constraint constraint, TypeParameter tp, TypePath path ) { - path = getNthTypeParameterPath(tm, tp, 0) and - satisfiesConcreteTypes(app, abs, tm) and + path = getNthTypeParameterPath(constraint, tp, 0) and + satisfiesConcreteTypes(app, abs, constraint) and // no need to compute this predicate if there is only one path - exists(getNthTypeParameterPath(tm, tp, 1)) + exists(getNthTypeParameterPath(constraint, tp, 1)) } pragma[nomagic] private predicate typeParametersEqualFromIndex( - App app, TypeAbstraction abs, Constraint tm, TypeParameter tp, Type t, int i + App app, TypeAbstraction abs, Constraint constraint, TypeParameter tp, Type t, int i ) { exists(TypePath path | t = app.getTypeAt(path) and if i = 0 - then typeParametersEqualFromIndexBase(app, abs, tm, tp, path) + then typeParametersEqualFromIndexBase(app, abs, constraint, tp, path) else ( - typeParametersEqualFromIndex(app, abs, tm, tp, t, i - 1) and - path = getNthTypeParameterPath(tm, tp, i) + typeParametersEqualFromIndex(app, abs, constraint, tp, t, i - 1) and + path = getNthTypeParameterPath(constraint, tp, i) ) ) } private predicate typeParametersEqual( - App app, TypeAbstraction abs, Constraint tm, TypeParameter tp + App app, TypeAbstraction abs, Constraint constraint, TypeParameter tp ) { - satisfiesConcreteTypes(app, abs, tm) and + satisfiesConcreteTypes(app, abs, constraint) and tp = getNthTypeParameter(abs, _) and ( - not exists(getNthTypeParameterPath(tm, tp, _)) + not exists(getNthTypeParameterPath(constraint, tp, _)) or - exists(int n | n = max(int i | exists(getNthTypeParameterPath(tm, tp, i))) | + exists(int n | n = max(int i | exists(getNthTypeParameterPath(constraint, 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) + if n = 0 then any() else typeParametersEqualFromIndex(app, abs, constraint, tp, _, n) ) ) } private predicate typeParametersHaveEqualInstantiationFromIndex( - App app, TypeAbstraction abs, Constraint tm, int i + App app, TypeAbstraction abs, Constraint constraint, int i ) { exists(TypeParameter tp | tp = getNthTypeParameter(abs, i) | - typeParametersEqual(app, abs, tm, tp) and + typeParametersEqual(app, abs, constraint, tp) and if i = 0 then any() - else typeParametersHaveEqualInstantiationFromIndex(app, abs, tm, i - 1) + else typeParametersHaveEqualInstantiationFromIndex(app, abs, constraint, i - 1) ) } /** - * Holds if `app` is a possible instantiation of `tm`. That is, by making - * appropriate substitutions for the free type parameters in `tm` given by + * Holds if `app` is a possible instantiation of `constraint`. That is, by making + * appropriate substitutions for the free type parameters in `constraint` given by * `abs`, it is possible to obtain `app`. * * For instance, if `A` and `B` are free type parameters we have: @@ -668,10 +684,10 @@ module Make1 Input1> { * - `Pair` is _not_ an instantiation of `Pair` */ pragma[nomagic] - predicate isInstantiationOf(App app, TypeAbstraction abs, Constraint tm) { + predicate isInstantiationOf(App app, TypeAbstraction abs, Constraint constraint) { // We only need to check equality if the concrete types are satisfied. - satisfiesConcreteTypes(app, abs, tm) and - // Check if all the places where the same type parameter occurs in `tm` + satisfiesConcreteTypes(app, abs, constraint) and + // Check if all the places where the same type parameter occurs in `constraint` // are equal in `app`. // // TODO: As of now this only checks equality at the root of the types @@ -681,30 +697,22 @@ module Make1 Input1> { not exists(getNthTypeParameter(abs, _)) or exists(int n | n = max(int i | exists(getNthTypeParameter(abs, i))) | - typeParametersHaveEqualInstantiationFromIndex(app, abs, tm, n) + typeParametersHaveEqualInstantiationFromIndex(app, abs, constraint, n) ) ) } /** - * Holds if `app` is _not_ a possible instantiation of `tm`. + * Holds if `app` is _not_ a possible instantiation of `constraint`. */ pragma[nomagic] - predicate isNotInstantiationOf(App app, TypeAbstraction abs, Constraint tm) { - // `app` and `tm` differ on a concrete type + predicate isNotInstantiationOf(App app, TypeAbstraction abs, Constraint constraint) { + // `app` and `constraint` differ on a concrete type exists(Type t, TypePath path | - t = resolveNthTypeAt(app, abs, tm, _, path) and + t = resolveTypeAt(app, abs, constraint, path) and not t = abs.getATypeParameter() and - not path.isEmpty() and app.getTypeAt(path) != t ) - or - // `app` uses inconsistent type parameter instantiations - exists(TypeParameter tp | - potentialInstantiationOf(app, abs, tm) and - app.getTypeAt(getNthTypeParameterPath(tm, tp, _)) != - app.getTypeAt(getNthTypeParameterPath(tm, tp, _)) - ) } } @@ -956,7 +964,7 @@ module Make1 Input1> { ) } - predicate relevantTypeMention(TypeMentionTypeTree constraint) { + predicate relevantConstraint(TypeMentionTypeTree constraint) { rootTypesSatisfaction(_, _, _, constraint, _) } } @@ -1110,7 +1118,6 @@ module Make1 Input1> { * For example, if this access is the method call `M(42)`, then the inferred * type at argument position `0` is `int`. */ - bindingset[e] Type getInferredType(AccessEnvironment e, AccessPosition apos, TypePath path); /** Gets the declaration that this access targets in environment `e`. */ @@ -1121,29 +1128,6 @@ module Make1 Input1> { bindingset[apos] bindingset[dpos] predicate accessDeclarationPositionMatch(AccessPosition apos, DeclarationPosition dpos); - - /** - * Holds if matching an inferred type `t` at `path` inside an access at `apos` - * against the declaration `target` means that the type should be adjusted to - * `tAdj` at `pathAdj`. - * - * For example, in - * - * ```csharp - * void M(int? i) {} - * M(42); - * ``` - * - * the inferred type of `42` is `int`, but it should be adjusted to `int?` - * when matching against `M`. - */ - bindingset[apos, target, path, t] - default predicate adjustAccessType( - AccessPosition apos, Declaration target, TypePath path, Type t, TypePath pathAdj, Type tAdj - ) { - pathAdj = path and - tAdj = t - } } /** @@ -1155,22 +1139,6 @@ module Make1 Input1> { module MatchingWithEnvironment { private import Input - /** - * Holds if `a` targets `target` in environment `e` and the type for `apos` at `path` - * in `a` is `t` after adjustment by `target`. - */ - pragma[nomagic] - private predicate adjustedAccessType( - Access a, AccessEnvironment e, AccessPosition apos, Declaration target, TypePath path, - Type t - ) { - target = a.getTarget(e) and - exists(TypePath path0, Type t0 | - t0 = a.getInferredType(e, apos, path0) and - adjustAccessType(apos, target, path0, t0, path, t) - ) - } - /** * Gets the type of the type argument at `path` in `a` that corresponds to * the type parameter `tp` in `target`, if any. @@ -1189,6 +1157,16 @@ module Make1 Input1> { ) } + pragma[nomagic] + private predicate directTypeMatch0( + Access a, AccessEnvironment e, Declaration target, DeclarationPosition dpos, + TypePath pathToTypeParam, TypeParameter tp + ) { + not exists(getTypeArgument(a, target, tp, _)) and + tp = target.getDeclaredType(dpos, pathToTypeParam) and + target = a.getTarget(e) + } + /** * Holds if the type `t` at `path` of `a` in environment `e` matches the type * parameter `tp` of `target`. @@ -1197,11 +1175,10 @@ module Make1 Input1> { private predicate directTypeMatch( Access a, AccessEnvironment e, Declaration target, TypePath path, Type t, TypeParameter tp ) { - not exists(getTypeArgument(a, target, tp, _)) and exists(AccessPosition apos, DeclarationPosition dpos, TypePath pathToTypeParam | - tp = target.getDeclaredType(dpos, pathToTypeParam) and + directTypeMatch0(a, e, target, dpos, pathToTypeParam, tp) and accessDeclarationPositionMatch(apos, dpos) and - adjustedAccessType(a, e, apos, target, pathToTypeParam.appendInverse(path), t) + t = a.getInferredType(e, apos, pathToTypeParam.appendInverse(path)) ) } @@ -1214,7 +1191,7 @@ module Make1 Input1> { Access a, AccessEnvironment e, AccessPosition apos, Type base ) { exists(Declaration target, DeclarationPosition dpos | - adjustedAccessType(a, e, apos, target, _, _) and + target = a.getTarget(e) and accessDeclarationPositionMatch(apos, dpos) and declarationBaseType(target, dpos, base, _, _) ) @@ -1291,10 +1268,8 @@ module Make1 Input1> { } private newtype TRelevantAccess = - MkRelevantAccess( - Access a, AccessEnvironment e, Declaration target, AccessPosition apos, TypePath path - ) { - relevantAccessConstraint(a, e, target, apos, path, _) + MkRelevantAccess(Access a, AccessEnvironment e, AccessPosition apos, TypePath path) { + relevantAccessConstraint(a, e, _, apos, path, _) } /** @@ -1304,18 +1279,19 @@ module Make1 Input1> { private class RelevantAccess extends MkRelevantAccess { Access a; AccessEnvironment e; - Declaration target; AccessPosition apos; TypePath path; - RelevantAccess() { this = MkRelevantAccess(a, e, target, apos, path) } + RelevantAccess() { this = MkRelevantAccess(a, e, apos, path) } Type getTypeAt(TypePath suffix) { - adjustedAccessType(a, e, apos, target, path.appendInverse(suffix), result) + result = a.getInferredType(e, apos, path.appendInverse(suffix)) } - /** Holds if this relevant access should satisfy `constraint`. */ - Type getConstraint() { relevantAccessConstraint(a, e, target, apos, path, result) } + /** Gets the constraint that this relevant access should satisfy. */ + Type getConstraint(Declaration target) { + relevantAccessConstraint(a, e, target, apos, path, result) + } string toString() { result = a.toString() + ", " + apos.toString() + ", " + path.toString() @@ -1328,7 +1304,7 @@ module Make1 Input1> { SatisfiesConstraintInputSig { predicate relevantConstraint(RelevantAccess at, Type constraint) { - constraint = at.getConstraint() + constraint = at.getConstraint(_) } } @@ -1336,8 +1312,12 @@ module Make1 Input1> { Access a, AccessEnvironment e, Declaration target, AccessPosition apos, TypePath prefix, Type constraint, TypePath path, Type t ) { - SatisfiesConstraint::satisfiesConstraintType(MkRelevantAccess(a, - e, target, apos, prefix), constraint, path, t) + exists(RelevantAccess ra | + ra = MkRelevantAccess(a, e, apos, prefix) and + SatisfiesConstraint::satisfiesConstraintType(ra, + constraint, path, t) and + constraint = ra.getConstraint(target) + ) } } @@ -1628,29 +1608,6 @@ module Make1 Input1> { bindingset[apos] bindingset[dpos] predicate accessDeclarationPositionMatch(AccessPosition apos, DeclarationPosition dpos); - - /** - * Holds if matching an inferred type `t` at `path` inside an access at `apos` - * against the declaration `target` means that the type should be adjusted to - * `tAdj` at `pathAdj`. - * - * For example, in - * - * ```csharp - * void M(int? i) {} - * M(42); - * ``` - * - * the inferred type of `42` is `int`, but it should be adjusted to `int?` - * when matching against `M`. - */ - bindingset[apos, target, path, t] - default predicate adjustAccessType( - AccessPosition apos, Declaration target, TypePath path, Type t, TypePath pathAdj, Type tAdj - ) { - pathAdj = path and - tAdj = t - } } /** @@ -1664,8 +1621,6 @@ module Make1 Input1> { private import codeql.util.Unit import Input - predicate adjustAccessType = Input::adjustAccessType/6; - class AccessEnvironment = Unit; final private class AccessFinal = Input::Access; From 5f71097bf66bd88ef02e7f5cc10265fad98fe197 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 23 Sep 2025 09:40:34 +0200 Subject: [PATCH 3/7] Rust: Use `doublyBoundedFastTC` in `TraitIsVisible` --- .../codeql/rust/internal/PathResolution.qll | 54 ++++++++++++++----- 1 file changed, 42 insertions(+), 12 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index 9694aa47bcba..fc49b7ca5e82 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -1645,25 +1645,55 @@ signature predicate relevantTraitVisibleSig(Element element, Trait trait); * at a given element. */ module TraitIsVisible { - /** Holds if the trait might be looked up in `encl`. */ - private predicate traitLookup(ItemNode encl, Element element, Trait trait) { - // lookup in immediately enclosing item - relevantTraitVisible(element, trait) and - encl.getADescendant() = element + private newtype TNode = + TTrait(Trait t) { relevantTraitVisible(_, t) } or + TItemNode(ItemNode i) or + TElement(Element e) { relevantTraitVisible(e, _) } + + private predicate isTrait(TNode n) { n instanceof TTrait } + + private predicate step(TNode n1, TNode n2) { + exists(Trait t1, ItemNode i2 | + n1 = TTrait(t1) and + n2 = TItemNode(i2) and + t1 = i2.getASuccessor(_, _, _) + ) or - // lookup in an outer scope, but only if the trait is not declared in inner scope - exists(ItemNode mid | - traitLookup(mid, element, trait) and - not trait = mid.getASuccessor(_, _, _) and - encl = getOuterScope(mid) + exists(ItemNode i1, ItemNode i2 | + n1 = TItemNode(i1) and + n2 = TItemNode(i2) and + i1 = getOuterScope(i2) + ) + or + exists(ItemNode i1, Element e2 | + n1 = TItemNode(i1) and + n2 = TElement(e2) and + i1.getADescendant() = e2 + ) + } + + private predicate isElement(TNode n) { n instanceof TElement } + + private predicate traitIsVisibleTC(TNode trait, TNode element) = + doublyBoundedFastTC(step/2, isTrait/1, isElement/1)(trait, element) + + pragma[nomagic] + private predicate relevantTraitVisibleLift(TNode trait, TElement element) { + exists(Trait t, Element e | + trait = TTrait(t) and + element = TElement(e) and + relevantTraitVisible(e, t) ) } /** Holds if the trait `trait` is visible at `element`. */ pragma[nomagic] predicate traitIsVisible(Element element, Trait trait) { - exists(ItemNode encl | - traitLookup(encl, element, trait) and trait = encl.getASuccessor(_, _, _) + exists(TNode t, TNode e | + traitIsVisibleTC(t, e) and + relevantTraitVisibleLift(t, e) and + t = TTrait(trait) and + e = TElement(element) ) } } From 6b3cd09a8b1c4ff652c1287315c7d2519e7efc8e Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 22 Sep 2025 20:13:30 +0200 Subject: [PATCH 4/7] Rust: Update expected output --- .../PathResolutionConsistency.expected | 2 - .../dataflow/global/viableCallable.expected | 2 - .../PathResolutionConsistency.expected | 2 - .../dataflow/local/DataFlowStep.expected | 18 +- .../PathResolutionConsistency.expected | 27 +- .../dataflow/sources/InlineFlow.expected | 232 +++++++++--------- .../library-tests/dataflow/sources/test.rs | 4 +- .../dataflow/sources/test_futures_io.rs | 26 +- .../PathResolutionConsistency.expected | 1 - .../strings/inline-taint-flow.expected | 21 +- .../PathResolutionConsistency.expected | 9 - .../PathResolutionConsistency.expected | 4 + .../PathResolutionConsistency.expected | 29 --- .../PathResolutionConsistency.expected | 4 +- .../type-inference/blanket_impl.rs | 10 +- .../type-inference/dereference.rs | 8 +- .../type-inference/invalid/main.rs | 2 +- .../test/library-tests/type-inference/main.rs | 10 +- .../type-inference/type-inference.expected | 59 ++--- .../PathResolutionConsistency.expected | 46 ---- .../security/CWE-089/SqlInjection.expected | 42 ---- .../PathResolutionConsistency.expected | 44 ---- .../CWE-312/CleartextLogging.expected | 50 ++-- .../CWE-312/CleartextStorageDatabase.expected | 21 -- .../PathResolutionConsistency.expected | 3 - 25 files changed, 225 insertions(+), 451 deletions(-) delete mode 100644 rust/ql/test/library-tests/dataflow/global/CONSISTENCY/PathResolutionConsistency.expected delete mode 100644 rust/ql/test/library-tests/dataflow/local/CONSISTENCY/PathResolutionConsistency.expected delete mode 100644 rust/ql/test/library-tests/frameworks/postgres/CONSISTENCY/PathResolutionConsistency.expected delete mode 100644 rust/ql/test/library-tests/sensitivedata/CONSISTENCY/PathResolutionConsistency.expected diff --git a/rust/ql/test/library-tests/dataflow/global/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/global/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index 85ca3c35e7cd..000000000000 --- a/rust/ql/test/library-tests/dataflow/global/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,2 +0,0 @@ -multipleCallTargets -| main.rs:272:14:272:29 | ...::deref(...) | diff --git a/rust/ql/test/library-tests/dataflow/global/viableCallable.expected b/rust/ql/test/library-tests/dataflow/global/viableCallable.expected index 11f670aabff1..e26d70d80d63 100644 --- a/rust/ql/test/library-tests/dataflow/global/viableCallable.expected +++ b/rust/ql/test/library-tests/dataflow/global/viableCallable.expected @@ -59,8 +59,6 @@ | main.rs:212:13:212:34 | ...::new(...) | main.rs:205:5:208:5 | fn new | | main.rs:212:24:212:33 | source(...) | main.rs:1:1:3:1 | fn source | | main.rs:214:5:214:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:228:10:228:14 | * ... | main.rs:235:5:237:5 | fn deref | -| main.rs:236:11:236:15 | * ... | main.rs:235:5:237:5 | fn deref | | main.rs:242:28:242:36 | source(...) | main.rs:1:1:3:1 | fn source | | main.rs:244:13:244:17 | ... + ... | main.rs:220:5:223:5 | fn add | | main.rs:245:5:245:17 | sink(...) | main.rs:5:1:7:1 | fn sink | diff --git a/rust/ql/test/library-tests/dataflow/local/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/local/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index cbf6523d21c1..000000000000 --- a/rust/ql/test/library-tests/dataflow/local/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,2 +0,0 @@ -multipleCallTargets -| main.rs:483:18:483:24 | n.len() | diff --git a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected index b2fc845081cd..a7df3fdf7b3f 100644 --- a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected @@ -1034,24 +1034,29 @@ readStep | main.rs:482:44:482:55 | this | main.rs:479:9:479:20 | captured default_name | main.rs:482:44:482:55 | default_name | | main.rs:483:18:483:18 | [post] receiver for n | file://:0:0:0:0 | &ref | main.rs:483:18:483:18 | [post] n | | main.rs:506:13:506:13 | [post] receiver for a | file://:0:0:0:0 | &ref | main.rs:506:13:506:13 | [post] a | -| main.rs:507:13:507:13 | [post] receiver for b | file://:0:0:0:0 | &ref | main.rs:507:13:507:13 | [post] b | -| main.rs:508:18:508:18 | [post] receiver for b | file://:0:0:0:0 | &ref | main.rs:508:18:508:18 | [post] b | | main.rs:519:10:519:11 | vs | file://:0:0:0:0 | element | main.rs:519:10:519:14 | vs[0] | | main.rs:520:11:520:35 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:520:10:520:35 | * ... | +| main.rs:520:11:520:35 | [post] receiver for ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:520:11:520:35 | [post] ... .unwrap() | | main.rs:521:11:521:35 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:521:10:521:35 | * ... | +| main.rs:521:11:521:35 | [post] receiver for ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:521:11:521:35 | [post] ... .unwrap() | | main.rs:523:14:523:15 | vs | file://:0:0:0:0 | element | main.rs:523:9:523:9 | v | | main.rs:526:9:526:10 | &... | file://:0:0:0:0 | &ref | main.rs:526:10:526:10 | v | | main.rs:526:15:526:23 | vs.iter() | file://:0:0:0:0 | element | main.rs:526:9:526:10 | &... | | main.rs:531:9:531:10 | &... | file://:0:0:0:0 | &ref | main.rs:531:10:531:10 | v | | main.rs:531:15:531:17 | vs2 | file://:0:0:0:0 | element | main.rs:531:9:531:10 | &... | +| main.rs:535:29:535:29 | [post] receiver for x | file://:0:0:0:0 | &ref | main.rs:535:29:535:29 | [post] x | | main.rs:535:29:535:29 | x | file://:0:0:0:0 | &ref | main.rs:535:28:535:29 | * ... | +| main.rs:536:34:536:34 | [post] receiver for x | file://:0:0:0:0 | &ref | main.rs:536:34:536:34 | [post] x | | main.rs:536:34:536:34 | x | file://:0:0:0:0 | &ref | main.rs:536:33:536:34 | * ... | | main.rs:538:14:538:27 | vs.into_iter() | file://:0:0:0:0 | element | main.rs:538:9:538:9 | v | | main.rs:544:10:544:15 | vs_mut | file://:0:0:0:0 | element | main.rs:544:10:544:18 | vs_mut[0] | | main.rs:545:11:545:39 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:545:10:545:39 | * ... | +| main.rs:545:11:545:39 | [post] receiver for ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:545:11:545:39 | [post] ... .unwrap() | | main.rs:546:11:546:39 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:546:10:546:39 | * ... | +| main.rs:546:11:546:39 | [post] receiver for ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:546:11:546:39 | [post] ... .unwrap() | | main.rs:548:9:548:14 | &mut ... | file://:0:0:0:0 | &ref | main.rs:548:14:548:14 | v | | main.rs:548:19:548:35 | vs_mut.iter_mut() | file://:0:0:0:0 | element | main.rs:548:9:548:14 | &mut ... | +| main.rs:562:11:562:15 | [post] receiver for c_ref | file://:0:0:0:0 | &ref | main.rs:562:11:562:15 | [post] c_ref | | main.rs:562:11:562:15 | c_ref | file://:0:0:0:0 | &ref | main.rs:562:10:562:15 | * ... | storeStep | main.rs:116:11:116:11 | i | file://:0:0:0:0 | &ref | main.rs:116:11:116:11 | receiver for i | @@ -1138,16 +1143,21 @@ storeStep | main.rs:482:44:482:55 | default_name | file://:0:0:0:0 | &ref | main.rs:482:44:482:55 | receiver for default_name | | main.rs:483:18:483:18 | n | file://:0:0:0:0 | &ref | main.rs:483:18:483:18 | receiver for n | | main.rs:506:13:506:13 | a | file://:0:0:0:0 | &ref | main.rs:506:13:506:13 | receiver for a | -| main.rs:507:13:507:13 | b | file://:0:0:0:0 | &ref | main.rs:507:13:507:13 | receiver for b | -| main.rs:508:18:508:18 | b | file://:0:0:0:0 | &ref | main.rs:508:18:508:18 | receiver for b | | main.rs:517:15:517:24 | source(...) | file://:0:0:0:0 | element | main.rs:517:14:517:34 | [...] | | main.rs:517:27:517:27 | 2 | file://:0:0:0:0 | element | main.rs:517:14:517:34 | [...] | | main.rs:517:30:517:30 | 3 | file://:0:0:0:0 | element | main.rs:517:14:517:34 | [...] | | main.rs:517:33:517:33 | 4 | file://:0:0:0:0 | element | main.rs:517:14:517:34 | [...] | +| main.rs:520:11:520:35 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:520:11:520:35 | receiver for ... .unwrap() | +| main.rs:521:11:521:35 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:521:11:521:35 | receiver for ... .unwrap() | +| main.rs:535:29:535:29 | x | file://:0:0:0:0 | &ref | main.rs:535:29:535:29 | receiver for x | +| main.rs:536:34:536:34 | x | file://:0:0:0:0 | &ref | main.rs:536:34:536:34 | receiver for x | | main.rs:542:23:542:32 | source(...) | file://:0:0:0:0 | element | main.rs:542:22:542:42 | [...] | | main.rs:542:35:542:35 | 2 | file://:0:0:0:0 | element | main.rs:542:22:542:42 | [...] | | main.rs:542:38:542:38 | 3 | file://:0:0:0:0 | element | main.rs:542:22:542:42 | [...] | | main.rs:542:41:542:41 | 4 | file://:0:0:0:0 | element | main.rs:542:22:542:42 | [...] | +| main.rs:545:11:545:39 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:545:11:545:39 | receiver for ... .unwrap() | +| main.rs:546:11:546:39 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:546:11:546:39 | receiver for ... .unwrap() | | main.rs:557:18:557:18 | c | file://:0:0:0:0 | &ref | main.rs:557:17:557:18 | &c | | main.rs:560:15:560:15 | b | file://:0:0:0:0 | &ref | main.rs:560:14:560:15 | &b | +| main.rs:562:11:562:15 | c_ref | file://:0:0:0:0 | &ref | main.rs:562:11:562:15 | receiver for c_ref | | main.rs:583:27:583:27 | 0 | {EXTERNAL LOCATION} | Some | main.rs:583:22:583:28 | Some(...) | diff --git a/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected index 76ed919e8696..2b437ae2168f 100644 --- a/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected @@ -2,27 +2,10 @@ multipleCallTargets | test.rs:113:62:113:77 | ...::from(...) | | test.rs:120:58:120:73 | ...::from(...) | | test.rs:229:22:229:72 | ... .read_to_string(...) | -| test.rs:664:22:664:43 | file.read(...) | -| test.rs:673:22:673:41 | f1.read(...) | | test.rs:894:50:894:66 | ...::from(...) | | test.rs:894:50:894:66 | ...::from(...) | -| test_futures_io.rs:45:27:45:84 | ...::read(...) | -| test_futures_io.rs:49:27:49:51 | reader.read(...) | -| test_futures_io.rs:83:22:83:39 | reader2.fill_buf() | -| test_futures_io.rs:103:27:103:85 | ...::read(...) | -| test_futures_io.rs:107:27:107:52 | reader2.read(...) | -| test_futures_io.rs:125:22:125:39 | reader2.fill_buf() | -| test_futures_io.rs:132:27:132:62 | reader2.read_until(...) | -| test_futures_io.rs:139:27:139:54 | reader2.read_line(...) | -| test_futures_io.rs:146:27:146:58 | reader2.read_to_end(...) | -| test_futures_io.rs:152:32:152:46 | reader2.lines() | -| test_futures_io.rs:153:14:153:32 | lines_stream.next() | -| test_futures_io.rs:154:32:154:50 | lines_stream.next() | -| web_frameworks.rs:13:14:13:23 | a.as_str() | -| web_frameworks.rs:13:14:13:23 | a.as_str() | -| web_frameworks.rs:14:14:14:25 | a.as_bytes() | -| web_frameworks.rs:14:14:14:25 | a.as_bytes() | -| web_frameworks.rs:101:14:101:23 | a.as_str() | -| web_frameworks.rs:102:14:102:25 | a.as_bytes() | -| web_frameworks.rs:158:14:158:23 | a.as_str() | -| web_frameworks.rs:159:14:159:25 | a.as_bytes() | +| test_futures_io.rs:35:26:35:63 | pinned.poll_read(...) | +| test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) | +| test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) | +| test_futures_io.rs:93:26:93:63 | pinned.poll_read(...) | +| test_futures_io.rs:116:22:116:50 | pinned.poll_fill_buf(...) | diff --git a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected index 8edaf9527f89..5edd92666d21 100644 --- a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected +++ b/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected @@ -85,45 +85,44 @@ models | 84 | Summary: ::new; Argument[0]; ReturnValue; value | | 85 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | | 86 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 87 | Summary: ::as_bytes; Argument[self]; ReturnValue; value | -| 88 | Summary: ::as_str; Argument[self]; ReturnValue; value | -| 89 | Summary: ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 90 | Summary: ::connect; Argument[1]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 91 | Summary: ::new; Argument[0]; ReturnValue; taint | -| 92 | Summary: ::bytes; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 93 | Summary: ::chunk; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | -| 94 | Summary: ::text; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 95 | Summary: ::bytes; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 96 | Summary: ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 97 | Summary: ::text_with_charset; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 98 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | -| 99 | Summary: ::read; Argument[self]; Argument[0]; taint | -| 100 | Summary: ::read_to_end; Argument[self]; Argument[0].Reference; taint | -| 101 | Summary: ::read_to_end; Argument[self]; Argument[0]; taint | -| 102 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint | -| 103 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint | -| 104 | Summary: ::next; Argument[self]; ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]; taint | -| 105 | Summary: ::fill_buf; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 106 | Summary: ::buffer; Argument[self]; ReturnValue; taint | -| 107 | Summary: ::new; Argument[0]; ReturnValue; taint | -| 108 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | -| 109 | Summary: ::read; Argument[self]; Argument[0]; taint | -| 110 | Summary: ::read_exact; Argument[self]; Argument[0].Reference; taint | -| 111 | Summary: ::read_exact; Argument[self]; Argument[0]; taint | -| 112 | Summary: ::read_to_end; Argument[self]; Argument[0].Reference; taint | -| 113 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint | -| 114 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint | -| 115 | Summary: ::lock; Argument[self]; ReturnValue; taint | -| 116 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint | -| 117 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | -| 118 | Summary: ::as_path; Argument[self]; ReturnValue; value | -| 119 | Summary: ::buffer; Argument[self]; ReturnValue; taint | -| 120 | Summary: ::new; Argument[0]; ReturnValue; taint | -| 121 | Summary: ::next_line; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | -| 122 | Summary: ::next_segment; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | -| 123 | Summary: ::peek; Argument[self]; Argument[0].Reference; taint | -| 124 | Summary: ::try_read; Argument[self]; Argument[0].Reference; taint | -| 125 | Summary: ::try_read_buf; Argument[self]; Argument[0].Reference; taint | +| 87 | Summary: ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 88 | Summary: ::connect; Argument[1]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 89 | Summary: ::poll_read; Argument[self].Reference; Argument[1].Reference; taint | +| 90 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 91 | Summary: ::bytes; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 92 | Summary: ::chunk; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | +| 93 | Summary: ::text; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 94 | Summary: ::bytes; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 95 | Summary: ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 96 | Summary: ::text_with_charset; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 97 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | +| 98 | Summary: ::read; Argument[self]; Argument[0]; taint | +| 99 | Summary: ::read_to_end; Argument[self]; Argument[0].Reference; taint | +| 100 | Summary: ::read_to_end; Argument[self]; Argument[0]; taint | +| 101 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint | +| 102 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint | +| 103 | Summary: ::next; Argument[self]; ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]; taint | +| 104 | Summary: ::fill_buf; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 105 | Summary: ::buffer; Argument[self]; ReturnValue; taint | +| 106 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 107 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | +| 108 | Summary: ::read; Argument[self]; Argument[0]; taint | +| 109 | Summary: ::read_exact; Argument[self]; Argument[0].Reference; taint | +| 110 | Summary: ::read_exact; Argument[self]; Argument[0]; taint | +| 111 | Summary: ::read_to_end; Argument[self]; Argument[0].Reference; taint | +| 112 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint | +| 113 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint | +| 114 | Summary: ::lock; Argument[self]; ReturnValue; taint | +| 115 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint | +| 116 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | +| 117 | Summary: ::as_path; Argument[self]; ReturnValue; value | +| 118 | Summary: ::buffer; Argument[self]; ReturnValue; taint | +| 119 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 120 | Summary: ::next_line; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | +| 121 | Summary: ::next_segment; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | +| 122 | Summary: ::peek; Argument[self]; Argument[0].Reference; taint | +| 123 | Summary: ::try_read; Argument[self]; Argument[0].Reference; taint | +| 124 | Summary: ::try_read_buf; Argument[self]; Argument[0].Reference; taint | edges | test.rs:8:10:8:22 | ...::var | test.rs:8:10:8:30 | ...::var(...) | provenance | Src:MaD:26 | | test.rs:9:10:9:25 | ...::var_os | test.rs:9:10:9:33 | ...::var_os(...) | provenance | Src:MaD:27 | @@ -162,7 +161,7 @@ edges | test.rs:34:16:34:29 | ...::args | test.rs:34:16:34:31 | ...::args(...) [element] | provenance | Src:MaD:21 | | test.rs:34:16:34:31 | ...::args(...) [element] | test.rs:34:16:34:38 | ... .nth(...) [Some] | provenance | MaD:42 | | test.rs:34:16:34:38 | ... .nth(...) [Some] | test.rs:34:16:34:47 | ... .unwrap() | provenance | MaD:82 | -| test.rs:34:16:34:47 | ... .unwrap() | test.rs:34:16:34:64 | ... .parse() [Ok] | provenance | MaD:89 | +| test.rs:34:16:34:47 | ... .unwrap() | test.rs:34:16:34:64 | ... .parse() [Ok] | provenance | MaD:87 | | test.rs:34:16:34:64 | ... .parse() [Ok] | test.rs:34:16:34:73 | ... .unwrap() | provenance | MaD:86 | | test.rs:34:16:34:73 | ... .unwrap() | test.rs:34:9:34:12 | arg4 | provenance | | | test.rs:42:9:42:11 | arg | test.rs:43:14:43:16 | arg | provenance | | @@ -186,32 +185,32 @@ edges | test.rs:62:9:62:22 | remote_string1 | test.rs:63:10:63:23 | remote_string1 | provenance | | | test.rs:62:26:62:47 | ...::get | test.rs:62:26:62:62 | ...::get(...) [Ok] | provenance | Src:MaD:19 | | test.rs:62:26:62:62 | ...::get(...) [Ok] | test.rs:62:26:62:63 | TryExpr | provenance | | -| test.rs:62:26:62:63 | TryExpr | test.rs:62:26:62:70 | ... .text() [Ok] | provenance | MaD:96 | +| test.rs:62:26:62:63 | TryExpr | test.rs:62:26:62:70 | ... .text() [Ok] | provenance | MaD:95 | | test.rs:62:26:62:70 | ... .text() [Ok] | test.rs:62:26:62:71 | TryExpr | provenance | | | test.rs:62:26:62:71 | TryExpr | test.rs:62:9:62:22 | remote_string1 | provenance | | | test.rs:65:9:65:22 | remote_string2 | test.rs:66:10:66:23 | remote_string2 | provenance | | | test.rs:65:26:65:47 | ...::get | test.rs:65:26:65:62 | ...::get(...) [Ok] | provenance | Src:MaD:19 | | test.rs:65:26:65:62 | ...::get(...) [Ok] | test.rs:65:26:65:71 | ... .unwrap() | provenance | MaD:86 | -| test.rs:65:26:65:71 | ... .unwrap() | test.rs:65:26:65:78 | ... .text() [Ok] | provenance | MaD:96 | +| test.rs:65:26:65:71 | ... .unwrap() | test.rs:65:26:65:78 | ... .text() [Ok] | provenance | MaD:95 | | test.rs:65:26:65:78 | ... .text() [Ok] | test.rs:65:26:65:87 | ... .unwrap() | provenance | MaD:86 | | test.rs:65:26:65:87 | ... .unwrap() | test.rs:65:9:65:22 | remote_string2 | provenance | | | test.rs:68:9:68:22 | remote_string3 | test.rs:69:10:69:23 | remote_string3 | provenance | | | test.rs:68:26:68:47 | ...::get | test.rs:68:26:68:62 | ...::get(...) [Ok] | provenance | Src:MaD:19 | | test.rs:68:26:68:62 | ...::get(...) [Ok] | test.rs:68:26:68:71 | ... .unwrap() | provenance | MaD:86 | -| test.rs:68:26:68:71 | ... .unwrap() | test.rs:68:26:68:98 | ... .text_with_charset(...) [Ok] | provenance | MaD:97 | +| test.rs:68:26:68:71 | ... .unwrap() | test.rs:68:26:68:98 | ... .text_with_charset(...) [Ok] | provenance | MaD:96 | | test.rs:68:26:68:98 | ... .text_with_charset(...) [Ok] | test.rs:68:26:68:107 | ... .unwrap() | provenance | MaD:86 | | test.rs:68:26:68:107 | ... .unwrap() | test.rs:68:9:68:22 | remote_string3 | provenance | | | test.rs:71:9:71:22 | remote_string4 | test.rs:72:10:72:23 | remote_string4 | provenance | | | test.rs:71:26:71:47 | ...::get | test.rs:71:26:71:62 | ...::get(...) [Ok] | provenance | Src:MaD:19 | | test.rs:71:26:71:62 | ...::get(...) [Ok] | test.rs:71:26:71:71 | ... .unwrap() | provenance | MaD:86 | -| test.rs:71:26:71:71 | ... .unwrap() | test.rs:71:26:71:79 | ... .bytes() [Ok] | provenance | MaD:95 | +| test.rs:71:26:71:71 | ... .unwrap() | test.rs:71:26:71:79 | ... .bytes() [Ok] | provenance | MaD:94 | | test.rs:71:26:71:79 | ... .bytes() [Ok] | test.rs:71:26:71:88 | ... .unwrap() | provenance | MaD:86 | | test.rs:71:26:71:88 | ... .unwrap() | test.rs:71:9:71:22 | remote_string4 | provenance | | | test.rs:74:9:74:22 | remote_string5 | test.rs:75:10:75:23 | remote_string5 | provenance | | | test.rs:74:26:74:37 | ...::get | test.rs:74:26:74:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:20 | | test.rs:74:26:74:52 | ...::get(...) [future, Ok] | test.rs:74:26:74:58 | await ... [Ok] | provenance | | | test.rs:74:26:74:58 | await ... [Ok] | test.rs:74:26:74:59 | TryExpr | provenance | | -| test.rs:74:26:74:59 | TryExpr | test.rs:74:26:74:66 | ... .text() [future, Ok] | provenance | MaD:94 | +| test.rs:74:26:74:59 | TryExpr | test.rs:74:26:74:66 | ... .text() [future, Ok] | provenance | MaD:93 | | test.rs:74:26:74:66 | ... .text() [future, Ok] | test.rs:74:26:74:72 | await ... [Ok] | provenance | | | test.rs:74:26:74:72 | await ... [Ok] | test.rs:74:26:74:73 | TryExpr | provenance | | | test.rs:74:26:74:73 | TryExpr | test.rs:74:9:74:22 | remote_string5 | provenance | | @@ -219,12 +218,12 @@ edges | test.rs:77:26:77:37 | ...::get | test.rs:77:26:77:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:20 | | test.rs:77:26:77:52 | ...::get(...) [future, Ok] | test.rs:77:26:77:58 | await ... [Ok] | provenance | | | test.rs:77:26:77:58 | await ... [Ok] | test.rs:77:26:77:59 | TryExpr | provenance | | -| test.rs:77:26:77:59 | TryExpr | test.rs:77:26:77:67 | ... .bytes() [future, Ok] | provenance | MaD:92 | +| test.rs:77:26:77:59 | TryExpr | test.rs:77:26:77:67 | ... .bytes() [future, Ok] | provenance | MaD:91 | | test.rs:77:26:77:67 | ... .bytes() [future, Ok] | test.rs:77:26:77:73 | await ... [Ok] | provenance | | | test.rs:77:26:77:73 | await ... [Ok] | test.rs:77:26:77:74 | TryExpr | provenance | | | test.rs:77:26:77:74 | TryExpr | test.rs:77:9:77:22 | remote_string6 | provenance | | -| test.rs:80:9:80:20 | mut request1 | test.rs:81:10:81:25 | request1.chunk() [future, Ok, Some] | provenance | MaD:93 | -| test.rs:80:9:80:20 | mut request1 | test.rs:82:29:82:44 | request1.chunk() [future, Ok, Some] | provenance | MaD:93 | +| test.rs:80:9:80:20 | mut request1 | test.rs:81:10:81:25 | request1.chunk() [future, Ok, Some] | provenance | MaD:92 | +| test.rs:80:9:80:20 | mut request1 | test.rs:82:29:82:44 | request1.chunk() [future, Ok, Some] | provenance | MaD:92 | | test.rs:80:24:80:35 | ...::get | test.rs:80:24:80:50 | ...::get(...) [future, Ok] | provenance | Src:MaD:20 | | test.rs:80:24:80:50 | ...::get(...) [future, Ok] | test.rs:80:24:80:56 | await ... [Ok] | provenance | | | test.rs:80:24:80:56 | await ... [Ok] | test.rs:80:24:80:57 | TryExpr | provenance | | @@ -251,38 +250,38 @@ edges | test.rs:121:31:121:42 | send_request | test.rs:121:24:121:51 | sender.send_request(...) [future, Ok] | provenance | Src:MaD:7 | | test.rs:122:11:122:18 | response | test.rs:122:10:122:18 | &response | provenance | | | test.rs:211:22:211:35 | ...::stdin | test.rs:211:22:211:37 | ...::stdin(...) | provenance | Src:MaD:33 MaD:33 | -| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer | provenance | MaD:109 | +| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer | provenance | MaD:108 | | test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer [&ref] | provenance | MaD:60 | -| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer [&ref] | provenance | MaD:108 | +| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer [&ref] | provenance | MaD:107 | | test.rs:211:44:211:54 | [post] &mut buffer | test.rs:212:15:212:20 | buffer | provenance | | | test.rs:211:44:211:54 | [post] &mut buffer [&ref] | test.rs:211:49:211:54 | [post] buffer | provenance | | | test.rs:211:49:211:54 | [post] buffer | test.rs:212:15:212:20 | buffer | provenance | | | test.rs:212:15:212:20 | buffer | test.rs:212:14:212:20 | &buffer | provenance | | | test.rs:217:22:217:35 | ...::stdin | test.rs:217:22:217:37 | ...::stdin(...) | provenance | Src:MaD:33 MaD:33 | | test.rs:217:22:217:37 | ...::stdin(...) | test.rs:217:51:217:61 | [post] &mut buffer [&ref] | provenance | MaD:62 | -| test.rs:217:22:217:37 | ...::stdin(...) | test.rs:217:51:217:61 | [post] &mut buffer [&ref] | provenance | MaD:112 | +| test.rs:217:22:217:37 | ...::stdin(...) | test.rs:217:51:217:61 | [post] &mut buffer [&ref] | provenance | MaD:111 | | test.rs:217:51:217:61 | [post] &mut buffer [&ref] | test.rs:217:56:217:61 | [post] buffer | provenance | | | test.rs:217:56:217:61 | [post] buffer | test.rs:218:15:218:20 | buffer | provenance | | | test.rs:218:15:218:20 | buffer | test.rs:218:14:218:20 | &buffer | provenance | | | test.rs:223:22:223:35 | ...::stdin | test.rs:223:22:223:37 | ...::stdin(...) | provenance | Src:MaD:33 MaD:33 | -| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer | provenance | MaD:114 | +| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer | provenance | MaD:113 | | test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer [&ref] | provenance | MaD:63 | -| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer [&ref] | provenance | MaD:113 | +| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer [&ref] | provenance | MaD:112 | | test.rs:223:54:223:64 | [post] &mut buffer | test.rs:224:15:224:20 | buffer | provenance | | | test.rs:223:54:223:64 | [post] &mut buffer [&ref] | test.rs:223:59:223:64 | [post] buffer | provenance | | | test.rs:223:59:223:64 | [post] buffer | test.rs:224:15:224:20 | buffer | provenance | | | test.rs:224:15:224:20 | buffer | test.rs:224:14:224:20 | &buffer | provenance | | | test.rs:229:22:229:35 | ...::stdin | test.rs:229:22:229:37 | ...::stdin(...) | provenance | Src:MaD:33 MaD:33 | -| test.rs:229:22:229:37 | ...::stdin(...) | test.rs:229:22:229:44 | ... .lock() | provenance | MaD:115 | +| test.rs:229:22:229:37 | ...::stdin(...) | test.rs:229:22:229:44 | ... .lock() | provenance | MaD:114 | | test.rs:229:22:229:44 | ... .lock() | test.rs:229:61:229:71 | [post] &mut buffer [&ref] | provenance | MaD:63 | -| test.rs:229:22:229:44 | ... .lock() | test.rs:229:61:229:71 | [post] &mut buffer [&ref] | provenance | MaD:116 | +| test.rs:229:22:229:44 | ... .lock() | test.rs:229:61:229:71 | [post] &mut buffer [&ref] | provenance | MaD:115 | | test.rs:229:61:229:71 | [post] &mut buffer [&ref] | test.rs:229:66:229:71 | [post] buffer | provenance | | | test.rs:229:66:229:71 | [post] buffer | test.rs:230:15:230:20 | buffer | provenance | | | test.rs:230:15:230:20 | buffer | test.rs:230:14:230:20 | &buffer | provenance | | | test.rs:235:9:235:22 | ...::stdin | test.rs:235:9:235:24 | ...::stdin(...) | provenance | Src:MaD:33 MaD:33 | -| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer | provenance | MaD:111 | +| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer | provenance | MaD:110 | | test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer [&ref] | provenance | MaD:61 | -| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer [&ref] | provenance | MaD:110 | +| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer [&ref] | provenance | MaD:109 | | test.rs:235:37:235:47 | [post] &mut buffer | test.rs:236:15:236:20 | buffer | provenance | | | test.rs:235:37:235:47 | [post] &mut buffer [&ref] | test.rs:235:42:235:47 | [post] buffer | provenance | | | test.rs:235:42:235:47 | [post] buffer | test.rs:236:15:236:20 | buffer | provenance | | @@ -290,42 +289,42 @@ edges | test.rs:239:17:239:30 | ...::stdin | test.rs:239:17:239:32 | ...::stdin(...) | provenance | Src:MaD:33 MaD:33 | | test.rs:239:17:239:32 | ...::stdin(...) | test.rs:239:17:239:40 | ... .bytes() | provenance | MaD:57 | | test.rs:239:17:239:40 | ... .bytes() | test.rs:240:14:240:17 | byte | provenance | | -| test.rs:246:13:246:22 | mut reader | test.rs:247:20:247:36 | reader.fill_buf() [Ok] | provenance | MaD:105 | +| test.rs:246:13:246:22 | mut reader | test.rs:247:20:247:36 | reader.fill_buf() [Ok] | provenance | MaD:104 | | test.rs:246:26:246:66 | ...::new(...) | test.rs:246:13:246:22 | mut reader | provenance | | | test.rs:246:50:246:63 | ...::stdin | test.rs:246:50:246:65 | ...::stdin(...) | provenance | Src:MaD:33 MaD:33 | -| test.rs:246:50:246:65 | ...::stdin(...) | test.rs:246:26:246:66 | ...::new(...) | provenance | MaD:107 | +| test.rs:246:50:246:65 | ...::stdin(...) | test.rs:246:26:246:66 | ...::new(...) | provenance | MaD:106 | | test.rs:247:13:247:16 | data | test.rs:248:15:248:18 | data | provenance | | | test.rs:247:20:247:36 | reader.fill_buf() [Ok] | test.rs:247:20:247:37 | TryExpr | provenance | | | test.rs:247:20:247:37 | TryExpr | test.rs:247:13:247:16 | data | provenance | | | test.rs:248:15:248:18 | data | test.rs:248:14:248:18 | &data | provenance | | -| test.rs:252:13:252:18 | reader | test.rs:253:20:253:34 | reader.buffer() | provenance | MaD:106 | +| test.rs:252:13:252:18 | reader | test.rs:253:20:253:34 | reader.buffer() | provenance | MaD:105 | | test.rs:252:22:252:62 | ...::new(...) | test.rs:252:13:252:18 | reader | provenance | | | test.rs:252:46:252:59 | ...::stdin | test.rs:252:46:252:61 | ...::stdin(...) | provenance | Src:MaD:33 MaD:33 | -| test.rs:252:46:252:61 | ...::stdin(...) | test.rs:252:22:252:62 | ...::new(...) | provenance | MaD:107 | +| test.rs:252:46:252:61 | ...::stdin(...) | test.rs:252:22:252:62 | ...::new(...) | provenance | MaD:106 | | test.rs:253:13:253:16 | data | test.rs:254:15:254:18 | data | provenance | | | test.rs:253:20:253:34 | reader.buffer() | test.rs:253:13:253:16 | data | provenance | | | test.rs:254:15:254:18 | data | test.rs:254:14:254:18 | &data | provenance | | | test.rs:259:13:259:22 | mut reader | test.rs:260:26:260:36 | [post] &mut buffer [&ref] | provenance | MaD:54 | | test.rs:259:26:259:66 | ...::new(...) | test.rs:259:13:259:22 | mut reader | provenance | | | test.rs:259:50:259:63 | ...::stdin | test.rs:259:50:259:65 | ...::stdin(...) | provenance | Src:MaD:33 MaD:33 | -| test.rs:259:50:259:65 | ...::stdin(...) | test.rs:259:26:259:66 | ...::new(...) | provenance | MaD:107 | +| test.rs:259:50:259:65 | ...::stdin(...) | test.rs:259:26:259:66 | ...::new(...) | provenance | MaD:106 | | test.rs:260:26:260:36 | [post] &mut buffer [&ref] | test.rs:260:31:260:36 | [post] buffer | provenance | | | test.rs:260:31:260:36 | [post] buffer | test.rs:261:15:261:20 | buffer | provenance | | | test.rs:261:15:261:20 | buffer | test.rs:261:14:261:20 | &buffer | provenance | | | test.rs:266:13:266:22 | mut reader | test.rs:267:33:267:43 | [post] &mut buffer [&ref] | provenance | MaD:55 | | test.rs:266:26:266:66 | ...::new(...) | test.rs:266:13:266:22 | mut reader | provenance | | | test.rs:266:50:266:63 | ...::stdin | test.rs:266:50:266:65 | ...::stdin(...) | provenance | Src:MaD:33 MaD:33 | -| test.rs:266:50:266:65 | ...::stdin(...) | test.rs:266:26:266:66 | ...::new(...) | provenance | MaD:107 | +| test.rs:266:50:266:65 | ...::stdin(...) | test.rs:266:26:266:66 | ...::new(...) | provenance | MaD:106 | | test.rs:267:33:267:43 | [post] &mut buffer [&ref] | test.rs:267:38:267:43 | [post] buffer | provenance | | | test.rs:267:38:267:43 | [post] buffer | test.rs:268:15:268:20 | buffer | provenance | | | test.rs:267:38:267:43 | [post] buffer | test.rs:269:14:269:22 | buffer[0] | provenance | | | test.rs:268:15:268:20 | buffer | test.rs:268:14:268:20 | &buffer | provenance | | -| test.rs:273:13:273:28 | mut reader_split | test.rs:274:14:274:32 | reader_split.next() [Some, Ok] | provenance | MaD:104 | -| test.rs:273:13:273:28 | mut reader_split | test.rs:275:33:275:51 | reader_split.next() [Some, Ok] | provenance | MaD:104 | +| test.rs:273:13:273:28 | mut reader_split | test.rs:274:14:274:32 | reader_split.next() [Some, Ok] | provenance | MaD:103 | +| test.rs:273:13:273:28 | mut reader_split | test.rs:275:33:275:51 | reader_split.next() [Some, Ok] | provenance | MaD:103 | | test.rs:273:32:273:72 | ...::new(...) | test.rs:273:32:273:84 | ... .split(...) | provenance | MaD:56 | | test.rs:273:32:273:84 | ... .split(...) | test.rs:273:13:273:28 | mut reader_split | provenance | | | test.rs:273:56:273:69 | ...::stdin | test.rs:273:56:273:71 | ...::stdin(...) | provenance | Src:MaD:33 MaD:33 | -| test.rs:273:56:273:71 | ...::stdin(...) | test.rs:273:32:273:72 | ...::new(...) | provenance | MaD:107 | +| test.rs:273:56:273:71 | ...::stdin(...) | test.rs:273:32:273:72 | ...::new(...) | provenance | MaD:106 | | test.rs:274:14:274:32 | reader_split.next() [Some, Ok] | test.rs:274:14:274:41 | ... .unwrap() [Ok] | provenance | MaD:82 | | test.rs:274:14:274:41 | ... .unwrap() [Ok] | test.rs:274:14:274:50 | ... .unwrap() | provenance | MaD:86 | | test.rs:275:19:275:29 | Some(...) [Some, Ok] | test.rs:275:24:275:28 | chunk [Ok] | provenance | | @@ -334,7 +333,7 @@ edges | test.rs:281:13:281:18 | reader | test.rs:282:21:282:34 | reader.lines() | provenance | MaD:53 | | test.rs:281:22:281:62 | ...::new(...) | test.rs:281:13:281:18 | reader | provenance | | | test.rs:281:46:281:59 | ...::stdin | test.rs:281:46:281:61 | ...::stdin(...) | provenance | Src:MaD:33 MaD:33 | -| test.rs:281:46:281:61 | ...::stdin(...) | test.rs:281:22:281:62 | ...::new(...) | provenance | MaD:107 | +| test.rs:281:46:281:61 | ...::stdin(...) | test.rs:281:22:281:62 | ...::new(...) | provenance | MaD:106 | | test.rs:282:21:282:34 | reader.lines() | test.rs:283:18:283:21 | line | provenance | | | test.rs:309:13:309:21 | mut stdin | test.rs:311:33:311:43 | [post] &mut buffer [&ref] | provenance | MaD:70 | | test.rs:309:25:309:40 | ...::stdin | test.rs:309:25:309:42 | ...::stdin(...) | provenance | Src:MaD:37 MaD:37 | @@ -391,40 +390,40 @@ edges | test.rs:358:13:358:22 | mut reader | test.rs:359:20:359:36 | reader.fill_buf() [future, Ok] | provenance | MaD:65 | | test.rs:358:26:358:70 | ...::new(...) | test.rs:358:13:358:22 | mut reader | provenance | | | test.rs:358:52:358:67 | ...::stdin | test.rs:358:52:358:69 | ...::stdin(...) | provenance | Src:MaD:37 MaD:37 | -| test.rs:358:52:358:69 | ...::stdin(...) | test.rs:358:26:358:70 | ...::new(...) | provenance | MaD:120 | +| test.rs:358:52:358:69 | ...::stdin(...) | test.rs:358:26:358:70 | ...::new(...) | provenance | MaD:119 | | test.rs:359:13:359:16 | data | test.rs:360:15:360:18 | data | provenance | | | test.rs:359:20:359:36 | reader.fill_buf() [future, Ok] | test.rs:359:20:359:42 | await ... [Ok] | provenance | | | test.rs:359:20:359:42 | await ... [Ok] | test.rs:359:20:359:43 | TryExpr | provenance | | | test.rs:359:20:359:43 | TryExpr | test.rs:359:13:359:16 | data | provenance | | | test.rs:360:15:360:18 | data | test.rs:360:14:360:18 | &data | provenance | | -| test.rs:364:13:364:18 | reader | test.rs:365:20:365:34 | reader.buffer() | provenance | MaD:119 | +| test.rs:364:13:364:18 | reader | test.rs:365:20:365:34 | reader.buffer() | provenance | MaD:118 | | test.rs:364:22:364:66 | ...::new(...) | test.rs:364:13:364:18 | reader | provenance | | | test.rs:364:48:364:63 | ...::stdin | test.rs:364:48:364:65 | ...::stdin(...) | provenance | Src:MaD:37 MaD:37 | -| test.rs:364:48:364:65 | ...::stdin(...) | test.rs:364:22:364:66 | ...::new(...) | provenance | MaD:120 | +| test.rs:364:48:364:65 | ...::stdin(...) | test.rs:364:22:364:66 | ...::new(...) | provenance | MaD:119 | | test.rs:365:13:365:16 | data | test.rs:366:15:366:18 | data | provenance | | | test.rs:365:20:365:34 | reader.buffer() | test.rs:365:13:365:16 | data | provenance | | | test.rs:366:15:366:18 | data | test.rs:366:14:366:18 | &data | provenance | | | test.rs:371:13:371:22 | mut reader | test.rs:372:26:372:36 | [post] &mut buffer [&ref] | provenance | MaD:67 | | test.rs:371:26:371:70 | ...::new(...) | test.rs:371:13:371:22 | mut reader | provenance | | | test.rs:371:52:371:67 | ...::stdin | test.rs:371:52:371:69 | ...::stdin(...) | provenance | Src:MaD:37 MaD:37 | -| test.rs:371:52:371:69 | ...::stdin(...) | test.rs:371:26:371:70 | ...::new(...) | provenance | MaD:120 | +| test.rs:371:52:371:69 | ...::stdin(...) | test.rs:371:26:371:70 | ...::new(...) | provenance | MaD:119 | | test.rs:372:26:372:36 | [post] &mut buffer [&ref] | test.rs:372:31:372:36 | [post] buffer | provenance | | | test.rs:372:31:372:36 | [post] buffer | test.rs:373:15:373:20 | buffer | provenance | | | test.rs:373:15:373:20 | buffer | test.rs:373:14:373:20 | &buffer | provenance | | | test.rs:378:13:378:22 | mut reader | test.rs:379:33:379:43 | [post] &mut buffer [&ref] | provenance | MaD:68 | | test.rs:378:26:378:70 | ...::new(...) | test.rs:378:13:378:22 | mut reader | provenance | | | test.rs:378:52:378:67 | ...::stdin | test.rs:378:52:378:69 | ...::stdin(...) | provenance | Src:MaD:37 MaD:37 | -| test.rs:378:52:378:69 | ...::stdin(...) | test.rs:378:26:378:70 | ...::new(...) | provenance | MaD:120 | +| test.rs:378:52:378:69 | ...::stdin(...) | test.rs:378:26:378:70 | ...::new(...) | provenance | MaD:119 | | test.rs:379:33:379:43 | [post] &mut buffer [&ref] | test.rs:379:38:379:43 | [post] buffer | provenance | | | test.rs:379:38:379:43 | [post] buffer | test.rs:380:15:380:20 | buffer | provenance | | | test.rs:379:38:379:43 | [post] buffer | test.rs:381:14:381:22 | buffer[0] | provenance | | | test.rs:380:15:380:20 | buffer | test.rs:380:14:380:20 | &buffer | provenance | | -| test.rs:385:13:385:28 | mut reader_split | test.rs:386:14:386:40 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:122 | -| test.rs:385:13:385:28 | mut reader_split | test.rs:387:33:387:59 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:122 | +| test.rs:385:13:385:28 | mut reader_split | test.rs:386:14:386:40 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:121 | +| test.rs:385:13:385:28 | mut reader_split | test.rs:387:33:387:59 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:121 | | test.rs:385:32:385:76 | ...::new(...) | test.rs:385:32:385:88 | ... .split(...) | provenance | MaD:69 | | test.rs:385:32:385:88 | ... .split(...) | test.rs:385:13:385:28 | mut reader_split | provenance | | | test.rs:385:58:385:73 | ...::stdin | test.rs:385:58:385:75 | ...::stdin(...) | provenance | Src:MaD:37 MaD:37 | -| test.rs:385:58:385:75 | ...::stdin(...) | test.rs:385:32:385:76 | ...::new(...) | provenance | MaD:120 | +| test.rs:385:58:385:75 | ...::stdin(...) | test.rs:385:32:385:76 | ...::new(...) | provenance | MaD:119 | | test.rs:386:14:386:40 | reader_split.next_segment() [future, Ok, Some] | test.rs:386:14:386:46 | await ... [Ok, Some] | provenance | | | test.rs:386:14:386:46 | await ... [Ok, Some] | test.rs:386:14:386:47 | TryExpr [Some] | provenance | | | test.rs:386:14:386:47 | TryExpr [Some] | test.rs:386:14:386:56 | ... .unwrap() | provenance | MaD:82 | @@ -436,9 +435,9 @@ edges | test.rs:393:13:393:18 | reader | test.rs:394:25:394:38 | reader.lines() | provenance | MaD:66 | | test.rs:393:22:393:66 | ...::new(...) | test.rs:393:13:393:18 | reader | provenance | | | test.rs:393:48:393:63 | ...::stdin | test.rs:393:48:393:65 | ...::stdin(...) | provenance | Src:MaD:37 MaD:37 | -| test.rs:393:48:393:65 | ...::stdin(...) | test.rs:393:22:393:66 | ...::new(...) | provenance | MaD:120 | -| test.rs:394:13:394:21 | mut lines | test.rs:395:14:395:30 | lines.next_line() [future, Ok, Some] | provenance | MaD:121 | -| test.rs:394:13:394:21 | mut lines | test.rs:396:32:396:48 | lines.next_line() [future, Ok, Some] | provenance | MaD:121 | +| test.rs:393:48:393:65 | ...::stdin(...) | test.rs:393:22:393:66 | ...::new(...) | provenance | MaD:119 | +| test.rs:394:13:394:21 | mut lines | test.rs:395:14:395:30 | lines.next_line() [future, Ok, Some] | provenance | MaD:120 | +| test.rs:394:13:394:21 | mut lines | test.rs:396:32:396:48 | lines.next_line() [future, Ok, Some] | provenance | MaD:120 | | test.rs:394:25:394:38 | reader.lines() | test.rs:394:13:394:21 | mut lines | provenance | | | test.rs:395:14:395:30 | lines.next_line() [future, Ok, Some] | test.rs:395:14:395:36 | await ... [Ok, Some] | provenance | | | test.rs:395:14:395:36 | await ... [Ok, Some] | test.rs:395:14:395:37 | TryExpr [Some] | provenance | | @@ -475,7 +474,7 @@ edges | test.rs:425:22:425:25 | path | test.rs:425:20:425:27 | e.path() | provenance | Src:MaD:9 MaD:9 | | test.rs:426:14:426:17 | path | test.rs:426:14:426:25 | path.clone() | provenance | MaD:40 | | test.rs:427:14:427:17 | path | test.rs:427:14:427:25 | path.clone() | provenance | MaD:40 | -| test.rs:427:14:427:25 | path.clone() | test.rs:427:14:427:35 | ... .as_path() | provenance | MaD:118 | +| test.rs:427:14:427:25 | path.clone() | test.rs:427:14:427:35 | ... .as_path() | provenance | MaD:117 | | test.rs:439:13:439:21 | file_name | test.rs:440:14:440:22 | file_name | provenance | | | test.rs:439:13:439:21 | file_name | test.rs:440:14:440:30 | file_name.clone() | provenance | MaD:40 | | test.rs:439:13:439:21 | file_name | test.rs:445:14:445:22 | file_name | provenance | | @@ -514,15 +513,15 @@ edges | test.rs:493:22:493:56 | ...::read_link(...) [future, Ok] | test.rs:493:22:493:62 | await ... [Ok] | provenance | | | test.rs:493:22:493:62 | await ... [Ok] | test.rs:493:22:493:63 | TryExpr | provenance | | | test.rs:493:22:493:63 | TryExpr | test.rs:493:13:493:18 | target | provenance | | -| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer | provenance | MaD:99 | +| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer | provenance | MaD:98 | | test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer [&ref] | provenance | MaD:60 | -| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer [&ref] | provenance | MaD:98 | -| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer | provenance | MaD:101 | +| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer [&ref] | provenance | MaD:97 | +| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer | provenance | MaD:100 | | test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer [&ref] | provenance | MaD:62 | -| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer [&ref] | provenance | MaD:100 | -| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer | provenance | MaD:103 | +| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer [&ref] | provenance | MaD:99 | +| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer | provenance | MaD:102 | | test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer [&ref] | provenance | MaD:63 | -| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer [&ref] | provenance | MaD:102 | +| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer [&ref] | provenance | MaD:101 | | test.rs:503:9:503:16 | mut file | test.rs:525:25:525:35 | [post] &mut buffer [&ref] | provenance | MaD:61 | | test.rs:503:9:503:16 | mut file | test.rs:529:17:529:28 | file.bytes() | provenance | MaD:57 | | test.rs:503:20:503:38 | ...::open | test.rs:503:20:503:50 | ...::open(...) [Ok] | provenance | Src:MaD:10 | @@ -544,9 +543,9 @@ edges | test.rs:525:30:525:35 | [post] buffer | test.rs:526:15:526:20 | buffer | provenance | | | test.rs:526:15:526:20 | buffer | test.rs:526:14:526:20 | &buffer | provenance | | | test.rs:529:17:529:28 | file.bytes() | test.rs:530:14:530:17 | byte | provenance | | -| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer | provenance | MaD:99 | +| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer | provenance | MaD:98 | | test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer [&ref] | provenance | MaD:60 | -| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer [&ref] | provenance | MaD:98 | +| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer [&ref] | provenance | MaD:97 | | test.rs:536:22:536:63 | ... .open(...) [Ok] | test.rs:536:22:536:72 | ... .unwrap() | provenance | MaD:86 | | test.rs:536:22:536:72 | ... .unwrap() | test.rs:536:13:536:18 | mut f1 | provenance | | | test.rs:536:50:536:53 | open | test.rs:536:22:536:63 | ... .open(...) [Ok] | provenance | Src:MaD:11 | @@ -554,9 +553,9 @@ edges | test.rs:538:30:538:40 | [post] &mut buffer [&ref] | test.rs:538:35:538:40 | [post] buffer | provenance | | | test.rs:538:35:538:40 | [post] buffer | test.rs:539:15:539:20 | buffer | provenance | | | test.rs:539:15:539:20 | buffer | test.rs:539:14:539:20 | &buffer | provenance | | -| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer | provenance | MaD:99 | +| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer | provenance | MaD:98 | | test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer [&ref] | provenance | MaD:60 | -| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer [&ref] | provenance | MaD:98 | +| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer [&ref] | provenance | MaD:97 | | test.rs:543:22:543:80 | ... .open(...) [Ok] | test.rs:543:22:543:89 | ... .unwrap() | provenance | MaD:86 | | test.rs:543:22:543:89 | ... .unwrap() | test.rs:543:13:543:18 | mut f2 | provenance | | | test.rs:543:67:543:70 | open | test.rs:543:22:543:80 | ... .open(...) [Ok] | provenance | Src:MaD:11 | @@ -564,9 +563,9 @@ edges | test.rs:545:30:545:40 | [post] &mut buffer [&ref] | test.rs:545:35:545:40 | [post] buffer | provenance | | | test.rs:545:35:545:40 | [post] buffer | test.rs:546:15:546:20 | buffer | provenance | | | test.rs:546:15:546:20 | buffer | test.rs:546:14:546:20 | &buffer | provenance | | -| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer | provenance | MaD:99 | +| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer | provenance | MaD:98 | | test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer [&ref] | provenance | MaD:60 | -| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer [&ref] | provenance | MaD:98 | +| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer [&ref] | provenance | MaD:97 | | test.rs:550:22:550:114 | ... .open(...) [Ok] | test.rs:550:22:550:123 | ... .unwrap() | provenance | MaD:86 | | test.rs:550:22:550:123 | ... .unwrap() | test.rs:550:13:550:18 | mut f3 | provenance | | | test.rs:550:101:550:104 | open | test.rs:550:22:550:114 | ... .open(...) [Ok] | provenance | Src:MaD:11 | @@ -652,33 +651,27 @@ edges | test.rs:660:9:660:16 | mut file | test.rs:664:22:664:25 | file | provenance | | | test.rs:660:9:660:16 | mut file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:38 | | test.rs:660:9:660:16 | mut file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:39 | -| test.rs:660:9:660:16 | mut file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:49 | -| test.rs:660:9:660:16 | mut file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:50 | | test.rs:660:20:660:44 | ...::open | test.rs:660:20:660:56 | ...::open(...) [future, Ok] | provenance | Src:MaD:4 | | test.rs:660:20:660:56 | ...::open(...) [future, Ok] | test.rs:660:20:660:62 | await ... [Ok] | provenance | | | test.rs:660:20:660:62 | await ... [Ok] | test.rs:660:20:660:63 | TryExpr | provenance | | | test.rs:660:20:660:63 | TryExpr | test.rs:660:9:660:16 | mut file | provenance | | | test.rs:664:22:664:25 | file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:38 | -| test.rs:664:22:664:25 | file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:49 | | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | test.rs:664:37:664:42 | [post] buffer | provenance | | | test.rs:664:37:664:42 | [post] buffer | test.rs:665:15:665:20 | buffer | provenance | | | test.rs:665:15:665:20 | buffer | test.rs:665:14:665:20 | &buffer | provenance | | | test.rs:671:13:671:18 | mut f1 | test.rs:673:22:673:23 | f1 | provenance | | | test.rs:671:13:671:18 | mut f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:38 | | test.rs:671:13:671:18 | mut f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:39 | -| test.rs:671:13:671:18 | mut f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:49 | -| test.rs:671:13:671:18 | mut f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:50 | | test.rs:671:22:671:69 | ... .open(...) [future, Ok] | test.rs:671:22:671:75 | await ... [Ok] | provenance | | | test.rs:671:22:671:75 | await ... [Ok] | test.rs:671:22:671:76 | TryExpr | provenance | | | test.rs:671:22:671:76 | TryExpr | test.rs:671:13:671:18 | mut f1 | provenance | | | test.rs:671:56:671:59 | open | test.rs:671:22:671:69 | ... .open(...) [future, Ok] | provenance | Src:MaD:5 | | test.rs:673:22:673:23 | f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:38 | -| test.rs:673:22:673:23 | f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:49 | | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | test.rs:673:35:673:40 | [post] buffer | provenance | | | test.rs:673:35:673:40 | [post] buffer | test.rs:674:15:674:20 | buffer | provenance | | | test.rs:674:15:674:20 | buffer | test.rs:674:14:674:20 | &buffer | provenance | | | test.rs:688:13:688:22 | mut stream | test.rs:695:29:695:39 | [post] &mut buffer [&ref] | provenance | MaD:60 | -| test.rs:688:13:688:22 | mut stream | test.rs:695:29:695:39 | [post] &mut buffer [&ref] | provenance | MaD:117 | +| test.rs:688:13:688:22 | mut stream | test.rs:695:29:695:39 | [post] &mut buffer [&ref] | provenance | MaD:116 | | test.rs:688:26:688:53 | ...::connect | test.rs:688:26:688:62 | ...::connect(...) [Ok] | provenance | Src:MaD:12 | | test.rs:688:26:688:62 | ...::connect(...) [Ok] | test.rs:688:26:688:63 | TryExpr | provenance | | | test.rs:688:26:688:63 | TryExpr | test.rs:688:13:688:22 | mut stream | provenance | | @@ -693,14 +686,14 @@ edges | test.rs:715:21:715:30 | mut reader | test.rs:718:44:718:52 | [post] &mut line [&ref] | provenance | MaD:54 | | test.rs:715:34:715:64 | ...::new(...) | test.rs:715:34:715:74 | ... .take(...) | provenance | MaD:64 | | test.rs:715:34:715:74 | ... .take(...) | test.rs:715:21:715:30 | mut reader | provenance | | -| test.rs:715:58:715:63 | stream | test.rs:715:34:715:64 | ...::new(...) | provenance | MaD:107 | +| test.rs:715:58:715:63 | stream | test.rs:715:34:715:64 | ...::new(...) | provenance | MaD:106 | | test.rs:718:44:718:52 | [post] &mut line [&ref] | test.rs:718:49:718:52 | [post] line | provenance | | | test.rs:718:49:718:52 | [post] line | test.rs:725:35:725:38 | line | provenance | | | test.rs:725:35:725:38 | line | test.rs:725:34:725:38 | &line | provenance | | -| test.rs:759:9:759:24 | mut tokio_stream | test.rs:767:35:767:46 | [post] &mut buffer1 [&ref] | provenance | MaD:123 | +| test.rs:759:9:759:24 | mut tokio_stream | test.rs:767:35:767:46 | [post] &mut buffer1 [&ref] | provenance | MaD:122 | | test.rs:759:9:759:24 | mut tokio_stream | test.rs:771:36:771:47 | [post] &mut buffer2 [&ref] | provenance | MaD:70 | -| test.rs:759:9:759:24 | mut tokio_stream | test.rs:787:41:787:51 | [post] &mut buffer [&ref] | provenance | MaD:124 | -| test.rs:759:9:759:24 | mut tokio_stream | test.rs:810:45:810:55 | [post] &mut buffer [&ref] | provenance | MaD:125 | +| test.rs:759:9:759:24 | mut tokio_stream | test.rs:787:41:787:51 | [post] &mut buffer [&ref] | provenance | MaD:123 | +| test.rs:759:9:759:24 | mut tokio_stream | test.rs:810:45:810:55 | [post] &mut buffer [&ref] | provenance | MaD:124 | | test.rs:759:28:759:57 | ...::connect | test.rs:759:28:759:66 | ...::connect(...) [future, Ok] | provenance | Src:MaD:18 | | test.rs:759:28:759:66 | ...::connect(...) [future, Ok] | test.rs:759:28:759:72 | await ... [Ok] | provenance | | | test.rs:759:28:759:72 | await ... [Ok] | test.rs:759:28:759:73 | TryExpr | provenance | | @@ -730,18 +723,18 @@ edges | test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:32:40:32:45 | reader | provenance | | | test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:45:64:45:69 | reader | provenance | | | test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:27:49:32 | reader | provenance | | -| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:38 | -| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:39 | | test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:49 | | test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:50 | | test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:54:51:54:56 | reader | provenance | | | test_futures_io.rs:26:22:26:56 | connector.connect(...) [future, Ok] | test_futures_io.rs:26:22:26:62 | await ... [Ok] | provenance | | | test_futures_io.rs:26:22:26:62 | await ... [Ok] | test_futures_io.rs:26:22:26:63 | TryExpr | provenance | | | test_futures_io.rs:26:22:26:63 | TryExpr | test_futures_io.rs:26:9:26:18 | mut reader | provenance | | -| test_futures_io.rs:26:53:26:55 | tcp | test_futures_io.rs:26:22:26:56 | connector.connect(...) [future, Ok] | provenance | MaD:90 | +| test_futures_io.rs:26:53:26:55 | tcp | test_futures_io.rs:26:22:26:56 | connector.connect(...) [future, Ok] | provenance | MaD:88 | | test_futures_io.rs:27:11:27:16 | reader | test_futures_io.rs:27:10:27:16 | &reader | provenance | | | test_futures_io.rs:32:13:32:22 | mut pinned | test_futures_io.rs:33:15:33:20 | pinned | provenance | | +| test_futures_io.rs:32:13:32:22 | mut pinned | test_futures_io.rs:35:52:35:62 | [post] &mut buffer [&ref] | provenance | MaD:89 | | test_futures_io.rs:32:13:32:22 | mut pinned [&ref] | test_futures_io.rs:33:15:33:20 | pinned [&ref] | provenance | | +| test_futures_io.rs:32:13:32:22 | mut pinned [&ref] | test_futures_io.rs:35:52:35:62 | [post] &mut buffer [&ref] | provenance | MaD:89 | | test_futures_io.rs:32:26:32:46 | ...::new(...) | test_futures_io.rs:32:13:32:22 | mut pinned | provenance | | | test_futures_io.rs:32:26:32:46 | ...::new(...) [&ref] | test_futures_io.rs:32:13:32:22 | mut pinned [&ref] | provenance | | | test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | test_futures_io.rs:32:26:32:46 | ...::new(...) | provenance | MaD:83 | @@ -749,13 +742,16 @@ edges | test_futures_io.rs:32:40:32:45 | reader | test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | provenance | | | test_futures_io.rs:33:15:33:20 | pinned | test_futures_io.rs:33:14:33:20 | &pinned | provenance | | | test_futures_io.rs:33:15:33:20 | pinned [&ref] | test_futures_io.rs:33:14:33:20 | &pinned | provenance | | -| test_futures_io.rs:45:59:45:69 | &mut reader [&ref] | test_futures_io.rs:45:72:45:83 | [post] &mut buffer1 [&ref] | provenance | MaD:38 | +| test_futures_io.rs:35:52:35:62 | [post] &mut buffer [&ref] | test_futures_io.rs:35:57:35:62 | [post] buffer | provenance | | +| test_futures_io.rs:35:57:35:62 | [post] buffer | test_futures_io.rs:37:19:37:24 | buffer | provenance | | +| test_futures_io.rs:35:57:35:62 | [post] buffer | test_futures_io.rs:38:19:38:29 | buffer[...] | provenance | | +| test_futures_io.rs:37:19:37:24 | buffer | test_futures_io.rs:37:18:37:24 | &buffer | provenance | | +| test_futures_io.rs:38:19:38:29 | buffer[...] | test_futures_io.rs:38:18:38:29 | &... | provenance | | | test_futures_io.rs:45:59:45:69 | &mut reader [&ref] | test_futures_io.rs:45:72:45:83 | [post] &mut buffer1 [&ref] | provenance | MaD:49 | | test_futures_io.rs:45:64:45:69 | reader | test_futures_io.rs:45:59:45:69 | &mut reader [&ref] | provenance | | | test_futures_io.rs:45:72:45:83 | [post] &mut buffer1 [&ref] | test_futures_io.rs:45:77:45:83 | [post] buffer1 | provenance | | | test_futures_io.rs:45:77:45:83 | [post] buffer1 | test_futures_io.rs:46:15:46:36 | buffer1[...] | provenance | | | test_futures_io.rs:46:15:46:36 | buffer1[...] | test_futures_io.rs:46:14:46:36 | &... | provenance | | -| test_futures_io.rs:49:27:49:32 | reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:38 | | test_futures_io.rs:49:27:49:32 | reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:49 | | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | test_futures_io.rs:49:44:49:50 | [post] buffer2 | provenance | | | test_futures_io.rs:49:44:49:50 | [post] buffer2 | test_futures_io.rs:51:15:51:36 | buffer2[...] | provenance | | @@ -767,8 +763,6 @@ edges | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:90:40:90:46 | reader2 | provenance | | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:103:64:103:70 | reader2 | provenance | | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:27:107:33 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:38 | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:39 | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:49 | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:50 | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:113:40:113:46 | reader2 | provenance | | @@ -783,7 +777,7 @@ edges | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:51 | | test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:52 | | test_futures_io.rs:54:23:54:57 | ...::new(...) | test_futures_io.rs:54:9:54:19 | mut reader2 | provenance | | -| test_futures_io.rs:54:51:54:56 | reader | test_futures_io.rs:54:23:54:57 | ...::new(...) | provenance | MaD:91 | +| test_futures_io.rs:54:51:54:56 | reader | test_futures_io.rs:54:23:54:57 | ...::new(...) | provenance | MaD:90 | | test_futures_io.rs:55:11:55:17 | reader2 | test_futures_io.rs:55:10:55:17 | &reader2 | provenance | | | test_futures_io.rs:59:13:59:22 | mut pinned | test_futures_io.rs:60:15:60:20 | pinned | provenance | | | test_futures_io.rs:59:13:59:22 | mut pinned | test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:43 | @@ -829,13 +823,11 @@ edges | test_futures_io.rs:90:40:90:46 | reader2 | test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | provenance | | | test_futures_io.rs:91:15:91:20 | pinned | test_futures_io.rs:91:14:91:20 | &pinned | provenance | | | test_futures_io.rs:91:15:91:20 | pinned [&ref] | test_futures_io.rs:91:14:91:20 | &pinned | provenance | | -| test_futures_io.rs:103:59:103:70 | &mut reader2 [&ref] | test_futures_io.rs:103:73:103:84 | [post] &mut buffer1 [&ref] | provenance | MaD:38 | | test_futures_io.rs:103:59:103:70 | &mut reader2 [&ref] | test_futures_io.rs:103:73:103:84 | [post] &mut buffer1 [&ref] | provenance | MaD:49 | | test_futures_io.rs:103:64:103:70 | reader2 | test_futures_io.rs:103:59:103:70 | &mut reader2 [&ref] | provenance | | | test_futures_io.rs:103:73:103:84 | [post] &mut buffer1 [&ref] | test_futures_io.rs:103:78:103:84 | [post] buffer1 | provenance | | | test_futures_io.rs:103:78:103:84 | [post] buffer1 | test_futures_io.rs:104:15:104:36 | buffer1[...] | provenance | | | test_futures_io.rs:104:15:104:36 | buffer1[...] | test_futures_io.rs:104:14:104:36 | &... | provenance | | -| test_futures_io.rs:107:27:107:33 | reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:38 | | test_futures_io.rs:107:27:107:33 | reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:49 | | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | test_futures_io.rs:107:45:107:51 | [post] buffer2 | provenance | | | test_futures_io.rs:107:45:107:51 | [post] buffer2 | test_futures_io.rs:108:15:108:36 | buffer2[...] | provenance | | @@ -878,24 +870,16 @@ edges | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:14 | a | provenance | | | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:80 | | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:80 | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:88 | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:88 | | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:14 | a | provenance | | | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:14 | a | provenance | | | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:79 | | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:79 | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:87 | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:87 | | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:15:14:15:14 | a | provenance | | | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:15:14:15:14 | a | provenance | | | web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:80 | | web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:80 | -| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:88 | -| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:88 | | web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:79 | | web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:79 | -| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:87 | -| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:87 | | web_frameworks.rs:68:15:68:15 | a | web_frameworks.rs:70:14:70:14 | a | provenance | | | web_frameworks.rs:68:15:68:15 | a | web_frameworks.rs:70:14:70:14 | a | provenance | | | web_frameworks.rs:242:33:242:35 | map | web_frameworks.rs:242:38:242:46 | ...: String | provenance | Src:MaD:2 | @@ -1566,6 +1550,12 @@ nodes | test_futures_io.rs:33:14:33:20 | &pinned | semmle.label | &pinned | | test_futures_io.rs:33:15:33:20 | pinned | semmle.label | pinned | | test_futures_io.rs:33:15:33:20 | pinned [&ref] | semmle.label | pinned [&ref] | +| test_futures_io.rs:35:52:35:62 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test_futures_io.rs:35:57:35:62 | [post] buffer | semmle.label | [post] buffer | +| test_futures_io.rs:37:18:37:24 | &buffer | semmle.label | &buffer | +| test_futures_io.rs:37:19:37:24 | buffer | semmle.label | buffer | +| test_futures_io.rs:38:18:38:29 | &... | semmle.label | &... | +| test_futures_io.rs:38:19:38:29 | buffer[...] | semmle.label | buffer[...] | | test_futures_io.rs:45:59:45:69 | &mut reader [&ref] | semmle.label | &mut reader [&ref] | | test_futures_io.rs:45:64:45:69 | reader | semmle.label | reader | | test_futures_io.rs:45:72:45:83 | [post] &mut buffer1 [&ref] | semmle.label | [post] &mut buffer1 [&ref] | @@ -1826,6 +1816,8 @@ testFailures | test_futures_io.rs:20:10:20:13 | &tcp | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:20:10:20:13 | &tcp | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | | test_futures_io.rs:27:10:27:16 | &reader | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:27:10:27:16 | &reader | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | | test_futures_io.rs:33:14:33:20 | &pinned | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:33:14:33:20 | &pinned | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | +| test_futures_io.rs:37:18:37:24 | &buffer | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:37:18:37:24 | &buffer | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | +| test_futures_io.rs:38:18:38:29 | &... | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:38:18:38:29 | &... | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | | test_futures_io.rs:46:14:46:36 | &... | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:46:14:46:36 | &... | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | | test_futures_io.rs:51:14:51:36 | &... | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:51:14:51:36 | &... | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | | test_futures_io.rs:55:10:55:17 | &reader2 | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:55:10:55:17 | &reader2 | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | diff --git a/rust/ql/test/library-tests/dataflow/sources/test.rs b/rust/ql/test/library-tests/dataflow/sources/test.rs index 895a789cfaf4..69ecfe7c662b 100644 --- a/rust/ql/test/library-tests/dataflow/sources/test.rs +++ b/rust/ql/test/library-tests/dataflow/sources/test.rs @@ -638,7 +638,7 @@ async fn test_tokio_file() -> std::io::Result<()> { let file2 = tokio::fs::File::open("another_file.txt").await?; // $ Alert[rust/summary/taint-sources] let mut reader = file1.chain(file2); reader.read_to_string(&mut buffer).await?; - sink(&buffer); // $ MISSING: hasTaintFlow="file.txt" hasTaintFlow="another_file.txt" -- we cannot resolve the `chain` and `read_to_string` calls above, which comes from `impl AsyncReadExt for R {}` in `async_read_ext.rs` + sink(&buffer); // $ MISSING: hasTaintFlow="file.txt" hasTaintFlow="another_file.txt" } { @@ -646,7 +646,7 @@ async fn test_tokio_file() -> std::io::Result<()> { let file1 = tokio::fs::File::open("file.txt").await?; // $ Alert[rust/summary/taint-sources] let mut reader = file1.take(100); reader.read_to_string(&mut buffer).await?; - sink(&buffer); // $ MISSING: hasTaintFlow="file.txt" -- we cannot resolve the `take` and `read_to_string` calls above, which comes from `impl AsyncReadExt for R {}` in `async_read_ext.rs` + sink(&buffer); // $ MISSING: hasTaintFlow="file.txt" } Ok(()) diff --git a/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs b/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs index b93f03535258..c4ee15dfe4c1 100644 --- a/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs +++ b/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs @@ -32,21 +32,21 @@ async fn test_futures_rustls_futures_io() -> io::Result<()> { let mut pinned = Pin::new(&mut reader); sink(&pinned); // $ hasTaintFlow=url let mut cx = Context::from_waker(futures::task::noop_waker_ref()); - let bytes_read = pinned.poll_read(&mut cx, &mut buffer); // we cannot correctly resolve this call, since it relies on `Deref` + let bytes_read = pinned.poll_read(&mut cx, &mut buffer); if let Poll::Ready(Ok(n)) = bytes_read { - sink(&buffer); // $ MISSING: hasTaintFlow=url - sink(&buffer[..n]); // $ MISSING: hasTaintFlow=url + sink(&buffer); // $ hasTaintFlow=url + sink(&buffer[..n]); // $ hasTaintFlow=url } } { // using the `AsyncReadExt::read` extension method (higher-level) let mut buffer1 = [0u8; 64]; - let bytes_read1 = futures::io::AsyncReadExt::read(&mut reader, &mut buffer1).await?; // we cannot resolve the `read` call, which comes from `impl AsyncReadExt for R {}` in `async_read_ext.rs` + let bytes_read1 = futures::io::AsyncReadExt::read(&mut reader, &mut buffer1).await?; sink(&buffer1[..bytes_read1]); // $ hasTaintFlow=url let mut buffer2 = [0u8; 64]; - let bytes_read2 = reader.read(&mut buffer2).await?; // we cannot resolve the `read` call, which comes from `impl AsyncReadExt for R {}` in `async_read_ext.rs` + let bytes_read2 = reader.read(&mut buffer2).await?; sink(&buffer2[..bytes_read2]); // $ hasTaintFlow=url } @@ -80,7 +80,7 @@ async fn test_futures_rustls_futures_io() -> io::Result<()> { { // using the `AsyncBufReadExt::fill_buf` extension method (higher-level) - let buffer = reader2.fill_buf().await?; // we cannot resolve the `fill_buf` call, which comes from `impl AsyncBufReadExt for R {}` in `async_buf_read_ext.rs` + let buffer = reader2.fill_buf().await?; sink(buffer); // $ hasTaintFlow=url } @@ -100,11 +100,11 @@ async fn test_futures_rustls_futures_io() -> io::Result<()> { { // using the `AsyncReadExt::read` extension method (higher-level) let mut buffer1 = [0u8; 64]; - let bytes_read1 = futures::io::AsyncReadExt::read(&mut reader2, &mut buffer1).await?; // we cannot resolve the `read` call, which comes from `impl AsyncReadExt for R {}` in `async_read_ext.rs` + let bytes_read1 = futures::io::AsyncReadExt::read(&mut reader2, &mut buffer1).await?; sink(&buffer1[..bytes_read1]); // $ hasTaintFlow=url let mut buffer2 = [0u8; 64]; - let bytes_read2 = reader2.read(&mut buffer2).await?; // we cannot resolve the `read` call, which comes from `impl AsyncReadExt for R {}` in `async_read_ext.rs` + let bytes_read2 = reader2.read(&mut buffer2).await?; sink(&buffer2[..bytes_read2]); // $ hasTaintFlow=url } @@ -122,34 +122,34 @@ async fn test_futures_rustls_futures_io() -> io::Result<()> { { // using the `AsyncBufReadExt::fill_buf` extension method (higher-level) - let buffer = reader2.fill_buf().await?; // we cannot resolve the `fill_buf` call, which comes from `impl AsyncBufReadExt for R {}` in `async_buf_read_ext.rs` + let buffer = reader2.fill_buf().await?; sink(buffer); // $ hasTaintFlow=url } { // using the `AsyncBufReadExt::read_until` extension method let mut line = Vec::new(); - let _bytes_read = reader2.read_until(b'\n', &mut line).await?; // we cannot resolve the `read_until` call, which comes from `impl AsyncBufReadExt for R {}` in `async_buf_read_ext.rs` + let _bytes_read = reader2.read_until(b'\n', &mut line).await?; sink(&line); // $ hasTaintFlow=url } { // using the `AsyncBufReadExt::read_line` extension method let mut line = String::new(); - let _bytes_read = reader2.read_line(&mut line).await?; // we cannot resolve the `read_line` call, which comes from `impl AsyncBufReadExt for R {}` in `async_buf_read_ext.rs` + let _bytes_read = reader2.read_line(&mut line).await?; sink(&line); // $ hasTaintFlow=url } { // using the `AsyncBufReadExt::read_to_end` extension method let mut buffer = Vec::with_capacity(1024); - let _bytes_read = reader2.read_to_end(&mut buffer).await?; // we cannot resolve the `read` call, which comes from `impl AsyncReadExt for R {}` in `async_read_ext.rs` + let _bytes_read = reader2.read_to_end(&mut buffer).await?; sink(&buffer); // $ hasTaintFlow=url } { // using the `AsyncBufReadExt::lines` extension method - let mut lines_stream = reader2.lines(); // we cannot resolve the `lines` call, which comes from `impl AsyncBufReadExt for R {}` in `async_buf_read_ext.rs` + let mut lines_stream = reader2.lines(); sink(lines_stream.next().await.unwrap()); // $ MISSING: hasTaintFlow=url while let Some(line) = lines_stream.next().await { sink(line.unwrap()); // $ MISSING: hasTaintFlow diff --git a/rust/ql/test/library-tests/dataflow/strings/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/strings/CONSISTENCY/PathResolutionConsistency.expected index b6acd6b81a70..ccda75006f94 100644 --- a/rust/ql/test/library-tests/dataflow/strings/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/dataflow/strings/CONSISTENCY/PathResolutionConsistency.expected @@ -1,3 +1,2 @@ multipleCallTargets | main.rs:52:14:52:29 | ...::from(...) | -| main.rs:64:16:64:25 | s.as_str() | diff --git a/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected b/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected index c6ebb0403a9a..b4bcdb673f27 100644 --- a/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected +++ b/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected @@ -4,9 +4,8 @@ models | 3 | Summary: ::add; Argument[0].Reference; ReturnValue; taint | | 4 | Summary: ::add; Argument[self]; ReturnValue; value | | 5 | Summary: ::as_str; Argument[self]; ReturnValue; value | -| 6 | Summary: ::as_str; Argument[self]; ReturnValue; value | -| 7 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint | -| 8 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | +| 6 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint | +| 7 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | edges | main.rs:26:9:26:9 | s | main.rs:27:19:27:25 | s[...] | provenance | | | main.rs:26:13:26:22 | source(...) | main.rs:26:9:26:9 | s | provenance | | @@ -31,35 +30,33 @@ edges | main.rs:52:27:52:28 | s1 | main.rs:52:14:52:29 | ...::from(...) | provenance | MaD:2 | | main.rs:63:9:63:9 | s | main.rs:64:16:64:16 | s | provenance | | | main.rs:63:9:63:9 | s | main.rs:64:16:64:25 | s.as_str() | provenance | MaD:5 | -| main.rs:63:9:63:9 | s | main.rs:64:16:64:25 | s.as_str() | provenance | MaD:6 | | main.rs:63:13:63:22 | source(...) | main.rs:63:9:63:9 | s | provenance | | | main.rs:64:16:64:16 | s | main.rs:64:16:64:25 | s.as_str() | provenance | MaD:5 | -| main.rs:64:16:64:16 | s | main.rs:64:16:64:25 | s.as_str() | provenance | MaD:6 | | main.rs:68:9:68:9 | s | main.rs:70:34:70:61 | MacroExpr | provenance | | | main.rs:68:9:68:9 | s | main.rs:73:34:73:59 | MacroExpr | provenance | | | main.rs:68:13:68:22 | source(...) | main.rs:68:9:68:9 | s | provenance | | | main.rs:70:9:70:18 | formatted1 | main.rs:71:10:71:19 | formatted1 | provenance | | | main.rs:70:22:70:62 | ...::format(...) | main.rs:70:9:70:18 | formatted1 | provenance | | -| main.rs:70:34:70:61 | MacroExpr | main.rs:70:22:70:62 | ...::format(...) | provenance | MaD:7 | +| main.rs:70:34:70:61 | MacroExpr | main.rs:70:22:70:62 | ...::format(...) | provenance | MaD:6 | | main.rs:73:9:73:18 | formatted2 | main.rs:74:10:74:19 | formatted2 | provenance | | | main.rs:73:22:73:60 | ...::format(...) | main.rs:73:9:73:18 | formatted2 | provenance | | -| main.rs:73:34:73:59 | MacroExpr | main.rs:73:22:73:60 | ...::format(...) | provenance | MaD:7 | +| main.rs:73:34:73:59 | MacroExpr | main.rs:73:22:73:60 | ...::format(...) | provenance | MaD:6 | | main.rs:76:9:76:13 | width | main.rs:77:34:77:74 | MacroExpr | provenance | | | main.rs:76:17:76:32 | source_usize(...) | main.rs:76:9:76:13 | width | provenance | | | main.rs:77:9:77:18 | formatted3 | main.rs:78:10:78:19 | formatted3 | provenance | | | main.rs:77:22:77:75 | ...::format(...) | main.rs:77:9:77:18 | formatted3 | provenance | | -| main.rs:77:34:77:74 | MacroExpr | main.rs:77:22:77:75 | ...::format(...) | provenance | MaD:7 | +| main.rs:77:34:77:74 | MacroExpr | main.rs:77:22:77:75 | ...::format(...) | provenance | MaD:6 | | main.rs:82:9:82:10 | s1 | main.rs:86:18:86:25 | MacroExpr | provenance | | | main.rs:82:9:82:10 | s1 | main.rs:87:18:87:32 | MacroExpr | provenance | | | main.rs:82:14:82:23 | source(...) | main.rs:82:9:82:10 | s1 | provenance | | | main.rs:86:18:86:25 | ...::format(...) | main.rs:86:18:86:25 | { ... } | provenance | | | main.rs:86:18:86:25 | ...::must_use(...) | main.rs:86:10:86:26 | MacroExpr | provenance | | -| main.rs:86:18:86:25 | MacroExpr | main.rs:86:18:86:25 | ...::format(...) | provenance | MaD:7 | -| main.rs:86:18:86:25 | { ... } | main.rs:86:18:86:25 | ...::must_use(...) | provenance | MaD:8 | +| main.rs:86:18:86:25 | MacroExpr | main.rs:86:18:86:25 | ...::format(...) | provenance | MaD:6 | +| main.rs:86:18:86:25 | { ... } | main.rs:86:18:86:25 | ...::must_use(...) | provenance | MaD:7 | | main.rs:87:18:87:32 | ...::format(...) | main.rs:87:18:87:32 | { ... } | provenance | | | main.rs:87:18:87:32 | ...::must_use(...) | main.rs:87:10:87:33 | MacroExpr | provenance | | -| main.rs:87:18:87:32 | MacroExpr | main.rs:87:18:87:32 | ...::format(...) | provenance | MaD:7 | -| main.rs:87:18:87:32 | { ... } | main.rs:87:18:87:32 | ...::must_use(...) | provenance | MaD:8 | +| main.rs:87:18:87:32 | MacroExpr | main.rs:87:18:87:32 | ...::format(...) | provenance | MaD:6 | +| main.rs:87:18:87:32 | { ... } | main.rs:87:18:87:32 | ...::must_use(...) | provenance | MaD:7 | nodes | main.rs:26:9:26:9 | s | semmle.label | s | | main.rs:26:13:26:22 | source(...) | semmle.label | source(...) | diff --git a/rust/ql/test/library-tests/frameworks/postgres/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/frameworks/postgres/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index 52ccf4c06dc7..000000000000 --- a/rust/ql/test/library-tests/frameworks/postgres/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,9 +0,0 @@ -multipleCallTargets -| main.rs:22:18:22:31 | query.as_str() | -| main.rs:23:24:23:37 | query.as_str() | -| main.rs:25:18:25:31 | query.as_str() | -| main.rs:28:16:28:29 | query.as_str() | -| main.rs:29:20:29:33 | query.as_str() | -| main.rs:30:20:30:33 | query.as_str() | -| main.rs:32:20:32:33 | query.as_str() | -| main.rs:33:22:33:35 | query.as_str() | diff --git a/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected index 68c19fa671d9..0b5d376b4d2e 100644 --- a/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected @@ -1,2 +1,6 @@ multipleCallTargets | main.rs:125:9:125:11 | f(...) | +| main.rs:365:9:367:16 | ...::f(...) | +| main.rs:368:9:370:16 | ...::f(...) | +| main.rs:447:9:451:16 | ...::f(...) | +| main.rs:452:9:456:16 | ...::f(...) | diff --git a/rust/ql/test/library-tests/sensitivedata/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/sensitivedata/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index 231252364953..000000000000 --- a/rust/ql/test/library-tests/sensitivedata/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,29 +0,0 @@ -multipleCallTargets -| test.rs:56:7:56:26 | ... .as_str() | -| test.rs:57:7:57:21 | ... .as_str() | -| test.rs:73:7:73:26 | ... .as_str() | -| test.rs:74:7:74:36 | ... .as_str() | -| test.rs:75:7:75:34 | ... .as_str() | -| test.rs:76:7:76:27 | ... .as_str() | -| test.rs:262:7:262:36 | ... .as_str() | -| test.rs:264:7:264:33 | ... .as_str() | -| test.rs:265:7:265:36 | ... .as_str() | -| test.rs:266:7:266:26 | ... .as_str() | -| test.rs:270:7:270:28 | ... .as_str() | -| test.rs:271:7:271:37 | ... .as_str() | -| test.rs:272:7:272:36 | ... .as_str() | -| test.rs:275:7:275:32 | ... .as_str() | -| test.rs:285:7:285:34 | ... .as_str() | -| test.rs:288:7:288:36 | ... .as_str() | -| test.rs:292:7:292:39 | ... .as_str() | -| test.rs:299:7:299:53 | ... .as_str() | -| test.rs:300:7:300:45 | ... .as_str() | -| test.rs:302:7:302:39 | ... .as_str() | -| test.rs:303:7:303:34 | ... .as_str() | -| test.rs:304:7:304:42 | ... .as_str() | -| test.rs:306:7:306:48 | ... .as_str() | -| test.rs:307:7:307:35 | ... .as_str() | -| test.rs:308:7:308:35 | ... .as_str() | -| test.rs:317:8:317:19 | num.as_str() | -| test.rs:328:8:328:19 | num.as_str() | -| test.rs:347:7:347:39 | ... .as_str() | diff --git a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected index 6e687e06e423..2a12ae35276c 100644 --- a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected @@ -1,8 +1,10 @@ multipleCallTargets | dereference.rs:69:15:69:24 | e1.deref() | +| dereference.rs:182:17:182:26 | ... .foo() | +| dereference.rs:183:17:183:23 | S.foo() | +| dereference.rs:184:17:184:30 | ... .foo() | | dereference.rs:186:17:186:25 | S.bar(...) | | dereference.rs:187:17:187:29 | S.bar(...) | -| invalid/main.rs:91:17:91:30 | S1.duplicate() | | main.rs:2437:13:2437:31 | ...::from(...) | | main.rs:2438:13:2438:31 | ...::from(...) | | main.rs:2439:13:2439:31 | ...::from(...) | diff --git a/rust/ql/test/library-tests/type-inference/blanket_impl.rs b/rust/ql/test/library-tests/type-inference/blanket_impl.rs index f4e91152d5e2..12449efe7d28 100644 --- a/rust/ql/test/library-tests/type-inference/blanket_impl.rs +++ b/rust/ql/test/library-tests/type-inference/blanket_impl.rs @@ -51,7 +51,7 @@ mod basic_blanket_impl { println!("{x3:?}"); let x4 = (&S1).duplicate(); // $ target=Clone1duplicate println!("{x4:?}"); - let x5 = S1::duplicate(&S1); // $ MISSING: target=Clone1duplicate + let x5 = S1::duplicate(&S1); // $ target=Clone1duplicate println!("{x5:?}"); let x6 = S2.duplicate(); // $ MISSING: target=Clone1duplicate println!("{x6:?}"); @@ -91,7 +91,7 @@ mod assoc_blanket_impl { println!("{x1:?}"); let x2 = Trait1::assoc_func1(1, S1); // $ target=S1::assoc_func1 println!("{x2:?}"); - let x3 = S1::assoc_func2(1, S1); // $ MISSING: target=Blanket_assoc_func2 + let x3 = S1::assoc_func2(1, S1); // $ target=Blanket_assoc_func2 println!("{x3:?}"); let x4 = Trait2::assoc_func2(1, S1); // $ target=Blanket_assoc_func2 println!("{x4:?}"); @@ -212,11 +212,11 @@ pub mod sql_exec { let c = MySqlConnection {}; // $ certainType=c:MySqlConnection c.execute1(); // $ target=execute1 - MySqlConnection::execute1(&c); // $ MISSING: target=execute1 + MySqlConnection::execute1(&c); // $ target=execute1 c.execute2("SELECT * FROM users"); // $ target=execute2 c.execute2::<&str>("SELECT * FROM users"); // $ target=execute2 - MySqlConnection::execute2(&c, "SELECT * FROM users"); // $ MISSING: target=execute2 - MySqlConnection::execute2::<&str>(&c, "SELECT * FROM users"); // $ MISSING: target=execute2 + MySqlConnection::execute2(&c, "SELECT * FROM users"); // $ target=execute2 + MySqlConnection::execute2::<&str>(&c, "SELECT * FROM users"); // $ target=execute2 } } diff --git a/rust/ql/test/library-tests/type-inference/dereference.rs b/rust/ql/test/library-tests/type-inference/dereference.rs index 6e57fc20c19a..bdc42180a63d 100644 --- a/rust/ql/test/library-tests/type-inference/dereference.rs +++ b/rust/ql/test/library-tests/type-inference/dereference.rs @@ -66,7 +66,7 @@ fn explicit_polymorphic_dereference() { fn explicit_ref_dereference() { // Explicit dereference with type parameter let e1 = &'a'; - let _f1 = e1.deref(); // $ target=deref MISSING: type=_f1:&T.char + let _f1 = e1.deref(); // $ target=deref type=_f1:&T.char // Explicit dereference with type parameter let e2 = &'a'; @@ -179,9 +179,9 @@ mod ref_vs_mut_ref { } pub fn test() { - let x = (&S).foo(); // $ MISSING: target=MyTrait1::foo1 type=x:S - let y = S.foo(); // $ MISSING: target=MyTrait1::foo1 type=y:S - let z = (&mut S).foo(); // $ MISSING: target=MyTrait1::foo2 type=z:i64 + let x = (&S).foo(); // $ target=MyTrait1::foo1 type=x:S $ SPURIOUS: target=MyTrait1::foo2 + let y = S.foo(); // $ target=MyTrait1::foo1 type=y:S $ SPURIOUS: target=MyTrait1::foo2 + let z = (&mut S).foo(); // $ target=MyTrait1::foo2 type=z:i64 $ SPURIOUS: target=MyTrait1::foo1 let x = S.bar(&S); // $ target=MyTrait2::bar1 type=x:S $ SPURIOUS: target=MyTrait2::bar2 let y = S.bar(&mut S); // $ target=MyTrait2::bar2 type=y:i64 $ SPURIOUS: target=MyTrait2::bar1 diff --git a/rust/ql/test/library-tests/type-inference/invalid/main.rs b/rust/ql/test/library-tests/type-inference/invalid/main.rs index 83bd031d1716..6af9b8747a9c 100644 --- a/rust/ql/test/library-tests/type-inference/invalid/main.rs +++ b/rust/ql/test/library-tests/type-inference/invalid/main.rs @@ -88,6 +88,6 @@ mod impl_specialization { pub fn test_basic_blanket() { // this call should target the specialized implementation of Duplicatable for S1, // not the blanket implementation - let x = S1.duplicate(); // $ target=S1::duplicate $ SPURIOUS: target=Clone1duplicate + let x = S1.duplicate(); // $ target=S1::duplicate } } diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index 20b8a2d1b34a..4f567b5abbfd 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -698,9 +698,9 @@ mod function_trait_bounds { T2::assoc(x) // $ target=assoc } fn call_trait_assoc_2 + Copy>(x: T2) -> T1 { - let y = MyTrait::assoc(x); // $ MISSING: target=assoc - y; // $ MISSING: type=y:T1 - MyTrait::assoc(x) // $ MISSING: target=assoc + let y = MyTrait::assoc(x); // $ target=assoc + y; // $ type=y:T1 + MyTrait::assoc(x) // $ target=assoc } // Type parameter with bound occurs nested within another type. @@ -1449,12 +1449,12 @@ mod method_call_type_conversion { let my_thing = &MyInt { a: 37 }; // implicit borrow of a `&` - let a = my_thing.method_on_borrow(); // $ MISSING: target=MyInt::method_on_borrow + let a = my_thing.method_on_borrow(); // $ target=MyInt::method_on_borrow println!("{:?}", a); // no implicit borrow let my_thing = &MyInt { a: 38 }; - let a = my_thing.method_not_on_borrow(); // $ MISSING: target=MyInt::method_not_on_borrow + let a = my_thing.method_not_on_borrow(); // $ target=MyInt::method_not_on_borrow println!("{:?}", a); } } 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 11e3f76c4a86..09263cd25e98 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -62,6 +62,8 @@ inferType | blanket_impl.rs:53:18:53:25 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | | blanket_impl.rs:53:18:53:25 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | blanket_impl.rs:53:20:53:21 | x4 | | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:54:13:54:14 | x5 | | blanket_impl.rs:6:5:7:14 | S1 | +| blanket_impl.rs:54:18:54:35 | ...::duplicate(...) | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:54:32:54:34 | &S1 | | file://:0:0:0:0 | & | | blanket_impl.rs:54:32:54:34 | &S1 | &T | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:54:33:54:34 | S1 | | blanket_impl.rs:6:5:7:14 | S1 | @@ -69,6 +71,7 @@ inferType | blanket_impl.rs:55:18:55:25 | "{x5:?}\\n" | &T | {EXTERNAL LOCATION} | str | | blanket_impl.rs:55:18:55:25 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | | blanket_impl.rs:55:18:55:25 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| blanket_impl.rs:55:20:55:21 | x5 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:56:18:56:19 | S2 | | blanket_impl.rs:9:5:10:14 | S2 | | blanket_impl.rs:57:18:57:25 | "{x6:?}\\n" | | file://:0:0:0:0 | & | | blanket_impl.rs:57:18:57:25 | "{x6:?}\\n" | &T | {EXTERNAL LOCATION} | str | @@ -117,26 +120,26 @@ inferType | blanket_impl.rs:93:18:93:25 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | | blanket_impl.rs:93:18:93:25 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | blanket_impl.rs:93:20:93:21 | x2 | | blanket_impl.rs:64:5:65:14 | S1 | +| blanket_impl.rs:94:13:94:14 | x3 | | blanket_impl.rs:64:5:65:14 | S1 | +| blanket_impl.rs:94:18:94:39 | ...::assoc_func2(...) | | blanket_impl.rs:64:5:65:14 | S1 | | blanket_impl.rs:94:34:94:34 | 1 | | {EXTERNAL LOCATION} | i32 | +| blanket_impl.rs:94:34:94:34 | 1 | | {EXTERNAL LOCATION} | i64 | | blanket_impl.rs:94:37:94:38 | S1 | | blanket_impl.rs:64:5:65:14 | S1 | | blanket_impl.rs:95:18:95:25 | "{x3:?}\\n" | | file://:0:0:0:0 | & | | blanket_impl.rs:95:18:95:25 | "{x3:?}\\n" | &T | {EXTERNAL LOCATION} | str | | blanket_impl.rs:95:18:95:25 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | | blanket_impl.rs:95:18:95:25 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| blanket_impl.rs:95:20:95:21 | x3 | | blanket_impl.rs:64:5:65:14 | S1 | | blanket_impl.rs:96:13:96:14 | x4 | | blanket_impl.rs:64:5:65:14 | S1 | -| blanket_impl.rs:96:13:96:14 | x4 | | blanket_impl.rs:71:5:73:5 | trait Trait2 | | blanket_impl.rs:96:18:96:43 | ...::assoc_func2(...) | | blanket_impl.rs:64:5:65:14 | S1 | -| blanket_impl.rs:96:18:96:43 | ...::assoc_func2(...) | | blanket_impl.rs:71:5:73:5 | trait Trait2 | | blanket_impl.rs:96:38:96:38 | 1 | | {EXTERNAL LOCATION} | i32 | | blanket_impl.rs:96:38:96:38 | 1 | | {EXTERNAL LOCATION} | i64 | | blanket_impl.rs:96:41:96:42 | S1 | | blanket_impl.rs:64:5:65:14 | S1 | -| blanket_impl.rs:96:41:96:42 | S1 | | blanket_impl.rs:71:5:73:5 | trait Trait2 | | blanket_impl.rs:97:18:97:25 | "{x4:?}\\n" | | file://:0:0:0:0 | & | | blanket_impl.rs:97:18:97:25 | "{x4:?}\\n" | &T | {EXTERNAL LOCATION} | str | | blanket_impl.rs:97:18:97:25 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | | blanket_impl.rs:97:18:97:25 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | blanket_impl.rs:97:20:97:21 | x4 | | blanket_impl.rs:64:5:65:14 | S1 | -| blanket_impl.rs:97:20:97:21 | x4 | | blanket_impl.rs:71:5:73:5 | trait Trait2 | | blanket_impl.rs:108:22:108:26 | SelfParam | | file://:0:0:0:0 | & | | blanket_impl.rs:108:22:108:26 | SelfParam | &T | blanket_impl.rs:107:5:109:5 | Self [trait Flag] | | blanket_impl.rs:112:26:112:30 | SelfParam | | file://:0:0:0:0 | & | @@ -539,16 +542,15 @@ inferType | dereference.rs:63:17:63:18 | c3 | T | {EXTERNAL LOCATION} | i64 | | dereference.rs:68:9:68:10 | e1 | | file://:0:0:0:0 | & | | dereference.rs:68:9:68:10 | e1 | &T | {EXTERNAL LOCATION} | char | -| dereference.rs:68:9:68:10 | e1 | &T | file://:0:0:0:0 | & | | dereference.rs:68:14:68:17 | &'a' | | file://:0:0:0:0 | & | | dereference.rs:68:14:68:17 | &'a' | &T | {EXTERNAL LOCATION} | char | -| dereference.rs:68:14:68:17 | &'a' | &T | file://:0:0:0:0 | & | | dereference.rs:68:15:68:17 | 'a' | | {EXTERNAL LOCATION} | char | | dereference.rs:69:9:69:11 | _f1 | | file://:0:0:0:0 | & | +| dereference.rs:69:9:69:11 | _f1 | &T | {EXTERNAL LOCATION} | char | | dereference.rs:69:15:69:16 | e1 | | file://:0:0:0:0 | & | | dereference.rs:69:15:69:16 | e1 | &T | {EXTERNAL LOCATION} | char | -| dereference.rs:69:15:69:16 | e1 | &T | file://:0:0:0:0 | & | | dereference.rs:69:15:69:24 | e1.deref() | | file://:0:0:0:0 | & | +| dereference.rs:69:15:69:24 | e1.deref() | &T | {EXTERNAL LOCATION} | char | | dereference.rs:72:9:72:10 | e2 | | file://:0:0:0:0 | & | | dereference.rs:72:9:72:10 | e2 | &T | {EXTERNAL LOCATION} | char | | dereference.rs:72:14:72:17 | &'a' | | file://:0:0:0:0 | & | @@ -728,14 +730,26 @@ inferType | dereference.rs:176:42:178:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | dereference.rs:177:13:177:14 | 42 | | {EXTERNAL LOCATION} | i32 | | dereference.rs:177:13:177:14 | 42 | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:182:13:182:13 | x | | dereference.rs:147:5:147:13 | S | +| dereference.rs:182:13:182:13 | x | | {EXTERNAL LOCATION} | i64 | | dereference.rs:182:17:182:20 | (...) | | file://:0:0:0:0 | & | | dereference.rs:182:17:182:20 | (...) | &T | dereference.rs:147:5:147:13 | S | +| dereference.rs:182:17:182:26 | ... .foo() | | dereference.rs:147:5:147:13 | S | +| dereference.rs:182:17:182:26 | ... .foo() | | {EXTERNAL LOCATION} | i64 | | dereference.rs:182:18:182:19 | &S | | file://:0:0:0:0 | & | | dereference.rs:182:18:182:19 | &S | &T | dereference.rs:147:5:147:13 | S | | dereference.rs:182:19:182:19 | S | | dereference.rs:147:5:147:13 | S | +| dereference.rs:183:13:183:13 | y | | dereference.rs:147:5:147:13 | S | +| dereference.rs:183:13:183:13 | y | | {EXTERNAL LOCATION} | i64 | | dereference.rs:183:17:183:17 | S | | dereference.rs:147:5:147:13 | S | +| dereference.rs:183:17:183:23 | S.foo() | | dereference.rs:147:5:147:13 | S | +| dereference.rs:183:17:183:23 | S.foo() | | {EXTERNAL LOCATION} | i64 | +| dereference.rs:184:13:184:13 | z | | dereference.rs:147:5:147:13 | S | +| dereference.rs:184:13:184:13 | z | | {EXTERNAL LOCATION} | i64 | | dereference.rs:184:17:184:24 | (...) | | file://:0:0:0:0 | & | | dereference.rs:184:17:184:24 | (...) | &T | dereference.rs:147:5:147:13 | S | +| dereference.rs:184:17:184:30 | ... .foo() | | dereference.rs:147:5:147:13 | S | +| dereference.rs:184:17:184:30 | ... .foo() | | {EXTERNAL LOCATION} | i64 | | dereference.rs:184:18:184:23 | &mut S | | file://:0:0:0:0 | & | | dereference.rs:184:18:184:23 | &mut S | &T | dereference.rs:147:5:147:13 | S | | dereference.rs:184:23:184:23 | S | | dereference.rs:147:5:147:13 | S | @@ -1978,7 +1992,10 @@ inferType | main.rs:698:19:698:19 | x | | main.rs:695:31:695:52 | T2 | | main.rs:700:55:700:55 | x | | main.rs:700:31:700:52 | T2 | | main.rs:700:68:704:5 | { ... } | | main.rs:700:27:700:28 | T1 | +| main.rs:701:13:701:13 | y | | main.rs:700:27:700:28 | T1 | +| main.rs:701:17:701:33 | ...::assoc(...) | | main.rs:700:27:700:28 | T1 | | main.rs:701:32:701:32 | x | | main.rs:700:31:700:52 | T2 | +| main.rs:702:9:702:9 | y | | main.rs:700:27:700:28 | T1 | | main.rs:703:9:703:25 | ...::assoc(...) | | main.rs:700:27:700:28 | T1 | | main.rs:703:24:703:24 | x | | main.rs:700:31:700:52 | T2 | | main.rs:708:49:708:49 | x | | main.rs:656:5:659:5 | MyThing | @@ -2001,7 +2018,6 @@ inferType | main.rs:715:9:715:24 | ...::m1(...) | | main.rs:714:30:714:31 | T1 | | main.rs:715:21:715:21 | x | | main.rs:656:5:659:5 | MyThing | | main.rs:715:21:715:21 | x | T | main.rs:714:34:714:48 | T2 | -| main.rs:715:21:715:23 | x.a | | main.rs:666:5:677:5 | trait MyTrait | | main.rs:715:21:715:23 | x.a | | main.rs:714:34:714:48 | T2 | | main.rs:719:15:719:18 | SelfParam | | main.rs:656:5:659:5 | MyThing | | main.rs:719:15:719:18 | SelfParam | T | main.rs:718:10:718:10 | T | @@ -3081,10 +3097,8 @@ inferType | main.rs:1400:13:1400:24 | ... .a | | {EXTERNAL LOCATION} | i64 | | main.rs:1400:14:1400:21 | * ... | | main.rs:1372:5:1375:5 | MyInt | | main.rs:1400:15:1400:21 | (...) | | file://:0:0:0:0 | & | -| main.rs:1400:15:1400:21 | (...) | | main.rs:1372:5:1375:5 | MyInt | | main.rs:1400:15:1400:21 | (...) | &T | main.rs:1372:5:1375:5 | MyInt | | main.rs:1400:16:1400:20 | * ... | | file://:0:0:0:0 | & | -| main.rs:1400:16:1400:20 | * ... | | main.rs:1372:5:1375:5 | MyInt | | main.rs:1400:16:1400:20 | * ... | &T | main.rs:1372:5:1375:5 | MyInt | | main.rs:1400:17:1400:20 | self | | file://:0:0:0:0 | & | | main.rs:1400:17:1400:20 | self | &T | file://:0:0:0:0 | & | @@ -3269,12 +3283,15 @@ inferType | main.rs:1450:25:1450:39 | MyInt {...} | | main.rs:1372:5:1375:5 | MyInt | | main.rs:1450:36:1450:37 | 37 | | {EXTERNAL LOCATION} | i32 | | main.rs:1450:36:1450:37 | 37 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1452:13:1452:13 | a | | {EXTERNAL LOCATION} | i64 | | main.rs:1452:17:1452:24 | my_thing | | file://:0:0:0:0 | & | | main.rs:1452:17:1452:24 | my_thing | &T | main.rs:1372:5:1375:5 | MyInt | +| main.rs:1452:17:1452:43 | my_thing.method_on_borrow() | | {EXTERNAL LOCATION} | i64 | | main.rs:1453:18:1453:23 | "{:?}\\n" | | file://:0:0:0:0 | & | | main.rs:1453:18:1453:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1453:18:1453:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1453:18:1453:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1453:26:1453:26 | a | | {EXTERNAL LOCATION} | i64 | | main.rs:1456:13:1456:20 | my_thing | | file://:0:0:0:0 | & | | main.rs:1456:13:1456:20 | my_thing | &T | main.rs:1372:5:1375:5 | MyInt | | main.rs:1456:24:1456:39 | &... | | file://:0:0:0:0 | & | @@ -3282,12 +3299,15 @@ inferType | main.rs:1456:25:1456:39 | MyInt {...} | | main.rs:1372:5:1375:5 | MyInt | | main.rs:1456:36:1456:37 | 38 | | {EXTERNAL LOCATION} | i32 | | main.rs:1456:36:1456:37 | 38 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1457:13:1457:13 | a | | {EXTERNAL LOCATION} | i64 | | main.rs:1457:17:1457:24 | my_thing | | file://:0:0:0:0 | & | | main.rs:1457:17:1457:24 | my_thing | &T | main.rs:1372:5:1375:5 | MyInt | +| main.rs:1457:17:1457:47 | my_thing.method_not_on_borrow() | | {EXTERNAL LOCATION} | i64 | | main.rs:1458:18:1458:23 | "{:?}\\n" | | file://:0:0:0:0 | & | | main.rs:1458:18:1458:23 | "{:?}\\n" | &T | {EXTERNAL LOCATION} | str | | main.rs:1458:18:1458:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1458:18:1458:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1458:26:1458:26 | a | | {EXTERNAL LOCATION} | i64 | | main.rs:1465:16:1465:20 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1465:16:1465:20 | SelfParam | &T | main.rs:1463:5:1471:5 | Self [trait MyTrait] | | main.rs:1468:16:1468:20 | SelfParam | | file://:0:0:0:0 | & | @@ -3416,11 +3436,9 @@ inferType | main.rs:1541:16:1541:16 | x | | main.rs:1517:5:1517:13 | S | | main.rs:1543:13:1543:13 | n | | {EXTERNAL LOCATION} | bool | | main.rs:1543:17:1543:24 | * ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1543:18:1543:24 | * ... | | {EXTERNAL LOCATION} | bool | | main.rs:1543:18:1543:24 | * ... | | file://:0:0:0:0 | & | | main.rs:1543:18:1543:24 | * ... | &T | {EXTERNAL LOCATION} | bool | | main.rs:1543:19:1543:24 | &... | | file://:0:0:0:0 | & | -| main.rs:1543:19:1543:24 | &... | &T | {EXTERNAL LOCATION} | bool | | main.rs:1543:19:1543:24 | &... | &T | file://:0:0:0:0 | & | | main.rs:1543:19:1543:24 | &... | &T.&T | {EXTERNAL LOCATION} | bool | | main.rs:1543:20:1543:24 | &true | | file://:0:0:0:0 | & | @@ -3805,22 +3823,14 @@ inferType | main.rs:1771:13:1774:13 | Vec2 {...} | | main.rs:1651:5:1656:5 | Vec2 | | main.rs:1772:20:1772:23 | self | | main.rs:1651:5:1656:5 | Vec2 | | main.rs:1772:20:1772:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1772:20:1772:33 | ... \| ... | | {EXTERNAL LOCATION} | NonZero | | main.rs:1772:20:1772:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1772:20:1772:33 | ... \| ... | T | {EXTERNAL LOCATION} | i64 | | main.rs:1772:29:1772:31 | rhs | | main.rs:1651:5:1656:5 | Vec2 | -| main.rs:1772:29:1772:33 | rhs.x | | {EXTERNAL LOCATION} | NonZero | | main.rs:1772:29:1772:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1772:29:1772:33 | rhs.x | T | {EXTERNAL LOCATION} | i64 | | main.rs:1773:20:1773:23 | self | | main.rs:1651:5:1656:5 | Vec2 | | main.rs:1773:20:1773:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1773:20:1773:33 | ... \| ... | | {EXTERNAL LOCATION} | NonZero | | main.rs:1773:20:1773:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1773:20:1773:33 | ... \| ... | T | {EXTERNAL LOCATION} | i64 | | main.rs:1773:29:1773:31 | rhs | | main.rs:1651:5:1656:5 | Vec2 | -| main.rs:1773:29:1773:33 | rhs.y | | {EXTERNAL LOCATION} | NonZero | | main.rs:1773:29:1773:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1773:29:1773:33 | rhs.y | T | {EXTERNAL LOCATION} | i64 | | main.rs:1779:25:1779:33 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1779:25:1779:33 | SelfParam | &T | main.rs:1651:5:1656:5 | Vec2 | | main.rs:1779:36:1779:38 | rhs | | main.rs:1651:5:1656:5 | Vec2 | @@ -4166,13 +4176,9 @@ inferType | main.rs:1928:26:1928:30 | 33i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:1928:26:1928:38 | ... & ... | | {EXTERNAL LOCATION} | i64 | | main.rs:1928:34:1928:38 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1929:13:1929:21 | i64_bitor | | {EXTERNAL LOCATION} | NonZero | | main.rs:1929:13:1929:21 | i64_bitor | | {EXTERNAL LOCATION} | i64 | -| main.rs:1929:13:1929:21 | i64_bitor | T | {EXTERNAL LOCATION} | i64 | | main.rs:1929:25:1929:29 | 35i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1929:25:1929:37 | ... \| ... | | {EXTERNAL LOCATION} | NonZero | | main.rs:1929:25:1929:37 | ... \| ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1929:25:1929:37 | ... \| ... | T | {EXTERNAL LOCATION} | i64 | | main.rs:1929:33:1929:37 | 36i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:1930:13:1930:22 | i64_bitxor | | {EXTERNAL LOCATION} | i64 | | main.rs:1930:26:1930:30 | 37i64 | | {EXTERNAL LOCATION} | i64 | @@ -6082,24 +6088,19 @@ inferType | pattern_matching.rs:270:11:270:26 | &mut ref_mut_val | &T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:270:16:270:26 | ref_mut_val | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:271:17:271:17 | x | | file://:0:0:0:0 | & | -| pattern_matching.rs:271:17:271:17 | x | &T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:271:17:271:17 | x | &T | file://:0:0:0:0 | & | | pattern_matching.rs:271:17:271:17 | x | &T.&T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:272:17:272:29 | ref_mut_bound | | file://:0:0:0:0 | & | -| pattern_matching.rs:272:17:272:29 | ref_mut_bound | &T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:272:17:272:29 | ref_mut_bound | &T | file://:0:0:0:0 | & | | pattern_matching.rs:272:17:272:29 | ref_mut_bound | &T.&T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:272:33:272:33 | x | | file://:0:0:0:0 | & | -| pattern_matching.rs:272:33:272:33 | x | &T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:272:33:272:33 | x | &T | file://:0:0:0:0 | & | | pattern_matching.rs:272:33:272:33 | x | &T.&T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:273:13:273:27 | * ... | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:273:13:273:32 | ... += ... | | file://:0:0:0:0 | () | -| pattern_matching.rs:273:14:273:27 | * ... | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:273:14:273:27 | * ... | | file://:0:0:0:0 | & | | pattern_matching.rs:273:14:273:27 | * ... | &T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:273:15:273:27 | ref_mut_bound | | file://:0:0:0:0 | & | -| pattern_matching.rs:273:15:273:27 | ref_mut_bound | &T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:273:15:273:27 | ref_mut_bound | &T | file://:0:0:0:0 | & | | pattern_matching.rs:273:15:273:27 | ref_mut_bound | &T.&T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:273:32:273:32 | 1 | | {EXTERNAL LOCATION} | i32 | diff --git a/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/PathResolutionConsistency.expected index fe1822bb82c7..457fa19445b0 100644 --- a/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/PathResolutionConsistency.expected @@ -6,62 +6,16 @@ multipleCallTargets | sqlx.rs:51:24:51:77 | ...::from(...) | | sqlx.rs:55:26:55:79 | ...::from(...) | | sqlx.rs:61:28:61:81 | ...::from(...) | -| sqlx.rs:64:57:64:77 | safe_query_1.as_str() | -| sqlx.rs:65:26:65:46 | safe_query_2.as_str() | -| sqlx.rs:66:26:66:46 | safe_query_3.as_str() | -| sqlx.rs:67:26:67:48 | unsafe_query_1.as_str() | | sqlx.rs:69:30:69:52 | unsafe_query_2.as_str() | -| sqlx.rs:70:30:70:52 | unsafe_query_3.as_str() | -| sqlx.rs:71:30:71:52 | unsafe_query_4.as_str() | -| sqlx.rs:75:25:75:45 | safe_query_1.as_str() | -| sqlx.rs:76:25:76:45 | safe_query_2.as_str() | -| sqlx.rs:77:25:77:45 | safe_query_3.as_str() | -| sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() | | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() | -| sqlx.rs:81:29:81:51 | unsafe_query_3.as_str() | -| sqlx.rs:82:29:82:51 | unsafe_query_4.as_str() | -| sqlx.rs:84:25:84:49 | prepared_query_1.as_str() | -| sqlx.rs:85:25:85:49 | prepared_query_1.as_str() | -| sqlx.rs:87:29:87:53 | prepared_query_1.as_str() | -| sqlx.rs:88:29:88:53 | prepared_query_1.as_str() | | sqlx.rs:99:24:99:44 | ...::from(...) | | sqlx.rs:100:97:100:117 | ...::from(...) | | sqlx.rs:101:24:101:77 | ...::from(...) | | sqlx.rs:102:26:102:79 | ...::from(...) | | sqlx.rs:103:28:103:81 | ...::from(...) | -| sqlx.rs:106:26:106:46 | safe_query_1.as_str() | -| sqlx.rs:108:30:108:52 | unsafe_query_1.as_str() | -| sqlx.rs:111:27:111:47 | safe_query_1.as_str() | -| sqlx.rs:113:31:113:53 | unsafe_query_1.as_str() | -| sqlx.rs:117:25:117:45 | safe_query_1.as_str() | -| sqlx.rs:118:25:118:49 | prepared_query_1.as_str() | -| sqlx.rs:120:29:120:51 | unsafe_query_1.as_str() | -| sqlx.rs:121:29:121:53 | prepared_query_1.as_str() | -| sqlx.rs:124:25:124:45 | safe_query_1.as_str() | -| sqlx.rs:125:25:125:49 | prepared_query_1.as_str() | -| sqlx.rs:127:29:127:51 | unsafe_query_1.as_str() | -| sqlx.rs:128:29:128:53 | prepared_query_1.as_str() | -| sqlx.rs:131:54:131:74 | safe_query_1.as_str() | -| sqlx.rs:133:54:133:78 | prepared_query_1.as_str() | -| sqlx.rs:136:55:136:77 | unsafe_query_1.as_str() | -| sqlx.rs:137:55:137:79 | prepared_query_1.as_str() | -| sqlx.rs:140:54:140:74 | safe_query_1.as_str() | -| sqlx.rs:142:54:142:78 | prepared_query_1.as_str() | -| sqlx.rs:145:55:145:77 | unsafe_query_1.as_str() | -| sqlx.rs:146:55:146:79 | prepared_query_1.as_str() | -| sqlx.rs:149:25:149:45 | safe_query_1.as_str() | -| sqlx.rs:150:25:150:49 | prepared_query_1.as_str() | -| sqlx.rs:153:29:153:51 | unsafe_query_1.as_str() | -| sqlx.rs:154:29:154:53 | prepared_query_1.as_str() | | sqlx.rs:172:24:172:44 | ...::from(...) | | sqlx.rs:173:97:173:117 | ...::from(...) | | sqlx.rs:174:24:174:77 | ...::from(...) | | sqlx.rs:175:26:175:79 | ...::from(...) | | sqlx.rs:176:28:176:82 | ...::from(...) | -| sqlx.rs:179:26:179:46 | safe_query_1.as_str() | -| sqlx.rs:181:30:181:52 | unsafe_query_1.as_str() | -| sqlx.rs:185:25:185:45 | safe_query_1.as_str() | -| sqlx.rs:186:25:186:49 | prepared_query_1.as_str() | -| sqlx.rs:188:29:188:51 | unsafe_query_1.as_str() | -| sqlx.rs:189:29:189:53 | prepared_query_1.as_str() | | sqlx.rs:202:57:202:85 | ...::from(...) | diff --git a/rust/ql/test/query-tests/security/CWE-089/SqlInjection.expected b/rust/ql/test/query-tests/security/CWE-089/SqlInjection.expected index 45ce48f2ef3e..69bc41a0e8da 100644 --- a/rust/ql/test/query-tests/security/CWE-089/SqlInjection.expected +++ b/rust/ql/test/query-tests/security/CWE-089/SqlInjection.expected @@ -31,16 +31,12 @@ edges | sqlx.rs:49:25:49:52 | remote_string.parse() [Ok] | sqlx.rs:49:25:49:65 | ... .unwrap_or(...) | provenance | MaD:12 | | sqlx.rs:49:25:49:65 | ... .unwrap_or(...) | sqlx.rs:49:9:49:21 | remote_number | provenance | | | sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:77:25:77:36 | safe_query_3 | provenance | | -| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:77:25:77:45 | safe_query_3.as_str() | provenance | MaD:13 | | sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:77:25:77:45 | safe_query_3.as_str() | provenance | MaD:9 | -| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:77:25:77:45 | safe_query_3.as_str() | provenance | MaD:13 | | sqlx.rs:52:32:52:87 | ...::format(...) | sqlx.rs:52:32:52:87 | { ... } | provenance | | | sqlx.rs:52:32:52:87 | ...::must_use(...) | sqlx.rs:52:9:52:20 | safe_query_3 | provenance | | | sqlx.rs:52:32:52:87 | MacroExpr | sqlx.rs:52:32:52:87 | ...::format(...) | provenance | MaD:16 | | sqlx.rs:52:32:52:87 | { ... } | sqlx.rs:52:32:52:87 | ...::must_use(...) | provenance | MaD:17 | -| sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() [&ref] | provenance | MaD:13 | | sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() [&ref] | provenance | MaD:9 | -| sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() [&ref] | provenance | MaD:13 | | sqlx.rs:53:26:53:36 | &arg_string [&ref] | sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | provenance | | | sqlx.rs:53:27:53:36 | arg_string | sqlx.rs:53:26:53:36 | &arg_string [&ref] | provenance | | | sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() [&ref] | provenance | MaD:13 | @@ -49,37 +45,27 @@ edges | sqlx.rs:54:26:54:39 | &remote_string [&ref] | sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | provenance | | | sqlx.rs:54:27:54:39 | remote_string | sqlx.rs:54:26:54:39 | &remote_string [&ref] | provenance | | | sqlx.rs:55:9:55:22 | unsafe_query_3 | sqlx.rs:81:29:81:42 | unsafe_query_3 | provenance | | -| sqlx.rs:55:9:55:22 | unsafe_query_3 | sqlx.rs:81:29:81:51 | unsafe_query_3.as_str() | provenance | MaD:13 | | sqlx.rs:55:9:55:22 | unsafe_query_3 | sqlx.rs:81:29:81:51 | unsafe_query_3.as_str() | provenance | MaD:9 | -| sqlx.rs:55:9:55:22 | unsafe_query_3 | sqlx.rs:81:29:81:51 | unsafe_query_3.as_str() | provenance | MaD:13 | | sqlx.rs:55:26:55:96 | ... + ... | sqlx.rs:55:9:55:22 | unsafe_query_3 | provenance | | | sqlx.rs:55:26:55:96 | ... + ... | sqlx.rs:55:26:55:102 | ... + ... | provenance | MaD:8 | | sqlx.rs:55:26:55:102 | ... + ... | sqlx.rs:55:9:55:22 | unsafe_query_3 | provenance | | | sqlx.rs:55:83:55:96 | &remote_string [&ref] | sqlx.rs:55:26:55:96 | ... + ... | provenance | MaD:7 | | sqlx.rs:55:84:55:96 | remote_string | sqlx.rs:55:83:55:96 | &remote_string [&ref] | provenance | | | sqlx.rs:56:9:56:22 | unsafe_query_4 | sqlx.rs:82:29:82:42 | unsafe_query_4 | provenance | | -| sqlx.rs:56:9:56:22 | unsafe_query_4 | sqlx.rs:82:29:82:51 | unsafe_query_4.as_str() | provenance | MaD:13 | | sqlx.rs:56:9:56:22 | unsafe_query_4 | sqlx.rs:82:29:82:51 | unsafe_query_4.as_str() | provenance | MaD:9 | -| sqlx.rs:56:9:56:22 | unsafe_query_4 | sqlx.rs:82:29:82:51 | unsafe_query_4.as_str() | provenance | MaD:13 | | sqlx.rs:59:17:59:72 | ...::format(...) | sqlx.rs:59:17:59:72 | { ... } | provenance | | | sqlx.rs:59:17:59:72 | ...::must_use(...) | sqlx.rs:56:9:56:22 | unsafe_query_4 | provenance | | | sqlx.rs:59:17:59:72 | MacroExpr | sqlx.rs:59:17:59:72 | ...::format(...) | provenance | MaD:16 | | sqlx.rs:59:17:59:72 | { ... } | sqlx.rs:59:17:59:72 | ...::must_use(...) | provenance | MaD:17 | -| sqlx.rs:77:25:77:36 | safe_query_3 | sqlx.rs:77:25:77:45 | safe_query_3.as_str() [&ref] | provenance | MaD:13 | | sqlx.rs:77:25:77:36 | safe_query_3 | sqlx.rs:77:25:77:45 | safe_query_3.as_str() [&ref] | provenance | MaD:9 | -| sqlx.rs:77:25:77:36 | safe_query_3 | sqlx.rs:77:25:77:45 | safe_query_3.as_str() [&ref] | provenance | MaD:13 | | sqlx.rs:77:25:77:45 | safe_query_3.as_str() | sqlx.rs:77:13:77:23 | ...::query | provenance | MaD:1 Sink:MaD:1 | | sqlx.rs:77:25:77:45 | safe_query_3.as_str() [&ref] | sqlx.rs:77:13:77:23 | ...::query | provenance | MaD:1 Sink:MaD:1 | | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() [&ref] | sqlx.rs:78:13:78:23 | ...::query | provenance | MaD:1 Sink:MaD:1 | | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() [&ref] | sqlx.rs:80:17:80:27 | ...::query | provenance | MaD:1 Sink:MaD:1 | -| sqlx.rs:81:29:81:42 | unsafe_query_3 | sqlx.rs:81:29:81:51 | unsafe_query_3.as_str() [&ref] | provenance | MaD:13 | | sqlx.rs:81:29:81:42 | unsafe_query_3 | sqlx.rs:81:29:81:51 | unsafe_query_3.as_str() [&ref] | provenance | MaD:9 | -| sqlx.rs:81:29:81:42 | unsafe_query_3 | sqlx.rs:81:29:81:51 | unsafe_query_3.as_str() [&ref] | provenance | MaD:13 | | sqlx.rs:81:29:81:51 | unsafe_query_3.as_str() | sqlx.rs:81:17:81:27 | ...::query | provenance | MaD:1 Sink:MaD:1 | | sqlx.rs:81:29:81:51 | unsafe_query_3.as_str() [&ref] | sqlx.rs:81:17:81:27 | ...::query | provenance | MaD:1 Sink:MaD:1 | -| sqlx.rs:82:29:82:42 | unsafe_query_4 | sqlx.rs:82:29:82:51 | unsafe_query_4.as_str() [&ref] | provenance | MaD:13 | | sqlx.rs:82:29:82:42 | unsafe_query_4 | sqlx.rs:82:29:82:51 | unsafe_query_4.as_str() [&ref] | provenance | MaD:9 | -| sqlx.rs:82:29:82:42 | unsafe_query_4 | sqlx.rs:82:29:82:51 | unsafe_query_4.as_str() [&ref] | provenance | MaD:13 | | sqlx.rs:82:29:82:51 | unsafe_query_4.as_str() | sqlx.rs:82:17:82:27 | ...::query | provenance | MaD:1 Sink:MaD:1 | | sqlx.rs:82:29:82:51 | unsafe_query_4.as_str() [&ref] | sqlx.rs:82:17:82:27 | ...::query | provenance | MaD:1 Sink:MaD:1 | | sqlx.rs:100:9:100:21 | remote_string | sqlx.rs:102:84:102:96 | remote_string | provenance | | @@ -89,62 +75,38 @@ edges | sqlx.rs:100:25:100:85 | ... .text() [Ok] | sqlx.rs:100:25:100:118 | ... .unwrap_or(...) | provenance | MaD:12 | | sqlx.rs:100:25:100:118 | ... .unwrap_or(...) | sqlx.rs:100:9:100:21 | remote_string | provenance | | | sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:113:31:113:44 | unsafe_query_1 | provenance | | -| sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:113:31:113:53 | unsafe_query_1.as_str() | provenance | MaD:13 | | sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:113:31:113:53 | unsafe_query_1.as_str() | provenance | MaD:9 | -| sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:113:31:113:53 | unsafe_query_1.as_str() | provenance | MaD:13 | | sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:120:29:120:42 | unsafe_query_1 | provenance | | -| sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:120:29:120:51 | unsafe_query_1.as_str() | provenance | MaD:13 | | sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:120:29:120:51 | unsafe_query_1.as_str() | provenance | MaD:9 | -| sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:120:29:120:51 | unsafe_query_1.as_str() | provenance | MaD:13 | | sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:127:29:127:42 | unsafe_query_1 | provenance | | -| sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:127:29:127:51 | unsafe_query_1.as_str() | provenance | MaD:13 | | sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:127:29:127:51 | unsafe_query_1.as_str() | provenance | MaD:9 | -| sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:127:29:127:51 | unsafe_query_1.as_str() | provenance | MaD:13 | | sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:136:55:136:68 | unsafe_query_1 | provenance | | -| sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:136:55:136:77 | unsafe_query_1.as_str() | provenance | MaD:13 | | sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:136:55:136:77 | unsafe_query_1.as_str() | provenance | MaD:9 | -| sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:136:55:136:77 | unsafe_query_1.as_str() | provenance | MaD:13 | | sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:145:55:145:68 | unsafe_query_1 | provenance | | -| sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:145:55:145:77 | unsafe_query_1.as_str() | provenance | MaD:13 | | sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:145:55:145:77 | unsafe_query_1.as_str() | provenance | MaD:9 | -| sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:145:55:145:77 | unsafe_query_1.as_str() | provenance | MaD:13 | | sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:153:29:153:42 | unsafe_query_1 | provenance | | -| sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:153:29:153:51 | unsafe_query_1.as_str() | provenance | MaD:13 | | sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:153:29:153:51 | unsafe_query_1.as_str() | provenance | MaD:9 | -| sqlx.rs:102:9:102:22 | unsafe_query_1 | sqlx.rs:153:29:153:51 | unsafe_query_1.as_str() | provenance | MaD:13 | | sqlx.rs:102:26:102:96 | ... + ... | sqlx.rs:102:9:102:22 | unsafe_query_1 | provenance | | | sqlx.rs:102:26:102:96 | ... + ... | sqlx.rs:102:26:102:102 | ... + ... | provenance | MaD:8 | | sqlx.rs:102:26:102:102 | ... + ... | sqlx.rs:102:9:102:22 | unsafe_query_1 | provenance | | | sqlx.rs:102:83:102:96 | &remote_string [&ref] | sqlx.rs:102:26:102:96 | ... + ... | provenance | MaD:7 | | sqlx.rs:102:84:102:96 | remote_string | sqlx.rs:102:83:102:96 | &remote_string [&ref] | provenance | | -| sqlx.rs:113:31:113:44 | unsafe_query_1 | sqlx.rs:113:31:113:53 | unsafe_query_1.as_str() [&ref] | provenance | MaD:13 | | sqlx.rs:113:31:113:44 | unsafe_query_1 | sqlx.rs:113:31:113:53 | unsafe_query_1.as_str() [&ref] | provenance | MaD:9 | -| sqlx.rs:113:31:113:44 | unsafe_query_1 | sqlx.rs:113:31:113:53 | unsafe_query_1.as_str() [&ref] | provenance | MaD:13 | | sqlx.rs:113:31:113:53 | unsafe_query_1.as_str() | sqlx.rs:113:17:113:29 | ...::raw_sql | provenance | MaD:3 Sink:MaD:3 | | sqlx.rs:113:31:113:53 | unsafe_query_1.as_str() [&ref] | sqlx.rs:113:17:113:29 | ...::raw_sql | provenance | MaD:3 Sink:MaD:3 | -| sqlx.rs:120:29:120:42 | unsafe_query_1 | sqlx.rs:120:29:120:51 | unsafe_query_1.as_str() [&ref] | provenance | MaD:13 | | sqlx.rs:120:29:120:42 | unsafe_query_1 | sqlx.rs:120:29:120:51 | unsafe_query_1.as_str() [&ref] | provenance | MaD:9 | -| sqlx.rs:120:29:120:42 | unsafe_query_1 | sqlx.rs:120:29:120:51 | unsafe_query_1.as_str() [&ref] | provenance | MaD:13 | | sqlx.rs:120:29:120:51 | unsafe_query_1.as_str() | sqlx.rs:120:17:120:27 | ...::query | provenance | MaD:1 Sink:MaD:1 | | sqlx.rs:120:29:120:51 | unsafe_query_1.as_str() [&ref] | sqlx.rs:120:17:120:27 | ...::query | provenance | MaD:1 Sink:MaD:1 | -| sqlx.rs:127:29:127:42 | unsafe_query_1 | sqlx.rs:127:29:127:51 | unsafe_query_1.as_str() [&ref] | provenance | MaD:13 | | sqlx.rs:127:29:127:42 | unsafe_query_1 | sqlx.rs:127:29:127:51 | unsafe_query_1.as_str() [&ref] | provenance | MaD:9 | -| sqlx.rs:127:29:127:42 | unsafe_query_1 | sqlx.rs:127:29:127:51 | unsafe_query_1.as_str() [&ref] | provenance | MaD:13 | | sqlx.rs:127:29:127:51 | unsafe_query_1.as_str() | sqlx.rs:127:17:127:27 | ...::query | provenance | MaD:1 Sink:MaD:1 | | sqlx.rs:127:29:127:51 | unsafe_query_1.as_str() [&ref] | sqlx.rs:127:17:127:27 | ...::query | provenance | MaD:1 Sink:MaD:1 | -| sqlx.rs:136:55:136:68 | unsafe_query_1 | sqlx.rs:136:55:136:77 | unsafe_query_1.as_str() [&ref] | provenance | MaD:13 | | sqlx.rs:136:55:136:68 | unsafe_query_1 | sqlx.rs:136:55:136:77 | unsafe_query_1.as_str() [&ref] | provenance | MaD:9 | -| sqlx.rs:136:55:136:68 | unsafe_query_1 | sqlx.rs:136:55:136:77 | unsafe_query_1.as_str() [&ref] | provenance | MaD:13 | | sqlx.rs:136:55:136:77 | unsafe_query_1.as_str() | sqlx.rs:136:40:136:53 | ...::query_as | provenance | MaD:2 Sink:MaD:2 | | sqlx.rs:136:55:136:77 | unsafe_query_1.as_str() [&ref] | sqlx.rs:136:40:136:53 | ...::query_as | provenance | MaD:2 Sink:MaD:2 | -| sqlx.rs:145:55:145:68 | unsafe_query_1 | sqlx.rs:145:55:145:77 | unsafe_query_1.as_str() [&ref] | provenance | MaD:13 | | sqlx.rs:145:55:145:68 | unsafe_query_1 | sqlx.rs:145:55:145:77 | unsafe_query_1.as_str() [&ref] | provenance | MaD:9 | -| sqlx.rs:145:55:145:68 | unsafe_query_1 | sqlx.rs:145:55:145:77 | unsafe_query_1.as_str() [&ref] | provenance | MaD:13 | | sqlx.rs:145:55:145:77 | unsafe_query_1.as_str() | sqlx.rs:145:40:145:53 | ...::query_as | provenance | MaD:2 Sink:MaD:2 | | sqlx.rs:145:55:145:77 | unsafe_query_1.as_str() [&ref] | sqlx.rs:145:40:145:53 | ...::query_as | provenance | MaD:2 Sink:MaD:2 | -| sqlx.rs:153:29:153:42 | unsafe_query_1 | sqlx.rs:153:29:153:51 | unsafe_query_1.as_str() [&ref] | provenance | MaD:13 | | sqlx.rs:153:29:153:42 | unsafe_query_1 | sqlx.rs:153:29:153:51 | unsafe_query_1.as_str() [&ref] | provenance | MaD:9 | -| sqlx.rs:153:29:153:42 | unsafe_query_1 | sqlx.rs:153:29:153:51 | unsafe_query_1.as_str() [&ref] | provenance | MaD:13 | | sqlx.rs:153:29:153:51 | unsafe_query_1.as_str() | sqlx.rs:153:17:153:27 | ...::query | provenance | MaD:1 Sink:MaD:1 | | sqlx.rs:153:29:153:51 | unsafe_query_1.as_str() [&ref] | sqlx.rs:153:17:153:27 | ...::query | provenance | MaD:1 Sink:MaD:1 | | sqlx.rs:173:9:173:21 | remote_string | sqlx.rs:175:84:175:96 | remote_string | provenance | | @@ -154,17 +116,13 @@ edges | sqlx.rs:173:25:173:85 | ... .text() [Ok] | sqlx.rs:173:25:173:118 | ... .unwrap_or(...) | provenance | MaD:12 | | sqlx.rs:173:25:173:118 | ... .unwrap_or(...) | sqlx.rs:173:9:173:21 | remote_string | provenance | | | sqlx.rs:175:9:175:22 | unsafe_query_1 | sqlx.rs:188:29:188:42 | unsafe_query_1 | provenance | | -| sqlx.rs:175:9:175:22 | unsafe_query_1 | sqlx.rs:188:29:188:51 | unsafe_query_1.as_str() | provenance | MaD:13 | | sqlx.rs:175:9:175:22 | unsafe_query_1 | sqlx.rs:188:29:188:51 | unsafe_query_1.as_str() | provenance | MaD:9 | -| sqlx.rs:175:9:175:22 | unsafe_query_1 | sqlx.rs:188:29:188:51 | unsafe_query_1.as_str() | provenance | MaD:13 | | sqlx.rs:175:26:175:96 | ... + ... | sqlx.rs:175:9:175:22 | unsafe_query_1 | provenance | | | sqlx.rs:175:26:175:96 | ... + ... | sqlx.rs:175:26:175:102 | ... + ... | provenance | MaD:8 | | sqlx.rs:175:26:175:102 | ... + ... | sqlx.rs:175:9:175:22 | unsafe_query_1 | provenance | | | sqlx.rs:175:83:175:96 | &remote_string [&ref] | sqlx.rs:175:26:175:96 | ... + ... | provenance | MaD:7 | | sqlx.rs:175:84:175:96 | remote_string | sqlx.rs:175:83:175:96 | &remote_string [&ref] | provenance | | -| sqlx.rs:188:29:188:42 | unsafe_query_1 | sqlx.rs:188:29:188:51 | unsafe_query_1.as_str() [&ref] | provenance | MaD:13 | | sqlx.rs:188:29:188:42 | unsafe_query_1 | sqlx.rs:188:29:188:51 | unsafe_query_1.as_str() [&ref] | provenance | MaD:9 | -| sqlx.rs:188:29:188:42 | unsafe_query_1 | sqlx.rs:188:29:188:51 | unsafe_query_1.as_str() [&ref] | provenance | MaD:13 | | sqlx.rs:188:29:188:51 | unsafe_query_1.as_str() | sqlx.rs:188:17:188:27 | ...::query | provenance | MaD:1 Sink:MaD:1 | | sqlx.rs:188:29:188:51 | unsafe_query_1.as_str() [&ref] | sqlx.rs:188:17:188:27 | ...::query | provenance | MaD:1 Sink:MaD:1 | models diff --git a/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected index f4514168e3fe..c84f3becf1f0 100644 --- a/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected @@ -1,12 +1,4 @@ multipleCallTargets -| test_logging.rs:77:20:77:36 | password.as_str() | -| test_logging.rs:78:22:78:38 | password.as_str() | -| test_logging.rs:88:18:88:34 | password.as_str() | -| test_logging.rs:229:30:229:71 | ... .as_str() | -| test_logging.rs:242:16:242:61 | ... .as_bytes() | -| test_logging.rs:245:20:245:65 | ... .as_bytes() | -| test_logging.rs:248:15:248:60 | ... .as_bytes() | -| test_logging.rs:251:15:251:60 | ... .as_bytes() | | test_storage.rs:13:10:13:33 | ...::from(...) | | test_storage.rs:17:10:17:35 | ...::from(...) | | test_storage.rs:21:10:21:35 | ...::from(...) | @@ -27,42 +19,6 @@ multipleCallTargets | test_storage.rs:80:25:80:70 | ...::from(...) | | test_storage.rs:81:25:81:72 | ...::from(...) | | test_storage.rs:82:26:82:77 | ...::from(...) | -| test_storage.rs:85:27:85:48 | select_query1.as_str() | -| test_storage.rs:86:27:86:48 | select_query2.as_str() | -| test_storage.rs:87:27:87:48 | insert_query1.as_str() | -| test_storage.rs:88:27:88:48 | insert_query2.as_str() | -| test_storage.rs:89:27:89:48 | update_query1.as_str() | -| test_storage.rs:90:27:90:48 | update_query2.as_str() | -| test_storage.rs:91:27:91:48 | update_query3.as_str() | -| test_storage.rs:92:27:92:48 | update_query4.as_str() | -| test_storage.rs:93:27:93:48 | update_query5.as_str() | -| test_storage.rs:94:27:94:48 | update_query6.as_str() | -| test_storage.rs:95:27:95:48 | delete_query1.as_str() | -| test_storage.rs:96:27:96:48 | delete_query2.as_str() | -| test_storage.rs:99:25:99:46 | insert_query1.as_str() | -| test_storage.rs:100:25:100:46 | insert_query2.as_str() | -| test_storage.rs:101:25:101:47 | prepared_query.as_str() | -| test_storage.rs:102:25:102:47 | prepared_query.as_str() | -| test_storage.rs:103:25:103:47 | prepared_query.as_str() | -| test_storage.rs:104:25:104:47 | prepared_query.as_str() | -| test_storage.rs:110:27:110:48 | insert_query1.as_str() | -| test_storage.rs:111:27:111:48 | insert_query2.as_str() | -| test_storage.rs:114:27:114:48 | insert_query1.as_str() | -| test_storage.rs:115:27:115:48 | insert_query2.as_str() | -| test_storage.rs:118:25:118:46 | insert_query1.as_str() | -| test_storage.rs:119:25:119:46 | insert_query2.as_str() | -| test_storage.rs:120:25:120:47 | prepared_query.as_str() | -| test_storage.rs:121:25:121:47 | prepared_query.as_str() | -| test_storage.rs:124:25:124:46 | insert_query1.as_str() | -| test_storage.rs:125:25:125:46 | insert_query2.as_str() | -| test_storage.rs:126:25:126:47 | prepared_query.as_str() | -| test_storage.rs:127:25:127:47 | prepared_query.as_str() | -| test_storage.rs:134:27:134:48 | insert_query1.as_str() | -| test_storage.rs:135:27:135:48 | insert_query2.as_str() | -| test_storage.rs:138:25:138:46 | insert_query1.as_str() | -| test_storage.rs:139:25:139:46 | insert_query2.as_str() | -| test_storage.rs:140:25:140:47 | prepared_query.as_str() | -| test_storage.rs:141:25:141:47 | prepared_query.as_str() | | test_storage.rs:188:29:188:86 | ...::from(...) | | test_storage.rs:189:28:189:82 | ...::from(...) | | test_storage.rs:190:28:190:81 | ...::from(...) | diff --git a/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected b/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected index 6e67ec737c2a..5325b39d994c 100644 --- a/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected +++ b/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected @@ -146,8 +146,8 @@ edges | test_logging.rs:99:9:99:10 | m3 | test_logging.rs:100:11:100:18 | MacroExpr | provenance | | | test_logging.rs:99:22:99:45 | ...::format(...) | test_logging.rs:99:22:99:45 | { ... } | provenance | | | test_logging.rs:99:22:99:45 | ...::must_use(...) | test_logging.rs:99:9:99:10 | m3 | provenance | | -| test_logging.rs:99:22:99:45 | MacroExpr | test_logging.rs:99:22:99:45 | ...::format(...) | provenance | MaD:22 | -| test_logging.rs:99:22:99:45 | { ... } | test_logging.rs:99:22:99:45 | ...::must_use(...) | provenance | MaD:23 | +| test_logging.rs:99:22:99:45 | MacroExpr | test_logging.rs:99:22:99:45 | ...::format(...) | provenance | MaD:20 | +| test_logging.rs:99:22:99:45 | { ... } | test_logging.rs:99:22:99:45 | ...::must_use(...) | provenance | MaD:21 | | test_logging.rs:99:38:99:45 | password | test_logging.rs:99:22:99:45 | MacroExpr | provenance | | | test_logging.rs:100:11:100:18 | MacroExpr | test_logging.rs:100:5:100:9 | ...::log | provenance | MaD:12 Sink:MaD:12 | | test_logging.rs:118:12:118:41 | MacroExpr | test_logging.rs:118:5:118:10 | ...::log | provenance | MaD:12 Sink:MaD:12 | @@ -168,8 +168,8 @@ edges | test_logging.rs:176:34:176:79 | MacroExpr | test_logging.rs:176:33:176:79 | &... [&ref] | provenance | | | test_logging.rs:176:42:176:78 | ...::format(...) | test_logging.rs:176:42:176:78 | { ... } | provenance | | | test_logging.rs:176:42:176:78 | ...::must_use(...) | test_logging.rs:176:34:176:79 | MacroExpr | provenance | | -| test_logging.rs:176:42:176:78 | MacroExpr | test_logging.rs:176:42:176:78 | ...::format(...) | provenance | MaD:22 | -| test_logging.rs:176:42:176:78 | { ... } | test_logging.rs:176:42:176:78 | ...::must_use(...) | provenance | MaD:23 | +| test_logging.rs:176:42:176:78 | MacroExpr | test_logging.rs:176:42:176:78 | ...::format(...) | provenance | MaD:20 | +| test_logging.rs:176:42:176:78 | { ... } | test_logging.rs:176:42:176:78 | ...::must_use(...) | provenance | MaD:21 | | test_logging.rs:176:70:176:78 | password2 | test_logging.rs:176:42:176:78 | MacroExpr | provenance | | | test_logging.rs:180:35:180:81 | &... | test_logging.rs:180:24:180:33 | log_expect | provenance | MaD:3 Sink:MaD:3 | | test_logging.rs:180:35:180:81 | &... [&ref] | test_logging.rs:180:24:180:33 | log_expect | provenance | MaD:3 Sink:MaD:3 | @@ -177,8 +177,8 @@ edges | test_logging.rs:180:36:180:81 | MacroExpr | test_logging.rs:180:35:180:81 | &... [&ref] | provenance | | | test_logging.rs:180:44:180:80 | ...::format(...) | test_logging.rs:180:44:180:80 | { ... } | provenance | | | test_logging.rs:180:44:180:80 | ...::must_use(...) | test_logging.rs:180:36:180:81 | MacroExpr | provenance | | -| test_logging.rs:180:44:180:80 | MacroExpr | test_logging.rs:180:44:180:80 | ...::format(...) | provenance | MaD:22 | -| test_logging.rs:180:44:180:80 | { ... } | test_logging.rs:180:44:180:80 | ...::must_use(...) | provenance | MaD:23 | +| test_logging.rs:180:44:180:80 | MacroExpr | test_logging.rs:180:44:180:80 | ...::format(...) | provenance | MaD:20 | +| test_logging.rs:180:44:180:80 | { ... } | test_logging.rs:180:44:180:80 | ...::must_use(...) | provenance | MaD:21 | | test_logging.rs:180:72:180:80 | password2 | test_logging.rs:180:44:180:80 | MacroExpr | provenance | | | test_logging.rs:183:9:183:19 | err_result2 [Err] | test_logging.rs:184:13:184:23 | err_result2 [Err] | provenance | | | test_logging.rs:183:47:183:68 | Err(...) [Err] | test_logging.rs:183:9:183:19 | err_result2 [Err] | provenance | | @@ -229,64 +229,52 @@ edges | test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | test_logging.rs:226:13:226:28 | ...::assert_failed [Some] | provenance | MaD:10 | | test_logging.rs:226:36:226:59 | MacroExpr | test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | provenance | | | test_logging.rs:226:52:226:59 | password | test_logging.rs:226:36:226:59 | MacroExpr | provenance | | -| test_logging.rs:229:30:229:62 | MacroExpr | test_logging.rs:229:30:229:71 | ... .as_str() [&ref] | provenance | MaD:21 | | test_logging.rs:229:30:229:62 | MacroExpr | test_logging.rs:229:30:229:71 | ... .as_str() [&ref] | provenance | MaD:19 | -| test_logging.rs:229:30:229:62 | MacroExpr | test_logging.rs:229:30:229:71 | ... .as_str() [&ref] | provenance | MaD:21 | | test_logging.rs:229:30:229:71 | ... .as_str() | test_logging.rs:229:23:229:28 | expect | provenance | MaD:2 Sink:MaD:2 | | test_logging.rs:229:30:229:71 | ... .as_str() | test_logging.rs:229:23:229:28 | expect | provenance | MaD:2 Sink:MaD:2 | | test_logging.rs:229:30:229:71 | ... .as_str() [&ref] | test_logging.rs:229:23:229:28 | expect | provenance | MaD:2 Sink:MaD:2 | | test_logging.rs:229:30:229:71 | ... .as_str() [&ref] | test_logging.rs:229:23:229:28 | expect | provenance | MaD:2 Sink:MaD:2 | | test_logging.rs:229:38:229:61 | ...::format(...) | test_logging.rs:229:38:229:61 | { ... } | provenance | | | test_logging.rs:229:38:229:61 | ...::must_use(...) | test_logging.rs:229:30:229:62 | MacroExpr | provenance | | -| test_logging.rs:229:38:229:61 | ...::must_use(...) | test_logging.rs:229:30:229:71 | ... .as_str() | provenance | MaD:21 | | test_logging.rs:229:38:229:61 | ...::must_use(...) | test_logging.rs:229:30:229:71 | ... .as_str() | provenance | MaD:19 | -| test_logging.rs:229:38:229:61 | ...::must_use(...) | test_logging.rs:229:30:229:71 | ... .as_str() | provenance | MaD:21 | -| test_logging.rs:229:38:229:61 | MacroExpr | test_logging.rs:229:38:229:61 | ...::format(...) | provenance | MaD:22 | -| test_logging.rs:229:38:229:61 | { ... } | test_logging.rs:229:38:229:61 | ...::must_use(...) | provenance | MaD:23 | +| test_logging.rs:229:38:229:61 | MacroExpr | test_logging.rs:229:38:229:61 | ...::format(...) | provenance | MaD:20 | +| test_logging.rs:229:38:229:61 | { ... } | test_logging.rs:229:38:229:61 | ...::must_use(...) | provenance | MaD:21 | | test_logging.rs:229:54:229:61 | password | test_logging.rs:229:38:229:61 | MacroExpr | provenance | | -| test_logging.rs:242:16:242:50 | MacroExpr | test_logging.rs:242:16:242:61 | ... .as_bytes() [&ref] | provenance | MaD:20 | | test_logging.rs:242:16:242:50 | MacroExpr | test_logging.rs:242:16:242:61 | ... .as_bytes() [&ref] | provenance | MaD:18 | | test_logging.rs:242:16:242:61 | ... .as_bytes() | test_logging.rs:242:10:242:14 | write | provenance | MaD:7 Sink:MaD:7 | | test_logging.rs:242:16:242:61 | ... .as_bytes() [&ref] | test_logging.rs:242:10:242:14 | write | provenance | MaD:7 Sink:MaD:7 | | test_logging.rs:242:24:242:49 | ...::format(...) | test_logging.rs:242:24:242:49 | { ... } | provenance | | | test_logging.rs:242:24:242:49 | ...::must_use(...) | test_logging.rs:242:16:242:50 | MacroExpr | provenance | | -| test_logging.rs:242:24:242:49 | ...::must_use(...) | test_logging.rs:242:16:242:61 | ... .as_bytes() | provenance | MaD:20 | | test_logging.rs:242:24:242:49 | ...::must_use(...) | test_logging.rs:242:16:242:61 | ... .as_bytes() | provenance | MaD:18 | -| test_logging.rs:242:24:242:49 | MacroExpr | test_logging.rs:242:24:242:49 | ...::format(...) | provenance | MaD:22 | -| test_logging.rs:242:24:242:49 | { ... } | test_logging.rs:242:24:242:49 | ...::must_use(...) | provenance | MaD:23 | +| test_logging.rs:242:24:242:49 | MacroExpr | test_logging.rs:242:24:242:49 | ...::format(...) | provenance | MaD:20 | +| test_logging.rs:242:24:242:49 | { ... } | test_logging.rs:242:24:242:49 | ...::must_use(...) | provenance | MaD:21 | | test_logging.rs:242:42:242:49 | password | test_logging.rs:242:24:242:49 | MacroExpr | provenance | | -| test_logging.rs:245:20:245:54 | MacroExpr | test_logging.rs:245:20:245:65 | ... .as_bytes() [&ref] | provenance | MaD:20 | | test_logging.rs:245:20:245:54 | MacroExpr | test_logging.rs:245:20:245:65 | ... .as_bytes() [&ref] | provenance | MaD:18 | | test_logging.rs:245:20:245:65 | ... .as_bytes() | test_logging.rs:245:10:245:18 | write_all | provenance | MaD:8 Sink:MaD:8 | | test_logging.rs:245:20:245:65 | ... .as_bytes() [&ref] | test_logging.rs:245:10:245:18 | write_all | provenance | MaD:8 Sink:MaD:8 | | test_logging.rs:245:28:245:53 | ...::format(...) | test_logging.rs:245:28:245:53 | { ... } | provenance | | | test_logging.rs:245:28:245:53 | ...::must_use(...) | test_logging.rs:245:20:245:54 | MacroExpr | provenance | | -| test_logging.rs:245:28:245:53 | ...::must_use(...) | test_logging.rs:245:20:245:65 | ... .as_bytes() | provenance | MaD:20 | | test_logging.rs:245:28:245:53 | ...::must_use(...) | test_logging.rs:245:20:245:65 | ... .as_bytes() | provenance | MaD:18 | -| test_logging.rs:245:28:245:53 | MacroExpr | test_logging.rs:245:28:245:53 | ...::format(...) | provenance | MaD:22 | -| test_logging.rs:245:28:245:53 | { ... } | test_logging.rs:245:28:245:53 | ...::must_use(...) | provenance | MaD:23 | +| test_logging.rs:245:28:245:53 | MacroExpr | test_logging.rs:245:28:245:53 | ...::format(...) | provenance | MaD:20 | +| test_logging.rs:245:28:245:53 | { ... } | test_logging.rs:245:28:245:53 | ...::must_use(...) | provenance | MaD:21 | | test_logging.rs:245:46:245:53 | password | test_logging.rs:245:28:245:53 | MacroExpr | provenance | | -| test_logging.rs:248:15:248:49 | MacroExpr | test_logging.rs:248:15:248:60 | ... .as_bytes() [&ref] | provenance | MaD:20 | | test_logging.rs:248:15:248:49 | MacroExpr | test_logging.rs:248:15:248:60 | ... .as_bytes() [&ref] | provenance | MaD:18 | | test_logging.rs:248:15:248:60 | ... .as_bytes() | test_logging.rs:248:9:248:13 | write | provenance | MaD:7 Sink:MaD:7 | | test_logging.rs:248:15:248:60 | ... .as_bytes() [&ref] | test_logging.rs:248:9:248:13 | write | provenance | MaD:7 Sink:MaD:7 | | test_logging.rs:248:23:248:48 | ...::format(...) | test_logging.rs:248:23:248:48 | { ... } | provenance | | | test_logging.rs:248:23:248:48 | ...::must_use(...) | test_logging.rs:248:15:248:49 | MacroExpr | provenance | | -| test_logging.rs:248:23:248:48 | ...::must_use(...) | test_logging.rs:248:15:248:60 | ... .as_bytes() | provenance | MaD:20 | | test_logging.rs:248:23:248:48 | ...::must_use(...) | test_logging.rs:248:15:248:60 | ... .as_bytes() | provenance | MaD:18 | -| test_logging.rs:248:23:248:48 | MacroExpr | test_logging.rs:248:23:248:48 | ...::format(...) | provenance | MaD:22 | -| test_logging.rs:248:23:248:48 | { ... } | test_logging.rs:248:23:248:48 | ...::must_use(...) | provenance | MaD:23 | +| test_logging.rs:248:23:248:48 | MacroExpr | test_logging.rs:248:23:248:48 | ...::format(...) | provenance | MaD:20 | +| test_logging.rs:248:23:248:48 | { ... } | test_logging.rs:248:23:248:48 | ...::must_use(...) | provenance | MaD:21 | | test_logging.rs:248:41:248:48 | password | test_logging.rs:248:23:248:48 | MacroExpr | provenance | | -| test_logging.rs:251:15:251:49 | MacroExpr | test_logging.rs:251:15:251:60 | ... .as_bytes() [&ref] | provenance | MaD:20 | | test_logging.rs:251:15:251:49 | MacroExpr | test_logging.rs:251:15:251:60 | ... .as_bytes() [&ref] | provenance | MaD:18 | | test_logging.rs:251:15:251:60 | ... .as_bytes() | test_logging.rs:251:9:251:13 | write | provenance | MaD:6 Sink:MaD:6 | | test_logging.rs:251:15:251:60 | ... .as_bytes() [&ref] | test_logging.rs:251:9:251:13 | write | provenance | MaD:6 Sink:MaD:6 | | test_logging.rs:251:23:251:48 | ...::format(...) | test_logging.rs:251:23:251:48 | { ... } | provenance | | | test_logging.rs:251:23:251:48 | ...::must_use(...) | test_logging.rs:251:15:251:49 | MacroExpr | provenance | | -| test_logging.rs:251:23:251:48 | ...::must_use(...) | test_logging.rs:251:15:251:60 | ... .as_bytes() | provenance | MaD:20 | | test_logging.rs:251:23:251:48 | ...::must_use(...) | test_logging.rs:251:15:251:60 | ... .as_bytes() | provenance | MaD:18 | -| test_logging.rs:251:23:251:48 | MacroExpr | test_logging.rs:251:23:251:48 | ...::format(...) | provenance | MaD:22 | -| test_logging.rs:251:23:251:48 | { ... } | test_logging.rs:251:23:251:48 | ...::must_use(...) | provenance | MaD:23 | +| test_logging.rs:251:23:251:48 | MacroExpr | test_logging.rs:251:23:251:48 | ...::format(...) | provenance | MaD:20 | +| test_logging.rs:251:23:251:48 | { ... } | test_logging.rs:251:23:251:48 | ...::must_use(...) | provenance | MaD:21 | | test_logging.rs:251:41:251:48 | password | test_logging.rs:251:23:251:48 | MacroExpr | provenance | | models | 1 | Sink: ::log_expect; Argument[0]; log-injection | @@ -308,10 +296,8 @@ models | 17 | Summary: ::add; Argument[0].Reference; ReturnValue; taint | | 18 | Summary: ::as_bytes; Argument[self]; ReturnValue; value | | 19 | Summary: ::as_str; Argument[self]; ReturnValue; value | -| 20 | Summary: ::as_bytes; Argument[self]; ReturnValue; value | -| 21 | Summary: ::as_str; Argument[self]; ReturnValue; value | -| 22 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint | -| 23 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | +| 20 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint | +| 21 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | nodes | test_logging.rs:42:5:42:10 | ...::log | semmle.label | ...::log | | test_logging.rs:42:12:42:35 | MacroExpr | semmle.label | MacroExpr | diff --git a/rust/ql/test/query-tests/security/CWE-312/CleartextStorageDatabase.expected b/rust/ql/test/query-tests/security/CWE-312/CleartextStorageDatabase.expected index 3f0171042a1c..95e595af4900 100644 --- a/rust/ql/test/query-tests/security/CWE-312/CleartextStorageDatabase.expected +++ b/rust/ql/test/query-tests/security/CWE-312/CleartextStorageDatabase.expected @@ -9,25 +9,15 @@ | test_storage.rs:204:31:204:37 | prepare | test_storage.rs:190:86:190:103 | get_phone_number(...) | test_storage.rs:204:31:204:37 | prepare | This database operation may read or write unencrypted sensitive data from $@. | test_storage.rs:190:86:190:103 | get_phone_number(...) | get_phone_number(...) | edges | test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:100:25:100:37 | insert_query2 | provenance | | -| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:100:25:100:46 | insert_query2.as_str() | provenance | MaD:9 | | test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:100:25:100:46 | insert_query2.as_str() | provenance | MaD:8 | -| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:100:25:100:46 | insert_query2.as_str() | provenance | MaD:9 | | test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:115:27:115:39 | insert_query2 | provenance | | -| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:115:27:115:48 | insert_query2.as_str() | provenance | MaD:9 | | test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:115:27:115:48 | insert_query2.as_str() | provenance | MaD:8 | -| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:115:27:115:48 | insert_query2.as_str() | provenance | MaD:9 | | test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:119:25:119:37 | insert_query2 | provenance | | -| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:119:25:119:46 | insert_query2.as_str() | provenance | MaD:9 | | test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:119:25:119:46 | insert_query2.as_str() | provenance | MaD:8 | -| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:119:25:119:46 | insert_query2.as_str() | provenance | MaD:9 | | test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:125:25:125:37 | insert_query2 | provenance | | -| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:125:25:125:46 | insert_query2.as_str() | provenance | MaD:9 | | test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:125:25:125:46 | insert_query2.as_str() | provenance | MaD:8 | -| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:125:25:125:46 | insert_query2.as_str() | provenance | MaD:9 | | test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:139:25:139:37 | insert_query2 | provenance | | -| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:139:25:139:46 | insert_query2.as_str() | provenance | MaD:9 | | test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:139:25:139:46 | insert_query2.as_str() | provenance | MaD:8 | -| test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:139:25:139:46 | insert_query2.as_str() | provenance | MaD:9 | | test_storage.rs:71:25:71:114 | ... + ... | test_storage.rs:71:9:71:21 | insert_query2 | provenance | | | test_storage.rs:71:25:71:114 | ... + ... | test_storage.rs:71:25:71:121 | ... + ... | provenance | MaD:7 | | test_storage.rs:71:25:71:121 | ... + ... | test_storage.rs:71:9:71:21 | insert_query2 | provenance | | @@ -37,29 +27,19 @@ edges | test_storage.rs:71:96:71:114 | &... [&ref] | test_storage.rs:71:25:71:114 | ... + ... | provenance | MaD:6 | | test_storage.rs:71:97:71:114 | get_phone_number(...) | test_storage.rs:71:96:71:114 | &... | provenance | Config | | test_storage.rs:71:97:71:114 | get_phone_number(...) | test_storage.rs:71:96:71:114 | &... [&ref] | provenance | | -| test_storage.rs:100:25:100:37 | insert_query2 | test_storage.rs:100:25:100:46 | insert_query2.as_str() [&ref] | provenance | MaD:9 | | test_storage.rs:100:25:100:37 | insert_query2 | test_storage.rs:100:25:100:46 | insert_query2.as_str() [&ref] | provenance | MaD:8 | -| test_storage.rs:100:25:100:37 | insert_query2 | test_storage.rs:100:25:100:46 | insert_query2.as_str() [&ref] | provenance | MaD:9 | | test_storage.rs:100:25:100:46 | insert_query2.as_str() | test_storage.rs:100:13:100:23 | ...::query | provenance | MaD:4 Sink:MaD:4 | | test_storage.rs:100:25:100:46 | insert_query2.as_str() [&ref] | test_storage.rs:100:13:100:23 | ...::query | provenance | MaD:4 Sink:MaD:4 | -| test_storage.rs:115:27:115:39 | insert_query2 | test_storage.rs:115:27:115:48 | insert_query2.as_str() [&ref] | provenance | MaD:9 | | test_storage.rs:115:27:115:39 | insert_query2 | test_storage.rs:115:27:115:48 | insert_query2.as_str() [&ref] | provenance | MaD:8 | -| test_storage.rs:115:27:115:39 | insert_query2 | test_storage.rs:115:27:115:48 | insert_query2.as_str() [&ref] | provenance | MaD:9 | | test_storage.rs:115:27:115:48 | insert_query2.as_str() | test_storage.rs:115:13:115:25 | ...::raw_sql | provenance | MaD:5 Sink:MaD:5 | | test_storage.rs:115:27:115:48 | insert_query2.as_str() [&ref] | test_storage.rs:115:13:115:25 | ...::raw_sql | provenance | MaD:5 Sink:MaD:5 | -| test_storage.rs:119:25:119:37 | insert_query2 | test_storage.rs:119:25:119:46 | insert_query2.as_str() [&ref] | provenance | MaD:9 | | test_storage.rs:119:25:119:37 | insert_query2 | test_storage.rs:119:25:119:46 | insert_query2.as_str() [&ref] | provenance | MaD:8 | -| test_storage.rs:119:25:119:37 | insert_query2 | test_storage.rs:119:25:119:46 | insert_query2.as_str() [&ref] | provenance | MaD:9 | | test_storage.rs:119:25:119:46 | insert_query2.as_str() | test_storage.rs:119:13:119:23 | ...::query | provenance | MaD:4 Sink:MaD:4 | | test_storage.rs:119:25:119:46 | insert_query2.as_str() [&ref] | test_storage.rs:119:13:119:23 | ...::query | provenance | MaD:4 Sink:MaD:4 | -| test_storage.rs:125:25:125:37 | insert_query2 | test_storage.rs:125:25:125:46 | insert_query2.as_str() [&ref] | provenance | MaD:9 | | test_storage.rs:125:25:125:37 | insert_query2 | test_storage.rs:125:25:125:46 | insert_query2.as_str() [&ref] | provenance | MaD:8 | -| test_storage.rs:125:25:125:37 | insert_query2 | test_storage.rs:125:25:125:46 | insert_query2.as_str() [&ref] | provenance | MaD:9 | | test_storage.rs:125:25:125:46 | insert_query2.as_str() | test_storage.rs:125:13:125:23 | ...::query | provenance | MaD:4 Sink:MaD:4 | | test_storage.rs:125:25:125:46 | insert_query2.as_str() [&ref] | test_storage.rs:125:13:125:23 | ...::query | provenance | MaD:4 Sink:MaD:4 | -| test_storage.rs:139:25:139:37 | insert_query2 | test_storage.rs:139:25:139:46 | insert_query2.as_str() [&ref] | provenance | MaD:9 | | test_storage.rs:139:25:139:37 | insert_query2 | test_storage.rs:139:25:139:46 | insert_query2.as_str() [&ref] | provenance | MaD:8 | -| test_storage.rs:139:25:139:37 | insert_query2 | test_storage.rs:139:25:139:46 | insert_query2.as_str() [&ref] | provenance | MaD:9 | | test_storage.rs:139:25:139:46 | insert_query2.as_str() | test_storage.rs:139:13:139:23 | ...::query | provenance | MaD:4 Sink:MaD:4 | | test_storage.rs:139:25:139:46 | insert_query2.as_str() [&ref] | test_storage.rs:139:13:139:23 | ...::query | provenance | MaD:4 Sink:MaD:4 | | test_storage.rs:189:9:189:24 | insert_query_bad | test_storage.rs:194:25:194:40 | insert_query_bad | provenance | | @@ -104,7 +84,6 @@ models | 6 | Summary: ::add; Argument[0].Reference; ReturnValue; taint | | 7 | Summary: ::add; Argument[self]; ReturnValue; value | | 8 | Summary: ::as_str; Argument[self]; ReturnValue; value | -| 9 | Summary: ::as_str; Argument[self]; ReturnValue; value | nodes | test_storage.rs:71:9:71:21 | insert_query2 | semmle.label | insert_query2 | | test_storage.rs:71:25:71:114 | ... + ... | semmle.label | ... + ... | diff --git a/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected index d13271f5fe6e..81f06adcde33 100644 --- a/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected @@ -3,7 +3,4 @@ multipleCallTargets | deallocation.rs:261:11:261:29 | ...::from(...) | | lifetime.rs:610:13:610:31 | ...::from(...) | | lifetime.rs:611:13:611:31 | ...::from(...) | -| lifetime.rs:612:27:612:38 | foo.as_str() | -| lifetime.rs:612:41:612:52 | bar.as_str() | | lifetime.rs:628:13:628:31 | ...::from(...) | -| lifetime.rs:629:32:629:43 | baz.as_str() | From 8a25e32493faaf74d383cc474d4c5016062a159c Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 6 Oct 2025 09:31:03 +0200 Subject: [PATCH 5/7] Rust: Add change note --- rust/ql/lib/change-notes/2025-10-06-call-resolution.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 rust/ql/lib/change-notes/2025-10-06-call-resolution.md diff --git a/rust/ql/lib/change-notes/2025-10-06-call-resolution.md b/rust/ql/lib/change-notes/2025-10-06-call-resolution.md new file mode 100644 index 000000000000..ffaf449bb8aa --- /dev/null +++ b/rust/ql/lib/change-notes/2025-10-06-call-resolution.md @@ -0,0 +1,4 @@ +--- +category: majorAnalysis +--- +* Resolution of calls to functions has been improved in a number of ways, to make it more aligned with the behavior of the Rust compiler. This may impact queries that rely on call resolution, such as data flow queries. \ No newline at end of file From 48ff3097630d0f2becb144d09c9613ca8361afe3 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 7 Oct 2025 14:49:53 +0200 Subject: [PATCH 6/7] Rust: Add more type inference tests --- .../test/library-tests/type-inference/main.rs | 47 +++ .../type-inference/type-inference.expected | 362 +++++++++++++++++- 2 files changed, 404 insertions(+), 5 deletions(-) diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index 4f567b5abbfd..502fe0e5a873 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -2696,6 +2696,52 @@ pub mod path_buf { } } +mod if_expr { + pub trait MyTrait { + fn m(&self) -> T; + } + + #[derive(Default)] + struct S(T); + + impl MyTrait for S { + fn m(&self) -> i32 { + self.0 // $ fieldof=S + } + } + + impl MyTrait for S> { + fn m(&self) -> i32 { + self.0 .0 // $ fieldof=S + } + } + + impl S { + fn m2(&self) -> S> { + S(S(self.0)) // $ fieldof=S + } + } + + pub fn f(b: bool) -> Box> { + let x = if b { + let y = Default::default(); // $ target=default + y // $ type=y:T.i32 + } else { + S(2) + }; + + // This code exhibits an explosion in type inference when type information is propagated + // from an `if` expression to its branches. + let x = S(1); + if b { + let x = x.m2(); // $ target=m2 + Box::new(x) // $ target=new + } else { + Box::new(x) // $ target=new + } + } +} + mod blanket_impl; mod closure; mod dereference; @@ -2733,4 +2779,5 @@ fn main() { pattern_matching::test_all_patterns(); // $ target=test_all_patterns pattern_matching_experimental::box_patterns(); // $ target=box_patterns dyn_type::test(); // $ target=test + if_expr::f(true); // $ target=f } 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 09263cd25e98..7d836cef857f 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -5618,11 +5618,363 @@ inferType | main.rs:2693:13:2693:20 | pathbuf1 | | main.rs:2668:5:2668:25 | PathBuf | | main.rs:2693:24:2693:37 | ...::new(...) | | main.rs:2668:5:2668:25 | PathBuf | | main.rs:2694:24:2694:31 | pathbuf1 | | main.rs:2668:5:2668:25 | PathBuf | -| main.rs:2706:5:2706:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2707:5:2707:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2707:20:2707:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2707:41:2707:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2723:5:2723:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future | +| main.rs:2701:14:2701:18 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2701:14:2701:18 | SelfParam | &T | main.rs:2700:5:2702:5 | Self [trait MyTrait] | +| main.rs:2708:14:2708:18 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2708:14:2708:18 | SelfParam | &T | main.rs:2704:5:2705:19 | S | +| main.rs:2708:14:2708:18 | SelfParam | &T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2708:28:2710:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2709:13:2709:16 | self | | file://:0:0:0:0 | & | +| main.rs:2709:13:2709:16 | self | &T | main.rs:2704:5:2705:19 | S | +| main.rs:2709:13:2709:16 | self | &T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2709:13:2709:18 | self.0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2714:14:2714:18 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2714:14:2714:18 | SelfParam | &T | main.rs:2704:5:2705:19 | S | +| main.rs:2714:14:2714:18 | SelfParam | &T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2714:14:2714:18 | SelfParam | &T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2714:28:2716:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2715:13:2715:16 | self | | file://:0:0:0:0 | & | +| main.rs:2715:13:2715:16 | self | &T | main.rs:2704:5:2705:19 | S | +| main.rs:2715:13:2715:16 | self | &T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2715:13:2715:16 | self | &T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2715:13:2715:18 | self.0 | | main.rs:2704:5:2705:19 | S | +| main.rs:2715:13:2715:18 | self.0 | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2715:13:2715:21 | ... .0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2720:15:2720:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:2720:15:2720:19 | SelfParam | &T | main.rs:2704:5:2705:19 | S | +| main.rs:2720:15:2720:19 | SelfParam | &T.T | main.rs:2719:10:2719:16 | T | +| main.rs:2720:33:2722:9 | { ... } | | main.rs:2704:5:2705:19 | S | +| main.rs:2720:33:2722:9 | { ... } | T | main.rs:2704:5:2705:19 | S | +| main.rs:2720:33:2722:9 | { ... } | T.T | main.rs:2719:10:2719:16 | T | +| main.rs:2721:13:2721:24 | S(...) | | main.rs:2704:5:2705:19 | S | +| main.rs:2721:13:2721:24 | S(...) | T | main.rs:2704:5:2705:19 | S | +| main.rs:2721:13:2721:24 | S(...) | T.T | main.rs:2719:10:2719:16 | T | +| main.rs:2721:15:2721:23 | S(...) | | main.rs:2704:5:2705:19 | S | +| main.rs:2721:15:2721:23 | S(...) | T | main.rs:2719:10:2719:16 | T | +| main.rs:2721:17:2721:20 | self | | file://:0:0:0:0 | & | +| main.rs:2721:17:2721:20 | self | &T | main.rs:2704:5:2705:19 | S | +| main.rs:2721:17:2721:20 | self | &T.T | main.rs:2719:10:2719:16 | T | +| main.rs:2721:17:2721:22 | self.0 | | main.rs:2719:10:2719:16 | T | +| main.rs:2725:14:2725:14 | b | | {EXTERNAL LOCATION} | bool | +| main.rs:2725:48:2742:5 | { ... } | | {EXTERNAL LOCATION} | Box | +| main.rs:2725:48:2742:5 | { ... } | A | {EXTERNAL LOCATION} | Global | +| main.rs:2725:48:2742:5 | { ... } | T | main.rs:2700:5:2702:5 | dyn MyTrait | +| main.rs:2725:48:2742:5 | { ... } | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2726:13:2726:13 | x | | main.rs:2704:5:2705:19 | S | +| main.rs:2726:13:2726:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2726:17:2731:9 | if b {...} else {...} | | main.rs:2704:5:2705:19 | S | +| main.rs:2726:17:2731:9 | if b {...} else {...} | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2726:20:2726:20 | b | | {EXTERNAL LOCATION} | bool | +| main.rs:2726:22:2729:9 | { ... } | | main.rs:2704:5:2705:19 | S | +| main.rs:2726:22:2729:9 | { ... } | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2727:17:2727:17 | y | | main.rs:2704:5:2705:19 | S | +| main.rs:2727:17:2727:17 | y | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2727:21:2727:38 | ...::default(...) | | main.rs:2704:5:2705:19 | S | +| main.rs:2727:21:2727:38 | ...::default(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2728:13:2728:13 | y | | main.rs:2704:5:2705:19 | S | +| main.rs:2728:13:2728:13 | y | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2729:16:2731:9 | { ... } | | main.rs:2704:5:2705:19 | S | +| main.rs:2729:16:2731:9 | { ... } | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2730:13:2730:16 | S(...) | | main.rs:2704:5:2705:19 | S | +| main.rs:2730:13:2730:16 | S(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2730:15:2730:15 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:13:2735:13 | x | | main.rs:2700:5:2702:5 | dyn MyTrait | +| main.rs:2735:13:2735:13 | x | | main.rs:2704:5:2705:19 | S | +| main.rs:2735:13:2735:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:13:2735:13 | x | T | main.rs:2704:5:2705:19 | S | +| main.rs:2735:13:2735:13 | x | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:13:2735:13 | x | T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2735:13:2735:13 | x | T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:13:2735:13 | x | T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2735:13:2735:13 | x | T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:13:2735:13 | x | T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2735:13:2735:13 | x | T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:13:2735:13 | x | T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2735:13:2735:13 | x | T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:13:2735:13 | x | T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2735:13:2735:13 | x | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:13:2735:13 | x | T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2735:13:2735:13 | x | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:13:2735:13 | x | T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2735:13:2735:13 | x | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:13:2735:13 | x | T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2735:13:2735:13 | x | dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:17:2735:20 | S(...) | | main.rs:2700:5:2702:5 | dyn MyTrait | +| main.rs:2735:17:2735:20 | S(...) | | main.rs:2704:5:2705:19 | S | +| main.rs:2735:17:2735:20 | S(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:17:2735:20 | S(...) | T | main.rs:2704:5:2705:19 | S | +| main.rs:2735:17:2735:20 | S(...) | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:17:2735:20 | S(...) | T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2735:17:2735:20 | S(...) | T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:17:2735:20 | S(...) | T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2735:17:2735:20 | S(...) | T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:17:2735:20 | S(...) | T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2735:17:2735:20 | S(...) | T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:17:2735:20 | S(...) | T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2735:17:2735:20 | S(...) | T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:17:2735:20 | S(...) | T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2735:17:2735:20 | S(...) | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:17:2735:20 | S(...) | T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2735:17:2735:20 | S(...) | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:17:2735:20 | S(...) | T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2735:17:2735:20 | S(...) | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:17:2735:20 | S(...) | T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2735:17:2735:20 | S(...) | dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:19:2735:19 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:19:2735:19 | 1 | | main.rs:2704:5:2705:19 | S | +| main.rs:2735:19:2735:19 | 1 | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:19:2735:19 | 1 | T | main.rs:2704:5:2705:19 | S | +| main.rs:2735:19:2735:19 | 1 | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:19:2735:19 | 1 | T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2735:19:2735:19 | 1 | T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:19:2735:19 | 1 | T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2735:19:2735:19 | 1 | T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:19:2735:19 | 1 | T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2735:19:2735:19 | 1 | T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:19:2735:19 | 1 | T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2735:19:2735:19 | 1 | T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:19:2735:19 | 1 | T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2735:19:2735:19 | 1 | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:19:2735:19 | 1 | T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2735:19:2735:19 | 1 | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2735:19:2735:19 | 1 | T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2736:9:2741:9 | if b {...} else {...} | | {EXTERNAL LOCATION} | Box | +| main.rs:2736:9:2741:9 | if b {...} else {...} | A | {EXTERNAL LOCATION} | Global | +| main.rs:2736:9:2741:9 | if b {...} else {...} | T | main.rs:2700:5:2702:5 | dyn MyTrait | +| main.rs:2736:9:2741:9 | if b {...} else {...} | T | main.rs:2704:5:2705:19 | S | +| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2736:9:2741:9 | if b {...} else {...} | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2736:12:2736:12 | b | | {EXTERNAL LOCATION} | bool | +| main.rs:2736:14:2739:9 | { ... } | | {EXTERNAL LOCATION} | Box | +| main.rs:2736:14:2739:9 | { ... } | A | {EXTERNAL LOCATION} | Global | +| main.rs:2736:14:2739:9 | { ... } | T | main.rs:2700:5:2702:5 | dyn MyTrait | +| main.rs:2736:14:2739:9 | { ... } | T | main.rs:2704:5:2705:19 | S | +| main.rs:2736:14:2739:9 | { ... } | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2736:14:2739:9 | { ... } | T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2736:14:2739:9 | { ... } | T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2736:14:2739:9 | { ... } | T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2736:14:2739:9 | { ... } | T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2736:14:2739:9 | { ... } | T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2736:14:2739:9 | { ... } | T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2736:14:2739:9 | { ... } | T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2736:14:2739:9 | { ... } | T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2736:14:2739:9 | { ... } | T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2736:14:2739:9 | { ... } | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2736:14:2739:9 | { ... } | T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2736:14:2739:9 | { ... } | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2736:14:2739:9 | { ... } | T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2736:14:2739:9 | { ... } | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2736:14:2739:9 | { ... } | T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2736:14:2739:9 | { ... } | T.T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2736:14:2739:9 | { ... } | T.T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2736:14:2739:9 | { ... } | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:17:2737:17 | x | | main.rs:2700:5:2702:5 | dyn MyTrait | +| main.rs:2737:17:2737:17 | x | | main.rs:2704:5:2705:19 | S | +| main.rs:2737:17:2737:17 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:17:2737:17 | x | T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:17:2737:17 | x | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:17:2737:17 | x | T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:17:2737:17 | x | T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:17:2737:17 | x | T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:17:2737:17 | x | T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:17:2737:17 | x | T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:17:2737:17 | x | T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:17:2737:17 | x | T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:17:2737:17 | x | T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:17:2737:17 | x | T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:17:2737:17 | x | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:17:2737:17 | x | T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:17:2737:17 | x | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:17:2737:17 | x | T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:17:2737:17 | x | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:17:2737:17 | x | T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:17:2737:17 | x | T.T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:17:2737:17 | x | T.T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:17:2737:17 | x | dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:21:2737:21 | x | | main.rs:2700:5:2702:5 | dyn MyTrait | +| main.rs:2737:21:2737:21 | x | | main.rs:2704:5:2705:19 | S | +| main.rs:2737:21:2737:21 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:21:2737:21 | x | T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:21:2737:21 | x | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:21:2737:21 | x | T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:21:2737:21 | x | T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:21:2737:21 | x | T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:21:2737:21 | x | T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:21:2737:21 | x | T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:21:2737:21 | x | T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:21:2737:21 | x | T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:21:2737:21 | x | T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:21:2737:21 | x | T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:21:2737:21 | x | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:21:2737:21 | x | T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:21:2737:21 | x | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:21:2737:21 | x | T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:21:2737:21 | x | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:21:2737:21 | x | T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:21:2737:21 | x | dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:21:2737:26 | x.m2() | | main.rs:2700:5:2702:5 | dyn MyTrait | +| main.rs:2737:21:2737:26 | x.m2() | | main.rs:2704:5:2705:19 | S | +| main.rs:2737:21:2737:26 | x.m2() | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:21:2737:26 | x.m2() | T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:21:2737:26 | x.m2() | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:21:2737:26 | x.m2() | T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:21:2737:26 | x.m2() | T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:21:2737:26 | x.m2() | T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:21:2737:26 | x.m2() | T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:21:2737:26 | x.m2() | T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:21:2737:26 | x.m2() | T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:21:2737:26 | x.m2() | T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:21:2737:26 | x.m2() | T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:21:2737:26 | x.m2() | T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:21:2737:26 | x.m2() | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:21:2737:26 | x.m2() | T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:21:2737:26 | x.m2() | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:21:2737:26 | x.m2() | T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:21:2737:26 | x.m2() | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:21:2737:26 | x.m2() | T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:21:2737:26 | x.m2() | T.T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2737:21:2737:26 | x.m2() | T.T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2737:21:2737:26 | x.m2() | dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2738:13:2738:23 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2738:13:2738:23 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2738:13:2738:23 | ...::new(...) | T | main.rs:2700:5:2702:5 | dyn MyTrait | +| main.rs:2738:13:2738:23 | ...::new(...) | T | main.rs:2704:5:2705:19 | S | +| main.rs:2738:13:2738:23 | ...::new(...) | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2738:13:2738:23 | ...::new(...) | T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2738:13:2738:23 | ...::new(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2738:22:2738:22 | x | | main.rs:2700:5:2702:5 | dyn MyTrait | +| main.rs:2738:22:2738:22 | x | | main.rs:2704:5:2705:19 | S | +| main.rs:2738:22:2738:22 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2738:22:2738:22 | x | T | main.rs:2704:5:2705:19 | S | +| main.rs:2738:22:2738:22 | x | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2738:22:2738:22 | x | T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2738:22:2738:22 | x | T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2738:22:2738:22 | x | T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2738:22:2738:22 | x | T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2738:22:2738:22 | x | T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2738:22:2738:22 | x | T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2738:22:2738:22 | x | T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2738:22:2738:22 | x | T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2738:22:2738:22 | x | T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2738:22:2738:22 | x | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2738:22:2738:22 | x | T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2738:22:2738:22 | x | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2738:22:2738:22 | x | T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2738:22:2738:22 | x | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2738:22:2738:22 | x | T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2738:22:2738:22 | x | T.T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2738:22:2738:22 | x | T.T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2738:22:2738:22 | x | dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2739:16:2741:9 | { ... } | | {EXTERNAL LOCATION} | Box | +| main.rs:2739:16:2741:9 | { ... } | A | {EXTERNAL LOCATION} | Global | +| main.rs:2739:16:2741:9 | { ... } | T | main.rs:2700:5:2702:5 | dyn MyTrait | +| main.rs:2739:16:2741:9 | { ... } | T | main.rs:2704:5:2705:19 | S | +| main.rs:2739:16:2741:9 | { ... } | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2739:16:2741:9 | { ... } | T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2739:16:2741:9 | { ... } | T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2739:16:2741:9 | { ... } | T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2739:16:2741:9 | { ... } | T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2739:16:2741:9 | { ... } | T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2739:16:2741:9 | { ... } | T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2739:16:2741:9 | { ... } | T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2739:16:2741:9 | { ... } | T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2739:16:2741:9 | { ... } | T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2739:16:2741:9 | { ... } | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2739:16:2741:9 | { ... } | T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2739:16:2741:9 | { ... } | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2739:16:2741:9 | { ... } | T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2739:16:2741:9 | { ... } | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2739:16:2741:9 | { ... } | T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2739:16:2741:9 | { ... } | T.T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2739:16:2741:9 | { ... } | T.T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2739:16:2741:9 | { ... } | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2740:13:2740:23 | ...::new(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2740:13:2740:23 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2740:13:2740:23 | ...::new(...) | T | main.rs:2700:5:2702:5 | dyn MyTrait | +| main.rs:2740:13:2740:23 | ...::new(...) | T | main.rs:2704:5:2705:19 | S | +| main.rs:2740:13:2740:23 | ...::new(...) | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2740:13:2740:23 | ...::new(...) | T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2740:13:2740:23 | ...::new(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2740:22:2740:22 | x | | main.rs:2700:5:2702:5 | dyn MyTrait | +| main.rs:2740:22:2740:22 | x | | main.rs:2704:5:2705:19 | S | +| main.rs:2740:22:2740:22 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2740:22:2740:22 | x | T | main.rs:2704:5:2705:19 | S | +| main.rs:2740:22:2740:22 | x | T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2740:22:2740:22 | x | T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2740:22:2740:22 | x | T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2740:22:2740:22 | x | T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2740:22:2740:22 | x | T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2740:22:2740:22 | x | T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2740:22:2740:22 | x | T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2740:22:2740:22 | x | T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2740:22:2740:22 | x | T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2740:22:2740:22 | x | T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2740:22:2740:22 | x | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2740:22:2740:22 | x | T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2740:22:2740:22 | x | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2740:22:2740:22 | x | T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2740:22:2740:22 | x | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | +| main.rs:2740:22:2740:22 | x | T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | +| main.rs:2740:22:2740:22 | x | dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2752:5:2752:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2753:5:2753:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2753:20:2753:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2753:41:2753:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2769:5:2769:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future | +| main.rs:2782:5:2782:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2782:5:2782:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2782:5:2782:20 | ...::f(...) | T | main.rs:2700:5:2702:5 | dyn MyTrait | +| main.rs:2782:5:2782:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2782:16:2782:19 | true | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:13:26:133:1 | { ... } | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:13:26:133:1 | { ... } | T | file://:0:0:0:0 | () | | pattern_matching.rs:14:9:14:13 | value | | {EXTERNAL LOCATION} | Option | From 4914a3fa2a9b1661ff60ea2b4c20d588fd5d8232 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 7 Oct 2025 15:07:08 +0200 Subject: [PATCH 7/7] Rust: Non-symmetric type propagation for lub coercions --- .../codeql/rust/internal/TypeInference.qll | 87 ++++++- .../type-inference/type-inference.expected | 230 ------------------ 2 files changed, 82 insertions(+), 235 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index de7b4447236e..f55fdbcbd9a4 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -524,6 +524,17 @@ private Struct getRangeType(RangeExpr re) { result instanceof RangeToInclusiveStruct } +private predicate bodyReturns(Expr body, Expr e) { + exists(ReturnExpr re, Callable c | + e = re.getExpr() and + c = re.getEnclosingCallable() + | + body = c.(Function).getBody() + or + body = c.(ClosureExpr).getBody() + ) +} + /** * Holds if the type tree of `n1` at `prefix1` should be equal to the type tree * of `n2` at `prefix2` and type information should propagate in both directions @@ -540,9 +551,11 @@ private predicate typeEquality(AstNode n1, TypePath prefix1, AstNode n2, TypePat let.getInitializer() = n2 ) or - n1 = n2.(IfExpr).getABranch() - or - n1 = n2.(MatchExpr).getAnArm().getExpr() + n2 = + any(MatchExpr me | + n1 = me.getAnArm().getExpr() and + me.getNumberOfArms() = 1 + ) or exists(LetExpr let | n1 = let.getScrutinee() and @@ -573,6 +586,9 @@ private predicate typeEquality(AstNode n1, TypePath prefix1, AstNode n2, TypePat n1 = n2.(MacroExpr).getMacroCall().getMacroCallExpansion() or n1 = n2.(MacroPat).getMacroCall().getMacroCallExpansion() + or + bodyReturns(n1, n2) and + strictcount(Expr e | bodyReturns(n1, e)) = 1 ) or ( @@ -606,8 +622,12 @@ private predicate typeEquality(AstNode n1, TypePath prefix1, AstNode n2, TypePat ) ) or - // an array list expression (`[1, 2, 3]`) has the type of the first (any) element - n1.(ArrayListExpr).getExpr(_) = n2 and + // an array list expression (`[1, 2, 3]`) has the type of the element + n1 = + any(ArrayListExpr ale | + ale.getAnExpr() = n2 and + ale.getNumberOfExprs() = 1 + ) and prefix1 = TypePath::singleton(TArrayTypeParameter()) and prefix2.isEmpty() or @@ -635,6 +655,61 @@ private predicate typeEquality(AstNode n1, TypePath prefix1, AstNode n2, TypePat prefix2.isEmpty() } +/** + * Holds if `child` is a child of `parent`, and the Rust compiler applies [least + * upper bound (LUB) coercion](1) to infer the type of `parent` from the type of + * `child`. + * + * In this case, we want type information to only flow from `child` to `parent`, + * to avoid (a) either having to model LUB coercions, or (b) risk combinatorial + * explosion in inferred types. + * + * [1]: https://doc.rust-lang.org/reference/type-coercions.html#r-coerce.least-upper-bound + */ +private predicate lubCoercion(AstNode parent, AstNode child, TypePath prefix) { + child = parent.(IfExpr).getABranch() and + prefix.isEmpty() + or + parent = + any(MatchExpr me | + child = me.getAnArm().getExpr() and + me.getNumberOfArms() > 1 + ) and + prefix.isEmpty() + or + parent = + any(ArrayListExpr ale | + child = ale.getAnExpr() and + ale.getNumberOfExprs() > 1 + ) and + prefix = TypePath::singleton(TArrayTypeParameter()) + or + bodyReturns(parent, child) and + strictcount(Expr e | bodyReturns(parent, e)) > 1 and + prefix.isEmpty() +} + +/** + * Holds if the type tree of `n1` at `prefix1` should be equal to the type tree + * of `n2` at `prefix2`, but type information should only propagate from `n1` to + * `n2`. + */ +private predicate typeEqualityNonSymmetric( + AstNode n1, TypePath prefix1, AstNode n2, TypePath prefix2 +) { + lubCoercion(n2, n1, prefix2) and + prefix1.isEmpty() + or + exists(AstNode mid, TypePath prefixMid, TypePath suffix | + typeEquality(n1, prefixMid, mid, prefix2) or + typeEquality(mid, prefix2, n1, prefixMid) + | + lubCoercion(mid, n2, suffix) and + not lubCoercion(mid, n1, _) and + prefix1 = prefixMid.append(suffix) + ) +} + pragma[nomagic] private Type inferTypeEquality(AstNode n, TypePath path) { exists(TypePath prefix1, AstNode n2, TypePath prefix2, TypePath suffix | @@ -644,6 +719,8 @@ private Type inferTypeEquality(AstNode n, TypePath path) { typeEquality(n, prefix1, n2, prefix2) or typeEquality(n2, prefix2, n, prefix1) + or + typeEqualityNonSymmetric(n2, prefix2, n, prefix1) ) } 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 7d836cef857f..170651621c84 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -5064,9 +5064,7 @@ inferType | main.rs:2479:32:2479:52 | ... .to_vec() | T | {EXTERNAL LOCATION} | u16 | | main.rs:2479:33:2479:36 | 1u16 | | {EXTERNAL LOCATION} | u16 | | main.rs:2479:39:2479:39 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2479:39:2479:39 | 2 | | {EXTERNAL LOCATION} | u16 | | main.rs:2479:42:2479:42 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2479:42:2479:42 | 3 | | {EXTERNAL LOCATION} | u16 | | main.rs:2480:13:2480:13 | u | | {EXTERNAL LOCATION} | u16 | | main.rs:2480:13:2480:13 | u | | file://:0:0:0:0 | & | | main.rs:2480:18:2480:23 | vals4a | | {EXTERNAL LOCATION} | Vec | @@ -5077,9 +5075,7 @@ inferType | main.rs:2482:22:2482:33 | [...] | [T;...] | {EXTERNAL LOCATION} | u16 | | main.rs:2482:23:2482:26 | 1u16 | | {EXTERNAL LOCATION} | u16 | | main.rs:2482:29:2482:29 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2482:29:2482:29 | 2 | | {EXTERNAL LOCATION} | u16 | | main.rs:2482:32:2482:32 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2482:32:2482:32 | 3 | | {EXTERNAL LOCATION} | u16 | | main.rs:2485:13:2485:17 | vals5 | | {EXTERNAL LOCATION} | Vec | | main.rs:2485:13:2485:17 | vals5 | A | {EXTERNAL LOCATION} | Global | | main.rs:2485:13:2485:17 | vals5 | T | {EXTERNAL LOCATION} | i32 | @@ -5093,9 +5089,7 @@ inferType | main.rs:2485:31:2485:42 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | | main.rs:2485:32:2485:35 | 1u32 | | {EXTERNAL LOCATION} | u32 | | main.rs:2485:38:2485:38 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2485:38:2485:38 | 2 | | {EXTERNAL LOCATION} | u32 | | main.rs:2485:41:2485:41 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2485:41:2485:41 | 3 | | {EXTERNAL LOCATION} | u32 | | main.rs:2486:13:2486:13 | u | | {EXTERNAL LOCATION} | i32 | | main.rs:2486:13:2486:13 | u | | {EXTERNAL LOCATION} | u32 | | main.rs:2486:13:2486:13 | u | | file://:0:0:0:0 | & | @@ -5116,9 +5110,7 @@ inferType | main.rs:2488:32:2488:60 | ... .collect() | T.&T | {EXTERNAL LOCATION} | u64 | | main.rs:2488:33:2488:36 | 1u64 | | {EXTERNAL LOCATION} | u64 | | main.rs:2488:39:2488:39 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2488:39:2488:39 | 2 | | {EXTERNAL LOCATION} | u64 | | main.rs:2488:42:2488:42 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2488:42:2488:42 | 3 | | {EXTERNAL LOCATION} | u64 | | main.rs:2489:13:2489:13 | u | | file://:0:0:0:0 | & | | main.rs:2489:13:2489:13 | u | &T | {EXTERNAL LOCATION} | u64 | | main.rs:2489:18:2489:22 | vals6 | | {EXTERNAL LOCATION} | Vec | @@ -5681,63 +5673,12 @@ inferType | main.rs:2735:13:2735:13 | x | | main.rs:2700:5:2702:5 | dyn MyTrait | | main.rs:2735:13:2735:13 | x | | main.rs:2704:5:2705:19 | S | | main.rs:2735:13:2735:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:13:2735:13 | x | T | main.rs:2704:5:2705:19 | S | -| main.rs:2735:13:2735:13 | x | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:13:2735:13 | x | T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2735:13:2735:13 | x | T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:13:2735:13 | x | T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2735:13:2735:13 | x | T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:13:2735:13 | x | T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2735:13:2735:13 | x | T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:13:2735:13 | x | T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2735:13:2735:13 | x | T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:13:2735:13 | x | T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2735:13:2735:13 | x | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:13:2735:13 | x | T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2735:13:2735:13 | x | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:13:2735:13 | x | T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2735:13:2735:13 | x | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:13:2735:13 | x | T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | | main.rs:2735:13:2735:13 | x | dyn(T) | {EXTERNAL LOCATION} | i32 | | main.rs:2735:17:2735:20 | S(...) | | main.rs:2700:5:2702:5 | dyn MyTrait | | main.rs:2735:17:2735:20 | S(...) | | main.rs:2704:5:2705:19 | S | | main.rs:2735:17:2735:20 | S(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:17:2735:20 | S(...) | T | main.rs:2704:5:2705:19 | S | -| main.rs:2735:17:2735:20 | S(...) | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:17:2735:20 | S(...) | T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2735:17:2735:20 | S(...) | T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:17:2735:20 | S(...) | T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2735:17:2735:20 | S(...) | T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:17:2735:20 | S(...) | T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2735:17:2735:20 | S(...) | T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:17:2735:20 | S(...) | T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2735:17:2735:20 | S(...) | T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:17:2735:20 | S(...) | T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2735:17:2735:20 | S(...) | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:17:2735:20 | S(...) | T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2735:17:2735:20 | S(...) | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:17:2735:20 | S(...) | T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2735:17:2735:20 | S(...) | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:17:2735:20 | S(...) | T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | | main.rs:2735:17:2735:20 | S(...) | dyn(T) | {EXTERNAL LOCATION} | i32 | | main.rs:2735:19:2735:19 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:19:2735:19 | 1 | | main.rs:2704:5:2705:19 | S | -| main.rs:2735:19:2735:19 | 1 | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:19:2735:19 | 1 | T | main.rs:2704:5:2705:19 | S | -| main.rs:2735:19:2735:19 | 1 | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:19:2735:19 | 1 | T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2735:19:2735:19 | 1 | T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:19:2735:19 | 1 | T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2735:19:2735:19 | 1 | T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:19:2735:19 | 1 | T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2735:19:2735:19 | 1 | T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:19:2735:19 | 1 | T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2735:19:2735:19 | 1 | T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:19:2735:19 | 1 | T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2735:19:2735:19 | 1 | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:19:2735:19 | 1 | T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2735:19:2735:19 | 1 | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2735:19:2735:19 | 1 | T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | | main.rs:2736:9:2741:9 | if b {...} else {...} | | {EXTERNAL LOCATION} | Box | | main.rs:2736:9:2741:9 | if b {...} else {...} | A | {EXTERNAL LOCATION} | Global | | main.rs:2736:9:2741:9 | if b {...} else {...} | T | main.rs:2700:5:2702:5 | dyn MyTrait | @@ -5745,225 +5686,56 @@ inferType | main.rs:2736:9:2741:9 | if b {...} else {...} | T.T | {EXTERNAL LOCATION} | i32 | | main.rs:2736:9:2741:9 | if b {...} else {...} | T.T | main.rs:2704:5:2705:19 | S | | main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2736:9:2741:9 | if b {...} else {...} | T.T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | | main.rs:2736:9:2741:9 | if b {...} else {...} | T.dyn(T) | {EXTERNAL LOCATION} | i32 | | main.rs:2736:12:2736:12 | b | | {EXTERNAL LOCATION} | bool | | main.rs:2736:14:2739:9 | { ... } | | {EXTERNAL LOCATION} | Box | | main.rs:2736:14:2739:9 | { ... } | A | {EXTERNAL LOCATION} | Global | | main.rs:2736:14:2739:9 | { ... } | T | main.rs:2700:5:2702:5 | dyn MyTrait | | main.rs:2736:14:2739:9 | { ... } | T | main.rs:2704:5:2705:19 | S | -| main.rs:2736:14:2739:9 | { ... } | T.T | {EXTERNAL LOCATION} | i32 | | main.rs:2736:14:2739:9 | { ... } | T.T | main.rs:2704:5:2705:19 | S | | main.rs:2736:14:2739:9 | { ... } | T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2736:14:2739:9 | { ... } | T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2736:14:2739:9 | { ... } | T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2736:14:2739:9 | { ... } | T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2736:14:2739:9 | { ... } | T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2736:14:2739:9 | { ... } | T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2736:14:2739:9 | { ... } | T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2736:14:2739:9 | { ... } | T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2736:14:2739:9 | { ... } | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2736:14:2739:9 | { ... } | T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2736:14:2739:9 | { ... } | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2736:14:2739:9 | { ... } | T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2736:14:2739:9 | { ... } | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2736:14:2739:9 | { ... } | T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2736:14:2739:9 | { ... } | T.T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2736:14:2739:9 | { ... } | T.T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | | main.rs:2736:14:2739:9 | { ... } | T.dyn(T) | {EXTERNAL LOCATION} | i32 | | main.rs:2737:17:2737:17 | x | | main.rs:2700:5:2702:5 | dyn MyTrait | | main.rs:2737:17:2737:17 | x | | main.rs:2704:5:2705:19 | S | -| main.rs:2737:17:2737:17 | x | T | {EXTERNAL LOCATION} | i32 | | main.rs:2737:17:2737:17 | x | T | main.rs:2704:5:2705:19 | S | | main.rs:2737:17:2737:17 | x | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2737:17:2737:17 | x | T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2737:17:2737:17 | x | T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2737:17:2737:17 | x | T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2737:17:2737:17 | x | T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2737:17:2737:17 | x | T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2737:17:2737:17 | x | T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2737:17:2737:17 | x | T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2737:17:2737:17 | x | T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2737:17:2737:17 | x | T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2737:17:2737:17 | x | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2737:17:2737:17 | x | T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2737:17:2737:17 | x | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2737:17:2737:17 | x | T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2737:17:2737:17 | x | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2737:17:2737:17 | x | T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2737:17:2737:17 | x | T.T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2737:17:2737:17 | x | T.T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | | main.rs:2737:17:2737:17 | x | dyn(T) | {EXTERNAL LOCATION} | i32 | | main.rs:2737:21:2737:21 | x | | main.rs:2700:5:2702:5 | dyn MyTrait | | main.rs:2737:21:2737:21 | x | | main.rs:2704:5:2705:19 | S | | main.rs:2737:21:2737:21 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2737:21:2737:21 | x | T | main.rs:2704:5:2705:19 | S | -| main.rs:2737:21:2737:21 | x | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2737:21:2737:21 | x | T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2737:21:2737:21 | x | T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2737:21:2737:21 | x | T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2737:21:2737:21 | x | T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2737:21:2737:21 | x | T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2737:21:2737:21 | x | T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2737:21:2737:21 | x | T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2737:21:2737:21 | x | T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2737:21:2737:21 | x | T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2737:21:2737:21 | x | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2737:21:2737:21 | x | T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2737:21:2737:21 | x | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2737:21:2737:21 | x | T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2737:21:2737:21 | x | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2737:21:2737:21 | x | T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | | main.rs:2737:21:2737:21 | x | dyn(T) | {EXTERNAL LOCATION} | i32 | | main.rs:2737:21:2737:26 | x.m2() | | main.rs:2700:5:2702:5 | dyn MyTrait | | main.rs:2737:21:2737:26 | x.m2() | | main.rs:2704:5:2705:19 | S | -| main.rs:2737:21:2737:26 | x.m2() | T | {EXTERNAL LOCATION} | i32 | | main.rs:2737:21:2737:26 | x.m2() | T | main.rs:2704:5:2705:19 | S | | main.rs:2737:21:2737:26 | x.m2() | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2737:21:2737:26 | x.m2() | T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2737:21:2737:26 | x.m2() | T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2737:21:2737:26 | x.m2() | T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2737:21:2737:26 | x.m2() | T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2737:21:2737:26 | x.m2() | T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2737:21:2737:26 | x.m2() | T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2737:21:2737:26 | x.m2() | T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2737:21:2737:26 | x.m2() | T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2737:21:2737:26 | x.m2() | T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2737:21:2737:26 | x.m2() | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2737:21:2737:26 | x.m2() | T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2737:21:2737:26 | x.m2() | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2737:21:2737:26 | x.m2() | T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2737:21:2737:26 | x.m2() | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2737:21:2737:26 | x.m2() | T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2737:21:2737:26 | x.m2() | T.T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2737:21:2737:26 | x.m2() | T.T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | | main.rs:2737:21:2737:26 | x.m2() | dyn(T) | {EXTERNAL LOCATION} | i32 | | main.rs:2738:13:2738:23 | ...::new(...) | | {EXTERNAL LOCATION} | Box | | main.rs:2738:13:2738:23 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | main.rs:2738:13:2738:23 | ...::new(...) | T | main.rs:2700:5:2702:5 | dyn MyTrait | | main.rs:2738:13:2738:23 | ...::new(...) | T | main.rs:2704:5:2705:19 | S | -| main.rs:2738:13:2738:23 | ...::new(...) | T.T | {EXTERNAL LOCATION} | i32 | | main.rs:2738:13:2738:23 | ...::new(...) | T.T | main.rs:2704:5:2705:19 | S | | main.rs:2738:13:2738:23 | ...::new(...) | T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2738:13:2738:23 | ...::new(...) | T.T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | | main.rs:2738:13:2738:23 | ...::new(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | | main.rs:2738:22:2738:22 | x | | main.rs:2700:5:2702:5 | dyn MyTrait | | main.rs:2738:22:2738:22 | x | | main.rs:2704:5:2705:19 | S | -| main.rs:2738:22:2738:22 | x | T | {EXTERNAL LOCATION} | i32 | | main.rs:2738:22:2738:22 | x | T | main.rs:2704:5:2705:19 | S | | main.rs:2738:22:2738:22 | x | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2738:22:2738:22 | x | T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2738:22:2738:22 | x | T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2738:22:2738:22 | x | T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2738:22:2738:22 | x | T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2738:22:2738:22 | x | T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2738:22:2738:22 | x | T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2738:22:2738:22 | x | T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2738:22:2738:22 | x | T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2738:22:2738:22 | x | T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2738:22:2738:22 | x | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2738:22:2738:22 | x | T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2738:22:2738:22 | x | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2738:22:2738:22 | x | T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2738:22:2738:22 | x | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2738:22:2738:22 | x | T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2738:22:2738:22 | x | T.T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2738:22:2738:22 | x | T.T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | | main.rs:2738:22:2738:22 | x | dyn(T) | {EXTERNAL LOCATION} | i32 | | main.rs:2739:16:2741:9 | { ... } | | {EXTERNAL LOCATION} | Box | | main.rs:2739:16:2741:9 | { ... } | A | {EXTERNAL LOCATION} | Global | | main.rs:2739:16:2741:9 | { ... } | T | main.rs:2700:5:2702:5 | dyn MyTrait | | main.rs:2739:16:2741:9 | { ... } | T | main.rs:2704:5:2705:19 | S | | main.rs:2739:16:2741:9 | { ... } | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2739:16:2741:9 | { ... } | T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2739:16:2741:9 | { ... } | T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2739:16:2741:9 | { ... } | T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2739:16:2741:9 | { ... } | T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2739:16:2741:9 | { ... } | T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2739:16:2741:9 | { ... } | T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2739:16:2741:9 | { ... } | T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2739:16:2741:9 | { ... } | T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2739:16:2741:9 | { ... } | T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2739:16:2741:9 | { ... } | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2739:16:2741:9 | { ... } | T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2739:16:2741:9 | { ... } | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2739:16:2741:9 | { ... } | T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2739:16:2741:9 | { ... } | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2739:16:2741:9 | { ... } | T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2739:16:2741:9 | { ... } | T.T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2739:16:2741:9 | { ... } | T.T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | | main.rs:2739:16:2741:9 | { ... } | T.dyn(T) | {EXTERNAL LOCATION} | i32 | | main.rs:2740:13:2740:23 | ...::new(...) | | {EXTERNAL LOCATION} | Box | | main.rs:2740:13:2740:23 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | main.rs:2740:13:2740:23 | ...::new(...) | T | main.rs:2700:5:2702:5 | dyn MyTrait | | main.rs:2740:13:2740:23 | ...::new(...) | T | main.rs:2704:5:2705:19 | S | | main.rs:2740:13:2740:23 | ...::new(...) | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2740:13:2740:23 | ...::new(...) | T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2740:13:2740:23 | ...::new(...) | T.T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | | main.rs:2740:13:2740:23 | ...::new(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | | main.rs:2740:22:2740:22 | x | | main.rs:2700:5:2702:5 | dyn MyTrait | | main.rs:2740:22:2740:22 | x | | main.rs:2704:5:2705:19 | S | | main.rs:2740:22:2740:22 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2740:22:2740:22 | x | T | main.rs:2704:5:2705:19 | S | -| main.rs:2740:22:2740:22 | x | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2740:22:2740:22 | x | T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2740:22:2740:22 | x | T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2740:22:2740:22 | x | T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2740:22:2740:22 | x | T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2740:22:2740:22 | x | T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2740:22:2740:22 | x | T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2740:22:2740:22 | x | T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2740:22:2740:22 | x | T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2740:22:2740:22 | x | T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2740:22:2740:22 | x | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2740:22:2740:22 | x | T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2740:22:2740:22 | x | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2740:22:2740:22 | x | T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | -| main.rs:2740:22:2740:22 | x | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2740:22:2740:22 | x | T.T.T.T.T.T.T.T.T | main.rs:2704:5:2705:19 | S | | main.rs:2740:22:2740:22 | x | dyn(T) | {EXTERNAL LOCATION} | i32 | | main.rs:2752:5:2752:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | | main.rs:2753:5:2753:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | @@ -6000,7 +5772,6 @@ inferType | pattern_matching.rs:20:9:20:18 | Some(...) | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:20:9:20:18 | Some(...) | T | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:20:14:20:17 | mesg | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:20:23:23:9 | { ... } | | file://:0:0:0:0 | () | | pattern_matching.rs:21:17:21:20 | mesg | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:21:24:21:27 | mesg | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:22:22:22:29 | "{mesg}\\n" | | file://:0:0:0:0 | & | @@ -6213,7 +5984,6 @@ inferType | pattern_matching.rs:99:25:99:25 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:100:25:100:25 | y | | file://:0:0:0:0 | & | | pattern_matching.rs:100:25:100:25 | y | &T | {EXTERNAL LOCATION} | str | -| pattern_matching.rs:102:14:107:9 | { ... } | | file://:0:0:0:0 | () | | pattern_matching.rs:103:17:103:17 | a | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:103:21:103:26 | value1 | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:104:17:104:17 | b | | {EXTERNAL LOCATION} | i32 |