#pragma once #include #include #include // for clangd #include "symbols_info.hpp" namespace info { class ContextManager { public: void CallFunction(const std::vector&); void EnterContext(); void ExitContext(); void DefineVariable(const VariableInfo& variable); void ChangeVariableValue(const std::string& name, const Value& new_value); const Value& GetVariableValue(const std::string& name); private: class Context { public: Context(bool hide_previous = false) : hide_previous_(hide_previous) {} void DefineVariable(const VariableInfo& variable); void ChangeVaraibleValue(const std::string& name, const Value& neew_value); const Value& GetVariableValue(const std::string& name); bool IsFirst() { return hide_previous_; } private: bool hide_previous_; std::unordered_map variables_; }; // Context global_context_; // ?? std::vector contexts_; }; } // namespace info