| 50 | } |
| 51 | |
| 52 | void EVMAssemblyStack::assemble() |
| 53 | { |
| 54 | solAssert(m_evmAssembly); |
| 55 | solAssert(m_evmAssembly->isCreation()); |
| 56 | solAssert(!m_evmRuntimeAssembly); |
| 57 | |
| 58 | m_evmAssembly->optimise(m_optimiserSettings); |
| 59 | m_object = m_evmAssembly->assemble(); |
| 60 | // TODO: Check for EOF |
| 61 | solAssert(m_evmAssembly->codeSections().size() == 1); |
| 62 | m_sourceMapping = AssemblyItem::computeSourceMapping(m_evmAssembly->codeSections().front().items, sourceIndices()); |
| 63 | if (m_evmAssembly->numSubs() > 0) |
| 64 | { |
| 65 | m_evmRuntimeAssembly = std::make_shared<evmasm::Assembly>(m_evmAssembly->sub(SubAssemblyID{0})); |
| 66 | solAssert(m_evmRuntimeAssembly && !m_evmRuntimeAssembly->isCreation()); |
| 67 | // TODO: Check for EOF |
| 68 | solAssert(m_evmRuntimeAssembly->codeSections().size() == 1); |
| 69 | m_runtimeSourceMapping = AssemblyItem::computeSourceMapping(m_evmRuntimeAssembly->codeSections().front().items, sourceIndices()); |
| 70 | m_runtimeObject = m_evmRuntimeAssembly->assemble(); |
| 71 | } |
| 72 | } |
| 73 | |
| 74 | LinkerObject const& EVMAssemblyStack::object(std::string const& _contractName) const |
| 75 | { |
no test coverage detected