diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll index 10df835cc08a..44d9d3a67b6b 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll @@ -205,8 +205,18 @@ private module Input2 implements InputSig2 { // `DynTypeBoundListMention` for further details. exists(DynTraitTypeRepr object | abs = object and - condition = object.getTypeBoundList() and + condition = object.getTypeBoundList() + | constraint = object.getTrait() + // or + // TTrait(object.getTrait()) = + // constraint + // .(ImplTraitTypeRepr) + // .getTypeBoundList() + // .getABound() + // .getTypeRepr() + // .(TypeMention) + // .resolveType() ) ) } @@ -407,6 +417,14 @@ private predicate isPanicMacroCall(MacroExpr me) { me.getMacroCall().resolveMacro().(MacroRules).getName().getText() = "panic" } +// Due to "binding modes" the type of the pattern is not necessarily the +// same as the type of the initializer. The pattern being an identifier +// pattern is sufficient to ensure that this is not the case. +private predicate identLetStmt(LetStmt let, IdentPat lhs, Expr rhs) { + let.getPat() = lhs and + let.getInitializer() = rhs +} + /** Module for inferring certain type information. */ module CertainTypeInference { pragma[nomagic] @@ -484,11 +502,7 @@ module CertainTypeInference { // is not a certain type equality. exists(LetStmt let | not let.hasTypeRepr() and - // Due to "binding modes" the type of the pattern is not necessarily the - // same as the type of the initializer. The pattern being an identifier - // pattern is sufficient to ensure that this is not the case. - let.getPat().(IdentPat) = n1 and - let.getInitializer() = n2 + identLetStmt(let, n1, n2) ) or exists(LetExpr let | @@ -512,6 +526,25 @@ module CertainTypeInference { ) else prefix2.isEmpty() ) + or + exists(CallExprImpl::DynamicCallExpr dce, TupleType tt, int i | + n1 = dce.getArgList() and + tt.getArity() = dce.getNumberOfSyntacticArguments() and + n2 = dce.getSyntacticPositionalArgument(i) and + prefix1 = TypePath::singleton(tt.getPositionalTypeParameter(i)) and + prefix2.isEmpty() + ) + or + exists(ClosureExpr ce, int index | + n1 = ce and + n2 = ce.getParam(index).getPat() and + prefix1 = closureParameterPath(ce.getNumberOfParams(), index) and + prefix2.isEmpty() + ) + or + n1 = any(ClosureExpr ce | not ce.hasRetType() and ce.getClosureBody() = n2) and + prefix1 = closureReturnPath() and + prefix2.isEmpty() } pragma[nomagic] @@ -781,17 +814,6 @@ private predicate typeEquality(AstNode n1, TypePath prefix1, AstNode n2, TypePat prefix2.isEmpty() and s = getRangeType(n1) ) - or - exists(ClosureExpr ce, int index | - n1 = ce and - n2 = ce.getParam(index).getPat() and - prefix1 = closureParameterPath(ce.getNumberOfParams(), index) and - prefix2.isEmpty() - ) - or - n1.(ClosureExpr).getClosureBody() = n2 and - prefix1 = closureReturnPath() and - prefix2.isEmpty() } /** @@ -828,6 +850,19 @@ private predicate lubCoercion(AstNode parent, AstNode child, TypePath prefix) { prefix.isEmpty() } +private Type inferUnknownTypeFromAnnotation(AstNode n, TypePath path) { + inferType(n, path) = TUnknownType() and + // Normally, these are coercion sites, but in case a type is unknown we + // allow for type information to flow from the type annotation. + exists(TypeMention tm | result = tm.resolveTypeAt(path) | + tm = any(LetStmt let | identLetStmt(let, _, n)).getTypeRepr() + or + tm = any(ClosureExpr ce | n = ce.getBody()).getRetType().getTypeRepr() + or + tm = getReturnTypeMention(any(Function f | n = f.getBody())) + ) +} + /** * 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 @@ -1509,6 +1544,8 @@ private module MethodResolution { * or * 4. `MethodCallOperation`: an operation expression, `x + y`, which is syntactic sugar * for `Add::add(x, y)`. + * 5. `ClosureMethodCall`: a call to a closure, `c(x)`, which is syntactic sugar for + * `c.call_once(x)`, `c.call_mut(x)`, or `c.call(x)`. * * Note that only in case 1 and 2 is auto-dereferencing and borrowing allowed. * @@ -1520,7 +1557,7 @@ private module MethodResolution { abstract class MethodCall extends Expr { abstract predicate hasNameAndArity(string name, int arity); - abstract Expr getArg(ArgumentPosition pos); + abstract AstNode getArg(ArgumentPosition pos); abstract predicate supportsAutoDerefAndBorrow(); @@ -1888,6 +1925,16 @@ private module MethodResolution { ) } + private Method testresolveCallTarget( + ImplOrTraitItemNode i, DerefChain derefChain, BorrowKind borrow + ) { + this = Debug::getRelevantLocatable() and + exists(MethodCallCand mcc | + mcc = MkMethodCallCand(this, derefChain, borrow) and + result = mcc.resolveCallTarget(i) + ) + } + /** * Holds if the argument `arg` of this call has been implicitly dereferenced * and borrowed according to `derefChain` and `borrow`, in order to be able to @@ -2050,6 +2097,26 @@ private module MethodResolution { override Trait getTrait() { super.isOverloaded(result, _, _) } } + private class ClosureMethodCall extends MethodCall instanceof CallExprImpl::DynamicCallExpr { + pragma[nomagic] + override predicate hasNameAndArity(string name, int arity) { + name = "call_once" and // todo: handle call_mut and call + arity = 1 // args are passed in a tuple + } + + override AstNode getArg(ArgumentPosition pos) { + pos.isSelf() and + result = super.getFunction() + or + pos.asPosition() = 0 and + result = super.getArgList() + } + + override predicate supportsAutoDerefAndBorrow() { any() } + + override Trait getTrait() { result instanceof AnyFnTrait } + } + pragma[nomagic] private Method getMethodSuccessor(ImplOrTraitItemNode i, string name, int arity) { result = i.getASuccessor(name) and @@ -2471,7 +2538,8 @@ private module MethodCallMatchingInput implements MatchingWithEnvironmentInputSi class Access extends MethodCallFinal, ContextTyping::ContextTypedCallCand { Access() { // handled in the `OperationMatchingInput` module - not this instanceof Operation + not this instanceof Operation //and + // this = Debug::getRelevantLocatable() } pragma[nomagic] @@ -2523,6 +2591,16 @@ private module MethodCallMatchingInput implements MatchingWithEnvironmentInputSi result = this.getInferredNonSelfType(apos, path) } + private Type testgetInferredType(string derefChainBorrow, AccessPosition apos, TypePath path) { + this = Debug::getRelevantLocatable() and + ( + result = this.getInferredSelfType(apos, derefChainBorrow, path) + or + result = this.getInferredNonSelfType(apos, path) and + derefChainBorrow = "" + ) + } + Method getTarget(ImplOrTraitItemNode i, string derefChainBorrow) { exists(DerefChain derefChain, BorrowKind borrow | derefChainBorrow = encodeDerefChainBorrow(derefChain, borrow) and @@ -2596,6 +2674,7 @@ pragma[nomagic] private Type inferMethodCallTypeSelf( AstNode n, DerefChain derefChain, BorrowKind borrow, TypePath path ) { + // n = Debug::getRelevantLocatable() and exists(MethodCallMatchingInput::AccessPosition apos, string derefChainBorrow | result = inferMethodCallType0(_, apos, n, derefChainBorrow, path) and apos.isSelf() and @@ -2639,6 +2718,11 @@ private Type inferMethodCallTypePreCheck(AstNode n, boolean isReturn, TypePath p isReturn = false } +private Type testinferMethodCallTypePreCheck(AstNode n, boolean isReturn, TypePath path) { + result = inferMethodCallTypePreCheck(n, isReturn, path) and + n = Debug::getRelevantLocatable() +} + /** * Gets the type of `n` at `path`, where `n` is either a method call or an * argument/receiver of a method call. @@ -3137,6 +3221,7 @@ private module NonMethodCallMatchingInput implements MatchingInputSig { } class Access extends NonMethodResolution::NonMethodCall, ContextTyping::ContextTypedCallCand { + // Access() { this = Debug::getRelevantLocatable() } pragma[nomagic] override Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { result = getCallExprTypeArgument(this, apos, path) @@ -3210,6 +3295,12 @@ private Type inferNonMethodCallType0(AstNode n, boolean isReturn, TypePath path) ) } +pragma[nomagic] +private Type inferNonMethodCallType1(AstNode n, boolean isReturn, TypePath path) { + result = inferNonMethodCallType0(n, isReturn, path) and + n = Debug::getRelevantLocatable() +} + private predicate inferNonMethodCallType = ContextTyping::CheckContextTyping::check/2; @@ -3892,73 +3983,39 @@ private TypePath closureParameterPath(int arity, int index) { TypePath::singleton(getTupleTypeParameter(arity, index))) } -/** Gets the path to the return type of the `FnOnce` trait. */ -private TypePath fnReturnPath() { - result = TypePath::singleton(getAssociatedTypeTypeParameter(any(FnOnceTrait t).getOutputType())) -} - -/** - * 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(getTupleTypeParameter(arity, index))) -} - 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()) +private Type inferClosureExprType(AstNode n, TypePath path) { + exists(ClosureExpr ce | + n = ce and + ( + path.isEmpty() and + result = closureRootType() + or + path = TypePath::singleton(TDynTraitTypeParameter(_, any(FnTrait t).getTypeParam())) and + result.(TupleType).getArity() = ce.getNumberOfParams() or - // Propagate the function's parameter type to the arguments - exists(int index | - n = ce.getCall().getSyntacticPositionalArgument(index) and - path = - path0.stripPrefix(fnParameterPath(ce.getCall().getArgList().getNumberOfArgs(), index)) + exists(TypePath path0 | + result = ce.getRetType().getTypeRepr().(TypeMention).resolveTypeAt(path0) and + path = closureReturnPath().append(path0) ) ) 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()) = closureRootType() | - // Propagate the type of arguments to the parameter types of closure - exists(int index, ArgList args | - n = ce and - args = ce.getCall().getArgList() and - arity = args.getNumberOfArgs() and - result = inferType(args.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().getArgList().getNumberOfArgs() and - result = inferType(ce.getCall(), path0) and - path = closureReturnPath().append(path0) + exists(Param p | + p = ce.getAParam() and + not p.hasTypeRepr() and + n = p.getPat() and + result = TUnknownType() and + path.isEmpty() ) ) } pragma[nomagic] -private Type inferClosureExprType(AstNode n, TypePath path) { - exists(ClosureExpr ce | - n = ce and - path.isEmpty() and - result = closureRootType() - or - n = ce and - path = TypePath::singleton(TDynTraitTypeParameter(_, any(FnTrait t).getTypeParam())) and - result.(TupleType).getArity() = ce.getNumberOfParams() - or - // Propagate return type annotation to body - n = ce.getClosureBody() and - result = ce.getRetType().getTypeRepr().(TypeMention).resolveTypeAt(path) +private TupleType inferArgList(ArgList args, TypePath path) { + exists(CallExprImpl::DynamicCallExpr dce | + args = dce.getArgList() and + result.getArity() = dce.getNumberOfSyntacticArguments() and + path.isEmpty() ) } @@ -4005,7 +4062,9 @@ private module Cached { or i instanceof ImplItemNode and dispatch = false | - result = call.(MethodResolution::MethodCall).resolveCallTarget(i, _, _) or + result = call.(MethodResolution::MethodCall).resolveCallTarget(i, _, _) and + not call instanceof CallExprImpl::DynamicCallExpr + or result = call.(NonMethodResolution::NonMethodCall).resolveCallTargetViaTypeInference(i) ) } @@ -4115,13 +4174,15 @@ private module Cached { or result = inferForLoopExprType(n, path) or - result = inferDynamicCallExprType(n, path) - or result = inferClosureExprType(n, path) or + result = inferArgList(n, path) + or result = inferStructPatType(n, path) or result = inferTupleStructPatType(n, path) + or + result = inferUnknownTypeFromAnnotation(n, path) ) } } @@ -4138,8 +4199,8 @@ private module Debug { 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 - startline = [56 .. 60] + filepath.matches("%/closure.rs") and + startline = [10] ) } diff --git a/rust/ql/test/library-tests/type-inference/closure.rs b/rust/ql/test/library-tests/type-inference/closure.rs index cc756a6b2678..cbcf154563ad 100644 --- a/rust/ql/test/library-tests/type-inference/closure.rs +++ b/rust/ql/test/library-tests/type-inference/closure.rs @@ -152,3 +152,90 @@ mod dyn_fn_once { let _r2 = apply_boxed(Box::new(|_: i64| true), 3); // $ target=apply_boxed target=new type=_r2:bool } } + +mod closure_infer_param { + fn apply1 i64>(f: F, a: i64) -> i64 { + f(a) + } + + fn apply2(f: impl Fn(i64) -> i64, a: i64) -> i64 { + f(a) + } + + fn apply3(f: &dyn Fn(i64) -> i64, a: i64) -> i64 { + f(a) + } + + fn apply4 i64>(mut f: F, a: i64) -> i64 { + f(a) + } + + fn apply5(f: &mut dyn FnMut(i64) -> i64, a: i64) -> i64 { + f(a) + } + + fn apply6(f: impl Fn(T) -> i64, a: T) -> i64 { + f(a) + } + + fn apply7 i64>(mut f: F, a: T) -> i64 { + f(a) + } + + fn test() { + let f = |x| x; // $ MISSING: type=x:i64 + let _r = apply1(f, 1i64); // $ target=apply1 + + let f = |x| x; // $ MISSING: type=x:i64 + let _r = apply2(f, 2i64); // $ target=apply2 + + let f = |x| x; // $ MISSING: type=x:i64 + let _r = apply3(&f, 3i64); // $ target=apply3 + + let f = |x| x; // $ MISSING: type=x:i64 + let _r = apply4(f, 4i64); // $ target=apply4 + + let mut f = |x| x; // $ MISSING: type=x:i64 + let _r = apply5(&mut f, 5i64); // $ target=apply5 + + let f = |x| x; // $ MISSING: type=x:i64 + let _r = apply6(f, 6i64); // $ target=apply6 + + let f = |x| x; // $ MISSING: type=x:i64 + let _r = apply7(f, 7i64); // $ target=apply7 + } +} + +mod implicit_deref { + use std::ops::Deref; + + struct S(T); + + impl Deref for S { + type Target = dyn Fn(T) -> bool; + + fn deref(&self) -> &Self::Target { + &|_| false + } + } + + pub fn test() { + let x = 0i64; + let v = Default::default(); // $ MISSING: type=v:i64 target=default + let s = S(v); + let _ret = s(x); // $ MISSING: type=_ret:bool + + let x = 0i32; + let v = Default::default(); // $ MISSING: type=v:i32 target=default + let s = S(v); + let s_ref = &s; + let _ret = s_ref(x); // $ MISSING: type=_ret:bool + + // The call below is not an implicit deref, instead it will target + // `impl FnOnce for &F` from + // https://doc.rust-lang.org/std/ops/trait.FnOnce.html#impl-FnOnce%3CA%3E-for-%26F + // and we currently cannot handle inferring the output type + let c = |x| x; // $ MISSING: type=x:i64 + (&c)(x); // $ MISSING: type=_:i64 + } +} diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index 9fda37285da4..37ae83336ee3 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -2878,6 +2878,30 @@ mod closure; mod dereference; mod dyn_type; +mod foo { + struct Gen(T); + + trait Container { + fn get_input(&self) -> T; + } + + fn my_get>(c: &T) -> bool { + c.get_input() == 42 + } + + impl Container for Gen { + fn get_input(&self) -> GT { + self.0 + } + } + + fn test() { + let v = Default::default(); // $ type=v:i64 target=default + let g = Gen(v); + let _ = my_get(&g); + } +} + fn main() { field_access::f(); // $ target=f method_impl::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 c5f797efd2f1..ba090a359918 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -440,6 +440,16 @@ inferCertainType | blanket_impl.rs:299:47:299:67 | "SELECT * FROM users" | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:299:47:299:67 | "SELECT * FROM users" | TRef | {EXTERNAL LOCATION} | str | | closure.rs:4:19:31:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:6:13:6:22 | my_closure | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:6:13:6:22 | my_closure | dyn(Args) | {EXTERNAL LOCATION} | (T_2) | +| closure.rs:6:13:6:22 | my_closure | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | +| closure.rs:6:13:6:22 | my_closure | dyn(Args).T1 | {EXTERNAL LOCATION} | bool | +| closure.rs:6:13:6:22 | my_closure | dyn(Output) | {EXTERNAL LOCATION} | bool | +| closure.rs:6:26:6:38 | \|...\| ... | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:6:26:6:38 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_2) | +| closure.rs:6:26:6:38 | \|...\| ... | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | +| closure.rs:6:26:6:38 | \|...\| ... | dyn(Args).T1 | {EXTERNAL LOCATION} | bool | +| closure.rs:6:26:6:38 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | bool | | closure.rs:6:27:6:27 | a | | {EXTERNAL LOCATION} | bool | | closure.rs:6:30:6:30 | b | | {EXTERNAL LOCATION} | bool | | closure.rs:6:33:6:33 | a | | {EXTERNAL LOCATION} | bool | @@ -448,18 +458,38 @@ inferCertainType | closure.rs:8:13:8:13 | x | | {EXTERNAL LOCATION} | i64 | | closure.rs:8:22:8:25 | 1i64 | | {EXTERNAL LOCATION} | i64 | | closure.rs:9:31:9:34 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:10:25:10:27 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:10:25:10:27 | ArgList | T0 | {EXTERNAL LOCATION} | i64 | | closure.rs:10:26:10:26 | x | | {EXTERNAL LOCATION} | i64 | +| closure.rs:14:13:14:20 | add_zero | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:14:13:14:20 | add_zero | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:14:13:14:20 | add_zero | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:14:13:14:20 | add_zero | dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:14:24:14:33 | \|...\| n | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:14:24:14:33 | \|...\| n | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:14:24:14:33 | \|...\| n | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:14:24:14:33 | \|...\| n | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:14:25:14:25 | n | | {EXTERNAL LOCATION} | i64 | | closure.rs:14:33:14:33 | n | | {EXTERNAL LOCATION} | i64 | +| closure.rs:15:18:15:25 | add_zero | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:15:18:15:25 | add_zero | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:15:18:15:25 | add_zero | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:15:18:15:25 | add_zero | dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:25:20:25:25 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:25:20:25:25 | ArgList | T0 | {EXTERNAL LOCATION} | bool | | closure.rs:25:21:25:24 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:30:13:30:15 | _b2 | | {EXTERNAL LOCATION} | bool | | closure.rs:35:44:35:44 | f | | closure.rs:35:20:35:41 | F | | closure.rs:35:50:37:5 | { ... } | | {EXTERNAL LOCATION} | () | | closure.rs:36:23:36:23 | f | | closure.rs:35:20:35:41 | F | +| closure.rs:36:24:36:29 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:36:24:36:29 | ArgList | T0 | {EXTERNAL LOCATION} | bool | | closure.rs:36:25:36:28 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:39:45:39:45 | f | | closure.rs:39:28:39:42 | F | | closure.rs:39:51:41:5 | { ... } | | {EXTERNAL LOCATION} | () | | closure.rs:40:23:40:23 | f | | closure.rs:39:28:39:42 | F | +| closure.rs:40:24:40:29 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:40:24:40:29 | ArgList | T0 | {EXTERNAL LOCATION} | bool | | closure.rs:40:25:40:28 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:43:46:43:46 | f | | closure.rs:43:22:43:43 | F | | closure.rs:43:52:46:5 | { ... } | | {EXTERNAL LOCATION} | () | @@ -468,23 +498,38 @@ inferCertainType | closure.rs:48:45:48:45 | a | | closure.rs:48:14:48:14 | A | | closure.rs:48:56:50:5 | { ... } | | closure.rs:48:17:48:17 | B | | closure.rs:49:9:49:9 | f | | closure.rs:48:20:48:36 | F | +| closure.rs:49:10:49:12 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:49:10:49:12 | ArgList | T0 | closure.rs:48:14:48:14 | A | | closure.rs:49:11:49:11 | a | | closure.rs:48:14:48:14 | A | | closure.rs:52:18:52:18 | f | | closure.rs:52:21:52:43 | impl ... | | closure.rs:52:53:54:5 | { ... } | | {EXTERNAL LOCATION} | i64 | | closure.rs:53:9:53:9 | f | | closure.rs:52:21:52:43 | impl ... | | closure.rs:56:15:68:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:57:13:57:13 | f | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:57:13:57:13 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:57:13:57:13 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | +| closure.rs:57:17:63:9 | \|...\| ... | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:57:17:63:9 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:57:17:63:9 | \|...\| ... | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | | closure.rs:57:18:57:18 | x | | {EXTERNAL LOCATION} | bool | | closure.rs:58:16:58:16 | x | | {EXTERNAL LOCATION} | bool | +| closure.rs:64:24:64:24 | f | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:64:24:64:24 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:64:24:64:24 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | | closure.rs:64:27:64:30 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:67:13:67:15 | _r2 | | {EXTERNAL LOCATION} | i64 | | closure.rs:67:19:67:30 | apply_two(...) | | {EXTERNAL LOCATION} | i64 | | closure.rs:72:47:72:47 | f | | closure.rs:72:20:72:40 | F | | closure.rs:72:53:74:5 | { ... } | | {EXTERNAL LOCATION} | () | | closure.rs:73:23:73:23 | f | | closure.rs:72:20:72:40 | F | +| closure.rs:73:24:73:29 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:73:24:73:29 | ArgList | T0 | {EXTERNAL LOCATION} | bool | | closure.rs:73:25:73:28 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:76:48:76:48 | f | | closure.rs:76:28:76:41 | F | | closure.rs:76:54:78:5 | { ... } | | {EXTERNAL LOCATION} | () | | closure.rs:77:23:77:23 | f | | closure.rs:76:28:76:41 | F | +| closure.rs:77:24:77:29 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:77:24:77:29 | ArgList | T0 | {EXTERNAL LOCATION} | bool | | closure.rs:77:25:77:28 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:80:49:80:49 | f | | closure.rs:80:22:80:42 | F | | closure.rs:80:55:83:5 | { ... } | | {EXTERNAL LOCATION} | () | @@ -493,23 +538,38 @@ inferCertainType | closure.rs:85:48:85:48 | a | | closure.rs:85:14:85:14 | A | | closure.rs:85:59:87:5 | { ... } | | closure.rs:85:17:85:17 | B | | closure.rs:86:9:86:9 | f | | closure.rs:85:20:85:35 | F | +| closure.rs:86:10:86:12 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:86:10:86:12 | ArgList | T0 | closure.rs:85:14:85:14 | A | | closure.rs:86:11:86:11 | a | | closure.rs:85:14:85:14 | A | | closure.rs:89:22:89:22 | f | | closure.rs:89:25:89:46 | impl ... | | closure.rs:89:56:91:5 | { ... } | | {EXTERNAL LOCATION} | i64 | | closure.rs:90:9:90:9 | f | | closure.rs:89:25:89:46 | impl ... | | closure.rs:93:15:105:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:94:13:94:13 | f | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:94:13:94:13 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:94:13:94:13 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | +| closure.rs:94:17:100:9 | \|...\| ... | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:94:17:100:9 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:94:17:100:9 | \|...\| ... | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | | closure.rs:94:18:94:18 | x | | {EXTERNAL LOCATION} | bool | | closure.rs:95:16:95:16 | x | | {EXTERNAL LOCATION} | bool | +| closure.rs:101:24:101:24 | f | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:101:24:101:24 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:101:24:101:24 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | | closure.rs:101:27:101:30 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:104:13:104:15 | _r2 | | {EXTERNAL LOCATION} | i64 | | closure.rs:104:19:104:30 | apply_two(...) | | {EXTERNAL LOCATION} | i64 | | closure.rs:109:40:109:40 | f | | closure.rs:109:20:109:37 | F | | closure.rs:109:46:111:5 | { ... } | | {EXTERNAL LOCATION} | () | | closure.rs:110:23:110:23 | f | | closure.rs:109:20:109:37 | F | +| closure.rs:110:24:110:29 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:110:24:110:29 | ArgList | T0 | {EXTERNAL LOCATION} | bool | | closure.rs:110:25:110:28 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:113:41:113:41 | f | | closure.rs:113:28:113:38 | F | | closure.rs:113:47:115:5 | { ... } | | {EXTERNAL LOCATION} | () | | closure.rs:114:23:114:23 | f | | closure.rs:113:28:113:38 | F | +| closure.rs:114:24:114:29 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:114:24:114:29 | ArgList | T0 | {EXTERNAL LOCATION} | bool | | closure.rs:114:25:114:28 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:117:42:117:42 | f | | closure.rs:117:22:117:39 | F | | closure.rs:117:48:120:5 | { ... } | | {EXTERNAL LOCATION} | () | @@ -518,13 +578,24 @@ inferCertainType | closure.rs:122:41:122:41 | a | | closure.rs:122:14:122:14 | A | | closure.rs:122:52:124:5 | { ... } | | closure.rs:122:17:122:17 | B | | closure.rs:123:9:123:9 | f | | closure.rs:122:20:122:32 | F | +| closure.rs:123:10:123:12 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:123:10:123:12 | ArgList | T0 | closure.rs:122:14:122:14 | A | | closure.rs:123:11:123:11 | a | | closure.rs:122:14:122:14 | A | | closure.rs:126:18:126:18 | f | | closure.rs:126:21:126:39 | impl ... | | closure.rs:126:49:128:5 | { ... } | | {EXTERNAL LOCATION} | i64 | | closure.rs:127:9:127:9 | f | | closure.rs:126:21:126:39 | impl ... | | closure.rs:130:15:142:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:131:13:131:13 | f | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:131:13:131:13 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:131:13:131:13 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | +| closure.rs:131:17:137:9 | \|...\| ... | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:131:17:137:9 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:131:17:137:9 | \|...\| ... | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | | closure.rs:131:18:131:18 | x | | {EXTERNAL LOCATION} | bool | | closure.rs:132:16:132:16 | x | | {EXTERNAL LOCATION} | bool | +| closure.rs:138:24:138:24 | f | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:138:24:138:24 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:138:24:138:24 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | | closure.rs:138:27:138:30 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:141:13:141:15 | _r2 | | {EXTERNAL LOCATION} | i64 | | closure.rs:141:19:141:30 | apply_two(...) | | {EXTERNAL LOCATION} | i64 | @@ -536,6 +607,8 @@ inferCertainType | closure.rs:147:9:147:9 | f | | {EXTERNAL LOCATION} | Box | | closure.rs:147:9:147:9 | f | A | {EXTERNAL LOCATION} | Global | | closure.rs:147:9:147:9 | f | T | closure.rs:146:26:146:51 | F | +| closure.rs:147:10:147:14 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:147:10:147:14 | ArgList | T0 | closure.rs:146:20:146:20 | A | | closure.rs:147:11:147:13 | arg | | closure.rs:146:20:146:20 | A | | closure.rs:150:30:150:30 | f | | {EXTERNAL LOCATION} | Box | | closure.rs:150:30:150:30 | f | A | {EXTERNAL LOCATION} | Global | @@ -554,8 +627,132 @@ inferCertainType | closure.rs:151:34:151:36 | arg | | closure.rs:150:24:150:24 | A | | closure.rs:152:31:152:53 | ...::new(...) | | {EXTERNAL LOCATION} | Box | | closure.rs:152:31:152:53 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| closure.rs:152:40:152:52 | \|...\| true | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:152:40:152:52 | \|...\| true | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:152:40:152:52 | \|...\| true | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:152:40:152:52 | \|...\| true | dyn(Output) | {EXTERNAL LOCATION} | bool | | closure.rs:152:41:152:41 | _ | | {EXTERNAL LOCATION} | i64 | | closure.rs:152:49:152:52 | true | | {EXTERNAL LOCATION} | bool | +| closure.rs:157:34:157:34 | f | | closure.rs:157:15:157:31 | F | +| closure.rs:157:40:157:40 | a | | {EXTERNAL LOCATION} | i64 | +| closure.rs:157:55:159:5 | { ... } | | {EXTERNAL LOCATION} | i64 | +| closure.rs:158:9:158:9 | f | | closure.rs:157:15:157:31 | F | +| closure.rs:158:10:158:12 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:158:10:158:12 | ArgList | T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:158:11:158:11 | a | | {EXTERNAL LOCATION} | i64 | +| closure.rs:161:15:161:15 | f | | closure.rs:161:18:161:36 | impl ... | +| closure.rs:161:39:161:39 | a | | {EXTERNAL LOCATION} | i64 | +| closure.rs:161:54:163:5 | { ... } | | {EXTERNAL LOCATION} | i64 | +| closure.rs:162:9:162:9 | f | | closure.rs:161:18:161:36 | impl ... | +| closure.rs:162:10:162:12 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:162:10:162:12 | ArgList | T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:162:11:162:11 | a | | {EXTERNAL LOCATION} | i64 | +| closure.rs:165:15:165:15 | f | | {EXTERNAL LOCATION} | & | +| closure.rs:165:15:165:15 | f | TRef | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:165:15:165:15 | f | TRef.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:165:15:165:15 | f | TRef.dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:165:15:165:15 | f | TRef.dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:165:39:165:39 | a | | {EXTERNAL LOCATION} | i64 | +| closure.rs:165:54:167:5 | { ... } | | {EXTERNAL LOCATION} | i64 | +| closure.rs:166:9:166:9 | f | | {EXTERNAL LOCATION} | & | +| closure.rs:166:9:166:9 | f | TRef | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:166:9:166:9 | f | TRef.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:166:9:166:9 | f | TRef.dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:166:9:166:9 | f | TRef.dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:166:10:166:12 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:166:10:166:12 | ArgList | T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:166:11:166:11 | a | | {EXTERNAL LOCATION} | i64 | +| closure.rs:169:41:169:41 | f | | closure.rs:169:15:169:34 | F | +| closure.rs:169:47:169:47 | a | | {EXTERNAL LOCATION} | i64 | +| closure.rs:169:62:171:5 | { ... } | | {EXTERNAL LOCATION} | i64 | +| closure.rs:170:9:170:9 | f | | closure.rs:169:15:169:34 | F | +| closure.rs:170:10:170:12 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:170:10:170:12 | ArgList | T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:170:11:170:11 | a | | {EXTERNAL LOCATION} | i64 | +| closure.rs:173:15:173:15 | f | | {EXTERNAL LOCATION} | &mut | +| closure.rs:173:15:173:15 | f | TRefMut | {EXTERNAL LOCATION} | dyn FnMut | +| closure.rs:173:15:173:15 | f | TRefMut.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:173:15:173:15 | f | TRefMut.dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:173:15:173:15 | f | TRefMut.dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:173:46:173:46 | a | | {EXTERNAL LOCATION} | i64 | +| closure.rs:173:61:175:5 | { ... } | | {EXTERNAL LOCATION} | i64 | +| closure.rs:174:9:174:9 | f | | {EXTERNAL LOCATION} | &mut | +| closure.rs:174:9:174:9 | f | TRefMut | {EXTERNAL LOCATION} | dyn FnMut | +| closure.rs:174:9:174:9 | f | TRefMut.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:174:9:174:9 | f | TRefMut.dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:174:9:174:9 | f | TRefMut.dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:174:10:174:12 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:174:10:174:12 | ArgList | T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:174:11:174:11 | a | | {EXTERNAL LOCATION} | i64 | +| closure.rs:177:18:177:18 | f | | closure.rs:177:21:177:37 | impl ... | +| closure.rs:177:40:177:40 | a | | closure.rs:177:15:177:15 | T | +| closure.rs:177:53:179:5 | { ... } | | {EXTERNAL LOCATION} | i64 | +| closure.rs:178:9:178:9 | f | | closure.rs:177:21:177:37 | impl ... | +| closure.rs:178:10:178:12 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:178:10:178:12 | ArgList | T0 | closure.rs:177:15:177:15 | T | +| closure.rs:178:11:178:11 | a | | closure.rs:177:15:177:15 | T | +| closure.rs:181:42:181:42 | f | | closure.rs:181:18:181:35 | F | +| closure.rs:181:48:181:48 | a | | closure.rs:181:15:181:15 | T | +| closure.rs:181:61:183:5 | { ... } | | {EXTERNAL LOCATION} | i64 | +| closure.rs:182:9:182:9 | f | | closure.rs:181:18:181:35 | F | +| closure.rs:182:10:182:12 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:182:10:182:12 | ArgList | T0 | closure.rs:181:15:181:15 | T | +| closure.rs:182:11:182:11 | a | | closure.rs:181:15:181:15 | T | +| closure.rs:185:15:206:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:187:13:187:14 | _r | | {EXTERNAL LOCATION} | i64 | +| closure.rs:187:18:187:32 | apply1(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:187:28:187:31 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:190:13:190:14 | _r | | {EXTERNAL LOCATION} | i64 | +| closure.rs:190:18:190:32 | apply2(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:190:28:190:31 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:193:13:193:14 | _r | | {EXTERNAL LOCATION} | i64 | +| closure.rs:193:18:193:33 | apply3(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:193:25:193:26 | &f | | {EXTERNAL LOCATION} | & | +| closure.rs:193:29:193:32 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:196:13:196:14 | _r | | {EXTERNAL LOCATION} | i64 | +| closure.rs:196:18:196:32 | apply4(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:196:28:196:31 | 4i64 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:199:13:199:14 | _r | | {EXTERNAL LOCATION} | i64 | +| closure.rs:199:18:199:37 | apply5(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:199:25:199:30 | &mut f | | {EXTERNAL LOCATION} | &mut | +| closure.rs:199:33:199:36 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:202:13:202:14 | _r | | {EXTERNAL LOCATION} | i64 | +| closure.rs:202:18:202:32 | apply6(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:202:28:202:31 | 6i64 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:205:13:205:14 | _r | | {EXTERNAL LOCATION} | i64 | +| closure.rs:205:18:205:32 | apply7(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:205:28:205:31 | 7i64 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:217:18:217:22 | SelfParam | | {EXTERNAL LOCATION} | & | +| closure.rs:217:18:217:22 | SelfParam | TRef | closure.rs:212:5:212:19 | S | +| closure.rs:217:18:217:22 | SelfParam | TRef.T | closure.rs:214:10:214:10 | T | +| closure.rs:217:42:219:9 | { ... } | | {EXTERNAL LOCATION} | & | +| closure.rs:217:42:219:9 | { ... } | TRef | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:217:42:219:9 | { ... } | TRef.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:217:42:219:9 | { ... } | TRef.dyn(Args).T0 | closure.rs:214:10:214:10 | T | +| closure.rs:217:42:219:9 | { ... } | TRef.dyn(Output) | {EXTERNAL LOCATION} | bool | +| closure.rs:218:13:218:22 | &... | | {EXTERNAL LOCATION} | & | +| closure.rs:218:14:218:22 | \|...\| false | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:218:14:218:22 | \|...\| false | dyn(Output) | {EXTERNAL LOCATION} | bool | +| closure.rs:218:18:218:22 | false | | {EXTERNAL LOCATION} | bool | +| closure.rs:222:19:240:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:223:13:223:13 | x | | {EXTERNAL LOCATION} | i64 | +| closure.rs:223:17:223:20 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:226:21:226:23 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:226:21:226:23 | ArgList | T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:226:22:226:22 | x | | {EXTERNAL LOCATION} | i64 | +| closure.rs:228:13:228:13 | x | | {EXTERNAL LOCATION} | i32 | +| closure.rs:228:17:228:20 | 0i32 | | {EXTERNAL LOCATION} | i32 | +| closure.rs:231:13:231:17 | s_ref | | {EXTERNAL LOCATION} | & | +| closure.rs:231:21:231:22 | &s | | {EXTERNAL LOCATION} | & | +| closure.rs:232:20:232:24 | s_ref | | {EXTERNAL LOCATION} | & | +| closure.rs:232:25:232:27 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:232:25:232:27 | ArgList | T0 | {EXTERNAL LOCATION} | i32 | +| closure.rs:232:26:232:26 | x | | {EXTERNAL LOCATION} | i32 | +| closure.rs:239:9:239:12 | (...) | | {EXTERNAL LOCATION} | & | +| closure.rs:239:10:239:11 | &c | | {EXTERNAL LOCATION} | & | +| closure.rs:239:13:239:15 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:239:13:239:15 | ArgList | T0 | {EXTERNAL LOCATION} | i32 | +| closure.rs:239:14:239:14 | x | | {EXTERNAL LOCATION} | i32 | | dereference.rs:13:14:13:18 | SelfParam | | {EXTERNAL LOCATION} | & | | dereference.rs:13:14:13:18 | SelfParam | TRef | dereference.rs:5:1:7:1 | MyIntPointer | | dereference.rs:13:29:15:5 | { ... } | | {EXTERNAL LOCATION} | & | @@ -3726,48 +3923,65 @@ inferCertainType | main.rs:2867:21:2867:21 | y | | {EXTERNAL LOCATION} | & | | main.rs:2870:13:2870:13 | y | | {EXTERNAL LOCATION} | usize | | main.rs:2871:23:2871:23 | y | | {EXTERNAL LOCATION} | usize | -| main.rs:2881:11:2916:1 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2882:5:2882:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2883:5:2883:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2884:5:2884:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2884:20:2884:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2884:41:2884:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2885:5:2885:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2886:5:2886:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2887:5:2887:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2888:5:2888:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2889:5:2889:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2890:5:2890:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2891:5:2891:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2892:5:2892:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2893:5:2893:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2894:5:2894:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2895:5:2895:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2896:5:2896:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2897:5:2897:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2898:5:2898:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2899:5:2899:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2900:5:2900:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:2900:5:2900:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () | -| main.rs:2901:5:2901:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2902:5:2902:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2903:5:2903:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2904:5:2904:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2905:5:2905:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2906:5:2906:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2907:5:2907:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2908:5:2908:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2909:5:2909:28 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2910:5:2910:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2911:5:2911:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2912:5:2912:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2913:5:2913:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2914:5:2914:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2914:5:2914:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2914:5:2914:20 | ...::f(...) | T | main.rs:2684:5:2686:5 | dyn MyTrait | -| main.rs:2914:5:2914:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | -| main.rs:2914:16:2914:19 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2915:5:2915:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2885:22:2885:26 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2885:22:2885:26 | SelfParam | TRef | main.rs:2884:5:2886:5 | Self [trait Container] | +| main.rs:2888:34:2888:34 | c | | {EXTERNAL LOCATION} | & | +| main.rs:2888:34:2888:34 | c | TRef | main.rs:2888:15:2888:31 | T | +| main.rs:2888:49:2890:5 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:2889:9:2889:9 | c | | {EXTERNAL LOCATION} | & | +| main.rs:2889:9:2889:9 | c | TRef | main.rs:2888:15:2888:31 | T | +| main.rs:2893:22:2893:26 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2893:22:2893:26 | SelfParam | TRef | main.rs:2882:5:2882:21 | Gen | +| main.rs:2893:22:2893:26 | SelfParam | TRef.T | main.rs:2892:10:2892:17 | GT | +| main.rs:2893:35:2895:9 | { ... } | | main.rs:2892:10:2892:17 | GT | +| main.rs:2894:13:2894:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2894:13:2894:16 | self | TRef | main.rs:2882:5:2882:21 | Gen | +| main.rs:2894:13:2894:16 | self | TRef.T | main.rs:2892:10:2892:17 | GT | +| main.rs:2898:15:2902:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2901:17:2901:26 | my_get(...) | | {EXTERNAL LOCATION} | bool | +| main.rs:2901:24:2901:25 | &g | | {EXTERNAL LOCATION} | & | +| main.rs:2905:11:2940:1 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2906:5:2906:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2907:5:2907:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2908:5:2908:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2908:20:2908:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2908:41:2908:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2909:5:2909:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2910:5:2910:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2911:5:2911:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2912:5:2912:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2913:5:2913:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2914:5:2914:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2915:5:2915:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2916:5:2916:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2917:5:2917:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2918:5:2918:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2919:5:2919:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2920:5:2920:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2921:5:2921:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2922:5:2922:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2923:5:2923:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2924:5:2924:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2924:5:2924:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () | +| main.rs:2925:5:2925:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2926:5:2926:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2927:5:2927:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2928:5:2928:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2929:5:2929:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2930:5:2930:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2931:5:2931:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2932:5:2932:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2933:5:2933:28 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2934:5:2934:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2935:5:2935:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2936:5:2936:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2937:5:2937:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2938:5:2938:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2938:5:2938:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2938:5:2938:20 | ...::f(...) | T | main.rs:2684:5:2686:5 | dyn MyTrait | +| main.rs:2938:5:2938:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2938:16:2938:19 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2939:5:2939:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:13:26:133:1 | { ... } | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:13:26:133:1 | { ... } | T | {EXTERNAL LOCATION} | () | | pattern_matching.rs:15:5:18:5 | if ... {...} | | {EXTERNAL LOCATION} | () | @@ -5455,6 +5669,8 @@ inferType | closure.rs:10:18:10:24 | add_one | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | | closure.rs:10:18:10:24 | add_one | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:10:18:10:27 | add_one(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:10:25:10:27 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:10:25:10:27 | ArgList | T0 | {EXTERNAL LOCATION} | i64 | | closure.rs:10:26:10:26 | x | | {EXTERNAL LOCATION} | i64 | | closure.rs:13:13:13:13 | x | | {EXTERNAL LOCATION} | i64 | | closure.rs:13:17:13:34 | ...::default(...) | | {EXTERNAL LOCATION} | i64 | @@ -5474,6 +5690,8 @@ inferType | closure.rs:15:18:15:25 | add_zero | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | | closure.rs:15:18:15:25 | add_zero | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:15:18:15:28 | add_zero(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:15:26:15:28 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:15:26:15:28 | ArgList | T0 | {EXTERNAL LOCATION} | i64 | | closure.rs:15:27:15:27 | x | | {EXTERNAL LOCATION} | i64 | | closure.rs:17:13:17:21 | _get_bool | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:17:13:17:21 | _get_bool | dyn(Args) | {EXTERNAL LOCATION} | () | @@ -5501,6 +5719,8 @@ inferType | closure.rs:25:18:25:19 | id | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | | closure.rs:25:18:25:19 | id | dyn(Output) | {EXTERNAL LOCATION} | bool | | closure.rs:25:18:25:25 | id(...) | | {EXTERNAL LOCATION} | bool | +| closure.rs:25:20:25:25 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:25:20:25:25 | ArgList | T0 | {EXTERNAL LOCATION} | bool | | closure.rs:25:21:25:24 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:28:13:28:15 | id2 | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:28:13:28:15 | id2 | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | @@ -5520,18 +5740,24 @@ inferType | closure.rs:30:25:30:27 | id2 | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | | closure.rs:30:25:30:27 | id2 | dyn(Output) | {EXTERNAL LOCATION} | bool | | closure.rs:30:25:30:32 | id2(...) | | {EXTERNAL LOCATION} | bool | +| closure.rs:30:28:30:32 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:30:28:30:32 | ArgList | T0 | {EXTERNAL LOCATION} | bool | | closure.rs:30:29:30:31 | arg | | {EXTERNAL LOCATION} | bool | | closure.rs:35:44:35:44 | f | | closure.rs:35:20:35:41 | F | | closure.rs:35:50:37:5 | { ... } | | {EXTERNAL LOCATION} | () | | closure.rs:36:13:36:19 | _return | | {EXTERNAL LOCATION} | i64 | | closure.rs:36:23:36:23 | f | | closure.rs:35:20:35:41 | F | | closure.rs:36:23:36:29 | f(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:36:24:36:29 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:36:24:36:29 | ArgList | T0 | {EXTERNAL LOCATION} | bool | | closure.rs:36:25:36:28 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:39:45:39:45 | f | | closure.rs:39:28:39:42 | F | | closure.rs:39:51:41:5 | { ... } | | {EXTERNAL LOCATION} | () | | closure.rs:40:13:40:19 | _return | | {EXTERNAL LOCATION} | () | | closure.rs:40:23:40:23 | f | | closure.rs:39:28:39:42 | F | | closure.rs:40:23:40:29 | f(...) | | {EXTERNAL LOCATION} | () | +| closure.rs:40:24:40:29 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:40:24:40:29 | ArgList | T0 | {EXTERNAL LOCATION} | bool | | closure.rs:40:25:40:28 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:43:46:43:46 | f | | closure.rs:43:22:43:43 | F | | closure.rs:43:52:46:5 | { ... } | | {EXTERNAL LOCATION} | () | @@ -5539,74 +5765,77 @@ inferType | closure.rs:44:19:44:36 | ...::default(...) | | {EXTERNAL LOCATION} | bool | | closure.rs:45:9:45:9 | f | | closure.rs:43:22:43:43 | F | | closure.rs:45:9:45:14 | f(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:45:10:45:14 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:45:10:45:14 | ArgList | T0 | {EXTERNAL LOCATION} | bool | | closure.rs:45:11:45:13 | arg | | {EXTERNAL LOCATION} | bool | | closure.rs:48:39:48:39 | f | | closure.rs:48:20:48:36 | F | | closure.rs:48:45:48:45 | a | | closure.rs:48:14:48:14 | A | | closure.rs:48:56:50:5 | { ... } | | closure.rs:48:17:48:17 | B | | closure.rs:49:9:49:9 | f | | closure.rs:48:20:48:36 | F | | closure.rs:49:9:49:12 | f(...) | | closure.rs:48:17:48:17 | B | +| closure.rs:49:10:49:12 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:49:10:49:12 | ArgList | T0 | closure.rs:48:14:48:14 | A | | closure.rs:49:11:49:11 | a | | closure.rs:48:14:48:14 | A | | closure.rs:52:18:52:18 | f | | closure.rs:52:21:52:43 | impl ... | | closure.rs:52:53:54:5 | { ... } | | {EXTERNAL LOCATION} | i64 | | closure.rs:53:9:53:9 | f | | closure.rs:52:21:52:43 | impl ... | | closure.rs:53:9:53:12 | f(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:53:10:53:12 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:53:10:53:12 | ArgList | T0 | {EXTERNAL LOCATION} | i32 | | closure.rs:53:11:53:11 | 2 | | {EXTERNAL LOCATION} | i32 | -| closure.rs:53:11:53:11 | 2 | | {EXTERNAL LOCATION} | i64 | | closure.rs:56:15:68:5 | { ... } | | {EXTERNAL LOCATION} | () | | closure.rs:57:13:57:13 | f | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:57:13:57:13 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:57:13:57:13 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | -| closure.rs:57:13:57:13 | f | dyn(Output) | {EXTERNAL LOCATION} | i32 | | closure.rs:57:13:57:13 | f | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:57:17:63:9 | \|...\| ... | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:57:17:63:9 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:57:17:63:9 | \|...\| ... | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | -| closure.rs:57:17:63:9 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | i32 | | closure.rs:57:17:63:9 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:57:18:57:18 | x | | {EXTERNAL LOCATION} | bool | | closure.rs:57:34:63:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| closure.rs:57:34:63:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | closure.rs:58:13:62:13 | if x {...} else {...} | | {EXTERNAL LOCATION} | i32 | -| closure.rs:58:13:62:13 | if x {...} else {...} | | {EXTERNAL LOCATION} | i64 | | closure.rs:58:16:58:16 | x | | {EXTERNAL LOCATION} | bool | | closure.rs:58:18:60:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| closure.rs:58:18:60:13 | { ... } | | {EXTERNAL LOCATION} | i64 | | closure.rs:59:17:59:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| closure.rs:59:17:59:17 | 1 | | {EXTERNAL LOCATION} | i64 | | closure.rs:60:20:62:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| closure.rs:60:20:62:13 | { ... } | | {EXTERNAL LOCATION} | i64 | | closure.rs:61:17:61:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| closure.rs:61:17:61:17 | 0 | | {EXTERNAL LOCATION} | i64 | -| closure.rs:64:13:64:14 | _r | | {EXTERNAL LOCATION} | i32 | | closure.rs:64:13:64:14 | _r | | {EXTERNAL LOCATION} | i64 | -| closure.rs:64:18:64:31 | apply(...) | | {EXTERNAL LOCATION} | i32 | | closure.rs:64:18:64:31 | apply(...) | | {EXTERNAL LOCATION} | i64 | | closure.rs:64:24:64:24 | f | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:64:24:64:24 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:64:24:64:24 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | -| closure.rs:64:24:64:24 | f | dyn(Output) | {EXTERNAL LOCATION} | i32 | | closure.rs:64:24:64:24 | f | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:64:27:64:30 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:66:13:66:13 | f | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:66:13:66:13 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:66:13:66:13 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | | closure.rs:66:17:66:25 | \|...\| ... | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:66:17:66:25 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:66:17:66:25 | \|...\| ... | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:66:18:66:18 | x | | {EXTERNAL LOCATION} | i64 | +| closure.rs:66:21:66:21 | x | | {EXTERNAL LOCATION} | i64 | | closure.rs:66:25:66:25 | 1 | | {EXTERNAL LOCATION} | i32 | | closure.rs:67:13:67:15 | _r2 | | {EXTERNAL LOCATION} | i64 | | closure.rs:67:19:67:30 | apply_two(...) | | {EXTERNAL LOCATION} | i64 | | closure.rs:67:29:67:29 | f | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:67:29:67:29 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:67:29:67:29 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | | closure.rs:72:47:72:47 | f | | closure.rs:72:20:72:40 | F | | closure.rs:72:53:74:5 | { ... } | | {EXTERNAL LOCATION} | () | | closure.rs:73:13:73:19 | _return | | {EXTERNAL LOCATION} | i64 | | closure.rs:73:23:73:23 | f | | closure.rs:72:20:72:40 | F | | closure.rs:73:23:73:29 | f(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:73:24:73:29 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:73:24:73:29 | ArgList | T0 | {EXTERNAL LOCATION} | bool | | closure.rs:73:25:73:28 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:76:48:76:48 | f | | closure.rs:76:28:76:41 | F | | closure.rs:76:54:78:5 | { ... } | | {EXTERNAL LOCATION} | () | | closure.rs:77:13:77:19 | _return | | {EXTERNAL LOCATION} | () | | closure.rs:77:23:77:23 | f | | closure.rs:76:28:76:41 | F | | closure.rs:77:23:77:29 | f(...) | | {EXTERNAL LOCATION} | () | +| closure.rs:77:24:77:29 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:77:24:77:29 | ArgList | T0 | {EXTERNAL LOCATION} | bool | | closure.rs:77:25:77:28 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:80:49:80:49 | f | | closure.rs:80:22:80:42 | F | | closure.rs:80:55:83:5 | { ... } | | {EXTERNAL LOCATION} | () | @@ -5614,74 +5843,77 @@ inferType | closure.rs:81:19:81:36 | ...::default(...) | | {EXTERNAL LOCATION} | bool | | closure.rs:82:9:82:9 | f | | closure.rs:80:22:80:42 | F | | closure.rs:82:9:82:14 | f(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:82:10:82:14 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:82:10:82:14 | ArgList | T0 | {EXTERNAL LOCATION} | bool | | closure.rs:82:11:82:13 | arg | | {EXTERNAL LOCATION} | bool | | closure.rs:85:42:85:42 | f | | closure.rs:85:20:85:35 | F | | closure.rs:85:48:85:48 | a | | closure.rs:85:14:85:14 | A | | closure.rs:85:59:87:5 | { ... } | | closure.rs:85:17:85:17 | B | | closure.rs:86:9:86:9 | f | | closure.rs:85:20:85:35 | F | | closure.rs:86:9:86:12 | f(...) | | closure.rs:85:17:85:17 | B | +| closure.rs:86:10:86:12 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:86:10:86:12 | ArgList | T0 | closure.rs:85:14:85:14 | A | | closure.rs:86:11:86:11 | a | | closure.rs:85:14:85:14 | A | | closure.rs:89:22:89:22 | f | | closure.rs:89:25:89:46 | impl ... | | closure.rs:89:56:91:5 | { ... } | | {EXTERNAL LOCATION} | i64 | | closure.rs:90:9:90:9 | f | | closure.rs:89:25:89:46 | impl ... | | closure.rs:90:9:90:12 | f(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:90:10:90:12 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:90:10:90:12 | ArgList | T0 | {EXTERNAL LOCATION} | i32 | | closure.rs:90:11:90:11 | 2 | | {EXTERNAL LOCATION} | i32 | -| closure.rs:90:11:90:11 | 2 | | {EXTERNAL LOCATION} | i64 | | closure.rs:93:15:105:5 | { ... } | | {EXTERNAL LOCATION} | () | | closure.rs:94:13:94:13 | f | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:94:13:94:13 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:94:13:94:13 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | -| closure.rs:94:13:94:13 | f | dyn(Output) | {EXTERNAL LOCATION} | i32 | | closure.rs:94:13:94:13 | f | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:94:17:100:9 | \|...\| ... | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:94:17:100:9 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:94:17:100:9 | \|...\| ... | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | -| closure.rs:94:17:100:9 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | i32 | | closure.rs:94:17:100:9 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:94:18:94:18 | x | | {EXTERNAL LOCATION} | bool | | closure.rs:94:34:100:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| closure.rs:94:34:100:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | closure.rs:95:13:99:13 | if x {...} else {...} | | {EXTERNAL LOCATION} | i32 | -| closure.rs:95:13:99:13 | if x {...} else {...} | | {EXTERNAL LOCATION} | i64 | | closure.rs:95:16:95:16 | x | | {EXTERNAL LOCATION} | bool | | closure.rs:95:18:97:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| closure.rs:95:18:97:13 | { ... } | | {EXTERNAL LOCATION} | i64 | | closure.rs:96:17:96:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| closure.rs:96:17:96:17 | 1 | | {EXTERNAL LOCATION} | i64 | | closure.rs:97:20:99:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| closure.rs:97:20:99:13 | { ... } | | {EXTERNAL LOCATION} | i64 | | closure.rs:98:17:98:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| closure.rs:98:17:98:17 | 0 | | {EXTERNAL LOCATION} | i64 | -| closure.rs:101:13:101:14 | _r | | {EXTERNAL LOCATION} | i32 | | closure.rs:101:13:101:14 | _r | | {EXTERNAL LOCATION} | i64 | -| closure.rs:101:18:101:31 | apply(...) | | {EXTERNAL LOCATION} | i32 | | closure.rs:101:18:101:31 | apply(...) | | {EXTERNAL LOCATION} | i64 | | closure.rs:101:24:101:24 | f | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:101:24:101:24 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:101:24:101:24 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | -| closure.rs:101:24:101:24 | f | dyn(Output) | {EXTERNAL LOCATION} | i32 | | closure.rs:101:24:101:24 | f | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:101:27:101:30 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:103:13:103:13 | f | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:103:13:103:13 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:103:13:103:13 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | | closure.rs:103:17:103:25 | \|...\| ... | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:103:17:103:25 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:103:17:103:25 | \|...\| ... | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:103:18:103:18 | x | | {EXTERNAL LOCATION} | i64 | +| closure.rs:103:21:103:21 | x | | {EXTERNAL LOCATION} | i64 | | closure.rs:103:25:103:25 | 1 | | {EXTERNAL LOCATION} | i32 | | closure.rs:104:13:104:15 | _r2 | | {EXTERNAL LOCATION} | i64 | | closure.rs:104:19:104:30 | apply_two(...) | | {EXTERNAL LOCATION} | i64 | | closure.rs:104:29:104:29 | f | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:104:29:104:29 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:104:29:104:29 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | | closure.rs:109:40:109:40 | f | | closure.rs:109:20:109:37 | F | | closure.rs:109:46:111:5 | { ... } | | {EXTERNAL LOCATION} | () | | closure.rs:110:13:110:19 | _return | | {EXTERNAL LOCATION} | i64 | | closure.rs:110:23:110:23 | f | | closure.rs:109:20:109:37 | F | | closure.rs:110:23:110:29 | f(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:110:24:110:29 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:110:24:110:29 | ArgList | T0 | {EXTERNAL LOCATION} | bool | | closure.rs:110:25:110:28 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:113:41:113:41 | f | | closure.rs:113:28:113:38 | F | | closure.rs:113:47:115:5 | { ... } | | {EXTERNAL LOCATION} | () | | closure.rs:114:13:114:19 | _return | | {EXTERNAL LOCATION} | () | | closure.rs:114:23:114:23 | f | | closure.rs:113:28:113:38 | F | | closure.rs:114:23:114:29 | f(...) | | {EXTERNAL LOCATION} | () | +| closure.rs:114:24:114:29 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:114:24:114:29 | ArgList | T0 | {EXTERNAL LOCATION} | bool | | closure.rs:114:25:114:28 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:117:42:117:42 | f | | closure.rs:117:22:117:39 | F | | closure.rs:117:48:120:5 | { ... } | | {EXTERNAL LOCATION} | () | @@ -5689,63 +5921,62 @@ inferType | closure.rs:118:19:118:36 | ...::default(...) | | {EXTERNAL LOCATION} | bool | | closure.rs:119:9:119:9 | f | | closure.rs:117:22:117:39 | F | | closure.rs:119:9:119:14 | f(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:119:10:119:14 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:119:10:119:14 | ArgList | T0 | {EXTERNAL LOCATION} | bool | | closure.rs:119:11:119:13 | arg | | {EXTERNAL LOCATION} | bool | | closure.rs:122:35:122:35 | f | | closure.rs:122:20:122:32 | F | | closure.rs:122:41:122:41 | a | | closure.rs:122:14:122:14 | A | | closure.rs:122:52:124:5 | { ... } | | closure.rs:122:17:122:17 | B | | closure.rs:123:9:123:9 | f | | closure.rs:122:20:122:32 | F | | closure.rs:123:9:123:12 | f(...) | | closure.rs:122:17:122:17 | B | +| closure.rs:123:10:123:12 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:123:10:123:12 | ArgList | T0 | closure.rs:122:14:122:14 | A | | closure.rs:123:11:123:11 | a | | closure.rs:122:14:122:14 | A | | closure.rs:126:18:126:18 | f | | closure.rs:126:21:126:39 | impl ... | | closure.rs:126:49:128:5 | { ... } | | {EXTERNAL LOCATION} | i64 | | closure.rs:127:9:127:9 | f | | closure.rs:126:21:126:39 | impl ... | | closure.rs:127:9:127:12 | f(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:127:10:127:12 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:127:10:127:12 | ArgList | T0 | {EXTERNAL LOCATION} | i32 | | closure.rs:127:11:127:11 | 2 | | {EXTERNAL LOCATION} | i32 | -| closure.rs:127:11:127:11 | 2 | | {EXTERNAL LOCATION} | i64 | | closure.rs:130:15:142:5 | { ... } | | {EXTERNAL LOCATION} | () | | closure.rs:131:13:131:13 | f | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:131:13:131:13 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:131:13:131:13 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | -| closure.rs:131:13:131:13 | f | dyn(Output) | {EXTERNAL LOCATION} | i32 | | closure.rs:131:13:131:13 | f | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:131:17:137:9 | \|...\| ... | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:131:17:137:9 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:131:17:137:9 | \|...\| ... | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | -| closure.rs:131:17:137:9 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | i32 | | closure.rs:131:17:137:9 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:131:18:131:18 | x | | {EXTERNAL LOCATION} | bool | | closure.rs:131:34:137:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| closure.rs:131:34:137:9 | { ... } | | {EXTERNAL LOCATION} | i64 | | closure.rs:132:13:136:13 | if x {...} else {...} | | {EXTERNAL LOCATION} | i32 | -| closure.rs:132:13:136:13 | if x {...} else {...} | | {EXTERNAL LOCATION} | i64 | | closure.rs:132:16:132:16 | x | | {EXTERNAL LOCATION} | bool | | closure.rs:132:18:134:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| closure.rs:132:18:134:13 | { ... } | | {EXTERNAL LOCATION} | i64 | | closure.rs:133:17:133:17 | 1 | | {EXTERNAL LOCATION} | i32 | -| closure.rs:133:17:133:17 | 1 | | {EXTERNAL LOCATION} | i64 | | closure.rs:134:20:136:13 | { ... } | | {EXTERNAL LOCATION} | i32 | -| closure.rs:134:20:136:13 | { ... } | | {EXTERNAL LOCATION} | i64 | | closure.rs:135:17:135:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| closure.rs:135:17:135:17 | 0 | | {EXTERNAL LOCATION} | i64 | -| closure.rs:138:13:138:14 | _r | | {EXTERNAL LOCATION} | i32 | | closure.rs:138:13:138:14 | _r | | {EXTERNAL LOCATION} | i64 | -| closure.rs:138:18:138:31 | apply(...) | | {EXTERNAL LOCATION} | i32 | | closure.rs:138:18:138:31 | apply(...) | | {EXTERNAL LOCATION} | i64 | | closure.rs:138:24:138:24 | f | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:138:24:138:24 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:138:24:138:24 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | bool | -| closure.rs:138:24:138:24 | f | dyn(Output) | {EXTERNAL LOCATION} | i32 | | closure.rs:138:24:138:24 | f | dyn(Output) | {EXTERNAL LOCATION} | i64 | | closure.rs:138:27:138:30 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:140:13:140:13 | f | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:140:13:140:13 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:140:13:140:13 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | | closure.rs:140:17:140:25 | \|...\| ... | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:140:17:140:25 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:140:17:140:25 | \|...\| ... | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:140:18:140:18 | x | | {EXTERNAL LOCATION} | i64 | +| closure.rs:140:21:140:21 | x | | {EXTERNAL LOCATION} | i64 | | closure.rs:140:25:140:25 | 1 | | {EXTERNAL LOCATION} | i32 | | closure.rs:141:13:141:15 | _r2 | | {EXTERNAL LOCATION} | i64 | | closure.rs:141:19:141:30 | apply_two(...) | | {EXTERNAL LOCATION} | i64 | | closure.rs:141:29:141:29 | f | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:141:29:141:29 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:141:29:141:29 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | | closure.rs:146:54:146:54 | f | | {EXTERNAL LOCATION} | Box | | closure.rs:146:54:146:54 | f | A | {EXTERNAL LOCATION} | Global | | closure.rs:146:54:146:54 | f | T | closure.rs:146:26:146:51 | F | @@ -5755,6 +5986,8 @@ inferType | closure.rs:147:9:147:9 | f | A | {EXTERNAL LOCATION} | Global | | closure.rs:147:9:147:9 | f | T | closure.rs:146:26:146:51 | F | | closure.rs:147:9:147:14 | f(...) | | closure.rs:146:23:146:23 | B | +| closure.rs:147:10:147:14 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:147:10:147:14 | ArgList | T0 | closure.rs:146:20:146:20 | A | | closure.rs:147:11:147:13 | arg | | closure.rs:146:20:146:20 | A | | closure.rs:150:30:150:30 | f | | {EXTERNAL LOCATION} | Box | | closure.rs:150:30:150:30 | f | A | {EXTERNAL LOCATION} | Global | @@ -5788,6 +6021,286 @@ inferType | closure.rs:152:41:152:41 | _ | | {EXTERNAL LOCATION} | i64 | | closure.rs:152:49:152:52 | true | | {EXTERNAL LOCATION} | bool | | closure.rs:152:56:152:56 | 3 | | {EXTERNAL LOCATION} | i32 | +| closure.rs:157:34:157:34 | f | | closure.rs:157:15:157:31 | F | +| closure.rs:157:40:157:40 | a | | {EXTERNAL LOCATION} | i64 | +| closure.rs:157:55:159:5 | { ... } | | {EXTERNAL LOCATION} | i64 | +| closure.rs:158:9:158:9 | f | | closure.rs:157:15:157:31 | F | +| closure.rs:158:9:158:12 | f(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:158:10:158:12 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:158:10:158:12 | ArgList | T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:158:11:158:11 | a | | {EXTERNAL LOCATION} | i64 | +| closure.rs:161:15:161:15 | f | | closure.rs:161:18:161:36 | impl ... | +| closure.rs:161:39:161:39 | a | | {EXTERNAL LOCATION} | i64 | +| closure.rs:161:54:163:5 | { ... } | | {EXTERNAL LOCATION} | i64 | +| closure.rs:162:9:162:9 | f | | closure.rs:161:18:161:36 | impl ... | +| closure.rs:162:9:162:12 | f(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:162:10:162:12 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:162:10:162:12 | ArgList | T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:162:11:162:11 | a | | {EXTERNAL LOCATION} | i64 | +| closure.rs:165:15:165:15 | f | | {EXTERNAL LOCATION} | & | +| closure.rs:165:15:165:15 | f | TRef | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:165:15:165:15 | f | TRef.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:165:15:165:15 | f | TRef.dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:165:15:165:15 | f | TRef.dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:165:39:165:39 | a | | {EXTERNAL LOCATION} | i64 | +| closure.rs:165:54:167:5 | { ... } | | {EXTERNAL LOCATION} | i64 | +| closure.rs:166:9:166:9 | f | | {EXTERNAL LOCATION} | & | +| closure.rs:166:9:166:9 | f | TRef | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:166:9:166:9 | f | TRef.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:166:9:166:9 | f | TRef.dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:166:9:166:9 | f | TRef.dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:166:9:166:12 | f(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:166:10:166:12 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:166:10:166:12 | ArgList | T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:166:11:166:11 | a | | {EXTERNAL LOCATION} | i64 | +| closure.rs:169:41:169:41 | f | | closure.rs:169:15:169:34 | F | +| closure.rs:169:47:169:47 | a | | {EXTERNAL LOCATION} | i64 | +| closure.rs:169:62:171:5 | { ... } | | {EXTERNAL LOCATION} | i64 | +| closure.rs:170:9:170:9 | f | | closure.rs:169:15:169:34 | F | +| closure.rs:170:9:170:12 | f(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:170:10:170:12 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:170:10:170:12 | ArgList | T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:170:11:170:11 | a | | {EXTERNAL LOCATION} | i64 | +| closure.rs:173:15:173:15 | f | | {EXTERNAL LOCATION} | &mut | +| closure.rs:173:15:173:15 | f | TRefMut | {EXTERNAL LOCATION} | dyn FnMut | +| closure.rs:173:15:173:15 | f | TRefMut.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:173:15:173:15 | f | TRefMut.dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:173:15:173:15 | f | TRefMut.dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:173:46:173:46 | a | | {EXTERNAL LOCATION} | i64 | +| closure.rs:173:61:175:5 | { ... } | | {EXTERNAL LOCATION} | i64 | +| closure.rs:174:9:174:9 | f | | {EXTERNAL LOCATION} | &mut | +| closure.rs:174:9:174:9 | f | TRefMut | {EXTERNAL LOCATION} | dyn FnMut | +| closure.rs:174:9:174:9 | f | TRefMut.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:174:9:174:9 | f | TRefMut.dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:174:9:174:9 | f | TRefMut.dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:174:9:174:12 | f(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:174:10:174:12 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:174:10:174:12 | ArgList | T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:174:11:174:11 | a | | {EXTERNAL LOCATION} | i64 | +| closure.rs:177:18:177:18 | f | | closure.rs:177:21:177:37 | impl ... | +| closure.rs:177:40:177:40 | a | | closure.rs:177:15:177:15 | T | +| closure.rs:177:53:179:5 | { ... } | | {EXTERNAL LOCATION} | i64 | +| closure.rs:178:9:178:9 | f | | closure.rs:177:21:177:37 | impl ... | +| closure.rs:178:9:178:12 | f(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:178:10:178:12 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:178:10:178:12 | ArgList | T0 | closure.rs:177:15:177:15 | T | +| closure.rs:178:11:178:11 | a | | closure.rs:177:15:177:15 | T | +| closure.rs:181:42:181:42 | f | | closure.rs:181:18:181:35 | F | +| closure.rs:181:48:181:48 | a | | closure.rs:181:15:181:15 | T | +| closure.rs:181:61:183:5 | { ... } | | {EXTERNAL LOCATION} | i64 | +| closure.rs:182:9:182:9 | f | | closure.rs:181:18:181:35 | F | +| closure.rs:182:9:182:12 | f(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:182:10:182:12 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:182:10:182:12 | ArgList | T0 | closure.rs:181:15:181:15 | T | +| closure.rs:182:11:182:11 | a | | closure.rs:181:15:181:15 | T | +| closure.rs:185:15:206:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:186:13:186:13 | f | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:186:13:186:13 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:186:13:186:13 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:186:13:186:13 | f | dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:186:17:186:21 | \|...\| x | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:186:17:186:21 | \|...\| x | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:186:17:186:21 | \|...\| x | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:186:17:186:21 | \|...\| x | dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:186:18:186:18 | x | | {EXTERNAL LOCATION} | i64 | +| closure.rs:186:21:186:21 | x | | {EXTERNAL LOCATION} | i64 | +| closure.rs:187:13:187:14 | _r | | {EXTERNAL LOCATION} | i64 | +| closure.rs:187:18:187:32 | apply1(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:187:25:187:25 | f | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:187:25:187:25 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:187:25:187:25 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:187:25:187:25 | f | dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:187:28:187:31 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:189:13:189:13 | f | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:189:13:189:13 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:189:13:189:13 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:189:13:189:13 | f | dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:189:17:189:21 | \|...\| x | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:189:17:189:21 | \|...\| x | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:189:17:189:21 | \|...\| x | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:189:17:189:21 | \|...\| x | dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:189:18:189:18 | x | | {EXTERNAL LOCATION} | i64 | +| closure.rs:189:21:189:21 | x | | {EXTERNAL LOCATION} | i64 | +| closure.rs:190:13:190:14 | _r | | {EXTERNAL LOCATION} | i64 | +| closure.rs:190:18:190:32 | apply2(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:190:25:190:25 | f | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:190:25:190:25 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:190:25:190:25 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:190:25:190:25 | f | dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:190:28:190:31 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:192:13:192:13 | f | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:192:13:192:13 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:192:13:192:13 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:192:13:192:13 | f | dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:192:17:192:21 | \|...\| x | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:192:17:192:21 | \|...\| x | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:192:17:192:21 | \|...\| x | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:192:17:192:21 | \|...\| x | dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:192:18:192:18 | x | | {EXTERNAL LOCATION} | i64 | +| closure.rs:192:21:192:21 | x | | {EXTERNAL LOCATION} | i64 | +| closure.rs:193:13:193:14 | _r | | {EXTERNAL LOCATION} | i64 | +| closure.rs:193:18:193:33 | apply3(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:193:25:193:26 | &f | | {EXTERNAL LOCATION} | & | +| closure.rs:193:25:193:26 | &f | TRef | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:193:25:193:26 | &f | TRef.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:193:25:193:26 | &f | TRef.dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:193:25:193:26 | &f | TRef.dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:193:26:193:26 | f | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:193:26:193:26 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:193:26:193:26 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:193:26:193:26 | f | dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:193:29:193:32 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:195:13:195:13 | f | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:195:13:195:13 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:195:13:195:13 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:195:13:195:13 | f | dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:195:17:195:21 | \|...\| x | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:195:17:195:21 | \|...\| x | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:195:17:195:21 | \|...\| x | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:195:17:195:21 | \|...\| x | dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:195:18:195:18 | x | | {EXTERNAL LOCATION} | i64 | +| closure.rs:195:21:195:21 | x | | {EXTERNAL LOCATION} | i64 | +| closure.rs:196:13:196:14 | _r | | {EXTERNAL LOCATION} | i64 | +| closure.rs:196:18:196:32 | apply4(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:196:25:196:25 | f | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:196:25:196:25 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:196:25:196:25 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:196:25:196:25 | f | dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:196:28:196:31 | 4i64 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:198:17:198:17 | f | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:198:17:198:17 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:198:21:198:25 | \|...\| x | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:198:21:198:25 | \|...\| x | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:199:13:199:14 | _r | | {EXTERNAL LOCATION} | i64 | +| closure.rs:199:18:199:37 | apply5(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:199:25:199:30 | &mut f | | {EXTERNAL LOCATION} | &mut | +| closure.rs:199:25:199:30 | &mut f | TRefMut | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:199:25:199:30 | &mut f | TRefMut.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:199:30:199:30 | f | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:199:30:199:30 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:199:33:199:36 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:201:13:201:13 | f | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:201:13:201:13 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:201:13:201:13 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:201:13:201:13 | f | dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:201:17:201:21 | \|...\| x | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:201:17:201:21 | \|...\| x | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:201:17:201:21 | \|...\| x | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:201:17:201:21 | \|...\| x | dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:201:18:201:18 | x | | {EXTERNAL LOCATION} | i64 | +| closure.rs:201:21:201:21 | x | | {EXTERNAL LOCATION} | i64 | +| closure.rs:202:13:202:14 | _r | | {EXTERNAL LOCATION} | i64 | +| closure.rs:202:18:202:32 | apply6(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:202:25:202:25 | f | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:202:25:202:25 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:202:25:202:25 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:202:25:202:25 | f | dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:202:28:202:31 | 6i64 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:204:13:204:13 | f | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:204:13:204:13 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:204:13:204:13 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:204:13:204:13 | f | dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:204:17:204:21 | \|...\| x | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:204:17:204:21 | \|...\| x | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:204:17:204:21 | \|...\| x | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:204:17:204:21 | \|...\| x | dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:204:18:204:18 | x | | {EXTERNAL LOCATION} | i64 | +| closure.rs:204:21:204:21 | x | | {EXTERNAL LOCATION} | i64 | +| closure.rs:205:13:205:14 | _r | | {EXTERNAL LOCATION} | i64 | +| closure.rs:205:18:205:32 | apply7(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:205:25:205:25 | f | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:205:25:205:25 | f | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:205:25:205:25 | f | dyn(Args).T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:205:25:205:25 | f | dyn(Output) | {EXTERNAL LOCATION} | i64 | +| closure.rs:205:28:205:31 | 7i64 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:217:18:217:22 | SelfParam | | {EXTERNAL LOCATION} | & | +| closure.rs:217:18:217:22 | SelfParam | TRef | closure.rs:212:5:212:19 | S | +| closure.rs:217:18:217:22 | SelfParam | TRef.T | closure.rs:214:10:214:10 | T | +| closure.rs:217:42:219:9 | { ... } | | {EXTERNAL LOCATION} | & | +| closure.rs:217:42:219:9 | { ... } | TRef | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:217:42:219:9 | { ... } | TRef.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:217:42:219:9 | { ... } | TRef.dyn(Args).T0 | closure.rs:214:10:214:10 | T | +| closure.rs:217:42:219:9 | { ... } | TRef.dyn(Output) | {EXTERNAL LOCATION} | bool | +| closure.rs:218:13:218:22 | &... | | {EXTERNAL LOCATION} | & | +| closure.rs:218:13:218:22 | &... | TRef | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:218:13:218:22 | &... | TRef.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:218:13:218:22 | &... | TRef.dyn(Args).T0 | closure.rs:214:10:214:10 | T | +| closure.rs:218:13:218:22 | &... | TRef.dyn(Output) | {EXTERNAL LOCATION} | bool | +| closure.rs:218:14:218:22 | \|...\| false | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:218:14:218:22 | \|...\| false | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:218:14:218:22 | \|...\| false | dyn(Args).T0 | closure.rs:214:10:214:10 | T | +| closure.rs:218:14:218:22 | \|...\| false | dyn(Output) | {EXTERNAL LOCATION} | bool | +| closure.rs:218:15:218:15 | _ | | closure.rs:214:10:214:10 | T | +| closure.rs:218:18:218:22 | false | | {EXTERNAL LOCATION} | bool | +| closure.rs:222:19:240:5 | { ... } | | {EXTERNAL LOCATION} | () | +| closure.rs:223:13:223:13 | x | | {EXTERNAL LOCATION} | i64 | +| closure.rs:223:17:223:20 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| closure.rs:224:13:224:13 | v | | {EXTERNAL LOCATION} | i64 | +| closure.rs:224:17:224:34 | ...::default(...) | | {EXTERNAL LOCATION} | i64 | +| closure.rs:225:13:225:13 | s | | closure.rs:212:5:212:19 | S | +| closure.rs:225:13:225:13 | s | T | {EXTERNAL LOCATION} | i64 | +| closure.rs:225:17:225:20 | S(...) | | closure.rs:212:5:212:19 | S | +| closure.rs:225:17:225:20 | S(...) | T | {EXTERNAL LOCATION} | i64 | +| closure.rs:225:19:225:19 | v | | {EXTERNAL LOCATION} | i64 | +| closure.rs:226:13:226:16 | _ret | | {EXTERNAL LOCATION} | bool | +| closure.rs:226:20:226:20 | s | | closure.rs:212:5:212:19 | S | +| closure.rs:226:20:226:20 | s | T | {EXTERNAL LOCATION} | i64 | +| closure.rs:226:20:226:23 | s(...) | | {EXTERNAL LOCATION} | bool | +| closure.rs:226:21:226:23 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:226:21:226:23 | ArgList | T0 | {EXTERNAL LOCATION} | i64 | +| closure.rs:226:22:226:22 | x | | {EXTERNAL LOCATION} | i64 | +| closure.rs:228:13:228:13 | x | | {EXTERNAL LOCATION} | i32 | +| closure.rs:228:17:228:20 | 0i32 | | {EXTERNAL LOCATION} | i32 | +| closure.rs:229:13:229:13 | v | | {EXTERNAL LOCATION} | i32 | +| closure.rs:229:17:229:34 | ...::default(...) | | {EXTERNAL LOCATION} | i32 | +| closure.rs:230:13:230:13 | s | | closure.rs:212:5:212:19 | S | +| closure.rs:230:13:230:13 | s | T | {EXTERNAL LOCATION} | i32 | +| closure.rs:230:17:230:20 | S(...) | | closure.rs:212:5:212:19 | S | +| closure.rs:230:17:230:20 | S(...) | T | {EXTERNAL LOCATION} | i32 | +| closure.rs:230:19:230:19 | v | | {EXTERNAL LOCATION} | i32 | +| closure.rs:231:13:231:17 | s_ref | | {EXTERNAL LOCATION} | & | +| closure.rs:231:13:231:17 | s_ref | TRef | closure.rs:212:5:212:19 | S | +| closure.rs:231:13:231:17 | s_ref | TRef.T | {EXTERNAL LOCATION} | i32 | +| closure.rs:231:21:231:22 | &s | | {EXTERNAL LOCATION} | & | +| closure.rs:231:21:231:22 | &s | TRef | closure.rs:212:5:212:19 | S | +| closure.rs:231:21:231:22 | &s | TRef.T | {EXTERNAL LOCATION} | i32 | +| closure.rs:231:22:231:22 | s | | closure.rs:212:5:212:19 | S | +| closure.rs:231:22:231:22 | s | T | {EXTERNAL LOCATION} | i32 | +| closure.rs:232:13:232:16 | _ret | | {EXTERNAL LOCATION} | bool | +| closure.rs:232:20:232:24 | s_ref | | {EXTERNAL LOCATION} | & | +| closure.rs:232:20:232:24 | s_ref | TRef | closure.rs:212:5:212:19 | S | +| closure.rs:232:20:232:24 | s_ref | TRef.T | {EXTERNAL LOCATION} | i32 | +| closure.rs:232:20:232:27 | s_ref(...) | | {EXTERNAL LOCATION} | bool | +| closure.rs:232:25:232:27 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:232:25:232:27 | ArgList | T0 | {EXTERNAL LOCATION} | i32 | +| closure.rs:232:26:232:26 | x | | {EXTERNAL LOCATION} | i32 | +| closure.rs:238:13:238:13 | c | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:238:13:238:13 | c | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:238:13:238:13 | c | dyn(Args).T0 | {EXTERNAL LOCATION} | i32 | +| closure.rs:238:13:238:13 | c | dyn(Output) | {EXTERNAL LOCATION} | i32 | +| closure.rs:238:17:238:21 | \|...\| x | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:238:17:238:21 | \|...\| x | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:238:17:238:21 | \|...\| x | dyn(Args).T0 | {EXTERNAL LOCATION} | i32 | +| closure.rs:238:17:238:21 | \|...\| x | dyn(Output) | {EXTERNAL LOCATION} | i32 | +| closure.rs:238:18:238:18 | x | | {EXTERNAL LOCATION} | i32 | +| closure.rs:238:21:238:21 | x | | {EXTERNAL LOCATION} | i32 | +| closure.rs:239:9:239:12 | (...) | | {EXTERNAL LOCATION} | & | +| closure.rs:239:9:239:12 | (...) | TRef | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:239:9:239:12 | (...) | TRef.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:239:9:239:12 | (...) | TRef.dyn(Args).T0 | {EXTERNAL LOCATION} | i32 | +| closure.rs:239:9:239:12 | (...) | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| closure.rs:239:10:239:11 | &c | | {EXTERNAL LOCATION} | & | +| closure.rs:239:10:239:11 | &c | TRef | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:239:10:239:11 | &c | TRef.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:239:10:239:11 | &c | TRef.dyn(Args).T0 | {EXTERNAL LOCATION} | i32 | +| closure.rs:239:10:239:11 | &c | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | +| closure.rs:239:11:239:11 | c | | {EXTERNAL LOCATION} | dyn Fn | +| closure.rs:239:11:239:11 | c | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:239:11:239:11 | c | dyn(Args).T0 | {EXTERNAL LOCATION} | i32 | +| closure.rs:239:11:239:11 | c | dyn(Output) | {EXTERNAL LOCATION} | i32 | +| closure.rs:239:13:239:15 | ArgList | | {EXTERNAL LOCATION} | (T_1) | +| closure.rs:239:13:239:15 | ArgList | T0 | {EXTERNAL LOCATION} | i32 | +| closure.rs:239:14:239:14 | x | | {EXTERNAL LOCATION} | i32 | | dereference.rs:13:14:13:18 | SelfParam | | {EXTERNAL LOCATION} | & | | dereference.rs:13:14:13:18 | SelfParam | TRef | dereference.rs:5:1:7:1 | MyIntPointer | | dereference.rs:13:29:15:5 | { ... } | | {EXTERNAL LOCATION} | & | @@ -9078,14 +9591,21 @@ inferType | main.rs:1478:28:1478:41 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1478:28:1478:41 | ...::Ok(...) | T | main.rs:1454:5:1455:14 | S1 | | main.rs:1478:39:1478:40 | S1 | | main.rs:1454:5:1455:14 | S1 | +| main.rs:1480:13:1480:13 | y | | main.rs:1454:5:1455:14 | S1 | | main.rs:1480:17:1480:17 | x | | {EXTERNAL LOCATION} | Result | | main.rs:1480:17:1480:17 | x | T | {EXTERNAL LOCATION} | Result | | main.rs:1480:17:1480:17 | x | T.T | main.rs:1454:5:1455:14 | S1 | | main.rs:1480:17:1480:18 | TryExpr | | {EXTERNAL LOCATION} | Result | | main.rs:1480:17:1480:18 | TryExpr | T | main.rs:1454:5:1455:14 | S1 | | main.rs:1480:17:1480:29 | ... .map(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1480:17:1480:29 | ... .map(...) | T | main.rs:1454:5:1455:14 | S1 | +| main.rs:1480:17:1480:30 | TryExpr | | main.rs:1454:5:1455:14 | S1 | | main.rs:1480:24:1480:28 | \|...\| s | | {EXTERNAL LOCATION} | dyn Fn | | main.rs:1480:24:1480:28 | \|...\| s | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| main.rs:1480:24:1480:28 | \|...\| s | dyn(Args).T0 | main.rs:1454:5:1455:14 | S1 | +| main.rs:1480:24:1480:28 | \|...\| s | dyn(Output) | main.rs:1454:5:1455:14 | S1 | +| main.rs:1480:25:1480:25 | s | | main.rs:1454:5:1455:14 | S1 | +| main.rs:1480:28:1480:28 | s | | main.rs:1454:5:1455:14 | S1 | | main.rs:1481:9:1481:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1481:9:1481:22 | ...::Ok(...) | E | main.rs:1457:5:1458:14 | S2 | | main.rs:1481:9:1481:22 | ...::Ok(...) | T | main.rs:1454:5:1455:14 | S1 | @@ -9101,26 +9621,36 @@ inferType | main.rs:1487:21:1487:25 | input | E | main.rs:1454:5:1455:14 | S1 | | main.rs:1487:21:1487:25 | input | T | main.rs:1486:20:1486:27 | T | | main.rs:1487:21:1487:26 | TryExpr | | main.rs:1486:20:1486:27 | T | +| main.rs:1488:13:1488:18 | mapped | | main.rs:1486:20:1486:27 | T | | main.rs:1488:22:1488:38 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1488:22:1488:38 | ...::Ok(...) | E | main.rs:1454:5:1455:14 | S1 | | main.rs:1488:22:1488:38 | ...::Ok(...) | T | main.rs:1486:20:1486:27 | T | | main.rs:1488:22:1491:10 | ... .and_then(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1488:22:1491:10 | ... .and_then(...) | E | main.rs:1454:5:1455:14 | S1 | +| main.rs:1488:22:1491:10 | ... .and_then(...) | T | main.rs:1486:20:1486:27 | T | +| main.rs:1488:22:1491:11 | TryExpr | | main.rs:1486:20:1486:27 | T | | main.rs:1488:33:1488:37 | value | | main.rs:1486:20:1486:27 | T | | main.rs:1488:49:1491:9 | \|...\| ... | | {EXTERNAL LOCATION} | dyn Fn | | main.rs:1488:49:1491:9 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| main.rs:1488:49:1491:9 | \|...\| ... | dyn(Args).T0 | main.rs:1486:20:1486:27 | T | | main.rs:1488:49:1491:9 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | Result | | main.rs:1488:49:1491:9 | \|...\| ... | dyn(Output).E | main.rs:1454:5:1455:14 | S1 | +| main.rs:1488:49:1491:9 | \|...\| ... | dyn(Output).T | main.rs:1486:20:1486:27 | T | +| main.rs:1488:50:1488:50 | v | | main.rs:1486:20:1486:27 | T | | main.rs:1488:53:1491:9 | { ... } | | {EXTERNAL LOCATION} | Result | | main.rs:1488:53:1491:9 | { ... } | E | main.rs:1454:5:1455:14 | S1 | +| main.rs:1488:53:1491:9 | { ... } | T | main.rs:1486:20:1486:27 | T | | main.rs:1489:13:1489:31 | MacroExpr | | {EXTERNAL LOCATION} | () | | main.rs:1489:22:1489:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | & | | main.rs:1489:22:1489:27 | "{:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | main.rs:1489:22:1489:30 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1489:22:1489:30 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1489:22:1489:30 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:1489:30:1489:30 | v | | main.rs:1486:20:1486:27 | T | | main.rs:1490:13:1490:34 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1490:13:1490:34 | ...::Ok::<...>(...) | E | main.rs:1454:5:1455:14 | S1 | +| main.rs:1490:13:1490:34 | ...::Ok::<...>(...) | T | main.rs:1486:20:1486:27 | T | +| main.rs:1490:33:1490:33 | v | | main.rs:1486:20:1486:27 | T | | main.rs:1492:9:1492:23 | ...::Err(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1492:9:1492:23 | ...::Err(...) | E | main.rs:1454:5:1455:14 | S1 | | main.rs:1492:9:1492:23 | ...::Err(...) | T | main.rs:1486:20:1486:27 | T | @@ -10666,14 +11196,21 @@ inferType | main.rs:2398:25:2398:25 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:2398:28:2398:29 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2399:9:2399:44 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2399:13:2399:13 | i | | {EXTERNAL LOCATION} | i32 | | main.rs:2399:18:2399:26 | [...] | | {EXTERNAL LOCATION} | [;] | | main.rs:2399:18:2399:26 | [...] | TArray | {EXTERNAL LOCATION} | i32 | | main.rs:2399:18:2399:41 | ... .map(...) | | {EXTERNAL LOCATION} | [;] | +| main.rs:2399:18:2399:41 | ... .map(...) | TArray | {EXTERNAL LOCATION} | i32 | | main.rs:2399:19:2399:19 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2399:22:2399:22 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:2399:25:2399:25 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:2399:32:2399:40 | \|...\| ... | | {EXTERNAL LOCATION} | dyn Fn | | main.rs:2399:32:2399:40 | \|...\| ... | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | +| main.rs:2399:32:2399:40 | \|...\| ... | dyn(Args).T0 | {EXTERNAL LOCATION} | i32 | +| main.rs:2399:32:2399:40 | \|...\| ... | dyn(Output) | {EXTERNAL LOCATION} | i32 | +| main.rs:2399:33:2399:33 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2399:36:2399:36 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2399:36:2399:40 | ... + ... | | {EXTERNAL LOCATION} | i32 | | main.rs:2399:40:2399:40 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2399:43:2399:44 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2400:9:2400:41 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | @@ -11885,48 +12422,81 @@ inferType | main.rs:2871:17:2871:17 | x | | {EXTERNAL LOCATION} | i32 | | main.rs:2871:17:2871:24 | x.max(...) | | {EXTERNAL LOCATION} | i32 | | main.rs:2871:23:2871:23 | y | | {EXTERNAL LOCATION} | usize | -| main.rs:2881:11:2916:1 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2882:5:2882:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2883:5:2883:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2884:5:2884:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2884:20:2884:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2884:41:2884:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2885:5:2885:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2886:5:2886:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2887:5:2887:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2888:5:2888:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2889:5:2889:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2890:5:2890:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2891:5:2891:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2892:5:2892:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2893:5:2893:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2894:5:2894:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2895:5:2895:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2896:5:2896:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2897:5:2897:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2898:5:2898:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2899:5:2899:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2900:5:2900:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:2900:5:2900:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () | -| main.rs:2901:5:2901:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2902:5:2902:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2903:5:2903:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2904:5:2904:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2905:5:2905:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2906:5:2906:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2907:5:2907:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2908:5:2908:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2909:5:2909:28 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2910:5:2910:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2911:5:2911:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2912:5:2912:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2913:5:2913:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2914:5:2914:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2914:5:2914:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2914:5:2914:20 | ...::f(...) | T | main.rs:2684:5:2686:5 | dyn MyTrait | -| main.rs:2914:5:2914:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | -| main.rs:2914:16:2914:19 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2915:5:2915:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2885:22:2885:26 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2885:22:2885:26 | SelfParam | TRef | main.rs:2884:5:2886:5 | Self [trait Container] | +| main.rs:2888:34:2888:34 | c | | {EXTERNAL LOCATION} | & | +| main.rs:2888:34:2888:34 | c | TRef | main.rs:2888:15:2888:31 | T | +| main.rs:2888:49:2890:5 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:2889:9:2889:9 | c | | {EXTERNAL LOCATION} | & | +| main.rs:2889:9:2889:9 | c | TRef | main.rs:2888:15:2888:31 | T | +| main.rs:2889:9:2889:21 | c.get_input() | | {EXTERNAL LOCATION} | i64 | +| main.rs:2889:9:2889:27 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:2889:26:2889:27 | 42 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2893:22:2893:26 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2893:22:2893:26 | SelfParam | TRef | main.rs:2882:5:2882:21 | Gen | +| main.rs:2893:22:2893:26 | SelfParam | TRef.T | main.rs:2892:10:2892:17 | GT | +| main.rs:2893:35:2895:9 | { ... } | | main.rs:2892:10:2892:17 | GT | +| main.rs:2894:13:2894:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2894:13:2894:16 | self | TRef | main.rs:2882:5:2882:21 | Gen | +| main.rs:2894:13:2894:16 | self | TRef.T | main.rs:2892:10:2892:17 | GT | +| main.rs:2894:13:2894:18 | self.0 | | main.rs:2892:10:2892:17 | GT | +| main.rs:2898:15:2902:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2899:13:2899:13 | v | | {EXTERNAL LOCATION} | i64 | +| main.rs:2899:17:2899:34 | ...::default(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:2900:13:2900:13 | g | | main.rs:2882:5:2882:21 | Gen | +| main.rs:2900:13:2900:13 | g | T | {EXTERNAL LOCATION} | i64 | +| main.rs:2900:17:2900:22 | Gen(...) | | main.rs:2882:5:2882:21 | Gen | +| main.rs:2900:17:2900:22 | Gen(...) | T | {EXTERNAL LOCATION} | i64 | +| main.rs:2900:21:2900:21 | v | | {EXTERNAL LOCATION} | i64 | +| main.rs:2901:13:2901:13 | _ | | {EXTERNAL LOCATION} | bool | +| main.rs:2901:17:2901:26 | my_get(...) | | {EXTERNAL LOCATION} | bool | +| main.rs:2901:24:2901:25 | &g | | {EXTERNAL LOCATION} | & | +| main.rs:2901:24:2901:25 | &g | TRef | main.rs:2882:5:2882:21 | Gen | +| main.rs:2901:24:2901:25 | &g | TRef.T | {EXTERNAL LOCATION} | i64 | +| main.rs:2901:25:2901:25 | g | | main.rs:2882:5:2882:21 | Gen | +| main.rs:2901:25:2901:25 | g | T | {EXTERNAL LOCATION} | i64 | +| main.rs:2905:11:2940:1 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2906:5:2906:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2907:5:2907:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2908:5:2908:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2908:20:2908:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2908:41:2908:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2909:5:2909:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2910:5:2910:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2911:5:2911:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2912:5:2912:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2913:5:2913:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2914:5:2914:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2915:5:2915:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2916:5:2916:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2917:5:2917:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2918:5:2918:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2919:5:2919:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2920:5:2920:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2921:5:2921:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2922:5:2922:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2923:5:2923:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2924:5:2924:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2924:5:2924:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () | +| main.rs:2925:5:2925:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2926:5:2926:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2927:5:2927:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2928:5:2928:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2929:5:2929:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2930:5:2930:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2931:5:2931:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2932:5:2932:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2933:5:2933:28 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2934:5:2934:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2935:5:2935:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2936:5:2936:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2937:5:2937:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2938:5:2938:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2938:5:2938:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2938:5:2938:20 | ...::f(...) | T | main.rs:2684:5:2686:5 | dyn MyTrait | +| main.rs:2938:5:2938:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2938:16:2938:19 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2939:5:2939:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:13:26:133:1 | { ... } | | {EXTERNAL LOCATION} | Option | | pattern_matching.rs:13:26:133:1 | { ... } | T | {EXTERNAL LOCATION} | () | | pattern_matching.rs:14:9:14:13 | value | | {EXTERNAL LOCATION} | Option | @@ -13977,3 +14547,33 @@ inferType | raw_pointer.rs:59:5:59:30 | raw_type_from_deref(...) | | {EXTERNAL LOCATION} | () | | raw_pointer.rs:59:25:59:29 | false | | {EXTERNAL LOCATION} | bool | testFailures +| closure.rs:66:18:66:18 | x | Fixed missing result: type=x:i64 | +| closure.rs:66:21:66:21 | x | Fixed missing result: type=x:i64 | +| closure.rs:103:18:103:18 | x | Fixed missing result: type=x:i64 | +| closure.rs:103:21:103:21 | x | Fixed missing result: type=x:i64 | +| closure.rs:140:18:140:18 | x | Fixed missing result: type=x:i64 | +| closure.rs:140:21:140:21 | x | Fixed missing result: type=x:i64 | +| closure.rs:186:18:186:18 | x | Fixed missing result: type=x:i64 | +| closure.rs:186:21:186:21 | x | Fixed missing result: type=x:i64 | +| closure.rs:189:18:189:18 | x | Fixed missing result: type=x:i64 | +| closure.rs:189:21:189:21 | x | Fixed missing result: type=x:i64 | +| closure.rs:192:18:192:18 | x | Fixed missing result: type=x:i64 | +| closure.rs:192:21:192:21 | x | Fixed missing result: type=x:i64 | +| closure.rs:195:18:195:18 | x | Fixed missing result: type=x:i64 | +| closure.rs:195:21:195:21 | x | Fixed missing result: type=x:i64 | +| closure.rs:201:18:201:18 | x | Fixed missing result: type=x:i64 | +| closure.rs:201:21:201:21 | x | Fixed missing result: type=x:i64 | +| closure.rs:204:18:204:18 | x | Fixed missing result: type=x:i64 | +| closure.rs:204:21:204:21 | x | Fixed missing result: type=x:i64 | +| closure.rs:224:13:224:13 | v | Fixed missing result: type=v:i64 | +| closure.rs:224:17:224:34 | ...::default(...) | Fixed missing result: target=default | +| closure.rs:226:13:226:16 | _ret | Fixed missing result: type=_ret:bool | +| closure.rs:229:13:229:13 | v | Fixed missing result: type=v:i32 | +| closure.rs:229:17:229:34 | ...::default(...) | Fixed missing result: target=default | +| closure.rs:232:13:232:16 | _ret | Fixed missing result: type=_ret:bool | +| main.rs:2399:13:2399:13 | i | Fixed missing result: type=i:i32 | +| main.rs:2399:36:2399:40 | ... + ... | Unexpected result: target=add | +| main.rs:2889:9:2889:21 | c.get_input() | Unexpected result: target=get_input | +| main.rs:2889:9:2889:27 | ... == ... | Unexpected result: target=eq | +| main.rs:2894:13:2894:18 | self.0 | Unexpected result: fieldof=Gen | +| main.rs:2901:17:2901:26 | my_get(...) | Unexpected result: target=my_get | diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index 5295048623e1..492426e518f9 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -968,9 +968,9 @@ module Make1 Input1> { pragma[inline] private predicate satisfiesConstraintTypeMentionInline( HasTypeTree tt, TypeAbstraction abs, Type constraint, TypePath path, - TypePath pathToTypeParamInSub + TypePath pathToTypeParamInSub, TypeParameter tp ) { - exists(TypeMention sub, TypeParameter tp | + exists(TypeMention sub | satisfiesConstraintTypeMention0(tt, constraint, abs, sub, path, tp) and tp = abs.getATypeParameter() and sub.resolveTypeAt(pathToTypeParamInSub) = tp @@ -981,7 +981,7 @@ module Make1 Input1> { private predicate satisfiesConstraintTypeMention( HasTypeTree tt, Type constraint, TypePath path, TypePath pathToTypeParamInSub ) { - satisfiesConstraintTypeMentionInline(tt, _, constraint, path, pathToTypeParamInSub) + satisfiesConstraintTypeMentionInline(tt, _, constraint, path, pathToTypeParamInSub, _) } pragma[nomagic] @@ -989,7 +989,15 @@ module Make1 Input1> { HasTypeTree tt, TypeAbstraction abs, Type constraint, TypePath path, TypePath pathToTypeParamInSub ) { - satisfiesConstraintTypeMentionInline(tt, abs, constraint, path, pathToTypeParamInSub) + satisfiesConstraintTypeMentionInline(tt, abs, constraint, path, pathToTypeParamInSub, _) + } + + pragma[nomagic] + private predicate satisfiesConstraintTypeMentionThrough2( + HasTypeTree tt, TypeAbstraction abs, Type constraint, TypePath path, + TypePath pathToTypeParamInSub, TypeParameter tp + ) { + satisfiesConstraintTypeMentionInline(tt, abs, constraint, path, pathToTypeParamInSub, tp) } pragma[inline] @@ -1035,6 +1043,18 @@ module Make1 Input1> { ) } + pragma[nomagic] + predicate test( + HasTypeTree tt, TypePath pathToTypeParamInSub, TypeAbstraction abs, Type constraint, + TypeParameter tp, TypePath path + ) { + // satisfiesConstraintTypeNonTypeParamInline(tt, abs, constraint, path, t) + // or + satisfiesConstraintTypeMentionThrough2(tt, abs, constraint, path, pathToTypeParamInSub, tp) //and + // getTypeAt(tt, pathToTypeParamInSub.appendInverse(suffix)) = t and + // path = prefix0.append(suffix) + } + /** * Holds if the type tree at `tt` does _not_ satisfy the constraint `constraint`. * @@ -1283,8 +1303,19 @@ module Make1 Input1> { Access a, AccessEnvironment e, Declaration target, AccessPosition apos, TypePath path, Type constraint ) { + // fn apply6(f: impl Fn(T) -> i64, a: T) -> i64 { + // + // apos = 0 + // constraint = trait Fn + // pathToTp = Args.T0 + // tp = T + // exists(TypePath pathToTp, TypeParameter tp | + // target = a.getTarget(e) and + // typeParameterConstraintHasTypeParameter(target, apos, path, constraint, pathToTp, tp) + // ) + // or target = a.getTarget(e) and - typeParameterConstraintHasTypeParameter(target, apos, path, constraint, _, _) + typeParameterConstraintHasAny(target, apos, _, path, constraint) } private newtype TRelevantAccess = @@ -1339,6 +1370,18 @@ module Make1 Input1> { constraint = ra.getConstraint(target) ) } + + predicate test( + Access a, TypePath pathToTypeParamInSub, AccessEnvironment e, Declaration target, + AccessPosition apos, TypePath prefix, Type constraint, TypeParameter tp, TypePath path + ) { + exists(RelevantAccess ra | + ra = MkRelevantAccess(a, apos, e, prefix) and + SatisfiesConstraint::test(ra, + pathToTypeParamInSub, _, constraint, tp, path) and + constraint = ra.getConstraint(target) + ) + } } /** @@ -1461,6 +1504,22 @@ module Make1 Input1> { ) } + pragma[nomagic] + private predicate typeParameterConstraintHasAny( + Declaration target, AccessPosition apos, TypeParameter constrainedTp, + TypePath pathToConstrained, Type constraint + ) { + exists(DeclarationPosition dpos | + accessDeclarationPositionMatch(apos, dpos) and + constrainedTp = target.getTypeParameter(_) and + constrainedTp = target.getDeclaredType(dpos, pathToConstrained) and + exists(TypeMention tm | + tm = getATypeParameterConstraint(constrainedTp) and + constraint = resolveTypeMentionRoot(tm) + ) + ) + } + pragma[nomagic] private predicate typeConstraintBaseTypeMatch( Access a, AccessEnvironment e, Declaration target, TypePath path, Type t, TypeParameter tp @@ -1473,6 +1532,66 @@ module Make1 Input1> { ) } + pragma[nomagic] + private predicate test3( + Access a, AccessPosition apos, AccessEnvironment e, Declaration target, TypePath path, + Type t, TypeParameter tp + ) { + // not exists(getTypeArgument(a, target, tp, _)) and + exists( + Type constraint, TypePath pathToTypeParamInSub, TypePath pathToTp, TypePath pathToTp2, + TypePath suffix, TypeParameter tp2, TypePath path3, TypePath path4, TypePath prefix + | + // a.getLocation().getStartLine() = 343 and + // tp = T + // pathToTp = Args.T0 + // pathToTp2 = "" + // constraint = trait Fn + typeMatch(a, e, target, suffix, t, tp) and + typeParameterConstraintHasTypeParameter(target, apos, pathToTp2, constraint, pathToTp, tp) and + AccessConstraint::test(a, pathToTypeParamInSub, e, target, apos, prefix, + /*TODO*/ constraint, tp2, path4) and + pathToTp = path4.appendInverse(path3) and + path = prefix.append(pathToTypeParamInSub.append(path3).append(suffix)) + // AccessConstraint::test(a, pathToTypeParamInSub, e, target, apos, _, /*TODO*/ constraint, + // tp) and + // path = pathToTypeParamInSub.append(suffix) + // satisfiesConstraintType(a, e, target, apos, pathToTp2, constraint, pathToTp.appendInverse(path), t) + ) + } + + pragma[nomagic] + private predicate test5( + Access a, AccessPosition apos, AccessEnvironment e, Declaration target, TypePath path, + Type t + ) { + // not exists(getTypeArgument(a, target, tp, _)) and + exists( + Type constraint, TypePath pathToTypeParamInSub, TypePath pathToT, TypeParameter tp2, + TypePath path4, TypePath prefix, TypeMention tm, TypeParameter constrainedTp, + TypePath suffix + | + // tp2 = Args[Fn] + // pathToTypeParamInSub = dyn(Args) + // path4 = Args + // prefix = "" + // constraint = trait FnMut + AccessConstraint::test(a, pathToTypeParamInSub, e, target, apos, prefix, + /*TODO*/ constraint, tp2, path4) and + typeParameterConstraintHasAny(target, apos, constrainedTp, _, constraint) and + tm = getATypeParameterConstraint(constrainedTp) and + tm.resolveTypeAt(pathToT) = t and + constraint = resolveTypeMentionRoot(tm) and + not t instanceof TypeParameter and + pathToT = path4.appendInverse(suffix) and + path = prefix.append(pathToTypeParamInSub.append(suffix)) + // AccessConstraint::test(a, pathToTypeParamInSub, e, target, apos, _, /*TODO*/ constraint, + // tp) and + // path = pathToTypeParamInSub.append(suffix) + // satisfiesConstraintType(a, e, target, apos, pathToTp2, constraint, pathToTp.appendInverse(path), t) + ) + } + pragma[inline] private predicate typeMatch( Access a, AccessEnvironment e, Declaration target, TypePath path, Type t, TypeParameter tp @@ -1546,6 +1665,10 @@ module Make1 Input1> { not result instanceof TypeParameter ) ) + or + test3(a, apos, e, _, path, result, _) + or + test5(a, apos, e, _, path, result) } }