Use hoisting.

This commit is contained in:
chriseth 2017-12-07 15:43:09 +01:00
parent e681f4ee79
commit 79c415b104
2 changed files with 6 additions and 4 deletions

View File

@ -35,7 +35,6 @@ void NameCollector::operator()(VariableDeclaration const& _varDecl)
void NameCollector::operator ()(FunctionDefinition const& _funDef) void NameCollector::operator ()(FunctionDefinition const& _funDef)
{ {
m_names.insert(_funDef.name); m_names.insert(_funDef.name);
m_functions[_funDef.name] = &_funDef;
for (auto const arg: _funDef.parameters) for (auto const arg: _funDef.parameters)
m_names.insert(arg.name); m_names.insert(arg.name);
for (auto const ret: _funDef.returnVariables) for (auto const ret: _funDef.returnVariables)

View File

@ -37,15 +37,18 @@ namespace julia
class NameCollector: public ASTWalker class NameCollector: public ASTWalker
{ {
public: public:
explicit NameCollector(Block const& _block)
{
(*this)(_block);
}
using ASTWalker::operator (); using ASTWalker::operator ();
virtual void operator()(VariableDeclaration const& _varDecl) override; virtual void operator()(VariableDeclaration const& _varDecl) override;
virtual void operator()(FunctionDefinition const& _funDef) override; virtual void operator()(FunctionDefinition const& _funDef) override;
std::set<std::string> const& names() const { return m_names; } std::set<std::string> names() const { return m_names; }
std::map<std::string, FunctionDefinition const*> const& functions() const { return m_functions; }
private: private:
std::set<std::string> m_names; std::set<std::string> m_names;
std::map<std::string, FunctionDefinition const*> m_functions;
}; };
/** /**