Skip to content

Commit

Permalink
[clang][NFC] Make various uses of Regex const
Browse files Browse the repository at this point in the history
The const-correctness of match() was fixed in rL372764, which allows
uses of Regex objects to be const in cases they couldn't be before. This
patch tightens up the const-ness of Regex in various such cases.

Reviewers: thopre

Reviewed By: thopre

Subscribers: cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D68155
  • Loading branch information
Thomas Preud'homme committed Nov 19, 2019
1 parent 6287130 commit b81cc60
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 43 deletions.
3 changes: 1 addition & 2 deletions clang/include/clang/Tooling/Inclusions/HeaderIncludes.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,7 @@ class IncludeCategoryManager {
std::string FileName;
// This refers to a substring in FileName.
StringRef FileStem;
// Regex is not thread-safe.
mutable SmallVector<llvm::Regex, 4> CategoryRegexs;
SmallVector<llvm::Regex, 4> CategoryRegexs;
};

/// Generates replacements for inserting or deleting #include directives in a
Expand Down
27 changes: 13 additions & 14 deletions clang/lib/Format/BreakableToken.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,11 +88,11 @@ getCommentSplit(StringRef Text, unsigned ContentStartColumn,

StringRef::size_type SpaceOffset = Text.find_last_of(Blanks, MaxSplitBytes);

static auto *const kNumberedListRegexp = new llvm::Regex("^[1-9][0-9]?\\.");
static const auto kNumberedListRegexp = llvm::Regex("^[1-9][0-9]?\\.");
while (SpaceOffset != StringRef::npos) {
// Do not split before a number followed by a dot: this would be interpreted
// as a numbered list, which would prevent re-flowing in subsequent passes.
if (kNumberedListRegexp->match(Text.substr(SpaceOffset).ltrim(Blanks)))
if (kNumberedListRegexp.match(Text.substr(SpaceOffset).ltrim(Blanks)))
SpaceOffset = Text.find_last_of(Blanks, SpaceOffset);
// In JavaScript, some @tags can be followed by {, and machinery that parses
// these comments will fail to understand the comment if followed by a line
Expand Down Expand Up @@ -245,7 +245,7 @@ BreakableStringLiteral::BreakableStringLiteral(

BreakableToken::Split BreakableStringLiteral::getSplit(
unsigned LineIndex, unsigned TailOffset, unsigned ColumnLimit,
unsigned ContentStartColumn, llvm::Regex &CommentPragmasRegex) const {
unsigned ContentStartColumn, const llvm::Regex &CommentPragmasRegex) const {
return getStringSplit(Line.substr(TailOffset), ContentStartColumn,
ColumnLimit - Postfix.size(), Style.TabWidth, Encoding);
}
Expand All @@ -271,7 +271,7 @@ unsigned BreakableComment::getLineCount() const { return Lines.size(); }
BreakableToken::Split
BreakableComment::getSplit(unsigned LineIndex, unsigned TailOffset,
unsigned ColumnLimit, unsigned ContentStartColumn,
llvm::Regex &CommentPragmasRegex) const {
const llvm::Regex &CommentPragmasRegex) const {
// Don't break lines matching the comment pragmas regex.
if (CommentPragmasRegex.match(Content[LineIndex]))
return Split(StringRef::npos, 0);
Expand Down Expand Up @@ -316,9 +316,9 @@ static bool mayReflowContent(StringRef Content) {
// Numbered lists may also start with a number followed by '.'
// To avoid issues if a line starts with a number which is actually the end
// of a previous line, we only consider numbers with up to 2 digits.
static auto *const kNumberedListRegexp = new llvm::Regex("^[1-9][0-9]?\\. ");
static const auto kNumberedListRegexp = llvm::Regex("^[1-9][0-9]?\\. ");
hasSpecialMeaningPrefix =
hasSpecialMeaningPrefix || kNumberedListRegexp->match(Content);
hasSpecialMeaningPrefix || kNumberedListRegexp.match(Content);

// Simple heuristic for what to reflow: content should contain at least two
// characters and either the first or second character must be
Expand Down Expand Up @@ -458,7 +458,7 @@ BreakableBlockComment::BreakableBlockComment(

BreakableToken::Split BreakableBlockComment::getSplit(
unsigned LineIndex, unsigned TailOffset, unsigned ColumnLimit,
unsigned ContentStartColumn, llvm::Regex &CommentPragmasRegex) const {
unsigned ContentStartColumn, const llvm::Regex &CommentPragmasRegex) const {
// Don't break lines matching the comment pragmas regex.
if (CommentPragmasRegex.match(Content[LineIndex]))
return Split(StringRef::npos, 0);
Expand Down Expand Up @@ -597,9 +597,8 @@ void BreakableBlockComment::insertBreak(unsigned LineIndex, unsigned TailOffset,
PrefixWithTrailingIndent.size());
}

BreakableToken::Split
BreakableBlockComment::getReflowSplit(unsigned LineIndex,
llvm::Regex &CommentPragmasRegex) const {
BreakableToken::Split BreakableBlockComment::getReflowSplit(
unsigned LineIndex, const llvm::Regex &CommentPragmasRegex) const {
if (!mayReflow(LineIndex, CommentPragmasRegex))
return Split(StringRef::npos, 0);

Expand Down Expand Up @@ -706,8 +705,8 @@ BreakableBlockComment::getSplitAfterLastLine(unsigned TailOffset) const {
return Split(StringRef::npos, 0);
}

bool BreakableBlockComment::mayReflow(unsigned LineIndex,
llvm::Regex &CommentPragmasRegex) const {
bool BreakableBlockComment::mayReflow(
unsigned LineIndex, const llvm::Regex &CommentPragmasRegex) const {
// Content[LineIndex] may exclude the indent after the '*' decoration. In that
// case, we compute the start of the comment pragma manually.
StringRef IndentContent = Content[LineIndex];
Expand Down Expand Up @@ -845,7 +844,7 @@ void BreakableLineCommentSection::insertBreak(
}

BreakableComment::Split BreakableLineCommentSection::getReflowSplit(
unsigned LineIndex, llvm::Regex &CommentPragmasRegex) const {
unsigned LineIndex, const llvm::Regex &CommentPragmasRegex) const {
if (!mayReflow(LineIndex, CommentPragmasRegex))
return Split(StringRef::npos, 0);

Expand Down Expand Up @@ -955,7 +954,7 @@ void BreakableLineCommentSection::updateNextToken(LineState &State) const {
}

bool BreakableLineCommentSection::mayReflow(
unsigned LineIndex, llvm::Regex &CommentPragmasRegex) const {
unsigned LineIndex, const llvm::Regex &CommentPragmasRegex) const {
// Line comments have the indent as part of the prefix, so we need to
// recompute the start of the line.
StringRef IndentContent = Content[LineIndex];
Expand Down
20 changes: 10 additions & 10 deletions clang/lib/Format/BreakableToken.h
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ class BreakableToken {
/// file.
virtual Split getSplit(unsigned LineIndex, unsigned TailOffset,
unsigned ColumnLimit, unsigned ContentStartColumn,
llvm::Regex &CommentPragmasRegex) const = 0;
const llvm::Regex &CommentPragmasRegex) const = 0;

/// Emits the previously retrieved \p Split via \p Whitespaces.
virtual void insertBreak(unsigned LineIndex, unsigned TailOffset, Split Split,
Expand Down Expand Up @@ -190,7 +190,7 @@ class BreakableToken {
/// If the split is not contained within one token, for example when reflowing
/// line comments, returns (0, <length>).
virtual Split getReflowSplit(unsigned LineIndex,
llvm::Regex &CommentPragmasRegex) const {
const llvm::Regex &CommentPragmasRegex) const {
return Split(StringRef::npos, 0);
}

Expand Down Expand Up @@ -255,7 +255,7 @@ class BreakableStringLiteral : public BreakableToken {

Split getSplit(unsigned LineIndex, unsigned TailOffset, unsigned ColumnLimit,
unsigned ContentStartColumn,
llvm::Regex &CommentPragmasRegex) const override;
const llvm::Regex &CommentPragmasRegex) const override;
void insertBreak(unsigned LineIndex, unsigned TailOffset, Split Split,
unsigned ContentIndent,
WhitespaceManager &Whitespaces) const override;
Expand Down Expand Up @@ -298,7 +298,7 @@ class BreakableComment : public BreakableToken {
unsigned getLineCount() const override;
Split getSplit(unsigned LineIndex, unsigned TailOffset, unsigned ColumnLimit,
unsigned ContentStartColumn,
llvm::Regex &CommentPragmasRegex) const override;
const llvm::Regex &CommentPragmasRegex) const override;
void compressWhitespace(unsigned LineIndex, unsigned TailOffset, Split Split,
WhitespaceManager &Whitespaces) const override;

Expand All @@ -309,7 +309,7 @@ class BreakableComment : public BreakableToken {
// Checks if the content of line LineIndex may be reflown with the previous
// line.
virtual bool mayReflow(unsigned LineIndex,
llvm::Regex &CommentPragmasRegex) const = 0;
const llvm::Regex &CommentPragmasRegex) const = 0;

// Contains the original text of the lines of the block comment.
//
Expand Down Expand Up @@ -363,7 +363,7 @@ class BreakableBlockComment : public BreakableComment {

Split getSplit(unsigned LineIndex, unsigned TailOffset, unsigned ColumnLimit,
unsigned ContentStartColumn,
llvm::Regex &CommentPragmasRegex) const override;
const llvm::Regex &CommentPragmasRegex) const override;
unsigned getRangeLength(unsigned LineIndex, unsigned Offset,
StringRef::size_type Length,
unsigned StartColumn) const override;
Expand All @@ -375,7 +375,7 @@ class BreakableBlockComment : public BreakableComment {
unsigned ContentIndent,
WhitespaceManager &Whitespaces) const override;
Split getReflowSplit(unsigned LineIndex,
llvm::Regex &CommentPragmasRegex) const override;
const llvm::Regex &CommentPragmasRegex) const override;
void reflow(unsigned LineIndex,
WhitespaceManager &Whitespaces) const override;
bool introducesBreakBeforeToken() const override;
Expand All @@ -384,7 +384,7 @@ class BreakableBlockComment : public BreakableComment {
Split getSplitAfterLastLine(unsigned TailOffset) const override;

bool mayReflow(unsigned LineIndex,
llvm::Regex &CommentPragmasRegex) const override;
const llvm::Regex &CommentPragmasRegex) const override;

// Contains Javadoc annotations that require additional indent when continued
// on multiple lines.
Expand Down Expand Up @@ -448,14 +448,14 @@ class BreakableLineCommentSection : public BreakableComment {
unsigned ContentIndent,
WhitespaceManager &Whitespaces) const override;
Split getReflowSplit(unsigned LineIndex,
llvm::Regex &CommentPragmasRegex) const override;
const llvm::Regex &CommentPragmasRegex) const override;
void reflow(unsigned LineIndex,
WhitespaceManager &Whitespaces) const override;
void adaptStartOfLine(unsigned LineIndex,
WhitespaceManager &Whitespaces) const override;
void updateNextToken(LineState &State) const override;
bool mayReflow(unsigned LineIndex,
llvm::Regex &CommentPragmasRegex) const override;
const llvm::Regex &CommentPragmasRegex) const override;

private:
// OriginalPrefix[i] contains the original prefix of line i, including
Expand Down
20 changes: 10 additions & 10 deletions clang/lib/Format/NamespaceEndCommentsFixer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,24 +92,24 @@ bool validEndComment(const FormatToken *RBraceTok, StringRef NamespaceName,

// Matches a valid namespace end comment.
// Valid namespace end comments don't need to be edited.
static llvm::Regex *const NamespaceCommentPattern =
new llvm::Regex("^/[/*] *(end (of )?)? *(anonymous|unnamed)? *"
"namespace( +([a-zA-Z0-9:_]+))?\\.? *(\\*/)?$",
llvm::Regex::IgnoreCase);
static llvm::Regex *const NamespaceMacroCommentPattern =
new llvm::Regex("^/[/*] *(end (of )?)? *(anonymous|unnamed)? *"
"([a-zA-Z0-9_]+)\\(([a-zA-Z0-9:_]*)\\)\\.? *(\\*/)?$",
llvm::Regex::IgnoreCase);
static const llvm::Regex NamespaceCommentPattern =
llvm::Regex("^/[/*] *(end (of )?)? *(anonymous|unnamed)? *"
"namespace( +([a-zA-Z0-9:_]+))?\\.? *(\\*/)?$",
llvm::Regex::IgnoreCase);
static const llvm::Regex NamespaceMacroCommentPattern =
llvm::Regex("^/[/*] *(end (of )?)? *(anonymous|unnamed)? *"
"([a-zA-Z0-9_]+)\\(([a-zA-Z0-9:_]*)\\)\\.? *(\\*/)?$",
llvm::Regex::IgnoreCase);

SmallVector<StringRef, 8> Groups;
if (NamespaceTok->is(TT_NamespaceMacro) &&
NamespaceMacroCommentPattern->match(Comment->TokenText, &Groups)) {
NamespaceMacroCommentPattern.match(Comment->TokenText, &Groups)) {
StringRef NamespaceTokenText = Groups.size() > 4 ? Groups[4] : "";
// The name of the macro must be used.
if (NamespaceTokenText != NamespaceTok->TokenText)
return false;
} else if (NamespaceTok->isNot(tok::kw_namespace) ||
!NamespaceCommentPattern->match(Comment->TokenText, &Groups)) {
!NamespaceCommentPattern.match(Comment->TokenText, &Groups)) {
// Comment does not match regex.
return false;
}
Expand Down
7 changes: 4 additions & 3 deletions clang/lib/Format/UnwrappedLineParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2498,9 +2498,10 @@ bool UnwrappedLineParser::isOnNewLine(const FormatToken &FormatTok) {

// Checks if \p FormatTok is a line comment that continues the line comment
// section on \p Line.
static bool continuesLineCommentSection(const FormatToken &FormatTok,
const UnwrappedLine &Line,
llvm::Regex &CommentPragmasRegex) {
static bool
continuesLineCommentSection(const FormatToken &FormatTok,
const UnwrappedLine &Line,
const llvm::Regex &CommentPragmasRegex) {
if (Line.Tokens.empty())
return false;

Expand Down
9 changes: 5 additions & 4 deletions clang/tools/clang-refactor/TestSupport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -303,9 +303,10 @@ findTestSelectionRanges(StringRef Filename) {

// See the doc comment for this function for the explanation of this
// syntax.
static Regex RangeRegex("range[[:blank:]]*([[:alpha:]_]*)?[[:blank:]]*=[[:"
"blank:]]*(\\+[[:digit:]]+)?[[:blank:]]*(->[[:blank:]"
"]*[\\+\\:[:digit:]]+)?");
static const Regex RangeRegex(
"range[[:blank:]]*([[:alpha:]_]*)?[[:blank:]]*=[[:"
"blank:]]*(\\+[[:digit:]]+)?[[:blank:]]*(->[[:blank:]"
"]*[\\+\\:[:digit:]]+)?");

std::map<std::string, SmallVector<TestSelectionRange, 8>> GroupedRanges;

Expand Down Expand Up @@ -352,7 +353,7 @@ findTestSelectionRanges(StringRef Filename) {
unsigned EndOffset;

if (!Matches[3].empty()) {
static Regex EndLocRegex(
static const Regex EndLocRegex(
"->[[:blank:]]*(\\+[[:digit:]]+):([[:digit:]]+)");
SmallVector<StringRef, 4> EndLocMatches;
if (!EndLocRegex.match(Matches[3], &EndLocMatches)) {
Expand Down

0 comments on commit b81cc60

Please sign in to comment.