Skip to content

Commit f411be0

Browse files
committed
[flang] NFC: change non-nullable pointer arguments to references
Ticking off a Parser TODO: Preprocessor::Directive()'s Prescanner argument should be a reference, not a pointer. Differential Revision: https://reviews.llvm.org/D109094
1 parent 32955be commit f411be0

File tree

3 files changed

+48
-49
lines changed

3 files changed

+48
-49
lines changed

flang/lib/Parser/preprocessor.cpp

Lines changed: 43 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -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

671670
void 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

10511050
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) {
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
}

flang/lib/Parser/preprocessor.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ class Preprocessor {
7878
const TokenSequence &, Prescanner &);
7979

8080
// Implements a preprocessor directive.
81-
void Directive(const TokenSequence &, Prescanner *);
81+
void Directive(const TokenSequence &, Prescanner &);
8282

8383
private:
8484
enum class IsElseActive { No, Yes };
@@ -87,9 +87,9 @@ class Preprocessor {
8787
CharBlock SaveTokenAsName(const CharBlock &);
8888
TokenSequence ReplaceMacros(const TokenSequence &, Prescanner &);
8989
void SkipDisabledConditionalCode(
90-
const std::string &, IsElseActive, Prescanner *, ProvenanceRange);
90+
const std::string &, IsElseActive, Prescanner &, ProvenanceRange);
9191
bool IsIfPredicateTrue(const TokenSequence &expr, std::size_t first,
92-
std::size_t exprTokens, Prescanner *);
92+
std::size_t exprTokens, Prescanner &);
9393

9494
AllSources &allSources_;
9595
std::list<std::string> names_;

flang/lib/Parser/prescan.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ void Prescanner::Statement() {
103103
case LineClassification::Kind::IncludeDirective:
104104
case LineClassification::Kind::DefinitionDirective:
105105
case LineClassification::Kind::PreprocessorDirective:
106-
preprocessor_.Directive(TokenizePreprocessorDirective(), this);
106+
preprocessor_.Directive(TokenizePreprocessorDirective(), *this);
107107
return;
108108
case LineClassification::Kind::CompilerDirective:
109109
directiveSentinel_ = line.sentinel;
@@ -823,7 +823,7 @@ bool Prescanner::SkipCommentLine(bool afterAmpersand) {
823823
// (when it does not follow '&'), #define, and #undef (because
824824
// they cannot be allowed to affect preceding text on a
825825
// continued line).
826-
preprocessor_.Directive(TokenizePreprocessorDirective(), this);
826+
preprocessor_.Directive(TokenizePreprocessorDirective(), *this);
827827
return true;
828828
} else if (afterAmpersand &&
829829
(lineClass.kind == LineClassification::Kind::IncludeDirective ||

0 commit comments

Comments
 (0)