Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2487,6 +2487,8 @@ private module Input3 implements InputSig3 {
final class Parameter = ParameterImpl;

abstract private class ParameterImpl extends VariableDeclarationImpl {
string getExternalName() { none() } // arguments cannot be passed by name in Rust

override predicate preservesInitializerType() { none() } // doesn't really matter, since there are no initializers/default values

override AstNode getInitializer() { none() }
Expand Down Expand Up @@ -2638,14 +2640,20 @@ private module Input3 implements InputSig3 {
)
}

class Argument extends Expr {
string getName() { none() }

Expr getValue() { result = this }
}

final class Invocation = InvocationImpl;

abstract private class InvocationImpl extends Expr {
abstract Type getTypeQualifier(TypePath path);

abstract Type getTypeArgument(int pos, TypePath path);

abstract Expr getArgument(int i);
abstract Argument getArgument(int i);

abstract Callable getTarget(string derefChainBorrow);

Expand Down Expand Up @@ -2674,7 +2682,7 @@ private module Input3 implements InputSig3 {
this.(MethodCallExpr).getGenericArgList().getTypeArg(pos).(TypeMention).getTypeAt(path)
}

override Expr getArgument(int i) {
override Argument getArgument(int i) {
exists(FunctionPosition pos |
i = pos.asPosition() and
result = super.getNodeAt(pos)
Expand Down Expand Up @@ -2722,7 +2730,7 @@ private module Input3 implements InputSig3 {
result = getCallExprTypeArgument(this, pos, path)
}

override Expr getArgument(int i) { result = NonAssocCallExpr.super.getArgument(i) }
override Argument getArgument(int i) { result = NonAssocCallExpr.super.getArgument(i) }

pragma[nomagic]
private Callable getTarget() { result = super.resolveCallTargetViaPathResolution() }
Expand Down Expand Up @@ -2760,7 +2768,7 @@ private module Input3 implements InputSig3 {

override Type getTypeArgument(int pos, TypePath path) { none() }

override Expr getArgument(int i) { result = NonAssocCallExpr.super.getArgument(i) }
override Argument getArgument(int i) { result = NonAssocCallExpr.super.getArgument(i) }

override Constructor getTarget() { result = super.resolveCallTargetViaPathResolution() }
}
Expand All @@ -2778,7 +2786,7 @@ private module Input3 implements InputSig3 {
}

private class StructExprConstruction extends StructConstruction, StructExpr {
override Expr getArgument(int i) {
override Argument getArgument(int i) {
result =
this.getFieldExpr(pragma[only_bind_into](this.getNthStructField(i).getName().getText()))
.getExpr()
Expand All @@ -2789,7 +2797,7 @@ private module Input3 implements InputSig3 {
private class PathExprConstruction extends StructConstruction, PathExpr {
PathExprConstruction() { not exists(CallExpr ce | this = ce.getFunction()) }

override Expr getArgument(int i) { none() }
override Argument getArgument(int i) { none() }
}

pragma[nomagic]
Expand Down Expand Up @@ -2820,8 +2828,8 @@ private module Input3 implements InputSig3 {
exists(string derefChainBorrow |
decodeDerefChainBorrow(derefChainBorrow, derefChain, borrow) and
result =
M3::inferInvocationArgumentTypeContextualDefault(invocation, derefChainBorrow, pos, arg,
path)
M3::inferInvocationArgumentTypeContextualDefault(invocation, derefChainBorrow, pos, path) and
arg = invocation.getArgument(pos)
)
}

Expand Down Expand Up @@ -2874,7 +2882,7 @@ private module Input3 implements InputSig3 {
)
}

Type inferInvocationArgumentTypeContextual(Expr arg, TypePath path) {
Type inferInvocationArgumentTypeContextual(Argument arg, TypePath path) {
exists(Invocation invocation, FunctionPosition pos, TypePath path0 |
result =
inferInvocationArgumentTypeContextualDefault(invocation, pos.asPosition(), arg, _, _, path0) and
Expand Down
Loading
Loading