diff options
Diffstat (limited to 'clang-tools-extra/clang-modernize/LoopConvert/VariableNaming.h')
-rw-r--r-- | clang-tools-extra/clang-modernize/LoopConvert/VariableNaming.h | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/clang-tools-extra/clang-modernize/LoopConvert/VariableNaming.h b/clang-tools-extra/clang-modernize/LoopConvert/VariableNaming.h new file mode 100644 index 00000000000..066ed1e5af4 --- /dev/null +++ b/clang-tools-extra/clang-modernize/LoopConvert/VariableNaming.h @@ -0,0 +1,59 @@ +//===-- LoopConvert/VariableNaming.h - Gererate variable names --*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +/// +/// \file +/// \brief This file contains the declaration of the VariableNamer class, which +/// is responsible for generating new variable names and ensuring that they do +/// not conflict with existing ones. +// +//===----------------------------------------------------------------------===// + +#ifndef CPP11_MIGRATE_VARIABLE_NAMING_H +#define CPP11_MIGRATE_VARIABLE_NAMING_H + +#include "StmtAncestor.h" +#include "clang/AST/ASTContext.h" + +/// \brief Create names for generated variables within a particular statement. +/// +/// VariableNamer uses a DeclContext as a reference point, checking for any +/// conflicting declarations higher up in the context or within SourceStmt. +/// It creates a variable name using hints from a source container and the old +/// index, if they exist. +class VariableNamer { + public: + VariableNamer( + StmtGeneratedVarNameMap *GeneratedDecls, const StmtParentMap *ReverseAST, + const clang::Stmt *SourceStmt, const clang::VarDecl *OldIndex, + const clang::VarDecl *TheContainer, const clang::ASTContext *Context) + : GeneratedDecls(GeneratedDecls), ReverseAST(ReverseAST), + SourceStmt(SourceStmt), OldIndex(OldIndex), TheContainer(TheContainer), + Context(Context) {} + + /// \brief Generate a new index name. + /// + /// Generates the name to be used for an inserted iterator. It relies on + /// declarationExists() to determine that there are no naming conflicts, and + /// tries to use some hints from the container name and the old index name. + std::string createIndexName(); + + private: + StmtGeneratedVarNameMap *GeneratedDecls; + const StmtParentMap *ReverseAST; + const clang::Stmt *SourceStmt; + const clang::VarDecl *OldIndex; + const clang::VarDecl *TheContainer; + const clang::ASTContext *Context; + + // Determine whether or not a declaration that would conflict with Symbol + // exists in an outer context or in any statement contained in SourceStmt. + bool declarationExists(llvm::StringRef Symbol); +}; + +#endif // CPP11_MIGRATE_VARIABLE_NAMING_H |