mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Checked arithmetic by default.
This commit is contained in:
@@ -1096,16 +1096,23 @@ ASTPointer<ParameterList> Parser::parseParameterList(
|
||||
return nodeFactory.createNode<ParameterList>(parameters);
|
||||
}
|
||||
|
||||
ASTPointer<Block> Parser::parseBlock(ASTPointer<ASTString> const& _docString)
|
||||
ASTPointer<Block> Parser::parseBlock(bool _allowUnchecked, ASTPointer<ASTString> const& _docString)
|
||||
{
|
||||
RecursionGuard recursionGuard(*this);
|
||||
ASTNodeFactory nodeFactory(*this);
|
||||
bool const unchecked = m_scanner->currentToken() == Token::Unchecked;
|
||||
if (unchecked)
|
||||
{
|
||||
if (!_allowUnchecked)
|
||||
parserError(5296_error, "\"unchecked\" blocks can only be used inside regular blocks.");
|
||||
m_scanner->next();
|
||||
}
|
||||
expectToken(Token::LBrace);
|
||||
vector<ASTPointer<Statement>> statements;
|
||||
try
|
||||
{
|
||||
while (m_scanner->currentToken() != Token::RBrace)
|
||||
statements.push_back(parseStatement());
|
||||
statements.push_back(parseStatement(true));
|
||||
nodeFactory.markEndPosition();
|
||||
}
|
||||
catch (FatalError const&)
|
||||
@@ -1122,10 +1129,10 @@ ASTPointer<Block> Parser::parseBlock(ASTPointer<ASTString> const& _docString)
|
||||
expectTokenOrConsumeUntil(Token::RBrace, "Block");
|
||||
else
|
||||
expectToken(Token::RBrace);
|
||||
return nodeFactory.createNode<Block>(_docString, statements);
|
||||
return nodeFactory.createNode<Block>(_docString, unchecked, statements);
|
||||
}
|
||||
|
||||
ASTPointer<Statement> Parser::parseStatement()
|
||||
ASTPointer<Statement> Parser::parseStatement(bool _allowUnchecked)
|
||||
{
|
||||
RecursionGuard recursionGuard(*this);
|
||||
ASTPointer<ASTString> docString;
|
||||
@@ -1144,9 +1151,9 @@ ASTPointer<Statement> Parser::parseStatement()
|
||||
return parseDoWhileStatement(docString);
|
||||
case Token::For:
|
||||
return parseForStatement(docString);
|
||||
case Token::Unchecked:
|
||||
case Token::LBrace:
|
||||
return parseBlock(docString);
|
||||
// starting from here, all statements must be terminated by a semicolon
|
||||
return parseBlock(_allowUnchecked, docString);
|
||||
case Token::Continue:
|
||||
statement = ASTNodeFactory(*this).createNode<Continue>(docString);
|
||||
m_scanner->next();
|
||||
|
||||
Reference in New Issue
Block a user