aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/codegen/ContractCompiler.cpp
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2017-01-27 21:10:22 +0800
committerGitHub <noreply@github.com>2017-01-27 21:10:22 +0800
commitb2c35fb41a65dc996189b890f292103d9318b53e (patch)
treecd2a2fd222994c64d5ad946dfb8210848e2fc5e6 /libsolidity/codegen/ContractCompiler.cpp
parent636e480156130ec44c5b85890ebe0c3792a75061 (diff)
parentbff8fc23e6cc602511b52aaa665e63b948eba068 (diff)
downloaddexon-solidity-b2c35fb41a65dc996189b890f292103d9318b53e.tar
dexon-solidity-b2c35fb41a65dc996189b890f292103d9318b53e.tar.gz
dexon-solidity-b2c35fb41a65dc996189b890f292103d9318b53e.tar.bz2
dexon-solidity-b2c35fb41a65dc996189b890f292103d9318b53e.tar.lz
dexon-solidity-b2c35fb41a65dc996189b890f292103d9318b53e.tar.xz
dexon-solidity-b2c35fb41a65dc996189b890f292103d9318b53e.tar.zst
dexon-solidity-b2c35fb41a65dc996189b890f292103d9318b53e.zip
Merge pull request #1598 from wuestholz/develop
Change translation of implicit throws
Diffstat (limited to 'libsolidity/codegen/ContractCompiler.cpp')
-rw-r--r--libsolidity/codegen/ContractCompiler.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/libsolidity/codegen/ContractCompiler.cpp b/libsolidity/codegen/ContractCompiler.cpp
index 9dc1fb37..4d33927d 100644
--- a/libsolidity/codegen/ContractCompiler.cpp
+++ b/libsolidity/codegen/ContractCompiler.cpp
@@ -106,7 +106,7 @@ void ContractCompiler::appendCallValueCheck()
{
// Throw if function is not payable but call contained ether.
m_context << Instruction::CALLVALUE;
- m_context.appendConditionalJumpTo(m_context.errorTag());
+ m_context.appendConditionalInvalid();
}
void ContractCompiler::appendInitAndConstructorCode(ContractDefinition const& _contract)
@@ -271,7 +271,7 @@ void ContractCompiler::appendFunctionSelector(ContractDefinition const& _contrac
appendReturnValuePacker(FunctionType(*fallback).returnParameterTypes(), _contract.isLibrary());
}
else
- m_context.appendJumpTo(m_context.errorTag());
+ m_context.appendInvalid();
for (auto const& it: interfaceFunctions)
{
@@ -918,7 +918,9 @@ eth::AssemblyPointer ContractCompiler::cloneRuntime()
a << Instruction::DELEGATECALL;
//Propagate error condition (if DELEGATECALL pushes 0 on stack).
a << Instruction::ISZERO;
- a.appendJumpI(a.errorTag());
+ a << Instruction::ISZERO;
+ eth::AssemblyItem afterTag = a.appendJumpI().tag();
+ a << Instruction::INVALID << afterTag;
//@todo adjust for larger return values, make this dynamic.
a << u256(0x20) << u256(0) << Instruction::RETURN;
return make_shared<eth::Assembly>(a);