Make env a class.

This commit is contained in:
Danila Fedorin 2020-09-15 19:12:12 -07:00
parent ba418d357f
commit f2f88ab9ca
1 changed files with 23 additions and 18 deletions

View File

@ -2,33 +2,38 @@
#include <memory> #include <memory>
#include <string> #include <string>
struct env { class env {
virtual ~env() = default; public:
virtual ~env() = default;
virtual int get_offset(const std::string& name) const = 0; virtual int get_offset(const std::string& name) const = 0;
virtual bool has_variable(const std::string& name) const = 0; virtual bool has_variable(const std::string& name) const = 0;
}; };
using env_ptr = std::shared_ptr<env>; using env_ptr = std::shared_ptr<env>;
struct env_var : public env { class env_var : public env {
std::string name; private:
env_ptr parent; std::string name;
env_ptr parent;
env_var(std::string n, env_ptr p) public:
: name(std::move(n)), parent(std::move(p)) {} env_var(std::string n, env_ptr p)
: name(std::move(n)), parent(std::move(p)) {}
int get_offset(const std::string& name) const; int get_offset(const std::string& name) const;
bool has_variable(const std::string& name) const; bool has_variable(const std::string& name) const;
}; };
struct env_offset : public env { class env_offset : public env {
int offset; private:
env_ptr parent; int offset;
env_ptr parent;
env_offset(int o, env_ptr p) public:
: offset(o), parent(std::move(p)) {} env_offset(int o, env_ptr p)
: offset(o), parent(std::move(p)) {}
int get_offset(const std::string& name) const; int get_offset(const std::string& name) const;
bool has_variable(const std::string& name) const; bool has_variable(const std::string& name) const;
}; };