diff options
author | Chris Lattner <sabre@nondot.org> | 2008-10-12 05:44:03 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-10-12 05:44:03 +0000 |
commit | cff9cc95de367a3aea885a7f8fee304fe2707b92 (patch) | |
tree | a7c6af20ebfdf923c65851535855ab6b5063ba56 /include/clang | |
parent | b13c5eef3634e32075511d11ded4b699c17fb0d7 (diff) |
start implementing a token rewriter. At this point, it just reads in a file
and lets a client iterate over it.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57407 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/clang')
-rw-r--r-- | include/clang/Basic/SourceLocation.h | 5 | ||||
-rw-r--r-- | include/clang/Rewrite/TokenRewriter.h | 60 |
2 files changed, 65 insertions, 0 deletions
diff --git a/include/clang/Basic/SourceLocation.h b/include/clang/Basic/SourceLocation.h index ee6cc145fe..2e96f133b4 100644 --- a/include/clang/Basic/SourceLocation.h +++ b/include/clang/Basic/SourceLocation.h @@ -155,6 +155,11 @@ public: /// directly. unsigned getRawEncoding() const { return ID; } + + bool operator<(const SourceLocation &RHS) const { + return ID < RHS.ID; + } + /// getFromRawEncoding - Turn a raw encoding of a SourceLocation object into /// a real SourceLocation. static SourceLocation getFromRawEncoding(unsigned Encoding) { diff --git a/include/clang/Rewrite/TokenRewriter.h b/include/clang/Rewrite/TokenRewriter.h new file mode 100644 index 0000000000..da0141ff34 --- /dev/null +++ b/include/clang/Rewrite/TokenRewriter.h @@ -0,0 +1,60 @@ +//===--- TokenRewriter.h - Token-based Rewriter -----------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines the TokenRewriter class, which is used for code +// transformations. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_TOKENREWRITER_H +#define LLVM_CLANG_TOKENREWRITER_H + +#include "clang/Basic/SourceLocation.h" +#include <list> +#include <map> + +namespace clang { + class Token; + class LangOptions; + + class TokenRewriter { + /// TokenList - This is the list of raw tokens that make up this file. Each + /// of these tokens has a unique SourceLocation, which is a FileID. + std::list<Token> TokenList; + + /// TokenRefTy - This is the type used to refer to a token in the TokenList. + typedef std::list<Token>::iterator TokenRefTy; + + /// TokenAtLoc - This map indicates which token exists at a specific + /// SourceLocation. Since each token has a unique SourceLocation, this is a + /// one to one map. The token can return its own location directly, to map + /// backwards. + std::map<SourceLocation, TokenRefTy> TokenAtLoc; + + public: + /// TokenRewriter - This creates a TokenRewriter for the file with the + /// specified FileID. + TokenRewriter(unsigned FileID, SourceManager &SM, const LangOptions &LO); + + + typedef std::list<Token>::const_iterator token_iterator; + token_iterator token_begin() const { return TokenList.begin(); } + token_iterator token_end() const { return TokenList.end(); } + + private: + /// AddToken - Add the specified token into the Rewriter before the other + /// position. + void AddToken(const Token &T, TokenRefTy Where); + }; + + + +} // end namespace clang + +#endif |