diff options
author | chriseth <chris@ethereum.org> | 2018-12-04 22:10:47 +0800 |
---|---|---|
committer | chriseth <chris@ethereum.org> | 2018-12-04 22:20:23 +0800 |
commit | 0ec7a0e72cbc2ab2f05005a19ff29651a47c1b45 (patch) | |
tree | 4fb8a9d5f39ee3e15998a9dc711a56088c4cc788 /libyul | |
parent | 8654f8f6d4cb8f609d5b43df217aff1406acbe6a (diff) | |
download | dexon-solidity-0ec7a0e72cbc2ab2f05005a19ff29651a47c1b45.tar.gz dexon-solidity-0ec7a0e72cbc2ab2f05005a19ff29651a47c1b45.tar.zst dexon-solidity-0ec7a0e72cbc2ab2f05005a19ff29651a47c1b45.zip |
Move AsmCodeGen.
Diffstat (limited to 'libyul')
-rw-r--r-- | libyul/AsmCodeGen.cpp | 163 | ||||
-rw-r--r-- | libyul/AsmCodeGen.h | 54 | ||||
-rw-r--r-- | libyul/CMakeLists.txt | 1 |
3 files changed, 0 insertions, 218 deletions
diff --git a/libyul/AsmCodeGen.cpp b/libyul/AsmCodeGen.cpp deleted file mode 100644 index 23bf395d..00000000 --- a/libyul/AsmCodeGen.cpp +++ /dev/null @@ -1,163 +0,0 @@ -/* - This file is part of solidity. - - solidity is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - solidity is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with solidity. If not, see <http://www.gnu.org/licenses/>. -*/ -/** - * @author Christian <c@ethdev.com> - * @date 2016 - * Code-generating part of inline assembly. - */ - -#include <libyul/AsmCodeGen.h> - -#include <libyul/AsmParser.h> -#include <libyul/AsmData.h> -#include <libyul/AsmScope.h> -#include <libyul/AsmAnalysis.h> -#include <libyul/AsmAnalysisInfo.h> - -#include <libyul/backends/evm/AbstractAssembly.h> -#include <libyul/backends/evm/EVMCodeTransform.h> - -#include <libevmasm/Assembly.h> -#include <libevmasm/Instruction.h> - -#include <liblangutil/SourceLocation.h> - -#include <libdevcore/CommonIO.h> - -#include <boost/range/adaptor/reversed.hpp> -#include <boost/range/adaptor/map.hpp> -#include <boost/range/algorithm/count_if.hpp> - -#include <memory> -#include <functional> - -using namespace std; -using namespace dev; -using namespace langutil; -using namespace yul; -using namespace dev::solidity; - -class EthAssemblyAdapter: public AbstractAssembly -{ -public: - explicit EthAssemblyAdapter(eth::Assembly& _assembly): - m_assembly(_assembly) - { - } - virtual void setSourceLocation(SourceLocation const& _location) override - { - m_assembly.setSourceLocation(_location); - } - virtual int stackHeight() const override { return m_assembly.deposit(); } - virtual void appendInstruction(solidity::Instruction _instruction) override - { - m_assembly.append(_instruction); - } - virtual void appendConstant(u256 const& _constant) override - { - m_assembly.append(_constant); - } - /// Append a label. - virtual void appendLabel(LabelID _labelId) override - { - m_assembly.append(eth::AssemblyItem(eth::Tag, _labelId)); - } - /// Append a label reference. - virtual void appendLabelReference(LabelID _labelId) override - { - m_assembly.append(eth::AssemblyItem(eth::PushTag, _labelId)); - } - virtual size_t newLabelId() override - { - return assemblyTagToIdentifier(m_assembly.newTag()); - } - virtual size_t namedLabel(std::string const& _name) override - { - return assemblyTagToIdentifier(m_assembly.namedTag(_name)); - } - virtual void appendLinkerSymbol(std::string const& _linkerSymbol) override - { - m_assembly.appendLibraryAddress(_linkerSymbol); - } - virtual void appendJump(int _stackDiffAfter) override - { - appendInstruction(solidity::Instruction::JUMP); - m_assembly.adjustDeposit(_stackDiffAfter); - } - virtual void appendJumpTo(LabelID _labelId, int _stackDiffAfter) override - { - appendLabelReference(_labelId); - appendJump(_stackDiffAfter); - } - virtual void appendJumpToIf(LabelID _labelId) override - { - appendLabelReference(_labelId); - appendInstruction(solidity::Instruction::JUMPI); - } - virtual void appendBeginsub(LabelID, int) override - { - // TODO we could emulate that, though - solAssert(false, "BEGINSUB not implemented for EVM 1.0"); - } - /// Call a subroutine. - virtual void appendJumpsub(LabelID, int, int) override - { - // TODO we could emulate that, though - solAssert(false, "JUMPSUB not implemented for EVM 1.0"); - } - - /// Return from a subroutine. - virtual void appendReturnsub(int, int) override - { - // TODO we could emulate that, though - solAssert(false, "RETURNSUB not implemented for EVM 1.0"); - } - - virtual void appendAssemblySize() override - { - m_assembly.appendProgramSize(); - } - -private: - static LabelID assemblyTagToIdentifier(eth::AssemblyItem const& _tag) - { - u256 id = _tag.data(); - solAssert(id <= std::numeric_limits<LabelID>::max(), "Tag id too large."); - return LabelID(id); - } - - eth::Assembly& m_assembly; -}; - -void CodeGenerator::assemble( - Block const& _parsedData, - AsmAnalysisInfo& _analysisInfo, - eth::Assembly& _assembly, - ExternalIdentifierAccess const& _identifierAccess, - bool _useNamedLabelsForFunctions -) -{ - EthAssemblyAdapter assemblyAdapter(_assembly); - CodeTransform( - assemblyAdapter, - _analysisInfo, - false, - false, - _identifierAccess, - _useNamedLabelsForFunctions - )(_parsedData); -} diff --git a/libyul/AsmCodeGen.h b/libyul/AsmCodeGen.h deleted file mode 100644 index fd5ac0a1..00000000 --- a/libyul/AsmCodeGen.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - This file is part of solidity. - - solidity is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - solidity is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with solidity. If not, see <http://www.gnu.org/licenses/>. -*/ -/** - * @author Christian <c@ethdev.com> - * @date 2016 - * Code-generating part of inline assembly. - */ - -#pragma once - -#include <libyul/AsmAnalysis.h> - -#include <functional> - -namespace dev -{ -namespace eth -{ -class Assembly; -} -} - -namespace yul -{ -struct Block; - -class CodeGenerator -{ -public: - /// Performs code generation and appends generated to _assembly. - static void assemble( - Block const& _parsedData, - AsmAnalysisInfo& _analysisInfo, - dev::eth::Assembly& _assembly, - yul::ExternalIdentifierAccess const& _identifierAccess = yul::ExternalIdentifierAccess(), - bool _useNamedLabelsForFunctions = false - ); -}; - -} diff --git a/libyul/CMakeLists.txt b/libyul/CMakeLists.txt index 7ed84ff5..2dec0a44 100644 --- a/libyul/CMakeLists.txt +++ b/libyul/CMakeLists.txt @@ -1,7 +1,6 @@ add_library(yul AsmAnalysis.cpp AsmAnalysisInfo.cpp - AsmCodeGen.cpp AsmParser.cpp AsmPrinter.cpp AsmScope.cpp |