diff options
author | chriseth <c@ethdev.com> | 2017-03-10 00:03:53 +0800 |
---|---|---|
committer | chriseth <c@ethdev.com> | 2017-03-14 21:21:33 +0800 |
commit | 47cd8964b8617e5c7e93232719224c8334a4c764 (patch) | |
tree | ea29137b7c499b0ddbef1e62bb8a4d401c694224 /libsolidity/codegen/ExpressionCompiler.cpp | |
parent | 9aab3b8639afa6e30e866e052a412b6f39c6ef6c (diff) | |
download | dexon-solidity-47cd8964b8617e5c7e93232719224c8334a4c764.tar.gz dexon-solidity-47cd8964b8617e5c7e93232719224c8334a4c764.tar.zst dexon-solidity-47cd8964b8617e5c7e93232719224c8334a4c764.zip |
Require and Assert.
Diffstat (limited to 'libsolidity/codegen/ExpressionCompiler.cpp')
-rw-r--r-- | libsolidity/codegen/ExpressionCompiler.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/libsolidity/codegen/ExpressionCompiler.cpp b/libsolidity/codegen/ExpressionCompiler.cpp index 5192ffa6..744a80c4 100644 --- a/libsolidity/codegen/ExpressionCompiler.cpp +++ b/libsolidity/codegen/ExpressionCompiler.cpp @@ -879,14 +879,18 @@ bool ExpressionCompiler::visit(FunctionCall const& _functionCall) break; } case Location::Assert: + case Location::Require: { arguments.front()->accept(*this); utils().convertType(*arguments.front()->annotation().type, *function.parameterTypes().front(), false); // jump if condition was met m_context << Instruction::ISZERO << Instruction::ISZERO; auto success = m_context.appendConditionalJump(); - // condition was not met, flag an error - m_context << Instruction::INVALID; + if (function.location() == Location::Assert) + // condition was not met, flag an error + m_context << Instruction::INVALID; + else + m_context << u256(0) << u256(0) << Instruction::REVERT; // the success branch m_context << success; break; |