Address review comments

This commit is contained in:
Tom Hvitved
2025-12-17 10:27:26 +01:00
parent 86a4d42316
commit fe0ce7a492
3 changed files with 147 additions and 131 deletions

View File

@@ -240,25 +240,28 @@ private module ImplOrTraitItemNodeOption = Option<ImplOrTraitItemNode>;
private class ImplOrTraitItemNodeOption = ImplOrTraitItemNodeOption::Option;
private class FunctionDeclaration extends Function {
private ImplOrTraitItemNodeOption parent;
FunctionDeclaration() {
not this = any(ImplOrTraitItemNode i).getAnAssocItem() and parent.isNone()
or
this = parent.asSome().getASuccessor(_)
}
/** Holds if this function is associated with `i`. */
predicate isAssoc(ImplOrTraitItemNode i) { this = i.getASuccessor(_) }
predicate isAssoc(ImplOrTraitItemNode i) { i = parent.asSome() }
/** Holds if this is a free function. */
predicate isFree() { not this = any(ImplOrTraitItemNode i).getAnAssocItem() }
predicate isFree() { parent.isNone() }
/** Holds if this function is valid for `i`. */
predicate isDeclaration(ImplOrTraitItemNodeOption i) {
i.isNone() and
this.isFree()
or
this.isAssoc(i.asSome())
}
predicate isFor(ImplOrTraitItemNodeOption i) { i = parent }
/**
* Holds if this function is valid for `i`. If `i` is a trait or `impl` block then
* this function must be declared directly inside `i`.
*/
predicate isDeclarationStrict(ImplOrTraitItemNodeOption i) {
predicate isDirectlyFor(ImplOrTraitItemNodeOption i) {
i.isNone() and
this.isFree()
or
@@ -266,7 +269,7 @@ private class FunctionDeclaration extends Function {
}
TypeParameter getTypeParameter(ImplOrTraitItemNodeOption i, TypeParameterPosition ppos) {
this.isDeclaration(i) and
i = parent and
(
typeParamMatchPosition(this.getGenericParamList().getATypeParam(), result, ppos)
or
@@ -274,36 +277,29 @@ private class FunctionDeclaration extends Function {
or
ppos.isImplicit() and result = TSelfTypeParameter(i.asSome())
or
ppos.isImplicit() and
result.(AssociatedTypeTypeParameter).getTrait() = i.asSome()
ppos.isImplicit() and result.(AssociatedTypeTypeParameter).getTrait() = i.asSome()
or
ppos.isImplicit() and
this = result.(ImplTraitTypeTypeParameter).getFunction()
ppos.isImplicit() and this = result.(ImplTraitTypeTypeParameter).getFunction()
)
}
pragma[nomagic]
Type getParameterType(ImplOrTraitItemNodeOption i, FunctionPosition pos, TypePath path) {
this.isDeclaration(i) and
i = parent and
(
not pos.isReturn() and
result = getAssocFunctionTypeAt(this, i.asSome(), pos, path)
or
i.isNone() and
exists(Param p |
p = this.getParam(pos.asPosition()) and
result = p.getTypeRepr().(TypeMention).resolveTypeAt(path)
)
result = this.getParam(pos.asPosition()).getTypeRepr().(TypeMention).resolveTypeAt(path)
)
}
private Type resolveRetType(ImplOrTraitItemNodeOption i, TypePath path) {
this.isDeclaration(i) and
i = parent and
(
exists(FunctionPosition pos |
result = getAssocFunctionTypeAt(this, i.asSome(), pos, path) and
pos.isReturn()
)
result =
getAssocFunctionTypeAt(this, i.asSome(), any(FunctionPosition pos | pos.isReturn()), path)
or
i.isNone() and
result = getReturnTypeMention(this).resolveTypeAt(path)
@@ -313,7 +309,7 @@ private class FunctionDeclaration extends Function {
Type getReturnType(ImplOrTraitItemNodeOption i, TypePath path) {
if this.isAsync()
then
this.isDeclaration(i) and
i = parent and
path.isEmpty() and
result = getFutureTraitType()
or
@@ -332,6 +328,7 @@ private class FunctionDeclaration extends Function {
}
string toStringExt(ImplOrTraitItemNode i) {
i = parent.asSome() and
if this = i.getAnAssocItem()
then result = this.toString()
else
@@ -417,7 +414,7 @@ module CertainTypeInference {
exists(ImplOrTraitItemNodeOption i |
callResolvesTo(ce, p, f) and
result = f.getReturnType(i, path) and
f.isDeclarationStrict(i)
f.isDirectlyFor(i)
)
}
@@ -2191,29 +2188,31 @@ private module MethodCallMatchingInput implements MatchingWithEnvironmentInputSi
private class MethodDeclaration extends Method, FunctionDeclaration { }
private newtype TDeclaration =
MkDeclaration(ImplOrTraitItemNode i, MethodDeclaration m) { m.isAssoc(i) }
TMethodFunctionDeclaration(ImplOrTraitItemNode i, MethodDeclaration m) { m.isAssoc(i) }
final class Declaration extends MkDeclaration {
ImplOrTraitItemNode i_;
ImplOrTraitItemNodeOption somei;
final class Declaration extends TMethodFunctionDeclaration {
ImplOrTraitItemNode parent;
ImplOrTraitItemNodeOption someParent;
MethodDeclaration m;
Declaration() {
this = MkDeclaration(i_, m) and
somei.asSome() = i_
this = TMethodFunctionDeclaration(parent, m) and
someParent.asSome() = parent
}
predicate isMethod(ImplOrTraitItemNode i, Method method) { this = MkDeclaration(i, method) }
predicate isMethod(ImplOrTraitItemNode i, Method method) {
this = TMethodFunctionDeclaration(i, method)
}
TypeParameter getTypeParameter(TypeParameterPosition ppos) {
result = m.getTypeParameter(somei, ppos)
result = m.getTypeParameter(someParent, ppos)
}
Type getDeclaredType(DeclarationPosition dpos, TypePath path) {
result = m.getDeclaredType(somei, dpos, path)
result = m.getDeclaredType(someParent, dpos, path)
}
string toString() { result = m.toStringExt(i_) }
string toString() { result = m.toStringExt(parent) }
Location getLocation() { result = m.getLocation() }
}
@@ -2294,7 +2293,7 @@ private module MethodCallMatchingInput implements MatchingWithEnvironmentInputSi
Declaration getTarget(string derefChainBorrow) {
exists(ImplOrTraitItemNode i, Method m |
m = this.getTarget(i, derefChainBorrow) and
result = MkDeclaration(i, m)
result = TMethodFunctionDeclaration(i, m)
)
}
@@ -2668,7 +2667,7 @@ private module NonMethodResolution {
ArgsAreInstantiationsOf<NonMethodArgsAreInstantiationsOfInput>;
}
abstract private class TupleConstructor extends Addressable {
abstract private class TupleLikeConstructor extends Addressable {
abstract TypeParameter getTypeParameter(TypeParameterPosition ppos);
abstract Type getParameterType(FunctionPosition pos, TypePath path);
@@ -2686,7 +2685,7 @@ abstract private class TupleConstructor extends Addressable {
}
}
private class TupleStruct extends TupleConstructor, Struct {
private class TupleStruct extends TupleLikeConstructor, Struct {
TupleStruct() { this.isTuple() }
override TypeParameter getTypeParameter(TypeParameterPosition ppos) {
@@ -2709,7 +2708,7 @@ private class TupleStruct extends TupleConstructor, Struct {
}
}
private class TupleVariant extends TupleConstructor, Variant {
private class TupleVariant extends TupleLikeConstructor, Variant {
TupleVariant() { this.isTuple() }
override TypeParameter getTypeParameter(TypeParameterPosition ppos) {
@@ -2748,9 +2747,9 @@ private module NonMethodCallMatchingInput implements MatchingInputSig {
private newtype TDeclaration =
TNonMethodFunctionDeclaration(ImplOrTraitItemNodeOption i, NonMethodFunctionDeclaration f) {
f.isDeclaration(i)
f.isFor(i)
} or
TTupleConstructorDeclaration(TupleConstructor tc)
TTupleLikeConstructorDeclaration(TupleLikeConstructor tc)
abstract class Declaration extends TDeclaration {
abstract TypeParameter getTypeParameter(TypeParameterPosition ppos);
@@ -2816,10 +2815,12 @@ private module NonMethodCallMatchingInput implements MatchingInputSig {
override Location getLocation() { result = f.getLocation() }
}
private class TupleConstructorDeclaration extends Declaration, TTupleConstructorDeclaration {
TupleConstructor tc;
private class TupleLikeConstructorDeclaration extends Declaration,
TTupleLikeConstructorDeclaration
{
TupleLikeConstructor tc;
TupleConstructorDeclaration() { this = TTupleConstructorDeclaration(tc) }
TupleLikeConstructorDeclaration() { this = TTupleLikeConstructorDeclaration(tc) }
override TypeParameter getTypeParameter(TypeParameterPosition ppos) {
result = tc.getTypeParameter(ppos)
@@ -2860,11 +2861,11 @@ private module NonMethodCallMatchingInput implements MatchingInputSig {
f = this.resolveTraitFunctionViaPathResolution(i.asSome())
or
f = this.resolveCallTargetViaPathResolution() and
f.isDeclarationStrict(i)
f.isDirectlyFor(i)
)
or
exists(ItemNode i | i = this.resolveCallTargetViaPathResolution() |
result = TTupleConstructorDeclaration(i)
result = TTupleLikeConstructorDeclaration(i)
)
}
@@ -2880,7 +2881,7 @@ private module NonMethodCallMatchingInput implements MatchingInputSig {
)
or
// Tuple declarations, such as `Result::Ok(...)`, may also be context typed
exists(TupleConstructor tc, TypeParameter tp |
exists(TupleLikeConstructor tc, TypeParameter tp |
tc = this.resolveCallTargetViaPathResolution() and
pos.isReturn() and
tp = tc.getReturnType(path) and
@@ -3435,7 +3436,7 @@ private Type inferStructPatType(AstNode n, TypePath path) {
private module TupleStructPatMatchingInput implements MatchingInputSig {
import FunctionPositionMatchingInput
class Declaration = TupleConstructor;
class Declaration = TupleLikeConstructor;
class Access extends TupleStructPat {
Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { none() }

View File

@@ -3077,6 +3077,10 @@ mod literal_overlap {
let x: usize = 0;
let y = &1;
let z = x.g(y); // $ target=MyTrait::g
let x = 0; // $ SPURIOUS: type=x:i32 $ MISSING: type=x:usize
let y: usize = 1;
let z = x.max(y); // $ target=max
}
}

View File

@@ -3546,54 +3546,56 @@ inferCertainType
| main.rs:3066:13:3066:16 | self | | {EXTERNAL LOCATION} | & |
| main.rs:3066:13:3066:16 | self | TRef | main.rs:3063:10:3063:10 | T |
| main.rs:3070:25:3074:5 | { ... } | | {EXTERNAL LOCATION} | usize |
| main.rs:3076:12:3080:5 | { ... } | | {EXTERNAL LOCATION} | () |
| main.rs:3076:12:3084:5 | { ... } | | {EXTERNAL LOCATION} | () |
| main.rs:3077:13:3077:13 | x | | {EXTERNAL LOCATION} | usize |
| main.rs:3078:13:3078:13 | y | | {EXTERNAL LOCATION} | & |
| main.rs:3078:17:3078:18 | &1 | | {EXTERNAL LOCATION} | & |
| main.rs:3079:17:3079:17 | x | | {EXTERNAL LOCATION} | usize |
| main.rs:3079:21:3079:21 | y | | {EXTERNAL LOCATION} | & |
| main.rs:3088:11:3123:1 | { ... } | | {EXTERNAL LOCATION} | () |
| main.rs:3089:5:3089:21 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3090:5:3090:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo |
| main.rs:3091:5:3091:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo |
| main.rs:3091:20:3091:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
| main.rs:3091:41:3091:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
| main.rs:3092:5:3092:35 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3093:5:3093:41 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3094:5:3094:45 | ...::test(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3095:5:3095:30 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3096:5:3096:33 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3097:5:3097:21 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3098:5:3098:27 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3099:5:3099:32 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3100:5:3100:23 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3101:5:3101:36 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3102:5:3102:35 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3103:5:3103:29 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3082:13:3082:13 | y | | {EXTERNAL LOCATION} | usize |
| main.rs:3083:23:3083:23 | y | | {EXTERNAL LOCATION} | usize |
| main.rs:3092:11:3127:1 | { ... } | | {EXTERNAL LOCATION} | () |
| main.rs:3093:5:3093:21 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3094:5:3094:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo |
| main.rs:3095:5:3095:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo |
| main.rs:3095:20:3095:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
| main.rs:3095:41:3095:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
| main.rs:3096:5:3096:35 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3097:5:3097:41 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3098:5:3098:45 | ...::test(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3099:5:3099:30 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3100:5:3100:33 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3101:5:3101:21 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3102:5:3102:27 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3103:5:3103:32 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3104:5:3104:23 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3105:5:3105:24 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3106:5:3106:17 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3107:5:3107:18 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3108:5:3108:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future |
| main.rs:3108:5:3108:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () |
| main.rs:3109:5:3109:19 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3105:5:3105:36 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3106:5:3106:35 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3107:5:3107:29 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3108:5:3108:23 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3109:5:3109:24 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3110:5:3110:17 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3111:5:3111:14 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3112:5:3112:27 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3113:5:3113:15 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3114:5:3114:43 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3115:5:3115:15 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3116:5:3116:17 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3117:5:3117:23 | ...::test(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3118:5:3118:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3119:5:3119:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3120:5:3120:20 | ...::test(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3121:5:3121:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box |
| main.rs:3121:5:3121:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global |
| main.rs:3121:5:3121:20 | ...::f(...) | T | main.rs:2896:5:2898:5 | dyn MyTrait |
| main.rs:3121:5:3121:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 |
| main.rs:3121:16:3121:19 | true | | {EXTERNAL LOCATION} | bool |
| main.rs:3122:5:3122:23 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3111:5:3111:18 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3112:5:3112:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future |
| main.rs:3112:5:3112:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () |
| main.rs:3113:5:3113:19 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3114:5:3114:17 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3115:5:3115:14 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3116:5:3116:27 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3117:5:3117:15 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3118:5:3118:43 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3119:5:3119:15 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3120:5:3120:17 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3121:5:3121:23 | ...::test(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3122:5:3122:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3123:5:3123:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3124:5:3124:20 | ...::test(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3125:5:3125:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box |
| main.rs:3125:5:3125:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global |
| main.rs:3125:5:3125:20 | ...::f(...) | T | main.rs:2896:5:2898:5 | dyn MyTrait |
| main.rs:3125:5:3125:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 |
| main.rs:3125:16:3125:19 | true | | {EXTERNAL LOCATION} | bool |
| main.rs:3126:5:3126: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} | () |
@@ -11046,7 +11048,7 @@ inferType
| main.rs:3072:13:3072:17 | x.f() | | {EXTERNAL LOCATION} | usize |
| main.rs:3073:9:3073:9 | x | | {EXTERNAL LOCATION} | i32 |
| main.rs:3073:9:3073:9 | x | | {EXTERNAL LOCATION} | usize |
| main.rs:3076:12:3080:5 | { ... } | | {EXTERNAL LOCATION} | () |
| main.rs:3076:12:3084:5 | { ... } | | {EXTERNAL LOCATION} | () |
| main.rs:3077:13:3077:13 | x | | {EXTERNAL LOCATION} | usize |
| main.rs:3077:24:3077:24 | 0 | | {EXTERNAL LOCATION} | i32 |
| main.rs:3077:24:3077:24 | 0 | | {EXTERNAL LOCATION} | usize |
@@ -11062,48 +11064,57 @@ inferType
| main.rs:3079:17:3079:22 | x.g(...) | TRef | {EXTERNAL LOCATION} | usize |
| main.rs:3079:21:3079:21 | y | | {EXTERNAL LOCATION} | & |
| main.rs:3079:21:3079:21 | y | TRef | {EXTERNAL LOCATION} | i32 |
| main.rs:3088:11:3123:1 | { ... } | | {EXTERNAL LOCATION} | () |
| main.rs:3089:5:3089:21 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3090:5:3090:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo |
| main.rs:3091:5:3091:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo |
| main.rs:3091:20:3091:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
| main.rs:3091:41:3091:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
| main.rs:3092:5:3092:35 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3093:5:3093:41 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3094:5:3094:45 | ...::test(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3095:5:3095:30 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3096:5:3096:33 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3097:5:3097:21 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3098:5:3098:27 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3099:5:3099:32 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3100:5:3100:23 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3101:5:3101:36 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3102:5:3102:35 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3103:5:3103:29 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3081:13:3081:13 | x | | {EXTERNAL LOCATION} | i32 |
| main.rs:3081:17:3081:17 | 0 | | {EXTERNAL LOCATION} | i32 |
| main.rs:3082:13:3082:13 | y | | {EXTERNAL LOCATION} | usize |
| main.rs:3082:24:3082:24 | 1 | | {EXTERNAL LOCATION} | i32 |
| main.rs:3082:24:3082:24 | 1 | | {EXTERNAL LOCATION} | usize |
| main.rs:3083:13:3083:13 | z | | {EXTERNAL LOCATION} | i32 |
| main.rs:3083:17:3083:17 | x | | {EXTERNAL LOCATION} | i32 |
| main.rs:3083:17:3083:24 | x.max(...) | | {EXTERNAL LOCATION} | i32 |
| main.rs:3083:23:3083:23 | y | | {EXTERNAL LOCATION} | usize |
| main.rs:3092:11:3127:1 | { ... } | | {EXTERNAL LOCATION} | () |
| main.rs:3093:5:3093:21 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3094:5:3094:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo |
| main.rs:3095:5:3095:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo |
| main.rs:3095:20:3095:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
| main.rs:3095:41:3095:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo |
| main.rs:3096:5:3096:35 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3097:5:3097:41 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3098:5:3098:45 | ...::test(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3099:5:3099:30 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3100:5:3100:33 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3101:5:3101:21 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3102:5:3102:27 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3103:5:3103:32 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3104:5:3104:23 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3105:5:3105:24 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3106:5:3106:17 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3107:5:3107:18 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3108:5:3108:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future |
| main.rs:3108:5:3108:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () |
| main.rs:3109:5:3109:19 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3105:5:3105:36 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3106:5:3106:35 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3107:5:3107:29 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3108:5:3108:23 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3109:5:3109:24 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3110:5:3110:17 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3111:5:3111:14 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3112:5:3112:27 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3113:5:3113:15 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3114:5:3114:43 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3115:5:3115:15 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3116:5:3116:17 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3117:5:3117:23 | ...::test(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3118:5:3118:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3119:5:3119:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3120:5:3120:20 | ...::test(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3121:5:3121:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box |
| main.rs:3121:5:3121:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global |
| main.rs:3121:5:3121:20 | ...::f(...) | T | main.rs:2896:5:2898:5 | dyn MyTrait |
| main.rs:3121:5:3121:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 |
| main.rs:3121:16:3121:19 | true | | {EXTERNAL LOCATION} | bool |
| main.rs:3122:5:3122:23 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3111:5:3111:18 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3112:5:3112:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future |
| main.rs:3112:5:3112:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () |
| main.rs:3113:5:3113:19 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3114:5:3114:17 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3115:5:3115:14 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3116:5:3116:27 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3117:5:3117:15 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3118:5:3118:43 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3119:5:3119:15 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3120:5:3120:17 | ...::f(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3121:5:3121:23 | ...::test(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3122:5:3122:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3123:5:3123:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3124:5:3124:20 | ...::test(...) | | {EXTERNAL LOCATION} | () |
| main.rs:3125:5:3125:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box |
| main.rs:3125:5:3125:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global |
| main.rs:3125:5:3125:20 | ...::f(...) | T | main.rs:2896:5:2898:5 | dyn MyTrait |
| main.rs:3125:5:3125:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 |
| main.rs:3125:16:3125:19 | true | | {EXTERNAL LOCATION} | bool |
| main.rs:3126:5:3126: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 |