bool Compiler::visit(Return const& _return) { CompilerContext::LocationSetter locationSetter(m_context, _return); //@todo modifications are needed to make this work with functions returning multiple values if (Expression const* expression = _return.getExpression()) { solAssert(_return.getFunctionReturnParameters(), "Invalid return parameters pointer."); VariableDeclaration const& firstVariable = *_return.getFunctionReturnParameters()->getParameters().front(); compileExpression(*expression, firstVariable.getType()); CompilerUtils(m_context).moveToStackVariable(firstVariable); } for (unsigned i = 0; i < m_stackCleanupForReturn; ++i) m_context << eth::Instruction::POP; m_context.appendJumpTo(m_returnTag); m_context.adjustStackOffset(m_stackCleanupForReturn); return false; }