Fix use of wrong environment for name mangling.

このコミットが含まれているのは:
Danila Fedorin 2020-09-17 22:55:27 -07:00
コミット 5db864881a
2個のファイルの変更7行の追加6行の削除

ファイルの表示

@ -54,7 +54,7 @@ void compiler::translate() {
}
for(auto& defn : global_defs.defs_defn) {
auto& function = defn.second->into_global(global_scp);
global_env->set_mangled_name(defn.first, function.name);
defn.second->env->set_mangled_name(defn.first, function.name);
}
}

ファイルの表示

@ -1,8 +1,8 @@
---
title: Compiling a Functional Language Using C++, Part 13 - More Improvements
title: Compiling a Functional Language Using C++, Part 13 - Cleanup
date: 2020-09-10T18:50:02-07:00
tags: ["C and C++", "Functional Languages", "Compilers"]
description: "In this post, we clean up our compiler and add some basic optimizations."
description: "In this post, we clean up our compiler."
---
In [part 12]({{< relref "12_compiler_let_in_lambda" >}}), we added `let/in`
@ -809,9 +809,10 @@ And here's what it is now:
{{< codelines "C++" "compiler/13/compiler.cpp" 55 58 >}}
We always declare the `definition_defn` function in
the `global_env`. Thus, that's the only environment
we need to know about to update the mangled name.
Rather than traversing the chain of environments from
the body of the definition, we just use the definition's
own `env_ptr`. This is cleaner and more explicit, and
it helps us not use the private members of `type_env`!
The deal with `env` is about as simple. We just make
it and its two descendants classes, and mark their