#pragma once #include "swift/extractor/SwiftDispatcher.h" #include namespace codeql { namespace detail { // swift code lacks default implementations of visitor for some entities. We can add those here // while we do not have yet all implemented. This is a simplified version of the corresponding Expr // code in swift/AST/ASTVisitor.h template class PatchedPatternVisitor : public swift::PatternVisitor { public: #define PATTERN(CLASS, PARENT) \ void visit##CLASS##Pattern(swift::CLASS##Pattern* E) { \ return static_cast(this)->visit##PARENT(E); \ } #include "swift/AST/PatternNodes.def" }; } // namespace detail class PatternVisitor : public detail::PatchedPatternVisitor { public: // SwiftDispatcher should outlive the PatternVisitor PatternVisitor(SwiftDispatcher& dispatcher) : dispatcher(dispatcher) {} template void visitPattern(E* pattern) { dispatcher.TBD(pattern, "Pattern"); } private: SwiftDispatcher& dispatcher; }; } // namespace codeql