@@ -394,15 +394,14 @@ TokenSequence Preprocessor::ReplaceMacros(
394394 return tokens;
395395}
396396
397- void Preprocessor::Directive (const TokenSequence &dir, Prescanner * prescanner) {
397+ void Preprocessor::Directive (const TokenSequence &dir, Prescanner & prescanner) {
398398 std::size_t tokens{dir.SizeInTokens ()};
399399 std::size_t j{dir.SkipBlanks (0 )};
400400 if (j == tokens) {
401401 return ;
402402 }
403- CHECK (prescanner); // TODO: change to reference
404403 if (dir.TokenAt (j).ToString () != " #" ) {
405- prescanner-> Say (dir.GetTokenProvenanceRange (j), " missing '#'" _err_en_US);
404+ prescanner. Say (dir.GetTokenProvenanceRange (j), " missing '#'" _err_en_US);
406405 return ;
407406 }
408407 j = dir.SkipBlanks (j + 1 );
@@ -426,7 +425,7 @@ void Preprocessor::Directive(const TokenSequence &dir, Prescanner *prescanner) {
426425 // #line is ignored
427426 } else if (dirName == " define" ) {
428427 if (nameToken.empty ()) {
429- prescanner-> Say (dir.GetTokenProvenanceRange (j < tokens ? j : tokens - 1 ),
428+ prescanner. Say (dir.GetTokenProvenanceRange (j < tokens ? j : tokens - 1 ),
430429 " #define: missing or invalid name" _err_en_US);
431430 return ;
432431 }
@@ -444,15 +443,15 @@ void Preprocessor::Directive(const TokenSequence &dir, Prescanner *prescanner) {
444443 isVariadic = true ;
445444 } else {
446445 if (an.empty () || !IsLegalIdentifierStart (an[0 ])) {
447- prescanner-> Say (dir.GetTokenProvenanceRange (j),
446+ prescanner. Say (dir.GetTokenProvenanceRange (j),
448447 " #define: missing or invalid argument name" _err_en_US);
449448 return ;
450449 }
451450 argName.push_back (an);
452451 }
453452 j = dir.SkipBlanks (j + 1 );
454453 if (j == tokens) {
455- prescanner-> Say (dir.GetTokenProvenanceRange (tokens - 1 ),
454+ prescanner. Say (dir.GetTokenProvenanceRange (tokens - 1 ),
456455 " #define: malformed argument list" _err_en_US);
457456 return ;
458457 }
@@ -461,20 +460,20 @@ void Preprocessor::Directive(const TokenSequence &dir, Prescanner *prescanner) {
461460 break ;
462461 }
463462 if (isVariadic || punc != " ," ) {
464- prescanner-> Say (dir.GetTokenProvenanceRange (j),
463+ prescanner. Say (dir.GetTokenProvenanceRange (j),
465464 " #define: malformed argument list" _err_en_US);
466465 return ;
467466 }
468467 j = dir.SkipBlanks (j + 1 );
469468 if (j == tokens) {
470- prescanner-> Say (dir.GetTokenProvenanceRange (tokens - 1 ),
469+ prescanner. Say (dir.GetTokenProvenanceRange (tokens - 1 ),
471470 " #define: malformed argument list" _err_en_US);
472471 return ;
473472 }
474473 }
475474 if (std::set<std::string>(argName.begin (), argName.end ()).size () !=
476475 argName.size ()) {
477- prescanner-> Say (dir.GetTokenProvenance (dirOffset),
476+ prescanner. Say (dir.GetTokenProvenance (dirOffset),
478477 " #define: argument names are not distinct" _err_en_US);
479478 return ;
480479 }
@@ -489,12 +488,12 @@ void Preprocessor::Directive(const TokenSequence &dir, Prescanner *prescanner) {
489488 }
490489 } else if (dirName == " undef" ) {
491490 if (nameToken.empty ()) {
492- prescanner-> Say (
491+ prescanner. Say (
493492 dir.GetIntervalProvenanceRange (dirOffset, tokens - dirOffset),
494493 " # missing or invalid name" _err_en_US);
495494 } else {
496495 if (dir.IsAnythingLeft (++j)) {
497- prescanner-> Say (dir.GetIntervalProvenanceRange (j, tokens - j),
496+ prescanner. Say (dir.GetIntervalProvenanceRange (j, tokens - j),
498497 " #undef: excess tokens at end of directive" _en_US);
499498 } else {
500499 definitions_.erase (nameToken);
@@ -503,12 +502,12 @@ void Preprocessor::Directive(const TokenSequence &dir, Prescanner *prescanner) {
503502 } else if (dirName == " ifdef" || dirName == " ifndef" ) {
504503 bool doThen{false };
505504 if (nameToken.empty ()) {
506- prescanner-> Say (
505+ prescanner. Say (
507506 dir.GetIntervalProvenanceRange (dirOffset, tokens - dirOffset),
508507 " #%s: missing name" _err_en_US, dirName);
509508 } else {
510509 if (dir.IsAnythingLeft (++j)) {
511- prescanner-> Say (dir.GetIntervalProvenanceRange (j, tokens - j),
510+ prescanner. Say (dir.GetIntervalProvenanceRange (j, tokens - j),
512511 " #%s: excess tokens at end of directive" _en_US, dirName);
513512 }
514513 doThen = IsNameDefined (nameToken) == (dirName == " ifdef" );
@@ -528,13 +527,13 @@ void Preprocessor::Directive(const TokenSequence &dir, Prescanner *prescanner) {
528527 }
529528 } else if (dirName == " else" ) {
530529 if (dir.IsAnythingLeft (j)) {
531- prescanner-> Say (dir.GetIntervalProvenanceRange (j, tokens - j),
530+ prescanner. Say (dir.GetIntervalProvenanceRange (j, tokens - j),
532531 " #else: excess tokens at end of directive" _en_US);
533532 } else if (ifStack_.empty ()) {
534- prescanner-> Say (dir.GetTokenProvenanceRange (dirOffset),
533+ prescanner. Say (dir.GetTokenProvenanceRange (dirOffset),
535534 " #else: not nested within #if, #ifdef, or #ifndef" _err_en_US);
536535 } else if (ifStack_.top () != CanDeadElseAppear::Yes) {
537- prescanner-> Say (dir.GetTokenProvenanceRange (dirOffset),
536+ prescanner. Say (dir.GetTokenProvenanceRange (dirOffset),
538537 " #else: already appeared within this #if, #ifdef, or #ifndef" _err_en_US);
539538 } else {
540539 ifStack_.pop ();
@@ -543,10 +542,10 @@ void Preprocessor::Directive(const TokenSequence &dir, Prescanner *prescanner) {
543542 }
544543 } else if (dirName == " elif" ) {
545544 if (ifStack_.empty ()) {
546- prescanner-> Say (dir.GetTokenProvenanceRange (dirOffset),
545+ prescanner. Say (dir.GetTokenProvenanceRange (dirOffset),
547546 " #elif: not nested within #if, #ifdef, or #ifndef" _err_en_US);
548547 } else if (ifStack_.top () != CanDeadElseAppear::Yes) {
549- prescanner-> Say (dir.GetTokenProvenanceRange (dirOffset),
548+ prescanner. Say (dir.GetTokenProvenanceRange (dirOffset),
550549 " #elif: #else previously appeared within this #if, #ifdef, or #ifndef" _err_en_US);
551550 } else {
552551 ifStack_.pop ();
@@ -555,26 +554,26 @@ void Preprocessor::Directive(const TokenSequence &dir, Prescanner *prescanner) {
555554 }
556555 } else if (dirName == " endif" ) {
557556 if (dir.IsAnythingLeft (j)) {
558- prescanner-> Say (dir.GetIntervalProvenanceRange (j, tokens - j),
557+ prescanner. Say (dir.GetIntervalProvenanceRange (j, tokens - j),
559558 " #endif: excess tokens at end of directive" _en_US);
560559 } else if (ifStack_.empty ()) {
561- prescanner-> Say (dir.GetTokenProvenanceRange (dirOffset),
560+ prescanner. Say (dir.GetTokenProvenanceRange (dirOffset),
562561 " #endif: no #if, #ifdef, or #ifndef" _err_en_US);
563562 } else {
564563 ifStack_.pop ();
565564 }
566565 } else if (dirName == " error" ) {
567- prescanner-> Say (
566+ prescanner. Say (
568567 dir.GetIntervalProvenanceRange (dirOffset, tokens - dirOffset),
569568 " %s" _err_en_US, dir.ToString ());
570569 } else if (dirName == " warning" || dirName == " comment" ||
571570 dirName == " note" ) {
572- prescanner-> Say (
571+ prescanner. Say (
573572 dir.GetIntervalProvenanceRange (dirOffset, tokens - dirOffset),
574573 " %s" _en_US, dir.ToString ());
575574 } else if (dirName == " include" ) {
576575 if (j == tokens) {
577- prescanner-> Say (
576+ prescanner. Say (
578577 dir.GetIntervalProvenanceRange (dirOffset, tokens - dirOffset),
579578 " #include: missing name of file to include" _err_en_US);
580579 return ;
@@ -584,19 +583,19 @@ void Preprocessor::Directive(const TokenSequence &dir, Prescanner *prescanner) {
584583 if (dir.TokenAt (j).ToString () == " <" ) { // #include <foo>
585584 std::size_t k{j + 1 };
586585 if (k >= tokens) {
587- prescanner-> Say (dir.GetIntervalProvenanceRange (j, tokens - j),
586+ prescanner. Say (dir.GetIntervalProvenanceRange (j, tokens - j),
588587 " #include: file name missing" _err_en_US);
589588 return ;
590589 }
591590 while (k < tokens && dir.TokenAt (k) != " >" ) {
592591 ++k;
593592 }
594593 if (k >= tokens) {
595- prescanner-> Say (dir.GetIntervalProvenanceRange (j, tokens - j),
594+ prescanner. Say (dir.GetIntervalProvenanceRange (j, tokens - j),
596595 " #include: expected '>' at end of included file" _en_US);
597596 }
598597 TokenSequence braced{dir, j + 1 , k - j - 1 };
599- include = ReplaceMacros (braced, * prescanner).ToString ();
598+ include = ReplaceMacros (braced, prescanner).ToString ();
600599 j = k;
601600 } else if ((include = dir.TokenAt (j).ToString ()).substr (0 , 1 ) == " \" " &&
602601 include.substr (include.size () - 1 , 1 ) == " \" " ) { // #include "foo"
@@ -608,36 +607,36 @@ void Preprocessor::Directive(const TokenSequence &dir, Prescanner *prescanner) {
608607 prependPath = DirectoryName (currentFile->path ());
609608 }
610609 } else {
611- prescanner-> Say (dir.GetTokenProvenanceRange (j < tokens ? j : tokens - 1 ),
610+ prescanner. Say (dir.GetTokenProvenanceRange (j < tokens ? j : tokens - 1 ),
612611 " #include: expected name of file to include" _err_en_US);
613612 return ;
614613 }
615614 if (include.empty ()) {
616- prescanner-> Say (dir.GetTokenProvenanceRange (dirOffset),
615+ prescanner. Say (dir.GetTokenProvenanceRange (dirOffset),
617616 " #include: empty include file name" _err_en_US);
618617 return ;
619618 }
620619 j = dir.SkipBlanks (j + 1 );
621620 if (j < tokens && dir.TokenAt (j).ToString () != " !" ) {
622- prescanner-> Say (dir.GetIntervalProvenanceRange (j, tokens - j),
621+ prescanner. Say (dir.GetIntervalProvenanceRange (j, tokens - j),
623622 " #include: extra stuff ignored after file name" _en_US);
624623 }
625624 std::string buf;
626625 llvm::raw_string_ostream error{buf};
627626 const SourceFile *included{
628627 allSources_.Open (include, error, std::move (prependPath))};
629628 if (!included) {
630- prescanner-> Say (dir.GetTokenProvenanceRange (dirOffset),
629+ prescanner. Say (dir.GetTokenProvenanceRange (dirOffset),
631630 " #include: %s" _err_en_US, error.str ());
632631 } else if (included->bytes () > 0 ) {
633632 ProvenanceRange fileRange{
634633 allSources_.AddIncludedFile (*included, dir.GetProvenanceRange ())};
635- Prescanner{* prescanner}
634+ Prescanner{prescanner}
636635 .set_encoding (included->encoding ())
637636 .Prescan (fileRange);
638637 }
639638 } else {
640- prescanner-> Say (dir.GetTokenProvenanceRange (dirOffset),
639+ prescanner. Say (dir.GetTokenProvenanceRange (dirOffset),
641640 " #%s: unknown or unimplemented directive" _err_en_US, dirName);
642641 }
643642}
@@ -669,15 +668,15 @@ static std::string GetDirectiveName(
669668}
670669
671670void Preprocessor::SkipDisabledConditionalCode (const std::string &dirName,
672- IsElseActive isElseActive, Prescanner * prescanner,
671+ IsElseActive isElseActive, Prescanner & prescanner,
673672 ProvenanceRange provenanceRange) {
674673 int nesting{0 };
675- while (!prescanner-> IsAtEnd ()) {
676- if (!prescanner-> IsNextLinePreprocessorDirective ()) {
677- prescanner-> NextLine ();
674+ while (!prescanner. IsAtEnd ()) {
675+ if (!prescanner. IsNextLinePreprocessorDirective ()) {
676+ prescanner. NextLine ();
678677 continue ;
679678 }
680- TokenSequence line{prescanner-> TokenizePreprocessorDirective ()};
679+ TokenSequence line{prescanner. TokenizePreprocessorDirective ()};
681680 std::size_t rest{0 };
682681 std::string dn{GetDirectiveName (line, &rest)};
683682 if (dn == " ifdef" || dn == " ifndef" || dn == " if" ) {
@@ -699,7 +698,7 @@ void Preprocessor::SkipDisabledConditionalCode(const std::string &dirName,
699698 }
700699 }
701700 }
702- prescanner-> Say (provenanceRange, " #%s: missing #endif" _err_en_US, dirName);
701+ prescanner. Say (provenanceRange, " #%s: missing #endif" _err_en_US, dirName);
703702}
704703
705704// Precedence level codes used here to accommodate mixed Fortran and C:
@@ -1049,7 +1048,7 @@ static std::int64_t ExpressionValue(const TokenSequence &token,
10491048}
10501049
10511050bool Preprocessor::IsIfPredicateTrue (const TokenSequence &expr,
1052- std::size_t first, std::size_t exprTokens, Prescanner * prescanner) {
1051+ std::size_t first, std::size_t exprTokens, Prescanner & prescanner) {
10531052 TokenSequence expr1{expr, first, exprTokens};
10541053 if (expr1.HasBlanks ()) {
10551054 expr1.RemoveBlanks ();
@@ -1075,23 +1074,23 @@ bool Preprocessor::IsIfPredicateTrue(const TokenSequence &expr,
10751074 }
10761075 expr2.Put (expr1, j);
10771076 }
1078- TokenSequence expr3{ReplaceMacros (expr2, * prescanner)};
1077+ TokenSequence expr3{ReplaceMacros (expr2, prescanner)};
10791078 if (expr3.HasBlanks ()) {
10801079 expr3.RemoveBlanks ();
10811080 }
10821081 if (expr3.empty ()) {
1083- prescanner-> Say (expr.GetProvenanceRange (), " empty expression" _err_en_US);
1082+ prescanner. Say (expr.GetProvenanceRange (), " empty expression" _err_en_US);
10841083 return false ;
10851084 }
10861085 std::size_t atToken{0 };
10871086 std::optional<Message> error;
10881087 bool result{ExpressionValue (expr3, 0 , &atToken, &error) != 0 };
10891088 if (error) {
1090- prescanner-> Say (std::move (*error));
1089+ prescanner. Say (std::move (*error));
10911090 } else if (atToken < expr3.SizeInTokens () &&
10921091 expr3.TokenAt (atToken).ToString () != " !" ) {
1093- prescanner-> Say (expr3.GetIntervalProvenanceRange (
1094- atToken, expr3.SizeInTokens () - atToken),
1092+ prescanner. Say (expr3.GetIntervalProvenanceRange (
1093+ atToken, expr3.SizeInTokens () - atToken),
10951094 atToken == 0 ? " could not parse any expression" _err_en_US
10961095 : " excess characters after expression" _err_en_US);
10971096 }
0 commit comments