Skip to content

Commit b8e3828

Browse files
committed
Swift: add extraction of ThenStmt
These are currently added implicitly by the compiler in the context of `if`/`switch` expressions. In the future, there might be explicit `then <expr>` statement useful for cases where one would like to add more than one statement in the branch, to mark what value to actually use. See https://forums.swift.org/t/pitch-multi-statement-if-switch-do-expressions/68443
1 parent 2382f76 commit b8e3828

File tree

20 files changed

+213
-9
lines changed

20 files changed

+213
-9
lines changed

swift/extractor/infra/SwiftTagTraits.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ MAP(swift::Stmt, StmtTag)
4343
MAP(swift::BraceStmt, BraceStmtTag)
4444
MAP(swift::ReturnStmt, ReturnStmtTag)
4545
MAP(swift::YieldStmt, YieldStmtTag)
46-
MAP(swift::ThenStmt, void) // gated behind yet unusable experimental feature
46+
MAP(swift::ThenStmt, ThenStmtTag)
4747
MAP(swift::DeferStmt, DeferStmtTag)
4848
MAP(swift::LabeledStmt, LabeledStmtTag)
4949
MAP(swift::LabeledConditionalStmt, LabeledConditionalStmtTag)

swift/extractor/translators/StmtTranslator.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,4 +218,10 @@ codeql::DiscardStmt StmtTranslator::translateDiscardStmt(const swift::DiscardStm
218218
return entry;
219219
}
220220

221+
codeql::ThenStmt StmtTranslator::translateThenStmt(const swift::ThenStmt& stmt) {
222+
auto entry = dispatcher.createEntry(stmt);
223+
entry.result = dispatcher.fetchLabel(stmt.getResult());
224+
return entry;
225+
}
226+
221227
} // namespace codeql

swift/extractor/translators/StmtTranslator.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ class StmtTranslator : public AstTranslatorBase<StmtTranslator> {
4040
codeql::FailStmt translateFailStmt(const swift::FailStmt& stmt);
4141
codeql::PoundAssertStmt translatePoundAssertStmt(const swift::PoundAssertStmt& stmt);
4242
codeql::DiscardStmt translateDiscardStmt(const swift::DiscardStmt& stmt);
43+
codeql::ThenStmt translateThenStmt(const swift::ThenStmt& stmt);
4344

4445
private:
4546
void fillLabeledStmt(const swift::LabeledStmt& stmt, codeql::LabeledStmt& entry);

swift/ql/.generated.list

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

swift/ql/.gitattributes

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

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

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

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

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

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

Lines changed: 14 additions & 0 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/ParentChild.qll

Lines changed: 15 additions & 0 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/Raw.qll

Lines changed: 21 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)