Browse Source

Actually use the environment for binop functions.

search
Danila Fedorin 2 years ago
parent
commit
f00a6a7783
  1. 3
      code/compiler/13/ast.cpp
  2. 2
      code/compiler/13/main.cpp

3
code/compiler/13/ast.cpp

@ -135,7 +135,8 @@ void ast_binop::compile(const env_ptr& env, std::vector<instruction_ptr>& into)
right->compile(env, into);
left->compile(env_ptr(new env_offset(1, env)), into);
into.push_back(instruction_ptr(new instruction_pushglobal(op_action(op))));
auto mangled_name = this->env->get_mangled_name(op_name(op));
into.push_back(instruction_ptr(new instruction_pushglobal(mangled_name)));
into.push_back(instruction_ptr(new instruction_mkapp()));
into.push_back(instruction_ptr(new instruction_mkapp()));
}

2
code/compiler/13/main.cpp

@ -43,9 +43,11 @@ void prelude_types(definition_group& defs, type_env_ptr env) {
constexpr binop cmp_ops[] = { EQUALS, LESS_EQUALS };
for(auto& op : number_ops) {
env->bind(op_name(op), binop_type, visibility::global);
env->set_mangled_name(op_name(op), op_action(op));
}
for(auto& op : cmp_ops) {
env->bind(op_name(op), cmp_type, visibility::global);
env->set_mangled_name(op_name(op), op_action(op));
}
env->bind("True", bool_type_app, visibility::global);

Loading…
Cancel
Save