Skip to content

Commit 4d2e304

Browse files
authored
Merge pull request github#13240 from d10c/swift/brace-stmt-variables
Swift: reorganize `VarDecl` instances within `BraceStmt`
2 parents f5f822c + 0db321c commit 4d2e304

File tree

11 files changed

+541
-687
lines changed

11 files changed

+541
-687
lines changed

swift/ql/.generated.list

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
category: breaking
3+
---
4+
* The `BraceStmt` AST node's `AstNode getElement(index)` member predicate no longer returns `VarDecl`s after the `PatternBindingDecl` that declares them. Instead, a new `VarDecl getVariable(index)` predicate has been introduced for accessing the variables declared in a `BraceStmt`. This change only affects query writers.

swift/ql/lib/codeql/swift/elements/pattern/NamedPattern.qll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ class NamedPattern extends Generated::NamedPattern {
1919
* This will be the case as long as the variable is subsequently used.
2020
*/
2121
VarDecl getVarDecl() {
22-
this.getImmediateEnclosingPattern*() = result.getParentPattern().getFullyUnresolved() and
23-
result.getName() = this.getName()
22+
this.getImmediateEnclosingPattern*() = result.getImmediateParentPattern() and
23+
pragma[only_bind_out](result.getName()) = pragma[only_bind_out](this.getName())
2424
}
2525

2626
override string toString() { result = this.getName() }

swift/ql/lib/codeql/swift/elements/stmt/BraceStmt.qll

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,23 @@ class BraceStmt extends Generated::BraceStmt {
1111
}
1212

1313
override string toString() { result = "{ ... }" }
14+
15+
override AstNode getImmediateElement(int index) {
16+
result =
17+
rank[index + 1](AstNode element, int i |
18+
element = super.getImmediateElement(i) and
19+
not element instanceof VarDecl
20+
|
21+
element order by i
22+
)
23+
}
24+
25+
override VarDecl getVariable(int index) {
26+
result =
27+
rank[index + 1](VarDecl variable, int i |
28+
variable = super.getImmediateElement(i)
29+
|
30+
variable order by i
31+
)
32+
}
1433
}

swift/ql/lib/codeql/swift/generated/ParentChild.qll

Lines changed: 8 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

swift/ql/lib/codeql/swift/generated/stmt/BraceStmt.qll

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)