This commit is contained in:
Alex Beregszaszi 2022-04-17 17:43:00 +02:00
parent 26f5db3b84
commit 2632adf3ca
2 changed files with 7 additions and 3 deletions

View File

@ -580,10 +580,9 @@ LinkerObject const& Assembly::assemble() const
case StaticJumpI:
{
ret.bytecode.push_back(static_cast<uint8_t>((i.type() == StaticJump) ? Instruction::RJUMP : Instruction::RJUMPI));
ret.bytecode.push_back(tagPush);
tagRef[ret.bytecode.size()] = i.splitForeignPushTag();
isStaticTagRef.insert(ret.bytecode.size());
ret.bytecode.resize(ret.bytecode.size() + bytesPerStaticTag);
ret.bytecode.resize(ret.bytecode.size() + bytesPerStaticTag); // Place 0 as immediate for now
break;
}
case PushData:
@ -709,6 +708,7 @@ LinkerObject const& Assembly::assemble() const
m_tagPositionsInBytecode :
m_subs[subId]->m_tagPositionsInBytecode;
assertThrow(tagId < tagPositions.size(), AssemblyException, "Reference to non-existing tag.");
cout << tagId << "\n";
size_t pos = tagPositions[tagId];
assertThrow(pos != numeric_limits<size_t>::max(), AssemblyException, "Reference to tag without position.");
if (isStaticTagRef.count(i.first)) {

View File

@ -212,7 +212,11 @@ public:
CompilerContext& appendJumpTo(
evmasm::AssemblyItem const& _tag,
evmasm::AssemblyItem::JumpType _jumpType = evmasm::AssemblyItem::JumpType::Ordinary
) { evmasm::AssemblyItem item = m_asm->appendStaticJump(_tag); item.setJumpType(_jumpType); return *this << item; }
) {
evmasm::AssemblyItem item = m_asm->appendStaticJump(_tag);
item.setJumpType(_jumpType);
return *this << item;
}
/// Appends pushing of a new tag and @returns the new tag.
evmasm::AssemblyItem pushNewTag() { return m_asm->append(m_asm->newPushTag()).tag(); }
/// @returns a new tag without pushing any opcodes or data