roza/lib/StaticPass.hpp

38 lines
880 B
C++

#ifndef roza_STATICPASS_HPP
#define roza_STATICPASS_HPP
#include "commons.hpp"
#include "StatusLog.hpp"
#include "Node.hpp"
#include "Type.hpp"
#include "SymTable.hpp"
namespace roza
{
class StaticPass
{
public:
explicit StaticPass(StatusLog& log);
explicit StaticPass(StatusLog& log, SymTable const& sym_table);
virtual ~StaticPass();
void check(std::shared_ptr<Node> root);
void check_children(std::shared_ptr<Node> root);
private:
StatusLog& m_log;
SymTable m_sym;
std::shared_ptr<Node> m_outer_fun_ret;
void check_types(std::shared_ptr<Node> root,
std::shared_ptr<Type> lhs,
std::shared_ptr<Type> rhs);
void check_types(std::shared_ptr<Node> root,
std::shared_ptr<Type> lhs,
std::vector<std::shared_ptr<Type>> const& rhs);
};
}
#endif