Lines Matching full:end

69                  Input.end()) {}
89 lexToken(const char *&First, const char *const End);
92 lexIncludeFilename(const char *&First, const char *const End);
94 void skipLine(const char *&First, const char *const End);
95 void skipDirective(StringRef Name, const char *&First, const char *const End);
107 tryLexIdentifierOrSkipLine(const char *&First, const char *const End);
111 const char *const End);
120 const char *const End);
128 const char *const End);
136 tryLexStringLiteralOrSkipLine(const char *&First, const char *const End);
138 [[nodiscard]] bool scanImpl(const char *First, const char *const End);
139 [[nodiscard]] bool lexPPLine(const char *&First, const char *const End);
140 [[nodiscard]] bool lexAt(const char *&First, const char *const End);
141 [[nodiscard]] bool lexModule(const char *&First, const char *const End);
143 const char *const End);
144 [[nodiscard]] bool lexPragma(const char *&First, const char *const End);
145 [[nodiscard]] bool lex_Pragma(const char *&First, const char *const End);
146 [[nodiscard]] bool lexEndif(const char *&First, const char *const End);
148 const char *const End);
151 const char *const End);
152 void lexPPDirectiveBody(const char *&First, const char *const End);
172 /// true at the end.
194 } // end anonymous namespace
204 static void skipOverSpaces(const char *&First, const char *const End) {
205 while (First != End && isHorizontalWhitespace(*First))
234 static void skipRawString(const char *&First, const char *const End) {
239 while (Last != End && *Last != '(')
241 if (Last == End) {
242 First = Last; // Hit the end... just give up.
250 while (First != End && *First != ')')
252 if (First == End)
258 while (Last != End && size_t(Last - First) < Terminator.size() &&
262 // Check if we hit it (or the end of the file).
263 if (Last == End) {
276 // Returns the length of EOL, either 0 (no end-of-line), 1 (\n) or 2 (\r\n)
277 static unsigned isEOL(const char *First, const char *const End) {
278 if (First == End)
280 if (End - First > 1 && isVerticalWhitespace(First[0]) &&
286 static void skipString(const char *&First, const char *const End) {
289 for (++First; First != End && *First != Terminator; ++First) {
290 // String and character literals don't extend past the end of the line.
298 if (++First == End)
304 skipOverSpaces(FirstAfterBackslashPastSpace, End);
305 if (unsigned NLSize = isEOL(FirstAfterBackslashPastSpace, End)) {
311 if (First != End)
316 static unsigned skipNewline(const char *&First, const char *End) {
317 if (First == End)
320 unsigned Len = isEOL(First, End);
330 static void skipToNewlineRaw(const char *&First, const char *const End) {
332 if (First == End)
335 unsigned Len = isEOL(First, End);
340 if (++First == End)
342 Len = isEOL(First, End);
353 static void skipLineComment(const char *&First, const char *const End) {
356 skipToNewlineRaw(First, End);
359 static void skipBlockComment(const char *&First, const char *const End) {
361 if (End - First < 4) {
362 First = End;
365 for (First += 3; First != End; ++First)
376 const char *const End) {
393 return (Cur + 1) < End && isAsciiIdentifierContinue(*(Cur + 1));
396 void Scanner::skipLine(const char *&First, const char *const End) {
398 assert(First <= End);
399 if (First == End)
403 skipNewline(First, End);
407 while (First != End && !isVerticalWhitespace(*First)) {
410 (*First == '\'' && !isQuoteCppDigitSeparator(Start, First, End))) {
413 skipRawString(First, End);
415 skipString(First, End);
420 if (*First != '/' || End - First < 2) {
428 skipLineComment(First, End);
439 skipBlockComment(First, End);
441 if (First == End)
445 unsigned Len = skipNewline(First, End);
452 const char *const End) {
458 skipToNewlineRaw(First, End);
460 skipLine(First, End);
463 static void skipWhitespace(const char *&First, const char *const End) {
465 assert(First <= End);
466 skipOverSpaces(First, End);
468 if (End - First < 2)
472 skipNewline(++First, End);
482 skipLineComment(First, End);
491 skipBlockComment(First, End);
496 const char *const End) {
499 const dependency_directives_scan::Token &Tok = lexToken(First, End);
508 skipWhitespace(First, End);
509 if (First == End)
514 skipNewline(First, End);
519 const char *const End) {
523 assert(First <= End);
532 Scanner::lexIncludeFilename(const char *&First, const char *const End) {
536 assert(First <= End);
544 void Scanner::lexPPDirectiveBody(const char *&First, const char *const End) {
546 const dependency_directives_scan::Token &Tok = lexToken(First, End);
578 Scanner::tryLexIdentifierOrSkipLine(const char *&First, const char *const End) {
579 const dependency_directives_scan::Token &Tok = lexToken(First, End);
582 skipLine(First, End);
589 StringRef Scanner::lexIdentifier(const char *&First, const char *const End) {
590 std::optional<StringRef> Id = tryLexIdentifierOrSkipLine(First, End);
596 const char *const End) {
598 tryLexIdentifierOrSkipLine(First, End)) {
601 skipLine(First, End);
607 const char *const End) {
608 const dependency_directives_scan::Token &Tok = lexToken(First, End);
611 skipLine(First, End);
617 const char *const End) {
618 const dependency_directives_scan::Token &Tok = lexToken(First, End);
621 skipLine(First, End);
628 bool Scanner::lexAt(const char *&First, const char *const End) {
632 const dependency_directives_scan::Token &AtTok = lexToken(First, End);
636 if (!isNextIdentifierOrSkipLine("import", First, End))
638 return lexModuleDirectiveBody(decl_at_import, First, End);
641 bool Scanner::lexModule(const char *&First, const char *const End) {
642 StringRef Id = lexIdentifier(First, End);
646 std::optional<StringRef> NextId = tryLexIdentifierOrSkipLine(First, End);
653 skipLine(First, End);
657 skipWhitespace(First, End);
666 skipLine(First, End);
670 (void)lexToken(First, End);
671 if (!tryLexIdentifierOrSkipLine(First, End))
680 skipLine(First, End);
693 return lexModuleDirectiveBody(Kind, First, End);
696 bool Scanner::lex_Pragma(const char *&First, const char *const End) {
697 if (!isNextTokenOrSkipLine(tok::l_paren, First, End))
700 std::optional<StringRef> Str = tryLexStringLiteralOrSkipLine(First, End);
702 if (!Str || !isNextTokenOrSkipLine(tok::r_paren, First, End))
717 if (PragmaScanner.lexPragma(Begin, Buffer.end()))
722 skipLine(First, End);
726 assert(Begin == Buffer.end());
731 bool Scanner::lexPragma(const char *&First, const char *const End) {
732 std::optional<StringRef> FoundId = tryLexIdentifierOrSkipLine(First, End);
744 lexPPDirectiveBody(First, End);
750 skipLine(First, End);
754 FoundId = tryLexIdentifierOrSkipLine(First, End);
761 lexPPDirectiveBody(First, End);
767 skipLine(First, End);
772 if (!isNextIdentifierOrSkipLine("import", First, End))
776 lexPPDirectiveBody(First, End);
781 bool Scanner::lexEndif(const char *&First, const char *const End) {
794 skipLine(First, End);
798 return lexDefault(pp_endif, First, End);
802 const char *const End) {
803 lexPPDirectiveBody(First, End);
821 bool Scanner::lexPPLine(const char *&First, const char *const End) {
822 assert(First != End);
824 skipWhitespace(First, End);
825 assert(First <= End);
826 if (First == End)
830 skipLine(First, End);
831 assert(First <= End);
847 return lexAt(First, End);
850 return lexModule(First, End);
853 if (isNextIdentifierOrSkipLine("_Pragma", First, End))
854 return lex_Pragma(First, End);
865 const dependency_directives_scan::Token &HashTok = lexToken(First, End);
870 skipLine(First, End);
871 assert(First <= End);
877 std::optional<StringRef> FoundId = tryLexIdentifierOrSkipLine(First, End);
884 return lexPragma(First, End);
903 skipDirective(Id, First, End);
908 return lexEndif(First, End);
916 if (lexIncludeFilename(First, End).is(tok::eod)) {
917 skipDirective(Id, First, End);
926 return lexDefault(Kind, First, End);
929 static void skipUTF8ByteOrderMark(const char *&First, const char *const End) {
930 if ((End - First) >= 3 && First[0] == '\xef' && First[1] == '\xbb' &&
935 bool Scanner::scanImpl(const char *First, const char *const End) {
936 skipUTF8ByteOrderMark(First, End);
937 while (First != End)
938 if (lexPPLine(First, End))
944 bool Error = scanImpl(Input.begin(), Input.end());