Define and use a utility function. NFC.

llvm-svn: 266914
This commit is contained in:
Rui Ueyama 2016-04-20 20:54:13 +00:00
parent 62f3726365
commit 6011811beb
1 changed files with 16 additions and 7 deletions

View File

@ -64,6 +64,20 @@ static StringRef next(ArrayRef<StringRef> &Tokens) {
return Tok; return Tok;
} }
static bool expect(ArrayRef<StringRef> &Tokens, StringRef S) {
if (Tokens.empty()) {
error(S + " expected");
return false;
}
StringRef Tok = Tokens.front();
if (Tok != S) {
error(S + " expected, but got " + Tok);
return false;
}
Tokens = Tokens.slice(1);
return true;
}
static uint64_t parseExpr(ArrayRef<StringRef> &Tokens, uint64_t Dot); static uint64_t parseExpr(ArrayRef<StringRef> &Tokens, uint64_t Dot);
// This is a part of the operator-precedence parser to evaluate // This is a part of the operator-precedence parser to evaluate
@ -75,13 +89,8 @@ static uint64_t parsePrimary(ArrayRef<StringRef> &Tokens, uint64_t Dot) {
return Dot; return Dot;
if (Tok == "(") { if (Tok == "(") {
uint64_t V = parseExpr(Tokens, Dot); uint64_t V = parseExpr(Tokens, Dot);
if (Tokens.empty()) { if (!expect(Tokens, ")"))
error(") expected"); return 0;
} else {
Tok = next(Tokens);
if (Tok != ")")
error(") expected, but got " + Tok);
}
return V; return V;
} }
return getInteger(Tok); return getInteger(Tok);