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:
@@ -1384,18 +1384,24 @@ public:
|
||||
int64_t _id,
|
||||
SourceLocation const& _location,
|
||||
ASTPointer<ASTString> const& _docString,
|
||||
bool _unchecked,
|
||||
std::vector<ASTPointer<Statement>> _statements
|
||||
):
|
||||
Statement(_id, _location, _docString), m_statements(std::move(_statements)) {}
|
||||
Statement(_id, _location, _docString),
|
||||
m_statements(std::move(_statements)),
|
||||
m_unchecked(_unchecked)
|
||||
{}
|
||||
void accept(ASTVisitor& _visitor) override;
|
||||
void accept(ASTConstVisitor& _visitor) const override;
|
||||
|
||||
std::vector<ASTPointer<Statement>> const& statements() const { return m_statements; }
|
||||
bool unchecked() const { return m_unchecked; }
|
||||
|
||||
BlockAnnotation& annotation() const override;
|
||||
|
||||
private:
|
||||
std::vector<ASTPointer<Statement>> m_statements;
|
||||
bool m_unchecked;
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -39,6 +39,8 @@ enum class StateMutability { Pure, View, NonPayable, Payable };
|
||||
/// Visibility ordered from restricted to unrestricted.
|
||||
enum class Visibility { Default, Private, Internal, Public, External };
|
||||
|
||||
enum class Arithmetic { Checked, Wrapping };
|
||||
|
||||
inline std::string stateMutabilityToString(StateMutability const& _stateMutability)
|
||||
{
|
||||
switch (_stateMutability)
|
||||
|
||||
@@ -596,7 +596,7 @@ bool ASTJsonConverter::visit(InlineAssembly const& _node)
|
||||
|
||||
bool ASTJsonConverter::visit(Block const& _node)
|
||||
{
|
||||
setJsonNode(_node, "Block", {
|
||||
setJsonNode(_node, _node.unchecked() ? "UncheckedBlock" : "Block", {
|
||||
make_pair("statements", toJson(_node.statements()))
|
||||
});
|
||||
return false;
|
||||
|
||||
@@ -154,7 +154,9 @@ ASTPointer<ASTNode> ASTJsonImporter::convertJsonToASTNode(Json::Value const& _js
|
||||
if (nodeType == "InlineAssembly")
|
||||
return createInlineAssembly(_json);
|
||||
if (nodeType == "Block")
|
||||
return createBlock(_json);
|
||||
return createBlock(_json, false);
|
||||
if (nodeType == "UncheckedBlock")
|
||||
return createBlock(_json, true);
|
||||
if (nodeType == "PlaceholderStatement")
|
||||
return createPlaceholderStatement(_json);
|
||||
if (nodeType == "IfStatement")
|
||||
@@ -439,7 +441,7 @@ ASTPointer<FunctionDefinition> ASTJsonImporter::createFunctionDefinition(Json::V
|
||||
createParameterList(member(_node, "parameters")),
|
||||
modifiers,
|
||||
createParameterList(member(_node, "returnParameters")),
|
||||
memberAsBool(_node, "implemented") ? createBlock(member(_node, "body")) : nullptr
|
||||
memberAsBool(_node, "implemented") ? createBlock(member(_node, "body"), false) : nullptr
|
||||
);
|
||||
}
|
||||
|
||||
@@ -489,7 +491,7 @@ ASTPointer<ModifierDefinition> ASTJsonImporter::createModifierDefinition(Json::V
|
||||
createParameterList(member(_node, "parameters")),
|
||||
memberAsBool(_node, "virtual"),
|
||||
_node["overrides"].isNull() ? nullptr : createOverrideSpecifier(member(_node, "overrides")),
|
||||
_node["body"].isNull() ? nullptr: createBlock(member(_node, "body"))
|
||||
_node["body"].isNull() ? nullptr: createBlock(member(_node, "body"), false)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -589,7 +591,7 @@ ASTPointer<InlineAssembly> ASTJsonImporter::createInlineAssembly(Json::Value con
|
||||
);
|
||||
}
|
||||
|
||||
ASTPointer<Block> ASTJsonImporter::createBlock(Json::Value const& _node)
|
||||
ASTPointer<Block> ASTJsonImporter::createBlock(Json::Value const& _node, bool _unchecked)
|
||||
{
|
||||
std::vector<ASTPointer<Statement>> statements;
|
||||
for (auto& stat: member(_node, "statements"))
|
||||
@@ -597,6 +599,7 @@ ASTPointer<Block> ASTJsonImporter::createBlock(Json::Value const& _node)
|
||||
return createASTNode<Block>(
|
||||
_node,
|
||||
nullOrASTString(_node, "documentation"),
|
||||
_unchecked,
|
||||
statements
|
||||
);
|
||||
}
|
||||
|
||||
@@ -93,7 +93,7 @@ private:
|
||||
ASTPointer<Mapping> createMapping(Json::Value const& _node);
|
||||
ASTPointer<ArrayTypeName> createArrayTypeName(Json::Value const& _node);
|
||||
ASTPointer<InlineAssembly> createInlineAssembly(Json::Value const& _node);
|
||||
ASTPointer<Block> createBlock(Json::Value const& _node);
|
||||
ASTPointer<Block> createBlock(Json::Value const& _node, bool _unchecked);
|
||||
ASTPointer<PlaceholderStatement> createPlaceholderStatement(Json::Value const& _node);
|
||||
ASTPointer<IfStatement> createIfStatement(Json::Value const& _node);
|
||||
ASTPointer<TryCatchClause> createTryCatchClause(Json::Value const& _node);
|
||||
|
||||
Reference in New Issue
Block a user