[llvm] 426437d - [MC] Add MCAsmParser::parseRParen to improve consistency and simplify code
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 27 00:37:54 PST 2022
Author: Fangrui Song
Date: 2022-01-27T00:37:49-08:00
New Revision: 426437d1fea48d62d276c5db65f66f88695a7589
URL: https://github.com/llvm/llvm-project/commit/426437d1fea48d62d276c5db65f66f88695a7589
DIFF: https://github.com/llvm/llvm-project/commit/426437d1fea48d62d276c5db65f66f88695a7589.diff
LOG: [MC] Add MCAsmParser::parseRParen to improve consistency and simplify code
Some diagnostics are more verbose but they don't seem to be more useful than
simple `expected ')'`
Added:
Modified:
llvm/include/llvm/MC/MCParser/MCAsmParser.h
llvm/lib/MC/MCParser/AsmParser.cpp
llvm/lib/MC/MCParser/MasmParser.cpp
llvm/test/MC/AMDGPU/gfx10_err_pos.s
llvm/test/MC/ARM/symbol-variants-errors.s
llvm/test/MC/ELF/bracket.s
Removed:
################################################################################
diff --git a/llvm/include/llvm/MC/MCParser/MCAsmParser.h b/llvm/include/llvm/MC/MCParser/MCAsmParser.h
index dbb76bd36591d..29386ffc45ac4 100644
--- a/llvm/include/llvm/MC/MCParser/MCAsmParser.h
+++ b/llvm/include/llvm/MC/MCParser/MCAsmParser.h
@@ -262,6 +262,7 @@ class MCAsmParser {
bool parseOptionalToken(AsmToken::TokenKind T);
bool parseComma() { return parseToken(AsmToken::Comma, "expected comma"); }
+ bool parseRParen() { return parseToken(AsmToken::RParen, "expected ')'"); }
bool parseEOL();
bool parseEOL(const Twine &ErrMsg);
diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp
index 15b675fc05666..0cea491f227d5 100644
--- a/llvm/lib/MC/MCParser/AsmParser.cpp
+++ b/llvm/lib/MC/MCParser/AsmParser.cpp
@@ -1121,11 +1121,8 @@ StringRef AsmParser::parseStringToComma() {
bool AsmParser::parseParenExpr(const MCExpr *&Res, SMLoc &EndLoc) {
if (parseExpression(Res))
return true;
- if (Lexer.isNot(AsmToken::RParen))
- return TokError("expected ')' in parentheses expression");
EndLoc = Lexer.getTok().getEndLoc();
- Lex();
- return false;
+ return parseRParen();
}
/// Parse a bracket expression and return it.
@@ -1214,9 +1211,7 @@ bool AsmParser::parsePrimaryExpr(const MCExpr *&Res, SMLoc &EndLoc,
Lex(); // eat '('.
StringRef VName;
parseIdentifier(VName);
- // eat ')'.
- if (parseToken(AsmToken::RParen,
- "unexpected token in variant, expected ')'"))
+ if (parseRParen())
return true;
Split = std::make_pair(Identifier, VName);
}
@@ -1379,9 +1374,8 @@ bool AsmParser::parsePrimaryExpr(const MCExpr *&Res, SMLoc &EndLoc,
Lex(); // Eat the operator.
if (parseExpression(Res, EndLoc))
return true;
- if (Lexer.isNot(AsmToken::RParen))
- return TokError("expected ')'");
- Lex(); // Eat the operator.
+ if (parseRParen())
+ return true;
Res = getTargetParser().createTargetUnaryExpr(Res, FirstTokenKind, Ctx);
return !Res;
}
@@ -1553,8 +1547,7 @@ bool AsmParser::parseParenExprOfDepth(unsigned ParenDepth, const MCExpr *&Res,
// This is the same behavior as parseParenExpression().
if (ParenDepth - 1 > 0) {
EndLoc = getTok().getEndLoc();
- if (parseToken(AsmToken::RParen,
- "expected ')' in parentheses expression"))
+ if (parseRParen())
return true;
}
}
diff --git a/llvm/lib/MC/MCParser/MasmParser.cpp b/llvm/lib/MC/MCParser/MasmParser.cpp
index a888e830182fb..f9433240743d4 100644
--- a/llvm/lib/MC/MCParser/MasmParser.cpp
+++ b/llvm/lib/MC/MCParser/MasmParser.cpp
@@ -1517,11 +1517,8 @@ StringRef MasmParser::parseStringToEndOfStatement() {
bool MasmParser::parseParenExpr(const MCExpr *&Res, SMLoc &EndLoc) {
if (parseExpression(Res))
return true;
- if (Lexer.isNot(AsmToken::RParen))
- return TokError("expected ')' in parentheses expression");
EndLoc = Lexer.getTok().getEndLoc();
- Lex();
- return false;
+ return parseRParen();
}
/// Parse a bracket expression and return it.
@@ -1839,9 +1836,8 @@ bool MasmParser::parsePrimaryExpr(const MCExpr *&Res, SMLoc &EndLoc,
Lex(); // Eat the operator.
if (parseExpression(Res, EndLoc))
return true;
- if (Lexer.isNot(AsmToken::RParen))
- return TokError("expected ')'");
- Lex(); // Eat the operator.
+ if (parseRParen())
+ return true;
Res = getTargetParser().createTargetUnaryExpr(Res, FirstTokenKind, Ctx);
return !Res;
}
@@ -1930,8 +1926,7 @@ bool MasmParser::parseParenExprOfDepth(unsigned ParenDepth, const MCExpr *&Res,
// This is the same behavior as parseParenExpression().
if (ParenDepth - 1 > 0) {
EndLoc = getTok().getEndLoc();
- if (parseToken(AsmToken::RParen,
- "expected ')' in parentheses expression"))
+ if (parseRParen())
return true;
}
}
@@ -3359,8 +3354,7 @@ bool MasmParser::handleMacroInvocation(const MCAsmMacro *M, SMLoc NameLoc) {
}
// Consume the right-parenthesis on the other side of the arguments.
- if (parseToken(AsmToken::RParen, "invoking macro function '" + M->Name +
- "' requires arguments in parentheses"))
+ if (parseRParen())
return true;
// Exit values may require lexing, unfortunately. We construct a new buffer to
@@ -3744,8 +3738,7 @@ bool MasmParser::parseScalarInitializer(unsigned Size,
SmallVector<const MCExpr *, 1> DuplicatedValues;
if (parseToken(AsmToken::LParen,
"parentheses required for 'dup' contents") ||
- parseScalarInstList(Size, DuplicatedValues) ||
- parseToken(AsmToken::RParen, "unmatched parentheses"))
+ parseScalarInstList(Size, DuplicatedValues) || parseRParen())
return true;
for (int i = 0; i < Repetitions; ++i)
@@ -3951,8 +3944,7 @@ bool MasmParser::parseRealInstList(const fltSemantics &Semantics,
SmallVector<APInt, 1> DuplicatedValues;
if (parseToken(AsmToken::LParen,
"parentheses required for 'dup' contents") ||
- parseRealInstList(Semantics, DuplicatedValues) ||
- parseToken(AsmToken::RParen, "unmatched parentheses"))
+ parseRealInstList(Semantics, DuplicatedValues) || parseRParen())
return true;
for (int i = 0; i < Repetitions; ++i)
@@ -4317,8 +4309,7 @@ bool MasmParser::parseStructInstList(
std::vector<StructInitializer> DuplicatedValues;
if (parseToken(AsmToken::LParen,
"parentheses required for 'dup' contents") ||
- parseStructInstList(Structure, DuplicatedValues) ||
- parseToken(AsmToken::RParen, "unmatched parentheses"))
+ parseStructInstList(Structure, DuplicatedValues) || parseRParen())
return true;
for (int i = 0; i < Repetitions; ++i)
diff --git a/llvm/test/MC/AMDGPU/gfx10_err_pos.s b/llvm/test/MC/AMDGPU/gfx10_err_pos.s
index be46fd50a2c5a..d32793712dcc5 100644
--- a/llvm/test/MC/AMDGPU/gfx10_err_pos.s
+++ b/llvm/test/MC/AMDGPU/gfx10_err_pos.s
@@ -51,7 +51,7 @@ tbuffer_store_format_xyzw v[1:4], off, ttmp[4:7], s0 format:[BUF_NUM_FORMAT_UINT
// expected ')' in parentheses expression
v_bfe_u32 v0, 1+(100, v1, v2
-// CHECK: error: expected ')' in parentheses expression
+// CHECK: :[[#@LINE-1]]:21: error: expected ')'
// CHECK-NEXT:{{^}}v_bfe_u32 v0, 1+(100, v1, v2
// CHECK-NEXT:{{^}} ^
diff --git a/llvm/test/MC/ARM/symbol-variants-errors.s b/llvm/test/MC/ARM/symbol-variants-errors.s
index 03401cd98b7e9..9a375773361da 100644
--- a/llvm/test/MC/ARM/symbol-variants-errors.s
+++ b/llvm/test/MC/ARM/symbol-variants-errors.s
@@ -10,14 +10,13 @@ f1:
@ check for missing closed paren
f2:
.word bar(got
- at CHECK: error: unexpected token in variant, expected ')'
+ at CHECK: :[[#@LINE-1]]:16: error: expected ')'
@CHECK: .word bar(got
@CHECK: ^
@ check for invalid symbol before variant end
f3:
.word bar(got+2)
-
- at CHECK: error: unexpected token in variant, expected ')'
+ at CHECK: :[[#@LINE-1]]:16: error: expected ')'
@CHECK: .word bar(got+2)
@CHECK: ^
diff --git a/llvm/test/MC/ELF/bracket.s b/llvm/test/MC/ELF/bracket.s
index 702e309ddeeb3..dba663fab604a 100644
--- a/llvm/test/MC/ELF/bracket.s
+++ b/llvm/test/MC/ELF/bracket.s
@@ -4,5 +4,5 @@
// CHECK: error: expected ']' in brackets expression
.size x, [.-x)
-// CHECK: error: expected ')' in parentheses expression
+// CHECK: :[[#@LINE+1]]:14: error: expected ')'
.size y, (.-y]
More information about the llvm-commits
mailing list