Swift: make visit arguments pointers again

This commit is contained in:
Paolo Tranquilli
2022-11-04 05:59:38 +01:00
parent e0eb820ef9
commit 3a8efb3db1
2 changed files with 22 additions and 29 deletions

View File

@@ -105,11 +105,7 @@ class SwiftDispatcher {
return *l;
}
waitingForNewLabel = e;
if constexpr (std::is_pointer_v<E>) {
visit(*e, std::forward<Args>(args)...);
} else {
visit(e, std::forward<Args>(args)...);
}
visit(e, std::forward<Args>(args)...);
// TODO when everything is moved to structured C++ classes, this should be moved to createEntry
if (auto l = store.get(e)) {
if constexpr (IsLocatable<E>) {
@@ -332,18 +328,15 @@ class SwiftDispatcher {
return ret;
}
// TODO: for const correctness these should consistently be `const` (and maybe const references
// as we don't expect `nullptr` here. However `swift::ASTVisitor` and `swift::TypeVisitor` do not
// accept const pointers
virtual void visit(const swift::Decl& decl) = 0;
virtual void visit(const swift::Stmt& stmt) = 0;
virtual void visit(const swift::StmtCondition& cond) = 0;
virtual void visit(const swift::StmtConditionElement& cond) = 0;
virtual void visit(const swift::CaseLabelItem& item) = 0;
virtual void visit(const swift::Expr& expr) = 0;
virtual void visit(const swift::Pattern& pattern) = 0;
virtual void visit(const swift::TypeRepr& typeRepr, swift::Type type) = 0;
virtual void visit(const swift::TypeBase& type) = 0;
virtual void visit(const swift::Decl* decl) = 0;
virtual void visit(const swift::Stmt* stmt) = 0;
virtual void visit(const swift::StmtCondition* cond) = 0;
virtual void visit(const swift::StmtConditionElement* cond) = 0;
virtual void visit(const swift::CaseLabelItem* item) = 0;
virtual void visit(const swift::Expr* expr) = 0;
virtual void visit(const swift::Pattern* pattern) = 0;
virtual void visit(const swift::TypeRepr* typeRepr, swift::Type type) = 0;
virtual void visit(const swift::TypeBase* type) = 0;
void visit(const std::filesystem::path& file) {
auto entry = createEntry(file, file.string());

View File

@@ -21,22 +21,22 @@ class SwiftVisitor : private SwiftDispatcher {
void extract(swift::Token& comment) { emitComment(comment); }
private:
void visit(const swift::Decl& decl) override { declTranslator.translateAndEmit(decl); }
void visit(const swift::Stmt& stmt) override { stmtTranslator.translateAndEmit(stmt); }
void visit(const swift::StmtCondition& cond) override { stmtTranslator.translateAndEmit(cond); }
void visit(const swift::StmtConditionElement& element) override {
stmtTranslator.translateAndEmit(element);
void visit(const swift::Decl* decl) override { declTranslator.translateAndEmit(*decl); }
void visit(const swift::Stmt* stmt) override { stmtTranslator.translateAndEmit(*stmt); }
void visit(const swift::StmtCondition* cond) override { stmtTranslator.translateAndEmit(*cond); }
void visit(const swift::StmtConditionElement* element) override {
stmtTranslator.translateAndEmit(*element);
}
void visit(const swift::CaseLabelItem& item) override { stmtTranslator.translateAndEmit(item); }
void visit(const swift::Expr& expr) override { exprTranslator.translateAndEmit(expr); }
void visit(const swift::Pattern& pattern) override {
patternTranslator.translateAndEmit(pattern);
void visit(const swift::CaseLabelItem* item) override { stmtTranslator.translateAndEmit(*item); }
void visit(const swift::Expr* expr) override { exprTranslator.translateAndEmit(*expr); }
void visit(const swift::Pattern* pattern) override {
patternTranslator.translateAndEmit(*pattern);
}
void visit(const swift::TypeBase& type) override { typeTranslator.translateAndEmit(type); }
void visit(const swift::TypeRepr& typeRepr, swift::Type type) override {
typeTranslator.translateAndEmit(typeRepr, type);
void visit(const swift::TypeBase* type) override { typeTranslator.translateAndEmit(*type); }
void visit(const swift::TypeRepr* typeRepr, swift::Type type) override {
typeTranslator.translateAndEmit(*typeRepr, type);
}
DeclTranslator declTranslator{*this};