Skip to content

Commit 90ca93c

Browse files
committed
unified: Add Pattern.getEnclosingPattern()
1 parent 99889b2 commit 90ca93c

3 files changed

Lines changed: 12 additions & 26 deletions

File tree

unified/ql/lib/codeql/unified/internal/FacadeAst.qll

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,13 @@ module Unified {
1717
)
1818
}
1919
}
20+
21+
class Pattern extends G::Pattern {
22+
/** Gets the immediately-enclosing pattern in which this is a nested pattern. */
23+
Pattern getEnclosingPattern() {
24+
result = this.getParent()
25+
or
26+
result = this.getParent().(PatternElement).getParent()
27+
}
28+
}
2029
}

unified/ql/lib/codeql/unified/internal/Variables.qll

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -192,25 +192,7 @@ private module LocalNameBindingInput implements LocalNameBindingInputSig<Locatio
192192
pattern = stmt.getPattern()
193193
)
194194
or
195-
exists(TuplePattern pat |
196-
bindingContext(pat, scope) and
197-
pattern = pat.getElement(_).getPattern()
198-
)
199-
or
200-
exists(ConstructorPattern pat |
201-
bindingContext(pat, scope) and
202-
pattern = pat.getElement(_).getPattern()
203-
)
204-
or
205-
exists(OrPattern pat |
206-
bindingContext(pat, scope) and
207-
pattern = pat.getPattern(_)
208-
)
209-
or
210-
exists(ConditionalPattern pat |
211-
bindingContext(pat, scope) and
212-
pattern = pat.getPattern()
213-
)
195+
bindingContext(pattern.(Pattern).getEnclosingPattern(), scope)
214196
or
215197
exists(PatternGuardExpr expr |
216198
pattern = expr.getPattern() and
@@ -230,11 +212,8 @@ private module LocalNameBindingInput implements LocalNameBindingInputSig<Locatio
230212
private OrPattern getEnclosingOrPattern(Pattern p) {
231213
p = result.getPattern(_)
232214
or
233-
exists(Pattern parent | result = getEnclosingOrPattern(parent) |
234-
p = parent.(ConstructorPattern).getElement(_).getPattern()
235-
or
236-
p = parent.(TuplePattern).getElement(_).getPattern()
237-
)
215+
not p instanceof OrPattern and
216+
result = getEnclosingOrPattern(p.getEnclosingPattern())
238217
}
239218

240219
predicate declInScope(AstNode definingNode, string name, AstNode scope) {
Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,2 @@
11
testFailures
22
ambiguousVariable
3-
| test.swift:352:10:353:17 | y | y | test.swift | 352 |
4-
| test.swift:352:17:352:17 | y | y | test.swift | 352 |

0 commit comments

Comments
 (0)