Switch type environment to using pointers

This commit is contained in:
Danila Fedorin 2020-03-24 18:04:01 -07:00
parent 5d53678e83
commit 6714e18e7c
2 changed files with 12 additions and 8 deletions

View File

@ -11,6 +11,6 @@ void type_env::bind(const std::string& name, type_ptr t) {
names[name] = t; names[name] = t;
} }
type_env type_env::scope() const { type_env_ptr type_scope(type_env_ptr parent) {
return type_env(this); return type_env_ptr(new type_env(std::move(parent)));
} }

View File

@ -2,15 +2,19 @@
#include <map> #include <map>
#include "type.hpp" #include "type.hpp"
struct type_env { struct type_env;
std::map<std::string, type_ptr> names; using type_env_ptr = std::shared_ptr<type_env>;
type_env const* parent = nullptr;
type_env(type_env const* p) struct type_env {
: parent(p) {} type_env_ptr parent;
std::map<std::string, type_ptr> names;
type_env(type_env_ptr p) : parent(std::move(p)) {}
type_env() : type_env(nullptr) {} type_env() : type_env(nullptr) {}
type_ptr lookup(const std::string& name) const; type_ptr lookup(const std::string& name) const;
void bind(const std::string& name, type_ptr t); void bind(const std::string& name, type_ptr t);
type_env scope() const;
}; };
type_env_ptr type_scope(type_env_ptr parent);