mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #2411 from federicobond/recover-parser
Try to recover from parser errors where possible
This commit is contained in:
commit
17de4a0756
@ -347,8 +347,12 @@ Parser::FunctionHeaderParserResult Parser::parseFunctionHeader(bool _forceEmptyN
|
|||||||
else if (Token::isVisibilitySpecifier(token))
|
else if (Token::isVisibilitySpecifier(token))
|
||||||
{
|
{
|
||||||
if (result.visibility != Declaration::Visibility::Default)
|
if (result.visibility != Declaration::Visibility::Default)
|
||||||
fatalParserError(string("Multiple visibility specifiers."));
|
{
|
||||||
result.visibility = parseVisibilitySpecifier(token);
|
parserError(string("Multiple visibility specifiers."));
|
||||||
|
m_scanner->next();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
result.visibility = parseVisibilitySpecifier(token);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
@ -501,8 +505,12 @@ ASTPointer<VariableDeclaration> Parser::parseVariableDeclaration(
|
|||||||
if (_options.isStateVariable && Token::isVariableVisibilitySpecifier(token))
|
if (_options.isStateVariable && Token::isVariableVisibilitySpecifier(token))
|
||||||
{
|
{
|
||||||
if (visibility != Declaration::Visibility::Default)
|
if (visibility != Declaration::Visibility::Default)
|
||||||
fatalParserError(string("Visibility already specified."));
|
{
|
||||||
visibility = parseVisibilitySpecifier(token);
|
parserError(string("Visibility already specified."));
|
||||||
|
m_scanner->next();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
visibility = parseVisibilitySpecifier(token);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -513,14 +521,15 @@ ASTPointer<VariableDeclaration> Parser::parseVariableDeclaration(
|
|||||||
else if (_options.allowLocationSpecifier && Token::isLocationSpecifier(token))
|
else if (_options.allowLocationSpecifier && Token::isLocationSpecifier(token))
|
||||||
{
|
{
|
||||||
if (location != VariableDeclaration::Location::Default)
|
if (location != VariableDeclaration::Location::Default)
|
||||||
fatalParserError(string("Location already specified."));
|
parserError(string("Location already specified."));
|
||||||
if (!type)
|
else if (!type)
|
||||||
fatalParserError(string("Location specifier needs explicit type name."));
|
parserError(string("Location specifier needs explicit type name."));
|
||||||
location = (
|
else
|
||||||
token == Token::Memory ?
|
location = (
|
||||||
VariableDeclaration::Location::Memory :
|
token == Token::Memory ?
|
||||||
VariableDeclaration::Location::Storage
|
VariableDeclaration::Location::Memory :
|
||||||
);
|
VariableDeclaration::Location::Storage
|
||||||
|
);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
@ -702,7 +711,7 @@ ASTPointer<TypeName> Parser::parseTypeName(bool _allowVar)
|
|||||||
else if (token == Token::Var)
|
else if (token == Token::Var)
|
||||||
{
|
{
|
||||||
if (!_allowVar)
|
if (!_allowVar)
|
||||||
fatalParserError(string("Expected explicit type name."));
|
parserError(string("Expected explicit type name."));
|
||||||
m_scanner->next();
|
m_scanner->next();
|
||||||
}
|
}
|
||||||
else if (token == Token::Function)
|
else if (token == Token::Function)
|
||||||
|
Loading…
Reference in New Issue
Block a user