34 lines
643 B
C++
34 lines
643 B
C++
|
#include "TypeResolver.hpp"
|
||
|
|
||
|
namespace roza
|
||
|
{
|
||
|
/*explicit*/ TypeResolver::TypeResolver(StatusLog& log)
|
||
|
: m_log { log }
|
||
|
{
|
||
|
}
|
||
|
|
||
|
/*virtual*/ TypeResolver::~TypeResolver()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
std::shared_ptr<Type> TypeResolver::find(std::shared_ptr<Node> root)
|
||
|
{
|
||
|
switch (root->type())
|
||
|
{
|
||
|
case NODE_PROG:
|
||
|
case NODE_INSTR: {
|
||
|
return find(root->child(root->size() - 1));
|
||
|
} break;
|
||
|
|
||
|
case NODE_INT: {
|
||
|
return std::make_shared<Type>(BaseType::TY_INT);
|
||
|
} break;
|
||
|
|
||
|
default:
|
||
|
m_log.fatal(root->loc(), "cannot find type of node '" + root->string() + "'");
|
||
|
}
|
||
|
|
||
|
return nullptr;
|
||
|
}
|
||
|
}
|