 |
|
 |
|
| Files: |
1 |
|
Branches Taken: |
0.0% |
0 / 2 |
| Generated: |
2010-02-10 01:31 |
|
Branches Executed: |
0.0% |
0 / 2 |
| |
|
Line Coverage: |
0.0% |
0 / 5 |
| |
 |
|
 |
1 : //===--- TokenRewriter.h - Token-based Rewriter -----------------*- C++ -*-===//
2 : //
3 : // The LLVM Compiler Infrastructure
4 : //
5 : // This file is distributed under the University of Illinois Open Source
6 : // License. See LICENSE.TXT for details.
7 : //
8 : //===----------------------------------------------------------------------===//
9 : //
10 : // This file defines the TokenRewriter class, which is used for code
11 : // transformations.
12 : //
13 : //===----------------------------------------------------------------------===//
14 :
15 : #ifndef LLVM_CLANG_TOKENREWRITER_H
16 : #define LLVM_CLANG_TOKENREWRITER_H
17 :
18 : #include "clang/Basic/SourceLocation.h"
19 : #include "llvm/ADT/OwningPtr.h"
20 : #include <list>
21 : #include <map>
22 :
23 : namespace clang {
24 : class Token;
25 : class LangOptions;
26 : class ScratchBuffer;
27 :
28 : class TokenRewriter {
29 : /// TokenList - This is the list of raw tokens that make up this file. Each
30 : /// of these tokens has a unique SourceLocation, which is a FileID.
31 : std::list<Token> TokenList;
32 :
33 : /// TokenRefTy - This is the type used to refer to a token in the TokenList.
34 : typedef std::list<Token>::iterator TokenRefTy;
35 :
36 : /// TokenAtLoc - This map indicates which token exists at a specific
37 : /// SourceLocation. Since each token has a unique SourceLocation, this is a
38 : /// one to one map. The token can return its own location directly, to map
39 : /// backwards.
40 : std::map<SourceLocation, TokenRefTy> TokenAtLoc;
41 :
42 : /// ScratchBuf - This is the buffer that we create scratch tokens from.
43 : ///
44 : llvm::OwningPtr<ScratchBuffer> ScratchBuf;
45 :
46 : TokenRewriter(const TokenRewriter&); // DO NOT IMPLEMENT
47 : void operator=(const TokenRewriter&); // DO NOT IMPLEMENT.
48 : public:
49 : /// TokenRewriter - This creates a TokenRewriter for the file with the
50 : /// specified FileID.
51 : TokenRewriter(FileID FID, SourceManager &SM, const LangOptions &LO);
52 : ~TokenRewriter();
53 :
54 : typedef std::list<Token>::const_iterator token_iterator;
55 0: token_iterator token_begin() const { return TokenList.begin(); }
56 0: token_iterator token_end() const { return TokenList.end(); }
57 :
58 :
59 : token_iterator AddTokenBefore(token_iterator I, const char *Val);
60 0: token_iterator AddTokenAfter(token_iterator I, const char *Val) {
0: branch 2 not taken
0: branch 3 not taken
61 0: assert(I != token_end() && "Cannot insert after token_end()!");
62 0: return AddTokenBefore(++I, Val);
63 : }
64 :
65 : private:
66 : /// RemapIterator - Convert from token_iterator (a const iterator) to
67 : /// TokenRefTy (a non-const iterator).
68 : TokenRefTy RemapIterator(token_iterator I);
69 :
70 : /// AddToken - Add the specified token into the Rewriter before the other
71 : /// position.
72 : TokenRefTy AddToken(const Token &T, TokenRefTy Where);
73 : };
74 :
75 :
76 :
77 : } // end namespace clang
78 :
79 : #endif
Generated: 2010-02-10 01:31 by zcov