6 #ifndef TYPE_TYPE_CHECKER_HH
7 # define TYPE_TYPE_CHECKER_HH
24 using super_type::operator();
59 void error(
const ast::Ast& loc,
const std::string& msg,
const T& exp);
68 template <
typename T,
typename U>
78 const std::string& exp1,
const Type& type1,
79 const std::string& exp2,
const Type& type2);
109 const std::string& exp1,
const Type& type1,
110 const std::string& exp2,
const Type& type2);
112 const std::string& exp1, ast::Typable& type1,
113 const std::string& exp2, ast::Typable& type2);
125 template <
typename NodeType>
129 template <
typename NodeType>
136 template <
typename NodeType>
160 virtual void operator()(ast::StringExp&)
override;
163 virtual void operator()(ast::RecordExp& e)
override;
200 template <
typename Routine_Type,
typename Routine_Node>
222 virtual void operator()(ast::RecordTy& e)
override;
242 void TypeChecker::visit_dec_header<ast::TypeDec>(
ast::TypeDec& e);
245 void TypeChecker::visit_dec_body<ast::TypeDec>(
ast::TypeDec& e);
250 #endif // !TYPE_TYPE_CHECKER_HH