Add missing arity checks to compiler series
This commit is contained in:
parent
9d16d3840a
commit
f97d3f913c
|
@ -58,7 +58,7 @@ void definition_defn::generate_llvm(llvm_context& ctx) {
|
||||||
|
|
||||||
void definition_data::insert_types(type_env_ptr& env) {
|
void definition_data::insert_types(type_env_ptr& env) {
|
||||||
this->env = 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 {
|
void definition_data::insert_constructors() const {
|
||||||
|
|
|
@ -9,6 +9,7 @@ type_ptr parsed_type_app::to_type(
|
||||||
if(parent_type == nullptr) throw 0;
|
if(parent_type == nullptr) throw 0;
|
||||||
type_base* base_type;
|
type_base* base_type;
|
||||||
if(!(base_type = dynamic_cast<type_base*>(parent_type.get()))) throw 0;
|
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_app* new_app = new type_app(std::move(parent_type));
|
||||||
type_ptr to_return(new_app);
|
type_ptr to_return(new_app);
|
||||||
|
|
|
@ -53,8 +53,8 @@ struct type_data : public type_base {
|
||||||
|
|
||||||
std::map<std::string, constructor> constructors;
|
std::map<std::string, constructor> constructors;
|
||||||
|
|
||||||
type_data(std::string n)
|
type_data(std::string n, int32_t a = 0)
|
||||||
: type_base(std::move(n)) {}
|
: type_base(std::move(n), a) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct type_arr : public type {
|
struct type_arr : public type {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user