X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=utils%2FTableGen%2FTGLexer.h;h=8859479874020dfa75c1a1695150ddeb9caa8023;hb=505f3cd2965e65b6b7ad023eaba0e3dc89b67409;hp=2c5a852fcd48af0cdb0ef7ed5a5efe48525d5926;hpb=63f97201dc9dcebbe84d1b73113166c64212b4b8;p=oota-llvm.git diff --git a/utils/TableGen/TGLexer.h b/utils/TableGen/TGLexer.h index 2c5a852fcd4..88594798740 100644 --- a/utils/TableGen/TGLexer.h +++ b/utils/TableGen/TGLexer.h @@ -14,14 +14,17 @@ #ifndef TGLEXER_H #define TGLEXER_H +#include "llvm/Support/DataTypes.h" #include #include -#include #include namespace llvm { class MemoryBuffer; - +class SourceMgr; +class SMLoc; +class Twine; + namespace tgtok { enum TokKind { // Markers @@ -33,7 +36,7 @@ namespace tgtok { l_brace, r_brace, // { } l_paren, r_paren, // ( ) less, greater, // < > - colon, semi, // ; : + colon, semi, // : ; comma, period, // , . equal, question, // = ? @@ -42,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, @@ -54,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(); @@ -103,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();