From 9d5583ef0a908583ef276f4710dd83813cf04d17 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Thu, 26 Jun 2014 04:58:39 +0000 Subject: Convert StringLiteralParser constructor to use ArrayRef instead of a pointer and count. llvm-svn: 211763 --- clang/lib/Lex/LiteralSupport.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'clang/lib/Lex/LiteralSupport.cpp') diff --git a/clang/lib/Lex/LiteralSupport.cpp b/clang/lib/Lex/LiteralSupport.cpp index c55054be306..6417d0f0f5f 100644 --- a/clang/lib/Lex/LiteralSupport.cpp +++ b/clang/lib/Lex/LiteralSupport.cpp @@ -1255,26 +1255,26 @@ CharLiteralParser::CharLiteralParser(const char *begin, const char *end, /// \endverbatim /// StringLiteralParser:: -StringLiteralParser(const Token *StringToks, unsigned NumStringToks, +StringLiteralParser(ArrayRef StringToks, Preprocessor &PP, bool Complain) : SM(PP.getSourceManager()), Features(PP.getLangOpts()), Target(PP.getTargetInfo()), Diags(Complain ? &PP.getDiagnostics() :nullptr), MaxTokenLength(0), SizeBound(0), CharByteWidth(0), Kind(tok::unknown), ResultPtr(ResultBuf.data()), hadError(false), Pascal(false) { - init(StringToks, NumStringToks); + init(StringToks); } -void StringLiteralParser::init(const Token *StringToks, unsigned NumStringToks){ +void StringLiteralParser::init(ArrayRef StringToks){ // The literal token may have come from an invalid source location (e.g. due // to a PCH error), in which case the token length will be 0. - if (NumStringToks == 0 || StringToks[0].getLength() < 2) + if (StringToks.empty() || StringToks[0].getLength() < 2) return DiagnoseLexingError(SourceLocation()); // Scan all of the string portions, remember the max individual token length, // computing a bound on the concatenated string length, and see whether any // piece is a wide-string. If any of the string portions is a wide-string // literal, the result is a wide-string literal [C99 6.4.5p4]. - assert(NumStringToks && "expected at least one token"); + assert(!StringToks.empty() && "expected at least one token"); MaxTokenLength = StringToks[0].getLength(); assert(StringToks[0].getLength() >= 2 && "literal token is invalid!"); SizeBound = StringToks[0].getLength()-2; // -2 for "". @@ -1284,7 +1284,7 @@ void StringLiteralParser::init(const Token *StringToks, unsigned NumStringToks){ // Implement Translation Phase #6: concatenation of string literals /// (C99 5.1.1.2p1). The common case is only one string fragment. - for (unsigned i = 1; i != NumStringToks; ++i) { + for (unsigned i = 1; i != StringToks.size(); ++i) { if (StringToks[i].getLength() < 2) return DiagnoseLexingError(StringToks[i].getLocation()); @@ -1340,7 +1340,7 @@ void StringLiteralParser::init(const Token *StringToks, unsigned NumStringToks){ SourceLocation UDSuffixTokLoc; - for (unsigned i = 0, e = NumStringToks; i != e; ++i) { + for (unsigned i = 0, e = StringToks.size(); i != e; ++i) { const char *ThisTokBuf = &TokenBuf[0]; // Get the spelling of the token, which eliminates trigraphs, etc. We know // that ThisTokBuf points to a buffer that is big enough for the whole token @@ -1514,10 +1514,10 @@ void StringLiteralParser::init(const Token *StringToks, unsigned NumStringToks){ // Verify that pascal strings aren't too large. if (GetStringLength() > 256) { if (Diags) - Diags->Report(StringToks[0].getLocation(), + Diags->Report(StringToks.front().getLocation(), diag::err_pascal_string_too_long) - << SourceRange(StringToks[0].getLocation(), - StringToks[NumStringToks-1].getLocation()); + << SourceRange(StringToks.front().getLocation(), + StringToks.back().getLocation()); hadError = true; return; } @@ -1526,12 +1526,12 @@ void StringLiteralParser::init(const Token *StringToks, unsigned NumStringToks){ unsigned MaxChars = Features.CPlusPlus? 65536 : Features.C99 ? 4095 : 509; if (GetNumStringChars() > MaxChars) - Diags->Report(StringToks[0].getLocation(), + Diags->Report(StringToks.front().getLocation(), diag::ext_string_too_long) << GetNumStringChars() << MaxChars << (Features.CPlusPlus ? 2 : Features.C99 ? 1 : 0) - << SourceRange(StringToks[0].getLocation(), - StringToks[NumStringToks-1].getLocation()); + << SourceRange(StringToks.front().getLocation(), + StringToks.back().getLocation()); } } -- cgit v1.2.1