@@ -394,15 +394,14 @@ TokenSequence Preprocessor::ReplaceMacros(
394
394
return tokens;
395
395
}
396
396
397
- void Preprocessor::Directive (const TokenSequence &dir, Prescanner * prescanner) {
397
+ void Preprocessor::Directive (const TokenSequence &dir, Prescanner & prescanner) {
398
398
std::size_t tokens{dir.SizeInTokens ()};
399
399
std::size_t j{dir.SkipBlanks (0 )};
400
400
if (j == tokens) {
401
401
return ;
402
402
}
403
- CHECK (prescanner); // TODO: change to reference
404
403
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);
406
405
return ;
407
406
}
408
407
j = dir.SkipBlanks (j + 1 );
@@ -426,7 +425,7 @@ void Preprocessor::Directive(const TokenSequence &dir, Prescanner *prescanner) {
426
425
// #line is ignored
427
426
} else if (dirName == " define" ) {
428
427
if (nameToken.empty ()) {
429
- prescanner-> Say (dir.GetTokenProvenanceRange (j < tokens ? j : tokens - 1 ),
428
+ prescanner. Say (dir.GetTokenProvenanceRange (j < tokens ? j : tokens - 1 ),
430
429
" #define: missing or invalid name" _err_en_US);
431
430
return ;
432
431
}
@@ -444,15 +443,15 @@ void Preprocessor::Directive(const TokenSequence &dir, Prescanner *prescanner) {
444
443
isVariadic = true ;
445
444
} else {
446
445
if (an.empty () || !IsLegalIdentifierStart (an[0 ])) {
447
- prescanner-> Say (dir.GetTokenProvenanceRange (j),
446
+ prescanner. Say (dir.GetTokenProvenanceRange (j),
448
447
" #define: missing or invalid argument name" _err_en_US);
449
448
return ;
450
449
}
451
450
argName.push_back (an);
452
451
}
453
452
j = dir.SkipBlanks (j + 1 );
454
453
if (j == tokens) {
455
- prescanner-> Say (dir.GetTokenProvenanceRange (tokens - 1 ),
454
+ prescanner. Say (dir.GetTokenProvenanceRange (tokens - 1 ),
456
455
" #define: malformed argument list" _err_en_US);
457
456
return ;
458
457
}
@@ -461,20 +460,20 @@ void Preprocessor::Directive(const TokenSequence &dir, Prescanner *prescanner) {
461
460
break ;
462
461
}
463
462
if (isVariadic || punc != " ," ) {
464
- prescanner-> Say (dir.GetTokenProvenanceRange (j),
463
+ prescanner. Say (dir.GetTokenProvenanceRange (j),
465
464
" #define: malformed argument list" _err_en_US);
466
465
return ;
467
466
}
468
467
j = dir.SkipBlanks (j + 1 );
469
468
if (j == tokens) {
470
- prescanner-> Say (dir.GetTokenProvenanceRange (tokens - 1 ),
469
+ prescanner. Say (dir.GetTokenProvenanceRange (tokens - 1 ),
471
470
" #define: malformed argument list" _err_en_US);
472
471
return ;
473
472
}
474
473
}
475
474
if (std::set<std::string>(argName.begin (), argName.end ()).size () !=
476
475
argName.size ()) {
477
- prescanner-> Say (dir.GetTokenProvenance (dirOffset),
476
+ prescanner. Say (dir.GetTokenProvenance (dirOffset),
478
477
" #define: argument names are not distinct" _err_en_US);
479
478
return ;
480
479
}
@@ -489,12 +488,12 @@ void Preprocessor::Directive(const TokenSequence &dir, Prescanner *prescanner) {
489
488
}
490
489
} else if (dirName == " undef" ) {
491
490
if (nameToken.empty ()) {
492
- prescanner-> Say (
491
+ prescanner. Say (
493
492
dir.GetIntervalProvenanceRange (dirOffset, tokens - dirOffset),
494
493
" # missing or invalid name" _err_en_US);
495
494
} else {
496
495
if (dir.IsAnythingLeft (++j)) {
497
- prescanner-> Say (dir.GetIntervalProvenanceRange (j, tokens - j),
496
+ prescanner. Say (dir.GetIntervalProvenanceRange (j, tokens - j),
498
497
" #undef: excess tokens at end of directive" _en_US);
499
498
} else {
500
499
definitions_.erase (nameToken);
@@ -503,12 +502,12 @@ void Preprocessor::Directive(const TokenSequence &dir, Prescanner *prescanner) {
503
502
} else if (dirName == " ifdef" || dirName == " ifndef" ) {
504
503
bool doThen{false };
505
504
if (nameToken.empty ()) {
506
- prescanner-> Say (
505
+ prescanner. Say (
507
506
dir.GetIntervalProvenanceRange (dirOffset, tokens - dirOffset),
508
507
" #%s: missing name" _err_en_US, dirName);
509
508
} else {
510
509
if (dir.IsAnythingLeft (++j)) {
511
- prescanner-> Say (dir.GetIntervalProvenanceRange (j, tokens - j),
510
+ prescanner. Say (dir.GetIntervalProvenanceRange (j, tokens - j),
512
511
" #%s: excess tokens at end of directive" _en_US, dirName);
513
512
}
514
513
doThen = IsNameDefined (nameToken) == (dirName == " ifdef" );
@@ -528,13 +527,13 @@ void Preprocessor::Directive(const TokenSequence &dir, Prescanner *prescanner) {
528
527
}
529
528
} else if (dirName == " else" ) {
530
529
if (dir.IsAnythingLeft (j)) {
531
- prescanner-> Say (dir.GetIntervalProvenanceRange (j, tokens - j),
530
+ prescanner. Say (dir.GetIntervalProvenanceRange (j, tokens - j),
532
531
" #else: excess tokens at end of directive" _en_US);
533
532
} else if (ifStack_.empty ()) {
534
- prescanner-> Say (dir.GetTokenProvenanceRange (dirOffset),
533
+ prescanner. Say (dir.GetTokenProvenanceRange (dirOffset),
535
534
" #else: not nested within #if, #ifdef, or #ifndef" _err_en_US);
536
535
} else if (ifStack_.top () != CanDeadElseAppear::Yes) {
537
- prescanner-> Say (dir.GetTokenProvenanceRange (dirOffset),
536
+ prescanner. Say (dir.GetTokenProvenanceRange (dirOffset),
538
537
" #else: already appeared within this #if, #ifdef, or #ifndef" _err_en_US);
539
538
} else {
540
539
ifStack_.pop ();
@@ -543,10 +542,10 @@ void Preprocessor::Directive(const TokenSequence &dir, Prescanner *prescanner) {
543
542
}
544
543
} else if (dirName == " elif" ) {
545
544
if (ifStack_.empty ()) {
546
- prescanner-> Say (dir.GetTokenProvenanceRange (dirOffset),
545
+ prescanner. Say (dir.GetTokenProvenanceRange (dirOffset),
547
546
" #elif: not nested within #if, #ifdef, or #ifndef" _err_en_US);
548
547
} else if (ifStack_.top () != CanDeadElseAppear::Yes) {
549
- prescanner-> Say (dir.GetTokenProvenanceRange (dirOffset),
548
+ prescanner. Say (dir.GetTokenProvenanceRange (dirOffset),
550
549
" #elif: #else previously appeared within this #if, #ifdef, or #ifndef" _err_en_US);
551
550
} else {
552
551
ifStack_.pop ();
@@ -555,26 +554,26 @@ void Preprocessor::Directive(const TokenSequence &dir, Prescanner *prescanner) {
555
554
}
556
555
} else if (dirName == " endif" ) {
557
556
if (dir.IsAnythingLeft (j)) {
558
- prescanner-> Say (dir.GetIntervalProvenanceRange (j, tokens - j),
557
+ prescanner. Say (dir.GetIntervalProvenanceRange (j, tokens - j),
559
558
" #endif: excess tokens at end of directive" _en_US);
560
559
} else if (ifStack_.empty ()) {
561
- prescanner-> Say (dir.GetTokenProvenanceRange (dirOffset),
560
+ prescanner. Say (dir.GetTokenProvenanceRange (dirOffset),
562
561
" #endif: no #if, #ifdef, or #ifndef" _err_en_US);
563
562
} else {
564
563
ifStack_.pop ();
565
564
}
566
565
} else if (dirName == " error" ) {
567
- prescanner-> Say (
566
+ prescanner. Say (
568
567
dir.GetIntervalProvenanceRange (dirOffset, tokens - dirOffset),
569
568
" %s" _err_en_US, dir.ToString ());
570
569
} else if (dirName == " warning" || dirName == " comment" ||
571
570
dirName == " note" ) {
572
- prescanner-> Say (
571
+ prescanner. Say (
573
572
dir.GetIntervalProvenanceRange (dirOffset, tokens - dirOffset),
574
573
" %s" _en_US, dir.ToString ());
575
574
} else if (dirName == " include" ) {
576
575
if (j == tokens) {
577
- prescanner-> Say (
576
+ prescanner. Say (
578
577
dir.GetIntervalProvenanceRange (dirOffset, tokens - dirOffset),
579
578
" #include: missing name of file to include" _err_en_US);
580
579
return ;
@@ -584,19 +583,19 @@ void Preprocessor::Directive(const TokenSequence &dir, Prescanner *prescanner) {
584
583
if (dir.TokenAt (j).ToString () == " <" ) { // #include <foo>
585
584
std::size_t k{j + 1 };
586
585
if (k >= tokens) {
587
- prescanner-> Say (dir.GetIntervalProvenanceRange (j, tokens - j),
586
+ prescanner. Say (dir.GetIntervalProvenanceRange (j, tokens - j),
588
587
" #include: file name missing" _err_en_US);
589
588
return ;
590
589
}
591
590
while (k < tokens && dir.TokenAt (k) != " >" ) {
592
591
++k;
593
592
}
594
593
if (k >= tokens) {
595
- prescanner-> Say (dir.GetIntervalProvenanceRange (j, tokens - j),
594
+ prescanner. Say (dir.GetIntervalProvenanceRange (j, tokens - j),
596
595
" #include: expected '>' at end of included file" _en_US);
597
596
}
598
597
TokenSequence braced{dir, j + 1 , k - j - 1 };
599
- include = ReplaceMacros (braced, * prescanner).ToString ();
598
+ include = ReplaceMacros (braced, prescanner).ToString ();
600
599
j = k;
601
600
} else if ((include = dir.TokenAt (j).ToString ()).substr (0 , 1 ) == " \" " &&
602
601
include.substr (include.size () - 1 , 1 ) == " \" " ) { // #include "foo"
@@ -608,36 +607,36 @@ void Preprocessor::Directive(const TokenSequence &dir, Prescanner *prescanner) {
608
607
prependPath = DirectoryName (currentFile->path ());
609
608
}
610
609
} else {
611
- prescanner-> Say (dir.GetTokenProvenanceRange (j < tokens ? j : tokens - 1 ),
610
+ prescanner. Say (dir.GetTokenProvenanceRange (j < tokens ? j : tokens - 1 ),
612
611
" #include: expected name of file to include" _err_en_US);
613
612
return ;
614
613
}
615
614
if (include.empty ()) {
616
- prescanner-> Say (dir.GetTokenProvenanceRange (dirOffset),
615
+ prescanner. Say (dir.GetTokenProvenanceRange (dirOffset),
617
616
" #include: empty include file name" _err_en_US);
618
617
return ;
619
618
}
620
619
j = dir.SkipBlanks (j + 1 );
621
620
if (j < tokens && dir.TokenAt (j).ToString () != " !" ) {
622
- prescanner-> Say (dir.GetIntervalProvenanceRange (j, tokens - j),
621
+ prescanner. Say (dir.GetIntervalProvenanceRange (j, tokens - j),
623
622
" #include: extra stuff ignored after file name" _en_US);
624
623
}
625
624
std::string buf;
626
625
llvm::raw_string_ostream error{buf};
627
626
const SourceFile *included{
628
627
allSources_.Open (include, error, std::move (prependPath))};
629
628
if (!included) {
630
- prescanner-> Say (dir.GetTokenProvenanceRange (dirOffset),
629
+ prescanner. Say (dir.GetTokenProvenanceRange (dirOffset),
631
630
" #include: %s" _err_en_US, error.str ());
632
631
} else if (included->bytes () > 0 ) {
633
632
ProvenanceRange fileRange{
634
633
allSources_.AddIncludedFile (*included, dir.GetProvenanceRange ())};
635
- Prescanner{* prescanner}
634
+ Prescanner{prescanner}
636
635
.set_encoding (included->encoding ())
637
636
.Prescan (fileRange);
638
637
}
639
638
} else {
640
- prescanner-> Say (dir.GetTokenProvenanceRange (dirOffset),
639
+ prescanner. Say (dir.GetTokenProvenanceRange (dirOffset),
641
640
" #%s: unknown or unimplemented directive" _err_en_US, dirName);
642
641
}
643
642
}
@@ -669,15 +668,15 @@ static std::string GetDirectiveName(
669
668
}
670
669
671
670
void Preprocessor::SkipDisabledConditionalCode (const std::string &dirName,
672
- IsElseActive isElseActive, Prescanner * prescanner,
671
+ IsElseActive isElseActive, Prescanner & prescanner,
673
672
ProvenanceRange provenanceRange) {
674
673
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 ();
678
677
continue ;
679
678
}
680
- TokenSequence line{prescanner-> TokenizePreprocessorDirective ()};
679
+ TokenSequence line{prescanner. TokenizePreprocessorDirective ()};
681
680
std::size_t rest{0 };
682
681
std::string dn{GetDirectiveName (line, &rest)};
683
682
if (dn == " ifdef" || dn == " ifndef" || dn == " if" ) {
@@ -699,7 +698,7 @@ void Preprocessor::SkipDisabledConditionalCode(const std::string &dirName,
699
698
}
700
699
}
701
700
}
702
- prescanner-> Say (provenanceRange, " #%s: missing #endif" _err_en_US, dirName);
701
+ prescanner. Say (provenanceRange, " #%s: missing #endif" _err_en_US, dirName);
703
702
}
704
703
705
704
// Precedence level codes used here to accommodate mixed Fortran and C:
@@ -1049,7 +1048,7 @@ static std::int64_t ExpressionValue(const TokenSequence &token,
1049
1048
}
1050
1049
1051
1050
bool 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) {
1053
1052
TokenSequence expr1{expr, first, exprTokens};
1054
1053
if (expr1.HasBlanks ()) {
1055
1054
expr1.RemoveBlanks ();
@@ -1075,23 +1074,23 @@ bool Preprocessor::IsIfPredicateTrue(const TokenSequence &expr,
1075
1074
}
1076
1075
expr2.Put (expr1, j);
1077
1076
}
1078
- TokenSequence expr3{ReplaceMacros (expr2, * prescanner)};
1077
+ TokenSequence expr3{ReplaceMacros (expr2, prescanner)};
1079
1078
if (expr3.HasBlanks ()) {
1080
1079
expr3.RemoveBlanks ();
1081
1080
}
1082
1081
if (expr3.empty ()) {
1083
- prescanner-> Say (expr.GetProvenanceRange (), " empty expression" _err_en_US);
1082
+ prescanner. Say (expr.GetProvenanceRange (), " empty expression" _err_en_US);
1084
1083
return false ;
1085
1084
}
1086
1085
std::size_t atToken{0 };
1087
1086
std::optional<Message> error;
1088
1087
bool result{ExpressionValue (expr3, 0 , &atToken, &error) != 0 };
1089
1088
if (error) {
1090
- prescanner-> Say (std::move (*error));
1089
+ prescanner. Say (std::move (*error));
1091
1090
} else if (atToken < expr3.SizeInTokens () &&
1092
1091
expr3.TokenAt (atToken).ToString () != " !" ) {
1093
- prescanner-> Say (expr3.GetIntervalProvenanceRange (
1094
- atToken, expr3.SizeInTokens () - atToken),
1092
+ prescanner. Say (expr3.GetIntervalProvenanceRange (
1093
+ atToken, expr3.SizeInTokens () - atToken),
1095
1094
atToken == 0 ? " could not parse any expression" _err_en_US
1096
1095
: " excess characters after expression" _err_en_US);
1097
1096
}
0 commit comments