Skip to content

Commit 9307806

Browse files
authored
Merge pull request flang-compiler#463 from flang-compiler/pmk-fix-brian
Fix bug with comment clipping on compiler directives
2 parents ab57944 + 3f4375c commit 9307806

File tree

3 files changed

+12
-8
lines changed

3 files changed

+12
-8
lines changed

Diff for: lib/parser/prescan.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ void Prescanner::Statement() {
193193
NormalizeCompilerDirectiveCommentMarker(*preprocessed);
194194
preprocessed->ToLowerCase();
195195
SourceFormChange(preprocessed->ToString());
196-
preprocessed->ClipComment().Emit(cooked_);
196+
preprocessed->ClipComment(true /* skip first ! */).Emit(cooked_);
197197
break;
198198
case LineClassification::Kind::Source:
199199
if (inFixedForm_) {

Diff for: lib/parser/token-sequence.cc

+10-6
Original file line numberDiff line numberDiff line change
@@ -221,16 +221,20 @@ TokenSequence &TokenSequence::RemoveRedundantBlanks(std::size_t firstChar) {
221221
return *this;
222222
}
223223

224-
TokenSequence &TokenSequence::ClipComment() {
224+
TokenSequence &TokenSequence::ClipComment(bool skipFirst) {
225225
std::size_t tokens{SizeInTokens()};
226226
for (std::size_t j{0}; j < tokens; ++j) {
227227
if (TokenAt(j).FirstNonBlank() == '!') {
228-
TokenSequence result;
229-
if (j > 0) {
230-
result.Put(*this, 0, j - 1);
228+
if (skipFirst) {
229+
skipFirst = false;
230+
} else {
231+
TokenSequence result;
232+
if (j > 0) {
233+
result.Put(*this, 0, j - 1);
234+
}
235+
swap(result);
236+
return *this;
231237
}
232-
swap(result);
233-
return *this;
234238
}
235239
}
236240
return *this;

Diff for: lib/parser/token-sequence.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ class TokenSequence {
108108
bool HasRedundantBlanks(std::size_t firstChar = 0) const;
109109
TokenSequence &RemoveBlanks(std::size_t firstChar = 0);
110110
TokenSequence &RemoveRedundantBlanks(std::size_t firstChar = 0);
111-
TokenSequence &ClipComment();
111+
TokenSequence &ClipComment(bool skipFirst = false);
112112
void Emit(CookedSource &) const;
113113
void Dump(std::ostream &) const;
114114

0 commit comments

Comments
 (0)