From 261731f7eea48902983c55163d377e26bbca07da Mon Sep 17 00:00:00 2001 From: chriseth Date: Tue, 23 May 2017 19:21:14 +0200 Subject: Adapt EVM codegen to new namespace. --- libsolidity/interface/AssemblyStack.h | 83 +++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 libsolidity/interface/AssemblyStack.h (limited to 'libsolidity/interface/AssemblyStack.h') diff --git a/libsolidity/interface/AssemblyStack.h b/libsolidity/interface/AssemblyStack.h new file mode 100644 index 00000000..4aba4846 --- /dev/null +++ b/libsolidity/interface/AssemblyStack.h @@ -0,0 +1,83 @@ +/* + 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 . +*/ +/** + * Full assembly stack that can support EVM-assembly and JULIA as input and EVM, EVM1.5 and + * eWasm as output. + */ + +#pragma once + +#include +#include +#include + +#include +#include + +namespace dev +{ +namespace solidity +{ +class Scanner; +namespace assembly +{ +struct AsmAnalysisInfo; +struct Block; +} + +/* + * Full assembly stack that can support EVM-assembly and JULIA as input and EVM, EVM1.5 and + * eWasm as output. + */ +class AssemblyStack +{ +public: + enum class Language { JULIA, Assembly }; + enum class Machine { EVM, EVM15, eWasm }; + + explicit AssemblyStack(Language _language = Language::Assembly): + m_language(_language) + {} + + /// @returns the scanner used during parsing + Scanner const& scanner() const; + + /// Runs parsing and analysis steps, returns false if input cannot be assembled. + bool parseAndAnalyze(std::string const& _sourceName, std::string const& _source); + + /// Run the assembly step (should only be called after parseAndAnalyze). + eth::LinkerObject assemble(Machine _machine); + + ErrorList const& errors() const { return m_errors; } + + /// Pretty-print the input after having parsed it. + std::string print(); + +private: + + Language m_language = Language::Assembly; + + std::shared_ptr m_scanner; + + bool m_analysisSuccessful = false; + std::shared_ptr m_parserResult; + std::shared_ptr m_analysisInfo; + ErrorList m_errors; +}; + +} +} -- cgit v1.2.3 From fe32531a16322c9528c34cfbd32924b4c24a1f13 Mon Sep 17 00:00:00 2001 From: chriseth Date: Fri, 26 May 2017 14:59:41 +0200 Subject: More comments for assembly --- libsolidity/interface/AssemblyStack.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'libsolidity/interface/AssemblyStack.h') diff --git a/libsolidity/interface/AssemblyStack.h b/libsolidity/interface/AssemblyStack.h index 4aba4846..40662ac3 100644 --- a/libsolidity/interface/AssemblyStack.h +++ b/libsolidity/interface/AssemblyStack.h @@ -57,11 +57,13 @@ public: Scanner const& scanner() const; /// Runs parsing and analysis steps, returns false if input cannot be assembled. + /// Multiple calls overwrite the previous state. bool parseAndAnalyze(std::string const& _sourceName, std::string const& _source); /// Run the assembly step (should only be called after parseAndAnalyze). eth::LinkerObject assemble(Machine _machine); + /// @returns the errors generated during parsing, analysis (and potentially assembly). ErrorList const& errors() const { return m_errors; } /// Pretty-print the input after having parsed it. -- cgit v1.2.3