mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Simplify expectIdentifierToken by using expectToken
This commit is contained in:
parent
73c99d15cd
commit
ed9f80690b
@ -1602,27 +1602,10 @@ ASTPointer<ParameterList> Parser::createEmptyParameterList()
|
|||||||
return nodeFactory.createNode<ParameterList>(vector<ASTPointer<VariableDeclaration>>());
|
return nodeFactory.createNode<ParameterList>(vector<ASTPointer<VariableDeclaration>>());
|
||||||
}
|
}
|
||||||
|
|
||||||
string Parser::currentTokenName()
|
|
||||||
{
|
|
||||||
Token::Value token = m_scanner->currentToken();
|
|
||||||
if (Token::isElementaryTypeName(token)) //for the sake of accuracy in reporting
|
|
||||||
{
|
|
||||||
ElementaryTypeNameToken elemTypeName = m_scanner->currentElementaryTypeNameToken();
|
|
||||||
return elemTypeName.toString();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return Token::name(token);
|
|
||||||
}
|
|
||||||
|
|
||||||
ASTPointer<ASTString> Parser::expectIdentifierToken()
|
ASTPointer<ASTString> Parser::expectIdentifierToken()
|
||||||
{
|
{
|
||||||
Token::Value id = m_scanner->currentToken();
|
// do not advance on success
|
||||||
if (id != Token::Identifier)
|
expectToken(Token::Identifier, false);
|
||||||
fatalParserError(
|
|
||||||
string("Expected identifier, got '") +
|
|
||||||
currentTokenName() +
|
|
||||||
string("'")
|
|
||||||
);
|
|
||||||
return getLiteralAndAdvance();
|
return getLiteralAndAdvance();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -165,7 +165,6 @@ private:
|
|||||||
/// @returns an expression parsed in look-ahead fashion from something like "a.b[8][2**70]".
|
/// @returns an expression parsed in look-ahead fashion from something like "a.b[8][2**70]".
|
||||||
ASTPointer<Expression> expressionFromIndexAccessStructure(IndexAccessedPath const& _pathAndIndices);
|
ASTPointer<Expression> expressionFromIndexAccessStructure(IndexAccessedPath const& _pathAndIndices);
|
||||||
|
|
||||||
std::string currentTokenName();
|
|
||||||
ASTPointer<ASTString> expectIdentifierToken();
|
ASTPointer<ASTString> expectIdentifierToken();
|
||||||
ASTPointer<ASTString> getLiteralAndAdvance();
|
ASTPointer<ASTString> getLiteralAndAdvance();
|
||||||
///@}
|
///@}
|
||||||
|
@ -63,7 +63,7 @@ Token::Value ParserBase::advance()
|
|||||||
return m_scanner->next();
|
return m_scanner->next();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ParserBase::expectToken(Token::Value _value)
|
void ParserBase::expectToken(Token::Value _value, bool _advance)
|
||||||
{
|
{
|
||||||
Token::Value tok = m_scanner->currentToken();
|
Token::Value tok = m_scanner->currentToken();
|
||||||
if (tok != _value)
|
if (tok != _value)
|
||||||
@ -98,6 +98,7 @@ void ParserBase::expectToken(Token::Value _value)
|
|||||||
string("'")
|
string("'")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
if (_advance)
|
||||||
m_scanner->next();
|
m_scanner->next();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@ protected:
|
|||||||
///@{
|
///@{
|
||||||
///@name Helper functions
|
///@name Helper functions
|
||||||
/// If current token value is not _value, throw exception otherwise advance token.
|
/// If current token value is not _value, throw exception otherwise advance token.
|
||||||
void expectToken(Token::Value _value);
|
void expectToken(Token::Value _value, bool _advance = true);
|
||||||
Token::Value currentToken() const;
|
Token::Value currentToken() const;
|
||||||
Token::Value peekNextToken() const;
|
Token::Value peekNextToken() const;
|
||||||
std::string currentLiteral() const;
|
std::string currentLiteral() const;
|
||||||
|
@ -992,7 +992,7 @@ BOOST_AUTO_TEST_CASE(keyword_is_reserved)
|
|||||||
for (const auto& keyword: keywords)
|
for (const auto& keyword: keywords)
|
||||||
{
|
{
|
||||||
auto text = std::string("contract ") + keyword + " {}";
|
auto text = std::string("contract ") + keyword + " {}";
|
||||||
CHECK_PARSE_ERROR(text.c_str(), "Expected identifier");
|
CHECK_PARSE_ERROR(text.c_str(), "Expected token Identifier got reserved keyword");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -326,8 +326,8 @@ BOOST_AUTO_TEST_CASE(compilation_error)
|
|||||||
{
|
{
|
||||||
BOOST_CHECK_EQUAL(
|
BOOST_CHECK_EQUAL(
|
||||||
dev::jsonCompactPrint(error),
|
dev::jsonCompactPrint(error),
|
||||||
"{\"component\":\"general\",\"formattedMessage\":\"fileA:1:23: ParserError: Expected identifier, got 'RBrace'\\n"
|
"{\"component\":\"general\",\"formattedMessage\":\"fileA:1:23: ParserError: Expected token Identifier got 'RBrace'\\n"
|
||||||
"contract A { function }\\n ^\\n\",\"message\":\"Expected identifier, got 'RBrace'\","
|
"contract A { function }\\n ^\\n\",\"message\":\"Expected token Identifier got 'RBrace'\","
|
||||||
"\"severity\":\"error\",\"sourceLocation\":{\"end\":22,\"file\":\"fileA\",\"start\":22},\"type\":\"ParserError\"}"
|
"\"severity\":\"error\",\"sourceLocation\":{\"end\":22,\"file\":\"fileA\",\"start\":22},\"type\":\"ParserError\"}"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -2,4 +2,4 @@ contract Foo {
|
|||||||
uint constant = 4;
|
uint constant = 4;
|
||||||
}
|
}
|
||||||
// ----
|
// ----
|
||||||
// ParserError: (30-30): Expected identifier, got 'Assign'
|
// ParserError: (30-30): Expected token Identifier got 'Assign'
|
||||||
|
@ -2,4 +2,4 @@ contract c {
|
|||||||
uint external x;
|
uint external x;
|
||||||
}
|
}
|
||||||
// ----
|
// ----
|
||||||
// ParserError: (19-19): Expected identifier, got 'External'
|
// ParserError: (19-19): Expected token Identifier got 'External'
|
||||||
|
@ -2,4 +2,4 @@ contract Foo {
|
|||||||
uint[] memory x;
|
uint[] memory x;
|
||||||
}
|
}
|
||||||
// ----
|
// ----
|
||||||
// ParserError: (23-23): Expected identifier, got 'Memory'
|
// ParserError: (23-23): Expected token Identifier got 'Memory'
|
||||||
|
@ -3,4 +3,4 @@ contract test {
|
|||||||
function b() returns (uint r) { r = a({: 1, : 2, : 3}); }
|
function b() returns (uint r) { r = a({: 1, : 2, : 3}); }
|
||||||
}
|
}
|
||||||
// ----
|
// ----
|
||||||
// ParserError: (143-143): Expected identifier, got 'Colon'
|
// ParserError: (143-143): Expected token Identifier got 'Colon'
|
||||||
|
@ -2,4 +2,4 @@ contract test {
|
|||||||
uint256 ;
|
uint256 ;
|
||||||
}
|
}
|
||||||
// ----
|
// ----
|
||||||
// ParserError: (28-28): Expected identifier, got 'Semicolon'
|
// ParserError: (28-28): Expected token Identifier got 'Semicolon'
|
||||||
|
@ -2,4 +2,4 @@ contract test {
|
|||||||
uint payable x;
|
uint payable x;
|
||||||
}
|
}
|
||||||
// ----
|
// ----
|
||||||
// ParserError: (22-22): Expected identifier, got 'Payable'
|
// ParserError: (22-22): Expected token Identifier got 'Payable'
|
||||||
|
@ -2,4 +2,4 @@ contract Foo {
|
|||||||
function f() { var[] a; }
|
function f() { var[] a; }
|
||||||
}
|
}
|
||||||
// ----
|
// ----
|
||||||
// ParserError: (34-34): Expected identifier, got 'LBrack'
|
// ParserError: (34-34): Expected token Identifier got 'LBrack'
|
||||||
|
Loading…
Reference in New Issue
Block a user