Add missing arity checks to compiler series

This commit is contained in:
Danila Fedorin 2020-04-14 19:21:33 -07:00
parent 9d16d3840a
commit f97d3f913c
3 changed files with 4 additions and 3 deletions

View File

@ -58,7 +58,7 @@ void definition_defn::generate_llvm(llvm_context& ctx) {
void definition_data::insert_types(type_env_ptr& env) {
this->env = env;
env->bind_type(name, type_ptr(new type_data(name)));
env->bind_type(name, type_ptr(new type_data(name, vars.size())));
}
void definition_data::insert_constructors() const {

View File

@ -9,6 +9,7 @@ type_ptr parsed_type_app::to_type(
if(parent_type == nullptr) throw 0;
type_base* base_type;
if(!(base_type = dynamic_cast<type_base*>(parent_type.get()))) throw 0;
if(base_type->arity != arguments.size()) throw 0;
type_app* new_app = new type_app(std::move(parent_type));
type_ptr to_return(new_app);

View File

@ -53,8 +53,8 @@ struct type_data : public type_base {
std::map<std::string, constructor> constructors;
type_data(std::string n)
: type_base(std::move(n)) {}
type_data(std::string n, int32_t a = 0)
: type_base(std::move(n), a) {}
};
struct type_arr : public type {