From c51af38724fb43199e7eb5c61a16079d321ee294 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Sun, 17 Apr 2022 18:05:11 +0200 Subject: [PATCH] f --- libevmasm/Assembly.cpp | 6 ++++-- libsolidity/codegen/CompilerContext.h | 8 +++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/libevmasm/Assembly.cpp b/libevmasm/Assembly.cpp index af3bdd74f..7f84f8617 100644 --- a/libevmasm/Assembly.cpp +++ b/libevmasm/Assembly.cpp @@ -580,6 +580,7 @@ LinkerObject const& Assembly::assemble() const case StaticJumpI: { ret.bytecode.push_back(static_cast((i.type() == StaticJump) ? Instruction::RJUMP : Instruction::RJUMPI)); + cout << "Adding static jump" << i << "\n"; tagRef[ret.bytecode.size()] = i.splitForeignPushTag(); isStaticTagRef.insert(ret.bytecode.size()); ret.bytecode.resize(ret.bytecode.size() + bytesPerStaticTag); // Place 0 as immediate for now @@ -710,10 +711,11 @@ LinkerObject const& Assembly::assemble() const assertThrow(tagId < tagPositions.size(), AssemblyException, "Reference to non-existing tag."); cout << tagId << "\n"; size_t pos = tagPositions[tagId]; - assertThrow(pos != numeric_limits::max(), AssemblyException, "Reference to tag without position."); +// assertThrow(pos != numeric_limits::max(), AssemblyException, "Reference to tag without position."); if (isStaticTagRef.count(i.first)) { pos = pos - (i.first + bytesPerStaticTag); // TODO: calculate relative figure properly - assertThrow(numberEncodingSize(pos) <= bytesPerStaticTag, AssemblyException, "Tag too large for reserved space."); + cout << "Change position of static jump to " << pos << "\n"; +// assertThrow(numberEncodingSize(pos) <= bytesPerStaticTag, AssemblyException, "Tag too large for reserved space."); //pos = static_cast(spos); bytesRef r(ret.bytecode.data() + i.first, bytesPerStaticTag); toBigEndian(pos, r); diff --git a/libsolidity/codegen/CompilerContext.h b/libsolidity/codegen/CompilerContext.h index 76da39813..37c4e9218 100644 --- a/libsolidity/codegen/CompilerContext.h +++ b/libsolidity/codegen/CompilerContext.h @@ -213,9 +213,11 @@ public: 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; + *m_asm << _tag.pushTag(); + return appendJump(_jumpType); +// 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(); }