diff options
Diffstat (limited to 'clang/lib/AST/StmtPrinter.cpp')
| -rw-r--r-- | clang/lib/AST/StmtPrinter.cpp | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/clang/lib/AST/StmtPrinter.cpp b/clang/lib/AST/StmtPrinter.cpp index ee3852a3e98..df8d2bbf09d 100644 --- a/clang/lib/AST/StmtPrinter.cpp +++ b/clang/lib/AST/StmtPrinter.cpp @@ -586,6 +586,9 @@ void StmtPrinter::VisitSEHFinallyStmt(SEHFinallyStmt *Node) { namespace { class OMPClausePrinter : public OMPClauseVisitor<OMPClausePrinter> { raw_ostream &OS; + /// \brief Process clauses with list of variables. + template <typename T> + void VisitOMPClauseList(T *Node, char StartSym); public: OMPClausePrinter(raw_ostream &OS) : OS(OS) { } #define OPENMP_CLAUSE(Name, Class) \ @@ -599,17 +602,19 @@ void OMPClausePrinter::VisitOMPDefaultClause(OMPDefaultClause *Node) { << ")"; } -#define PROCESS_OMP_CLAUSE_LIST(Class, Node, StartSym) \ - for (OMPVarList<Class>::varlist_iterator I = Node->varlist_begin(), \ - E = Node->varlist_end(); \ - I != E; ++I) \ - OS << (I == Node->varlist_begin() ? StartSym : ',') \ +template<typename T> +void OMPClausePrinter::VisitOMPClauseList(T *Node, char StartSym) { + for (typename T::varlist_iterator I = Node->varlist_begin(), + E = Node->varlist_end(); + I != E; ++I) + OS << (I == Node->varlist_begin() ? StartSym : ',') << *cast<NamedDecl>(cast<DeclRefExpr>(*I)->getDecl()); +} void OMPClausePrinter::VisitOMPPrivateClause(OMPPrivateClause *Node) { if (!Node->varlist_empty()) { OS << "private"; - PROCESS_OMP_CLAUSE_LIST(OMPPrivateClause, Node, '(') + VisitOMPClauseList(Node, '('); OS << ")"; } } @@ -617,12 +622,11 @@ void OMPClausePrinter::VisitOMPPrivateClause(OMPPrivateClause *Node) { void OMPClausePrinter::VisitOMPSharedClause(OMPSharedClause *Node) { if (!Node->varlist_empty()) { OS << "shared"; - PROCESS_OMP_CLAUSE_LIST(OMPSharedClause, Node, '(') + VisitOMPClauseList(Node, '('); OS << ")"; } } -#undef PROCESS_OMP_CLAUSE_LIST } //===----------------------------------------------------------------------===// |

