X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=utils%2FTableGen%2FTGLexer.h;h=8859479874020dfa75c1a1695150ddeb9caa8023;hb=505f3cd2965e65b6b7ad023eaba0e3dc89b67409;hp=0e67f680557dffd1ca96c8782391e50205e29d53;hpb=bb9d18c7d5dea146b2810de0a9bc3d21a1766a60;p=oota-llvm.git diff --git a/utils/TableGen/TGLexer.h b/utils/TableGen/TGLexer.h index 0e67f680557..88594798740 100644 --- a/utils/TableGen/TGLexer.h +++ b/utils/TableGen/TGLexer.h @@ -17,12 +17,14 @@ #include "llvm/Support/DataTypes.h" #include #include -#include #include namespace llvm { class MemoryBuffer; - +class SourceMgr; +class SMLoc; +class Twine; + namespace tgtok { enum TokKind { // Markers @@ -34,7 +36,7 @@ namespace tgtok { l_brace, r_brace, // { } l_paren, r_paren, // ( ) less, greater, // < > - colon, semi, // ; : + colon, semi, // : ; comma, period, // , . equal, question, // = ? @@ -43,8 +45,9 @@ namespace tgtok { MultiClass, String, // !keywords. - XConcat, XSRA, XSRL, XSHL, XStrConcat, - + XConcat, XSRA, XSRL, XSHL, XStrConcat, XCast, XSubst, + XForEach, XHead, XTail, XEmpty, XIf, XEq, + // Integer value. IntVal, @@ -55,37 +58,24 @@ namespace tgtok { /// TGLexer - TableGen Lexer class. class TGLexer { + SourceMgr &SrcMgr; + const char *CurPtr; - unsigned CurLineNo; - MemoryBuffer *CurBuf; + const MemoryBuffer *CurBuf; // Information about the current token. const char *TokStart; tgtok::TokKind CurCode; std::string CurStrVal; // This is valid for ID, STRVAL, VARNAME, CODEFRAGMENT int64_t CurIntVal; // This is valid for INTVAL. + + /// CurBuffer - This is the current buffer index we're lexing from as managed + /// by the SourceMgr object. + int CurBuffer; - /// IncludeRec / IncludeStack - This captures the current set of include - /// directives we are nested within. - struct IncludeRec { - MemoryBuffer *Buffer; - const char *CurPtr; - unsigned LineNo; - IncludeRec(MemoryBuffer *buffer, const char *curPtr, unsigned lineNo) - : Buffer(buffer), CurPtr(curPtr), LineNo(lineNo) {} - }; - std::vector IncludeStack; - - // IncludeDirectories - This is the list of directories we should search for - // include files in. - std::vector IncludeDirectories; public: - TGLexer(MemoryBuffer *StartBuf); - ~TGLexer(); - - void setIncludeDirs(const std::vector &Dirs) { - IncludeDirectories = Dirs; - } + TGLexer(SourceMgr &SrcMgr); + ~TGLexer() {} tgtok::TokKind Lex() { return CurCode = LexToken(); @@ -104,18 +94,16 @@ public: return CurIntVal; } - typedef const char* LocTy; - LocTy getLoc() const { return TokStart; } + SMLoc getLoc() const; - void PrintError(LocTy Loc, const std::string &Msg) const; - - void PrintIncludeStack(std::ostream &OS) const; + void PrintError(const char *Loc, const Twine &Msg) const; + void PrintError(SMLoc Loc, const Twine &Msg) const; private: /// LexToken - Read the next token and return its code. tgtok::TokKind LexToken(); - tgtok::TokKind ReturnError(const char *Loc, const std::string &Msg); + tgtok::TokKind ReturnError(const char *Loc, const Twine &Msg); int getNextChar(); void SkipBCPLComment();