aboutsummaryrefslogtreecommitdiff
path: root/lib/Rewrite/TokenRewriter.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2012-09-01 05:09:24 +0000
committerTed Kremenek <kremenek@apple.com>2012-09-01 05:09:24 +0000
commit305c613af6cfc40e519c75d9d2c84c6fa9a841c0 (patch)
tree4f7b6849cefc8dce39b4eb5056330fbb7112deb1 /lib/Rewrite/TokenRewriter.cpp
parentf143ae9b68cdd40dfb120094baaa702b810eb52c (diff)
Split library clangRewrite into clangRewriteCore and clangRewriteFrontend.
This is similar to how we divide up the StaticAnalyzer libraries to separate core functionality to what is clearly associated with Frontend actions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163050 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Rewrite/TokenRewriter.cpp')
-rw-r--r--lib/Rewrite/TokenRewriter.cpp99
1 files changed, 0 insertions, 99 deletions
diff --git a/lib/Rewrite/TokenRewriter.cpp b/lib/Rewrite/TokenRewriter.cpp
deleted file mode 100644
index 03ce63ea11..0000000000
--- a/lib/Rewrite/TokenRewriter.cpp
+++ /dev/null
@@ -1,99 +0,0 @@
-//===--- TokenRewriter.cpp - Token-based code rewriting interface ---------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements the TokenRewriter class, which is used for code
-// transformations.
-//
-//===----------------------------------------------------------------------===//
-
-#include "clang/Rewrite/TokenRewriter.h"
-#include "clang/Lex/Lexer.h"
-#include "clang/Lex/ScratchBuffer.h"
-#include "clang/Basic/SourceManager.h"
-using namespace clang;
-
-TokenRewriter::TokenRewriter(FileID FID, SourceManager &SM,
- const LangOptions &LangOpts) {
- ScratchBuf.reset(new ScratchBuffer(SM));
-
- // Create a lexer to lex all the tokens of the main file in raw mode.
- const llvm::MemoryBuffer *FromFile = SM.getBuffer(FID);
- Lexer RawLex(FID, FromFile, SM, LangOpts);
-
- // Return all comments and whitespace as tokens.
- RawLex.SetKeepWhitespaceMode(true);
-
- // Lex the file, populating our datastructures.
- Token RawTok;
- RawLex.LexFromRawLexer(RawTok);
- while (RawTok.isNot(tok::eof)) {
-#if 0
- if (Tok.is(tok::raw_identifier)) {
- // Look up the identifier info for the token. This should use
- // IdentifierTable directly instead of PP.
- PP.LookUpIdentifierInfo(Tok);
- }
-#endif
-
- AddToken(RawTok, TokenList.end());
- RawLex.LexFromRawLexer(RawTok);
- }
-}
-
-TokenRewriter::~TokenRewriter() {
-}
-
-
-/// RemapIterator - Convert from token_iterator (a const iterator) to
-/// TokenRefTy (a non-const iterator).
-TokenRewriter::TokenRefTy TokenRewriter::RemapIterator(token_iterator I) {
- if (I == token_end()) return TokenList.end();
-
- // FIXME: This is horrible, we should use our own list or something to avoid
- // this.
- std::map<SourceLocation, TokenRefTy>::iterator MapIt =
- TokenAtLoc.find(I->getLocation());
- assert(MapIt != TokenAtLoc.end() && "iterator not in rewriter?");
- return MapIt->second;
-}
-
-
-/// AddToken - Add the specified token into the Rewriter before the other
-/// position.
-TokenRewriter::TokenRefTy
-TokenRewriter::AddToken(const Token &T, TokenRefTy Where) {
- Where = TokenList.insert(Where, T);
-
- bool InsertSuccess = TokenAtLoc.insert(std::make_pair(T.getLocation(),
- Where)).second;
- assert(InsertSuccess && "Token location already in rewriter!");
- (void)InsertSuccess;
- return Where;
-}
-
-
-TokenRewriter::token_iterator
-TokenRewriter::AddTokenBefore(token_iterator I, const char *Val) {
- unsigned Len = strlen(Val);
-
- // Plop the string into the scratch buffer, then create a token for this
- // string.
- Token Tok;
- Tok.startToken();
- const char *Spelling;
- Tok.setLocation(ScratchBuf->getToken(Val, Len, Spelling));
- Tok.setLength(Len);
-
- // TODO: Form a whole lexer around this and relex the token! For now, just
- // set kind to tok::unknown.
- Tok.setKind(tok::unknown);
-
- return AddToken(Tok, RemapIterator(I));
-}
-