#include "TypeResolver.hpp" namespace roza { /*explicit*/ TypeResolver::TypeResolver(StatusLog& log) : m_log { log } { } /*virtual*/ TypeResolver::~TypeResolver() { } std::shared_ptr TypeResolver::find(std::shared_ptr root) { switch (root->type()) { case NODE_PROG: { return find(root->child(root->size() - 1)); } break; case NODE_INT: { return std::make_shared(BaseType::TY_INT); } break; case NODE_ADD: case NODE_SUB: case NODE_MUL: case NODE_DIV: case NODE_MOD: case NODE_POW: case NODE_UADD: case NODE_USUB:{ return find(root->child(0)); } break; default: m_log.fatal(root->loc(), "cannot find type of node '" + root->string() + "'"); } return nullptr; } }