diff options
author | Leonardo Alt <leo@ethereum.org> | 2018-07-11 00:39:26 +0800 |
---|---|---|
committer | Leonardo Alt <leo@ethereum.org> | 2018-07-11 00:39:38 +0800 |
commit | 0c5e0e0d59dc55fcfe5b95a8c649a7a769ad3400 (patch) | |
tree | e6181dba547a13c0455ca67eac853daaa3971e71 /libsolidity/codegen/CompilerContext.cpp | |
parent | b750ca9741aba47cc8ba650a04dd620725ed4610 (diff) | |
download | dexon-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.cpp | 8 |
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); |