diff --git a/CompilerContext.h b/CompilerContext.h index dbf3dcd4f..573e0b576 100644 --- a/CompilerContext.h +++ b/CompilerContext.h @@ -98,7 +98,7 @@ public: eth::AssemblyItem appendJumpToNew() { return m_asm.appendJump().tag(); } /// Appends a JUMP to a tag already on the stack CompilerContext& appendJump(eth::AssemblyItem::JumpType _jumpType = eth::AssemblyItem::JumpType::Ordinary); - /// Appends a JUMP to an "ErrorTag" + /// Returns an "ErrorTag" eth::AssemblyItem errorTag() { return m_asm.errorTag(); } /// Appends a JUMP to a specific tag CompilerContext& appendJumpTo(eth::AssemblyItem const& _tag) { m_asm.appendJump(_tag); return *this; } diff --git a/ExpressionCompiler.cpp b/ExpressionCompiler.cpp index 063af7ce6..c8aece85a 100644 --- a/ExpressionCompiler.cpp +++ b/ExpressionCompiler.cpp @@ -1104,8 +1104,9 @@ void ExpressionCompiler::appendExternalFunctionCall( else m_context << eth::Instruction::CALL; + //Propagate error condition (if CALL pushes 0 on stack). m_context << eth::Instruction::ISZERO; - auto tag = m_context.appendConditionalJumpTo(m_context.errorTag());// if CALL leaves 0. + auto tag = m_context.appendConditionalJumpTo(m_context.errorTag()); if (_functionType.valueSet()) m_context << eth::Instruction::POP;