X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FAsmParser%2FLLLexer.h;h=33b9135723752d4bfa6ae97973cd98e97d5cebf8;hb=c56f5ea4c36aff16bd87c67e95f8a9be7424b286;hp=eaf32203bbf85da6488bca4da12f7a05b2554455;hpb=8e3a8e0452695643d04c21e15c94b802aef81bae;p=oota-llvm.git diff --git a/lib/AsmParser/LLLexer.h b/lib/AsmParser/LLLexer.h index eaf32203bbf..33b91357237 100644 --- a/lib/AsmParser/LLLexer.h +++ b/lib/AsmParser/LLLexer.h @@ -2,8 +2,8 @@ // // The LLVM Compiler Infrastructure // -// This file was developed by Chris Lattner and is distributed under -// the University of Illinois Open Source License. See LICENSE.TXT for details. +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // @@ -14,43 +14,79 @@ #ifndef LIB_ASMPARSER_LLLEXER_H #define LIB_ASMPARSER_LLLEXER_H -#include +#include "LLToken.h" +#include "llvm/ADT/APSInt.h" +#include "llvm/ADT/APFloat.h" +#include "llvm/Support/SourceMgr.h" #include -#include namespace llvm { class MemoryBuffer; - + class Type; + class SMDiagnostic; + class LLVMContext; + class LLLexer { const char *CurPtr; - unsigned CurLineNo; MemoryBuffer *CurBuf; - + SMDiagnostic &ErrorInfo; + SourceMgr &SM; + LLVMContext &Context; + + // Information about the current token. const char *TokStart; - + lltok::Kind CurKind; + std::string StrVal; + unsigned UIntVal; + Type *TyVal; + APFloat APFloatVal; + APSInt APSIntVal; + std::string TheError; public: - LLLexer(MemoryBuffer *StartBuf); + explicit LLLexer(MemoryBuffer *StartBuf, SourceMgr &SM, SMDiagnostic &, + LLVMContext &C); ~LLLexer() {} - const char *getTokStart() const { return TokStart; } - unsigned getTokLength() const { return CurPtr-TokStart; } - unsigned getLineNo() const { return CurLineNo; } + lltok::Kind Lex() { + return CurKind = LexToken(); + } + + typedef SMLoc LocTy; + LocTy getLoc() const { return SMLoc::getFromPointer(TokStart); } + lltok::Kind getKind() const { return CurKind; } + const std::string &getStrVal() const { return StrVal; } + Type *getTyVal() const { return TyVal; } + unsigned getUIntVal() const { return UIntVal; } + const APSInt &getAPSIntVal() const { return APSIntVal; } + const APFloat &getAPFloatVal() const { return APFloatVal; } + + + bool Error(LocTy L, const Twine &Msg) const; + bool Error(const Twine &Msg) const { return Error(getLoc(), Msg); } std::string getFilename() const; - int LexToken(); - - const std::string getError() const { return TheError; } - + private: + lltok::Kind LexToken(); + int getNextChar(); void SkipLineComment(); - int LexIdentifier(); - int LexDigitOrNegative(); - int LexPositive(); - int LexAt(); - int LexPercent(); - int LexQuote(); - int Lex0x(); + lltok::Kind ReadString(lltok::Kind kind); + bool ReadVarName(); + + lltok::Kind LexIdentifier(); + lltok::Kind LexDigitOrNegative(); + lltok::Kind LexPositive(); + lltok::Kind LexAt(); + lltok::Kind LexExclaim(); + lltok::Kind LexPercent(); + lltok::Kind LexQuote(); + lltok::Kind Lex0x(); + + uint64_t atoull(const char *Buffer, const char *End); + uint64_t HexIntToVal(const char *Buffer, const char *End); + void HexToIntPair(const char *Buffer, const char *End, uint64_t Pair[2]); + void FP80HexToIntPair(const char *Buff, const char *End, uint64_t Pair[2]); }; } // end namespace llvm