Skip to content

Commit a1d798b

Browse files
committed
Swift: make visit arguments references instead of pointers
1 parent cc9daff commit a1d798b

File tree

3 files changed

+29
-25
lines changed

3 files changed

+29
-25
lines changed

swift/extractor/infra/SwiftDispatcher.h

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,11 @@ class SwiftDispatcher {
105105
return *l;
106106
}
107107
waitingForNewLabel = e;
108-
visit(e, std::forward<Args>(args)...);
108+
if constexpr (std::is_pointer_v<E>) {
109+
visit(*e, std::forward<Args>(args)...);
110+
} else {
111+
visit(e, std::forward<Args>(args)...);
112+
}
109113
// TODO when everything is moved to structured C++ classes, this should be moved to createEntry
110114
if (auto l = store.get(e)) {
111115
if constexpr (IsLocatable<E>) {
@@ -331,15 +335,15 @@ class SwiftDispatcher {
331335
// TODO: for const correctness these should consistently be `const` (and maybe const references
332336
// as we don't expect `nullptr` here. However `swift::ASTVisitor` and `swift::TypeVisitor` do not
333337
// accept const pointers
334-
virtual void visit(const swift::Decl* decl) = 0;
335-
virtual void visit(const swift::Stmt* stmt) = 0;
336-
virtual void visit(const swift::StmtCondition* cond) = 0;
337-
virtual void visit(const swift::StmtConditionElement* cond) = 0;
338-
virtual void visit(const swift::CaseLabelItem* item) = 0;
339-
virtual void visit(const swift::Expr* expr) = 0;
340-
virtual void visit(const swift::Pattern* pattern) = 0;
341-
virtual void visit(const swift::TypeRepr* typeRepr, swift::Type type) = 0;
342-
virtual void visit(swift::TypeBase* type) = 0;
338+
virtual void visit(const swift::Decl& decl) = 0;
339+
virtual void visit(const swift::Stmt& stmt) = 0;
340+
virtual void visit(const swift::StmtCondition& cond) = 0;
341+
virtual void visit(const swift::StmtConditionElement& cond) = 0;
342+
virtual void visit(const swift::CaseLabelItem& item) = 0;
343+
virtual void visit(const swift::Expr& expr) = 0;
344+
virtual void visit(const swift::Pattern& pattern) = 0;
345+
virtual void visit(const swift::TypeRepr& typeRepr, swift::Type type) = 0;
346+
virtual void visit(const swift::TypeBase& type) = 0;
343347

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

swift/extractor/translators/SwiftVisitor.h

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,22 @@ class SwiftVisitor : private SwiftDispatcher {
2121
void extract(swift::Token& comment) { emitComment(comment); }
2222

2323
private:
24-
void visit(const swift::Decl* decl) override { declTranslator.translateAndEmit(decl); }
25-
void visit(const swift::Stmt* stmt) override { stmtTranslator.translateAndEmit(stmt); }
26-
void visit(const swift::StmtCondition* cond) override { stmtTranslator.translateAndEmit(*cond); }
27-
void visit(const swift::StmtConditionElement* element) override {
28-
stmtTranslator.translateAndEmit(*element);
24+
void visit(const swift::Decl& decl) override { declTranslator.translateAndEmit(decl); }
25+
void visit(const swift::Stmt& stmt) override { stmtTranslator.translateAndEmit(stmt); }
26+
void visit(const swift::StmtCondition& cond) override { stmtTranslator.translateAndEmit(cond); }
27+
void visit(const swift::StmtConditionElement& element) override {
28+
stmtTranslator.translateAndEmit(element);
2929
}
3030

31-
void visit(const swift::CaseLabelItem* item) override { stmtTranslator.translateAndEmit(*item); }
32-
void visit(const swift::Expr* expr) override { exprTranslator.translateAndEmit(expr); }
33-
void visit(const swift::Pattern* pattern) override {
31+
void visit(const swift::CaseLabelItem& item) override { stmtTranslator.translateAndEmit(item); }
32+
void visit(const swift::Expr& expr) override { exprTranslator.translateAndEmit(expr); }
33+
void visit(const swift::Pattern& pattern) override {
3434
patternTranslator.translateAndEmit(pattern);
3535
}
3636

37-
void visit(swift::TypeBase* type) override { typeTranslator.translateAndEmit(type); }
38-
void visit(const swift::TypeRepr* typeRepr, swift::Type type) override {
39-
typeTranslator.translateAndEmit(*typeRepr, type);
37+
void visit(const swift::TypeBase& type) override { typeTranslator.translateAndEmit(type); }
38+
void visit(const swift::TypeRepr& typeRepr, swift::Type type) override {
39+
typeTranslator.translateAndEmit(typeRepr, type);
4040
}
4141

4242
DeclTranslator declTranslator{*this};

swift/extractor/translators/TranslatorBase.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ class AstTranslatorBase : private swift::ASTVisitor<CrtpSubclass>,
8787
// route the visit to translateXXX functions only if they take const references to swift
8888
// entities (see HasTranslate##CLASS##KIND above)
8989
template <typename E>
90-
void translateAndEmit(const E* entity) {
91-
swift::ASTVisitor<CrtpSubclass>::visit(const_cast<E*>(entity));
90+
void translateAndEmit(const E& entity) {
91+
swift::ASTVisitor<CrtpSubclass>::visit(const_cast<E*>(&entity));
9292
}
9393

9494
private:
@@ -122,8 +122,8 @@ class TypeTranslatorBase : private swift::TypeVisitor<CrtpSubclass>,
122122
// swift does not provide const visitors. The following const_cast is safe, as we privately
123123
// route the visit to translateXXX functions only if they take const references to swift
124124
// entities (see HasTranslate##CLASS##KIND above)
125-
void translateAndEmit(const swift::TypeBase* type) {
126-
swift::TypeVisitor<CrtpSubclass>::visit(const_cast<swift::TypeBase*>(type));
125+
void translateAndEmit(const swift::TypeBase& type) {
126+
swift::TypeVisitor<CrtpSubclass>::visit(const_cast<swift::TypeBase*>(&type));
127127
}
128128

129129
private:

0 commit comments

Comments
 (0)