aboutsummaryrefslogtreecommitdiffstats
path: root/CompilerUtilities.cpp
diff options
context:
space:
mode:
authorChristian <c@ethdev.com>2014-10-30 08:20:32 +0800
committerChristian <c@ethdev.com>2014-10-30 08:25:42 +0800
commit7f19f3d133b74bd7ebc96d18b09e145417b7daac (patch)
treea344a8faf9675882eb42f4f83e57f3a825844dcf /CompilerUtilities.cpp
parent51349bdae53e7d495732085c446ff9488473dcc8 (diff)
downloaddexon-solidity-7f19f3d133b74bd7ebc96d18b09e145417b7daac.tar
dexon-solidity-7f19f3d133b74bd7ebc96d18b09e145417b7daac.tar.gz
dexon-solidity-7f19f3d133b74bd7ebc96d18b09e145417b7daac.tar.bz2
dexon-solidity-7f19f3d133b74bd7ebc96d18b09e145417b7daac.tar.lz
dexon-solidity-7f19f3d133b74bd7ebc96d18b09e145417b7daac.tar.xz
dexon-solidity-7f19f3d133b74bd7ebc96d18b09e145417b7daac.tar.zst
dexon-solidity-7f19f3d133b74bd7ebc96d18b09e145417b7daac.zip
Contract compiler and also add ExpressionStatement to AST.
ExpressionStatement functions as glue between Statements and Expressions. This way it is possible to detect when the border between statements and expressions is crossed while walking the AST. Note that ExpressionStatement is not the only border, almost every statement can contains expressions.
Diffstat (limited to 'CompilerUtilities.cpp')
-rw-r--r--CompilerUtilities.cpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/CompilerUtilities.cpp b/CompilerUtilities.cpp
new file mode 100644
index 00000000..b8f57618
--- /dev/null
+++ b/CompilerUtilities.cpp
@@ -0,0 +1,60 @@
+/*
+ This file is part of cpp-ethereum.
+
+ cpp-ethereum 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.
+
+ cpp-ethereum 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 cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
+*/
+/**
+ * @author Christian <c@ethdev.com>
+ * @date 2014
+ * Utilities for the solidity compiler.
+ */
+
+#include <cassert>
+#include <utility>
+#include <numeric>
+#include <libsolidity/AST.h>
+#include <libsolidity/Compiler.h>
+
+using namespace std;
+
+namespace dev {
+namespace solidity {
+
+void CompilerContext::initializeLocalVariables(unsigned _numVariables)
+{
+ if (_numVariables > 0)
+ {
+ *this << u256(0);
+ for (unsigned i = 1; i < _numVariables; ++i)
+ *this << eth::Instruction::DUP1;
+ m_asm.adjustDeposit(-_numVariables);
+ }
+}
+
+int CompilerContext::getStackPositionOfVariable(const Declaration& _declaration)
+{
+ auto res = find(begin(m_localVariables), end(m_localVariables), &_declaration);
+ assert(res != m_localVariables.end());
+ return end(m_localVariables) - res - 1 + m_asm.deposit();
+}
+
+eth::AssemblyItem CompilerContext::getFunctionEntryLabel(const FunctionDefinition& _function) const
+{
+ auto res = m_functionEntryLabels.find(&_function);
+ assert(res != m_functionEntryLabels.end());
+ return res->second.tag();
+}
+
+}
+}