Lines Matching full:end
57 LLVM_NODISCARD IdInfo lexIdentifier(const char *First, const char *const End);
59 const char *const End);
60 LLVM_NODISCARD bool minimizeImpl(const char *First, const char *const End);
61 LLVM_NODISCARD bool lexPPLine(const char *&First, const char *const End);
62 LLVM_NODISCARD bool lexAt(const char *&First, const char *const End);
63 LLVM_NODISCARD bool lexModule(const char *&First, const char *const End);
64 LLVM_NODISCARD bool lexDefine(const char *&First, const char *const End);
65 LLVM_NODISCARD bool lexPragma(const char *&First, const char *const End);
66 LLVM_NODISCARD bool lexEndif(const char *&First, const char *const End);
68 const char *&First, const char *const End);
83 Minimizer &append(StringRef S) { return append(S.begin(), S.end()); } in append()
89 void printToNewline(const char *&First, const char *const End);
90 void printAdjacentModuleNameParts(const char *&First, const char *const End);
92 const char *const End);
93 void printDirectiveBody(const char *&First, const char *const End);
94 void printAdjacentMacroArgs(const char *&First, const char *const End);
95 LLVM_NODISCARD bool printMacroArgs(const char *&First, const char *const End);
98 /// true at the end.
107 } // end anonymous namespace
117 static void skipOverSpaces(const char *&First, const char *const End) { in skipOverSpaces() argument
118 while (First != End && isHorizontalWhitespace(*First)) in skipOverSpaces()
147 static void skipRawString(const char *&First, const char *const End) { in skipRawString() argument
152 while (Last != End && *Last != '(') in skipRawString()
154 if (Last == End) { in skipRawString()
155 First = Last; // Hit the end... just give up. in skipRawString()
163 while (First != End && *First != ')') in skipRawString()
165 if (First == End) in skipRawString()
171 while (Last != End && size_t(Last - First) < Terminator.size() && in skipRawString()
175 // Check if we hit it (or the end of the file). in skipRawString()
176 if (Last == End) { in skipRawString()
189 // Returns the length of EOL, either 0 (no end-of-line), 1 (\n) or 2 (\r\n)
190 static unsigned isEOL(const char *First, const char *const End) { in isEOL() argument
191 if (First == End) in isEOL()
193 if (End - First > 1 && isVerticalWhitespace(First[0]) && in isEOL()
199 static void skipString(const char *&First, const char *const End) { in skipString() argument
202 for (++First; First != End && *First != Terminator; ++First) { in skipString()
203 // String and character literals don't extend past the end of the line. in skipString()
211 if (++First == End) in skipString()
217 skipOverSpaces(FirstAfterBackslashPastSpace, End); in skipString()
218 if (unsigned NLSize = isEOL(FirstAfterBackslashPastSpace, End)) { in skipString()
224 if (First != End) in skipString()
229 static unsigned skipNewline(const char *&First, const char *End) { in skipNewline() argument
230 if (First == End) in skipNewline()
233 unsigned Len = isEOL(First, End); in skipNewline()
243 static void skipToNewlineRaw(const char *&First, const char *const End) { in skipToNewlineRaw() argument
245 if (First == End) in skipToNewlineRaw()
248 unsigned Len = isEOL(First, End); in skipToNewlineRaw()
253 if (++First == End) in skipToNewlineRaw()
255 Len = isEOL(First, End); in skipToNewlineRaw()
282 static void skipLineComment(const char *&First, const char *const End) { in skipLineComment() argument
285 skipToNewlineRaw(First, End); in skipLineComment()
288 static void skipBlockComment(const char *&First, const char *const End) { in skipBlockComment() argument
290 if (End - First < 4) { in skipBlockComment()
291 First = End; in skipBlockComment()
294 for (First += 3; First != End; ++First) in skipBlockComment()
305 const char *const End) { in isQuoteCppDigitSeparator() argument
322 return (Cur + 1) < End && isIdentifierBody(*(Cur + 1)); in isQuoteCppDigitSeparator()
325 static void skipLine(const char *&First, const char *const End) { in skipLine() argument
327 assert(First <= End); in skipLine()
328 if (First == End) in skipLine()
332 skipNewline(First, End); in skipLine()
336 while (First != End && !isVerticalWhitespace(*First)) { in skipLine()
339 (*First == '\'' && !isQuoteCppDigitSeparator(Start, First, End))) { in skipLine()
341 skipRawString(First, End); in skipLine()
343 skipString(First, End); in skipLine()
348 if (*First != '/' || End - First < 2) { in skipLine()
355 skipLineComment(First, End); in skipLine()
365 skipBlockComment(First, End); in skipLine()
367 if (First == End) in skipLine()
371 unsigned Len = skipNewline(First, End); in skipLine()
378 const char *const End) { in skipDirective() argument
384 skipToNewlineRaw(First, End); in skipDirective()
386 skipLine(First, End); in skipDirective()
389 void Minimizer::printToNewline(const char *&First, const char *const End) { in printToNewline() argument
390 while (First != End && !isVerticalWhitespace(*First)) { in printToNewline()
397 skipRawString(Last, End); in printToNewline()
399 skipString(Last, End); in printToNewline()
402 if (*Last != '/' || End - Last < 2) { in printToNewline()
417 skipLineComment(First, End); in printToNewline()
422 skipBlockComment(First, End); in printToNewline()
423 skipOverSpaces(First, End); in printToNewline()
425 } while (Last != End && !isVerticalWhitespace(*Last)); in printToNewline()
429 if (Last == End || LastBeforeTrailingSpace == First || in printToNewline()
433 skipNewline(First, End); in printToNewline()
444 skipNewline(First, End); in printToNewline()
445 skipOverSpaces(First, End); in printToNewline()
449 static void skipWhitespace(const char *&First, const char *const End) { in skipWhitespace() argument
451 assert(First <= End); in skipWhitespace()
452 skipOverSpaces(First, End); in skipWhitespace()
454 if (End - First < 2) in skipWhitespace()
458 skipNewline(++First, End); in skipWhitespace()
468 skipLineComment(First, End); in skipWhitespace()
477 skipBlockComment(First, End); in skipWhitespace()
482 const char *const End) { in printAdjacentModuleNameParts() argument
487 while (Last != End && (isIdentifierBody(*Last) || *Last == '.')); in printAdjacentModuleNameParts()
492 bool Minimizer::printAtImportBody(const char *&First, const char *const End) { in printAtImportBody() argument
494 skipWhitespace(First, End); in printAtImportBody()
495 if (First == End) in printAtImportBody()
499 skipNewline(First, End); in printAtImportBody()
513 printAdjacentModuleNameParts(First, End); in printAtImportBody()
517 void Minimizer::printDirectiveBody(const char *&First, const char *const End) { in printDirectiveBody() argument
518 skipWhitespace(First, End); // Skip initial whitespace. in printDirectiveBody()
519 printToNewline(First, End); in printDirectiveBody()
526 const char *const End) { in lexRawIdentifier() argument
529 while (Last != End && isIdentifierBody(*Last)) in lexRawIdentifier()
535 getIdentifierContinuation(const char *First, const char *const End) { in getIdentifierContinuation() argument
536 if (End - First < 3 || First[0] != '\\' || !isVerticalWhitespace(First[1])) in getIdentifierContinuation()
540 skipNewline(First, End); in getIdentifierContinuation()
541 if (First == End) in getIdentifierContinuation()
547 const char *const End) { in lexIdentifier() argument
548 const char *Last = lexRawIdentifier(First, End); in lexIdentifier()
549 const char *Next = getIdentifierContinuation(Last, End); in lexIdentifier()
556 Last = lexRawIdentifier(Next, End); in lexIdentifier()
558 Next = getIdentifierContinuation(Last, End); in lexIdentifier()
566 const char *const End) { in printAdjacentMacroArgs() argument
571 while (Last != End && in printAdjacentMacroArgs()
577 bool Minimizer::printMacroArgs(const char *&First, const char *const End) { in printMacroArgs() argument
581 skipWhitespace(First, End); in printMacroArgs()
582 if (First == End) in printMacroArgs()
594 printAdjacentMacroArgs(First, End); in printMacroArgs()
603 const char *const End) { in isNextIdentifier() argument
604 skipWhitespace(First, End); in isNextIdentifier()
605 if (First == End || !isIdentifierHead(*First)) in isNextIdentifier()
608 IdInfo FoundId = lexIdentifier(First, End); in isNextIdentifier()
613 bool Minimizer::lexAt(const char *&First, const char *const End) { in lexAt() argument
616 if (!isNextIdentifier("import", First, End)) { in lexAt()
617 skipLine(First, End); in lexAt()
622 if (printAtImportBody(First, End)) in lexAt()
625 skipWhitespace(First, End); in lexAt()
626 if (First == End) in lexAt()
631 skipNewline(First, End); in lexAt()
635 bool Minimizer::lexModule(const char *&First, const char *const End) { in lexModule() argument
636 IdInfo Id = lexIdentifier(First, End); in lexModule()
641 skipWhitespace(First, End); in lexModule()
643 skipLine(First, End); in lexModule()
646 Id = lexIdentifier(First, End); in lexModule()
651 skipLine(First, End); in lexModule()
655 skipWhitespace(First, End); in lexModule()
667 skipLine(First, End); in lexModule()
683 printToNewline(First, End); in lexModule()
688 bool Minimizer::lexDefine(const char *&First, const char *const End) { in lexDefine() argument
691 skipWhitespace(First, End); in lexDefine()
696 IdInfo Id = lexIdentifier(First, End); in lexDefine()
699 if (Last == End) in lexDefine()
703 if (printMacroArgs(Last, End)) { in lexDefine()
708 skipLine(Last, End); in lexDefine()
712 skipWhitespace(Last, End); in lexDefine()
713 if (Last == End) in lexDefine()
717 printDirectiveBody(Last, End); in lexDefine()
722 bool Minimizer::lexPragma(const char *&First, const char *const End) { in lexPragma() argument
724 skipWhitespace(First, End); in lexPragma()
725 if (First == End || !isIdentifierHead(*First)) in lexPragma()
728 IdInfo FoundId = lexIdentifier(First, End); in lexPragma()
732 skipLine(First, End); in lexPragma()
739 skipLine(First, End); in lexPragma()
744 if (!isNextIdentifier("module", First, End)) { in lexPragma()
745 skipLine(First, End); in lexPragma()
750 if (!isNextIdentifier("import", First, End)) { in lexPragma()
751 skipLine(First, End); in lexPragma()
758 printDirectiveBody(First, End); in lexPragma()
762 bool Minimizer::lexEndif(const char *&First, const char *const End) { in lexEndif() argument
775 skipLine(First, End); in lexEndif()
779 return lexDefault(pp_endif, "endif", First, End); in lexEndif()
783 const char *&First, const char *const End) { in lexDefault() argument
786 printDirectiveBody(First, End); in lexDefault()
802 bool Minimizer::lexPPLine(const char *&First, const char *const End) { in lexPPLine() argument
803 assert(First != End); in lexPPLine()
805 skipWhitespace(First, End); in lexPPLine()
806 assert(First <= End); in lexPPLine()
807 if (First == End) in lexPPLine()
811 skipLine(First, End); in lexPPLine()
812 assert(First <= End); in lexPPLine()
818 return lexAt(First, End); in lexPPLine()
821 return lexModule(First, End); in lexPPLine()
825 skipWhitespace(First, End); in lexPPLine()
827 if (First == End) in lexPPLine()
831 skipLine(First, End); in lexPPLine()
836 IdInfo Id = lexIdentifier(First, End); in lexPPLine()
854 skipDirective(Id.Name, First, End); in lexPPLine()
859 return lexEndif(First, End); in lexPPLine()
862 return lexDefine(First, End); in lexPPLine()
865 return lexPragma(First, End); in lexPPLine()
868 return lexDefault(Kind, Id.Name, First, End); in lexPPLine()
871 static void skipUTF8ByteOrderMark(const char *&First, const char *const End) { in skipUTF8ByteOrderMark() argument
872 if ((End - First) >= 3 && First[0] == '\xef' && First[1] == '\xbb' && in skipUTF8ByteOrderMark()
877 bool Minimizer::minimizeImpl(const char *First, const char *const End) { in minimizeImpl() argument
878 skipUTF8ByteOrderMark(First, End); in minimizeImpl()
879 while (First != End) in minimizeImpl()
880 if (lexPPLine(First, End)) in minimizeImpl()
886 bool Error = minimizeImpl(Input.begin(), Input.end()); in minimize()