Helper to count the number of variables in a scope.

This commit is contained in:
chriseth
2017-06-16 10:56:21 +01:00
committed by Alex Beregszaszi
parent 8e5c4bf21d
commit 78b49db779
4 changed files with 14 additions and 6 deletions
+1 -3
View File
@@ -349,9 +349,7 @@ bool AsmAnalyzer::operator()(Block const& _block)
if (!boost::apply_visitor(*this, s))
success = false;
for (auto const& identifier: scope(&_block).identifiers)
if (identifier.second.type() == typeid(Scope::Variable))
--m_stackHeight;
m_stackHeight -= scope(&_block).numberOfVariables();
int const stackDiff = m_stackHeight - initialStackHeight;
if (stackDiff != 0)
+9
View File
@@ -80,6 +80,15 @@ bool Scope::exists(string const& _name)
return false;
}
size_t Scope::numberOfVariables() const
{
size_t count = 0;
for (auto const& identifier: identifiers)
if (identifier.second.type() == typeid(Scope::Variable))
count++;
return count;
}
bool Scope::insideFunction() const
{
for (Scope const* s = this; s; s = s->superScope)
+2
View File
@@ -109,6 +109,8 @@ struct Scope
/// across function and assembly boundaries).
bool exists(std::string const& _name);
/// @returns the number of variables directly registered inside the scope.
size_t numberOfVariables() const;
/// @returns true if this scope is inside a function.
bool insideFunction() const;