aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/codegen/CompilerContext.cpp
diff options
context:
space:
mode:
authorLeonardo Alt <leo@ethereum.org>2018-07-11 00:39:26 +0800
committerLeonardo Alt <leo@ethereum.org>2018-07-11 00:39:38 +0800
commit0c5e0e0d59dc55fcfe5b95a8c649a7a769ad3400 (patch)
treee6181dba547a13c0455ca67eac853daaa3971e71 /libsolidity/codegen/CompilerContext.cpp
parentb750ca9741aba47cc8ba650a04dd620725ed4610 (diff)
downloaddexon-solidity-0c5e0e0d59dc55fcfe5b95a8c649a7a769ad3400.tar
dexon-solidity-0c5e0e0d59dc55fcfe5b95a8c649a7a769ad3400.tar.gz
dexon-solidity-0c5e0e0d59dc55fcfe5b95a8c649a7a769ad3400.tar.bz2
dexon-solidity-0c5e0e0d59dc55fcfe5b95a8c649a7a769ad3400.tar.lz
dexon-solidity-0c5e0e0d59dc55fcfe5b95a8c649a7a769ad3400.tar.xz
dexon-solidity-0c5e0e0d59dc55fcfe5b95a8c649a7a769ad3400.tar.zst
dexon-solidity-0c5e0e0d59dc55fcfe5b95a8c649a7a769ad3400.zip
Added assertion and tests suggestions
Diffstat (limited to 'libsolidity/codegen/CompilerContext.cpp')
-rw-r--r--libsolidity/codegen/CompilerContext.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/libsolidity/codegen/CompilerContext.cpp b/libsolidity/codegen/CompilerContext.cpp
index 51f76399..3b1b4ec0 100644
--- a/libsolidity/codegen/CompilerContext.cpp
+++ b/libsolidity/codegen/CompilerContext.cpp
@@ -128,6 +128,8 @@ void CompilerContext::addVariable(VariableDeclaration const& _declaration,
{
solAssert(m_asm->deposit() >= 0 && unsigned(m_asm->deposit()) >= _offsetToCurrent, "");
unsigned sizeOnStack = _declaration.annotation().type->sizeOnStack();
+ // Variables should not have stack size other than [1, 2],
+ // but that might change when new types are introduced.
solAssert(sizeOnStack == 1 || sizeOnStack == 2, "");
m_localVariables[&_declaration].push_back(unsigned(m_asm->deposit()) - _offsetToCurrent);
}
@@ -146,6 +148,7 @@ void CompilerContext::removeVariablesAboveStackHeight(unsigned _stackHeight)
for (auto _var: m_localVariables)
{
solAssert(!_var.second.empty(), "");
+ solAssert(_var.second.back() <= stackHeight(), "");
if (_var.second.back() >= _stackHeight)
toRemove.push_back(_var.first);
}
@@ -153,6 +156,11 @@ void CompilerContext::removeVariablesAboveStackHeight(unsigned _stackHeight)
removeVariable(*_var);
}
+unsigned CompilerContext::numberOfLocalVariables() const
+{
+ return m_localVariables.size();
+}
+
eth::Assembly const& CompilerContext::compiledContract(const ContractDefinition& _contract) const
{
auto ret = m_compiledContracts.find(&_contract);