|
|
|
@ -7,6 +7,7 @@ |
|
|
|
|
#include "llvm_context.hpp" |
|
|
|
|
#include "parsed_type.hpp" |
|
|
|
|
#include "type_env.hpp" |
|
|
|
|
#include "location.hh" |
|
|
|
|
#include "global_scope.hpp" |
|
|
|
|
|
|
|
|
|
struct ast; |
|
|
|
@ -27,6 +28,7 @@ struct definition_defn { |
|
|
|
|
std::string name; |
|
|
|
|
std::vector<std::string> params; |
|
|
|
|
ast_ptr body; |
|
|
|
|
yy::location loc; |
|
|
|
|
|
|
|
|
|
type_env_ptr env; |
|
|
|
|
type_env_ptr var_env; |
|
|
|
@ -35,8 +37,12 @@ struct definition_defn { |
|
|
|
|
type_ptr full_type; |
|
|
|
|
type_ptr return_type; |
|
|
|
|
|
|
|
|
|
definition_defn(std::string n, std::vector<std::string> p, ast_ptr b) |
|
|
|
|
: name(std::move(n)), params(std::move(p)), body(std::move(b)) { |
|
|
|
|
definition_defn( |
|
|
|
|
std::string n, |
|
|
|
|
std::vector<std::string> p, |
|
|
|
|
ast_ptr b, |
|
|
|
|
yy::location l = yy::location()) |
|
|
|
|
: name(std::move(n)), params(std::move(p)), body(std::move(b)), loc(std::move(l)) { |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -53,14 +59,16 @@ struct definition_data { |
|
|
|
|
std::string name; |
|
|
|
|
std::vector<std::string> vars; |
|
|
|
|
std::vector<constructor_ptr> constructors; |
|
|
|
|
yy::location loc; |
|
|
|
|
|
|
|
|
|
type_env_ptr env; |
|
|
|
|
|
|
|
|
|
definition_data( |
|
|
|
|
std::string n, |
|
|
|
|
std::vector<std::string> vs, |
|
|
|
|
std::vector<constructor_ptr> cs) |
|
|
|
|
: name(std::move(n)), vars(std::move(vs)), constructors(std::move(cs)) {} |
|
|
|
|
std::vector<constructor_ptr> cs, |
|
|
|
|
yy::location l = yy::location()) |
|
|
|
|
: name(std::move(n)), vars(std::move(vs)), constructors(std::move(cs)), loc(std::move(l)) {} |
|
|
|
|
|
|
|
|
|
void insert_types(type_env_ptr& env); |
|
|
|
|
void insert_constructors() const; |
|
|
|
|