1ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao//===--- ScratchBuffer.h - Scratch space for forming tokens -----*- C++ -*-===//
2ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao//
3ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao//                     The LLVM Compiler Infrastructure
4ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao//
5ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// This file is distributed under the University of Illinois Open Source
6ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// License. See LICENSE.TXT for details.
7ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao//
8ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao//===----------------------------------------------------------------------===//
9ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao//
10ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao//  This file defines the ScratchBuffer interface.
11ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao//
12ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao//===----------------------------------------------------------------------===//
13ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
14ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao#ifndef LLVM_CLANG_SCRATCHBUFFER_H
15ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao#define LLVM_CLANG_SCRATCHBUFFER_H
16ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
17ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao#include "clang/Basic/SourceLocation.h"
18ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
19ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaonamespace clang {
20ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  class SourceManager;
21ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
22ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao/// ScratchBuffer - This class exposes a simple interface for the dynamic
23ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao/// construction of tokens.  This is used for builtin macros (e.g. __LINE__) as
24ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao/// well as token pasting, etc.
25ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaoclass ScratchBuffer {
26ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  SourceManager &SourceMgr;
27ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  char *CurBuffer;
28ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  SourceLocation BufferStartLoc;
29ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  unsigned BytesUsed;
30ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaopublic:
31ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  ScratchBuffer(SourceManager &SM);
32ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
33ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  /// getToken - Splat the specified text into a temporary MemoryBuffer and
34ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  /// return a SourceLocation that refers to the token.  This is just like the
35ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  /// previous method, but returns a location that indicates the physloc of the
36ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  /// token.
37ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  SourceLocation getToken(const char *Buf, unsigned Len, const char *&DestPtr);
38ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
39ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaoprivate:
40ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  void AllocScratchBuffer(unsigned RequestLen);
41ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao};
42ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
43ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao} // end namespace clang
44ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
45ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao#endif
46