Skip to content

Commit b94066a

Browse files
authored
Merge pull request github#11094 from github/redsun82/swift-translators
Swift: refactor visitors to use translations
2 parents 7b62bed + 3a8efb3 commit b94066a

36 files changed

+4804
-1782
lines changed

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ repos:
3131

3232
- id: sync-files
3333
name: Fix files required to be identical
34-
files: \.(qll?|qhelp|swift)$
34+
files: \.(qll?|qhelp|swift)$|^config/identical-files\.json$
3535
language: system
3636
entry: python3 config/sync-files.py --latest
3737
pass_filenames: false

config/identical-files.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -600,8 +600,12 @@
600600
"swift/ql/test/extractor-tests/patterns/patterns.swift",
601601
"swift/ql/test/library-tests/ast/patterns.swift"
602602
],
603+
"Swift control flow test file": [
604+
"swift/ql/test/library-tests/controlflow/graph/cfg.swift",
605+
"swift/ql/test/library-tests/ast/cfg.swift"
606+
],
603607
"IncompleteMultiCharacterSanitization JS/Ruby": [
604608
"javascript/ql/lib/semmle/javascript/security/IncompleteMultiCharacterSanitizationQuery.qll",
605609
"ruby/ql/lib/codeql/ruby/security/IncompleteMultiCharacterSanitizationQuery.qll"
606610
]
607-
}
611+
}

swift/codegen/lib/cpp.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"xor", "xor_eq"}
1717

1818
_field_overrides = [
19-
(re.compile(r"(start|end)_(line|column)|index|width|num_.*"), {"type": "unsigned"}),
19+
(re.compile(r"(start|end)_(line|column)|(.*_)?index|width|num_.*"), {"type": "unsigned"}),
2020
(re.compile(r"(.*)_"), lambda m: {"field_name": m[1]}),
2121
]
2222

swift/extractor/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ swift_cc_binary(
1111
deps = [
1212
"//swift/extractor/infra",
1313
"//swift/extractor/remapping",
14-
"//swift/extractor/visitors",
14+
"//swift/extractor/translators",
1515
"//swift/third_party/swift-llvm-support",
1616
],
1717
)

swift/extractor/SwiftExtractor.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#include <swift/AST/Builtins.h>
1010

1111
#include "swift/extractor/trap/TrapDomain.h"
12-
#include "swift/extractor/visitors/SwiftVisitor.h"
12+
#include "swift/extractor/translators/SwiftVisitor.h"
1313
#include "swift/extractor/TargetTrapFile.h"
1414
#include "swift/extractor/SwiftBuiltinSymbols.h"
1515

swift/extractor/infra/SwiftDispatcher.h

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,9 @@ class SwiftDispatcher {
211211
template <typename Iterable>
212212
auto fetchRepeatedLabels(Iterable&& arg) {
213213
std::vector<decltype(fetchLabel(*arg.begin()))> ret;
214-
ret.reserve(arg.size());
214+
if constexpr (HasSize<Iterable>::value) {
215+
ret.reserve(arg.size());
216+
}
215217
for (auto&& e : arg) {
216218
ret.push_back(fetchLabel(e));
217219
}
@@ -262,6 +264,12 @@ class SwiftDispatcher {
262264
}
263265

264266
private:
267+
template <typename T, typename = void>
268+
struct HasSize : std::false_type {};
269+
270+
template <typename T>
271+
struct HasSize<T, decltype(std::declval<T>().size(), void())> : std::true_type {};
272+
265273
void attachLocation(swift::SourceLoc start,
266274
swift::SourceLoc end,
267275
TrapLabel<LocatableTag> locatableLabel) {
@@ -320,18 +328,15 @@ class SwiftDispatcher {
320328
return ret;
321329
}
322330

323-
// TODO: for const correctness these should consistently be `const` (and maybe const references
324-
// as we don't expect `nullptr` here. However `swift::ASTVisitor` and `swift::TypeVisitor` do not
325-
// accept const pointers
326-
virtual void visit(swift::Decl* decl) = 0;
327-
virtual void visit(swift::Stmt* stmt) = 0;
331+
virtual void visit(const swift::Decl* decl) = 0;
332+
virtual void visit(const swift::Stmt* stmt) = 0;
328333
virtual void visit(const swift::StmtCondition* cond) = 0;
329334
virtual void visit(const swift::StmtConditionElement* cond) = 0;
330-
virtual void visit(swift::CaseLabelItem* item) = 0;
331-
virtual void visit(swift::Expr* expr) = 0;
332-
virtual void visit(swift::Pattern* pattern) = 0;
333-
virtual void visit(swift::TypeRepr* typeRepr, swift::Type type) = 0;
334-
virtual void visit(swift::TypeBase* type) = 0;
335+
virtual void visit(const swift::CaseLabelItem* item) = 0;
336+
virtual void visit(const swift::Expr* expr) = 0;
337+
virtual void visit(const swift::Pattern* pattern) = 0;
338+
virtual void visit(const swift::TypeRepr* typeRepr, swift::Type type) = 0;
339+
virtual void visit(const swift::TypeBase* type) = 0;
335340

336341
void visit(const std::filesystem::path& file) {
337342
auto entry = createEntry(file, file.string());

swift/extractor/visitors/BUILD.bazel renamed to swift/extractor/translators/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
load("//swift:rules.bzl", "swift_cc_library")
22

33
swift_cc_library(
4-
name = "visitors",
4+
name = "translators",
55
srcs = glob(["*.cpp"]),
66
hdrs = glob(["*.h"]),
77
visibility = ["//swift:__subpackages__"],

0 commit comments

Comments
 (0)