From f00a6a7783475791ee8ceb066d8d88bcaefb9c2d Mon Sep 17 00:00:00 2001 From: Danila Fedorin Date: Thu, 10 Sep 2020 16:03:56 -0700 Subject: [PATCH] Actually use the environment for binop functions. --- code/compiler/13/ast.cpp | 3 ++- code/compiler/13/main.cpp | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/code/compiler/13/ast.cpp b/code/compiler/13/ast.cpp index efa84a4..7efe9b1 100644 --- a/code/compiler/13/ast.cpp +++ b/code/compiler/13/ast.cpp @@ -135,7 +135,8 @@ void ast_binop::compile(const env_ptr& env, std::vector& 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())); } diff --git a/code/compiler/13/main.cpp b/code/compiler/13/main.cpp index 19904a3..44fe331 100644 --- a/code/compiler/13/main.cpp +++ b/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);