SMLoc E = SMLoc::getFromPointer(S.getPointer() - 1);
const MCExpr *Res;
- if (getLexer().getKind() != AsmToken::LBrac)
+ if (!parseOptionalToken(AsmToken::LBrac))
return MatchOperand_NoMatch;
-
- getLexer().Lex(); // Eat '['.
-
if (getLexer().getKind() != AsmToken::Identifier) {
const MCExpr *Expr;
if (getParser().parseExpression(Expr)) {
return MatchOperand_ParseFail;
}
- if (getLexer().getKind() != AsmToken::RBrac) {
- Error(getLoc(), "expected ]");
+ if (parseToken(AsmToken::RBrac, "expected ']'"))
return MatchOperand_ParseFail;
- }
-
- getLexer().Lex(); // Eat ']'.
Operands.push_back(CSKYOperand::createConstpoolOp(Expr, S, E));
return MatchOperand_Success;
Error(getLoc(), "unknown expression");
return MatchOperand_ParseFail;
}
-
- if (getLexer().getKind() != AsmToken::RBrac) {
- Error(getLoc(), "expected ']'");
+ if (parseToken(AsmToken::RBrac, "expected ']'"))
return MatchOperand_ParseFail;
- }
-
- getLexer().Lex(); // Eat ']'.
Res = MCBinaryExpr::create(Opcode, Res, Expr, getContext());
Operands.push_back(CSKYOperand::createConstpoolOp(Res, S, E));
SMLoc E = SMLoc::getFromPointer(S.getPointer() - 1);
const MCExpr *Res;
- if (getLexer().getKind() != AsmToken::LBrac)
+ if (!parseOptionalToken(AsmToken::LBrac))
return MatchOperand_NoMatch;
- getLexer().Lex(); // Eat '['.
-
if (getLexer().getKind() != AsmToken::Identifier) {
const MCExpr *Expr;
if (getParser().parseExpression(Expr)) {
Error(getLoc(), "unknown expression");
return MatchOperand_ParseFail;
}
-
- if (getLexer().getKind() != AsmToken::RBrac) {
- Error(getLoc(), "expected ']'");
+ if (parseToken(AsmToken::RBrac))
return MatchOperand_ParseFail;
- }
-
- getLexer().Lex(); // Eat ']'.
Operands.push_back(CSKYOperand::createConstpoolOp(Expr, S, E));
return MatchOperand_Success;
Error(getLoc(), "unknown expression");
return MatchOperand_ParseFail;
}
-
- if (getLexer().getKind() != AsmToken::RBrac) {
- Error(getLoc(), "expected ']'");
+ if (parseToken(AsmToken::RBrac, "expected ']'"))
return MatchOperand_ParseFail;
- }
-
- getLexer().Lex(); // Eat ']'.
Res = MCBinaryExpr::create(Opcode, Res, Expr, getContext());
Operands.push_back(CSKYOperand::createConstpoolOp(Res, S, E));
if (getLexer().is(AsmToken::EndOfStatement))
break;
- if (getLexer().is(AsmToken::Comma)) {
- getLexer().Lex(); // eat ','
- } else {
- Error(getLoc(), "expected ,");
+ if (parseToken(AsmToken::Comma, "expected ','"))
return MatchOperand_ParseFail;
- }
}
Operands.push_back(
auto Ry = Operands.back()->getReg();
Operands.pop_back();
- if (getLexer().isNot(AsmToken::Minus)) {
- Error(getLoc(), "expected '-'");
+ if (parseToken(AsmToken::Minus, "expected '-'"))
return MatchOperand_ParseFail;
- }
-
- getLexer().Lex(); // eat '-'
-
if (parseRegister(Operands) != MatchOperand_Success) {
Error(getLoc(), "invalid register");
return MatchOperand_ParseFail;
auto Ry = Operands.back()->getReg();
Operands.pop_back();
- if (getLexer().is(AsmToken::Minus)) {
- getLexer().Lex(); // eat '-'
-
+ if (parseOptionalToken(AsmToken::Minus)) {
if (parseRegister(Operands) != MatchOperand_Success) {
Error(getLoc(), "invalid register");
return MatchOperand_ParseFail;
reglist.push_back(Ry);
reglist.push_back(Rz);
- if (getLexer().is(AsmToken::Comma))
- getLexer().Lex(); // eat ','
- else if (getLexer().is(AsmToken::EndOfStatement))
+ if (getLexer().is(AsmToken::EndOfStatement))
break;
-
- } else if (getLexer().is(AsmToken::Comma)) {
+ (void)parseOptionalToken(AsmToken::Comma);
+ } else if (parseOptionalToken(AsmToken::Comma)) {
reglist.push_back(Ry);
reglist.push_back(Ry);
-
- getLexer().Lex(); // eat ','
} else if (getLexer().is(AsmToken::EndOfStatement)) {
reglist.push_back(Ry);
reglist.push_back(Ry);
return true;
// Parse until end of statement, consuming commas between operands.
- while (getLexer().is(AsmToken::Comma)) {
- // Consume comma token.
- getLexer().Lex();
-
- // Parse next operand.
+ while (parseOptionalToken(AsmToken::Comma))
if (parseOperand(Operands, Name))
return true;
- }
if (getLexer().isNot(AsmToken::EndOfStatement)) {
SMLoc Loc = getLexer().getLoc();