#ifndef PCC_VARIABLELIST_HH #define PCC_VARIABLELIST_HH #include #include #include #include "Type.hh" namespace pcc { class TypeIdentifier; // type and value using Variable = std::pair, Value>; // name and type using Declaration = std::pair>; class VariableList { public: VariableList(VariableList* parent = nullptr); Variable FindVariable(const std::string& name); void AddVariable(const std::string& name, Variable variable); // stores type alias, just because we wan't create another TypeAliasList std::shared_ptr FindTypeAlias(const std::string& name); void AddTypeAlias(const std::string& name, std::shared_ptr type); protected: std::unordered_map variables_; std::unordered_map> TypeAlias_; VariableList* parent_; }; } // namespace pcc #endif // !PCC_VARIABLELIST_HH