Merge pull request #12907 from hvitved/ruby/destructured-assign-join

Ruby: Fix bad join in `DestructuredAssignDesugar`
This commit is contained in:
Tom Hvitved
2023-04-25 08:50:27 +02:00
committed by GitHub

View File

@@ -952,6 +952,8 @@ private module DestructuredAssignDesugar {
}
abstract private class LhsWithReceiver extends Expr {
LhsWithReceiver() { this = any(DestructuredAssignExpr dae).getElement(_) }
abstract Expr getReceiver();
abstract SynthKind getSynthKind();
@@ -960,8 +962,14 @@ private module DestructuredAssignDesugar {
private class LhsCall extends LhsWithReceiver instanceof MethodCall {
final override Expr getReceiver() { result = MethodCall.super.getReceiver() }
pragma[nomagic]
private string getMethodName(int args) {
result = super.getMethodName() and
args = super.getNumberOfArguments()
}
final override SynthKind getSynthKind() {
result = MethodCallKind(super.getMethodName(), false, super.getNumberOfArguments())
exists(int args | result = MethodCallKind(this.getMethodName(args), false, args))
}
}
@@ -1154,9 +1162,7 @@ private module DestructuredAssignDesugar {
)
}
final override predicate excludeFromControlFlowTree(AstNode n) {
n = any(DestructuredAssignExpr tae).getElement(_).(LhsWithReceiver)
}
final override predicate excludeFromControlFlowTree(AstNode n) { n instanceof LhsWithReceiver }
}
}