#ifndef SCOPE_HPP #define SCOPE_HPP #include #include #include #include namespace monicelli { template class Scope { public: boost::optional lookup(Key name) { for (auto const& table: boost::adaptors::reverse(tables)) { auto result = table.find(name); if (result != table.end()) { return result->second; } } return boost::none; } void push(Key const& key, Value const& value) { tables.back().insert({key, value}); } void enter() { tables.emplace_back(); } void leave() { if (!tables.empty()) { tables.pop_back(); } } void drop() { tables.clear(); } private: std::vector> tables; }; } #endif