Fix definition to resolve its own types

This commit is contained in:
2019-10-09 22:51:19 -07:00
parent c730e6a6f8
commit e9cd4a915b
2 changed files with 14 additions and 5 deletions

View File

@@ -1,4 +1,5 @@
#include "ast.hpp"
#include "error.hpp"
void definition_defn::typecheck_first(type_mgr& mgr, type_env& env) {
return_type = mgr.new_type();
@@ -28,8 +29,16 @@ void definition_defn::typecheck_second(type_mgr& mgr, const type_env& env) const
mgr.unify(return_type, body_type);
}
void definition_defn::resolve(const type_mgr& mgr) const {
void definition_defn::resolve(const type_mgr& mgr) {
type_var* var;
body->resolve_common(mgr);
return_type = mgr.resolve(return_type, var);
if(var) throw type_error("ambiguously typed program");
for(auto& param_type : param_types) {
param_type = mgr.resolve(param_type, var);
if(var) throw type_error("ambiguously typed program");
}
}
void definition_data::typecheck_first(type_mgr& mgr, type_env& env) {
@@ -54,7 +63,7 @@ void definition_data::typecheck_second(type_mgr& mgr, const type_env& env) const
// Nothing
}
void definition_data::resolve(const type_mgr& mgr) const {
void definition_data::resolve(const type_mgr& mgr) {
// Nothing
}